使用 Spring BlazeDS Integration 1.0.0.M1

工程 | Jeremy Grelle | 2008 年 12 月 17 日 | ...

更新:下方展示的大多數程式碼示例已過時,已被更近期的"使用 Spring BlazeDS Integration 1.0"文章中的示例取代。

今天,我們宣佈了開源 Spring 專案組合最新成員 Spring BlazeDS Integration 的第一個里程碑版本的公開可用。該專案的目的是透過使用 Adobe Flex 作為前端客戶端,使構建由 Spring 提供支援的富網際網路應用程式 (RIA) 變得更加容易。它旨在透過結合熟悉的 Spring 程式設計模型,為使用開源 Adobe BlazeDS 專案及其強大的遠端呼叫和訊息傳遞功能提供一流的支援,從而實現這一目標。

這第一個里程碑版本是一個基礎版本,專注於支援將 BlazeDS MessageBroker(處理來自 Flex 客戶端的傳入訊息的中心元件)配置和引導為 Spring 管理的物件,透過 Spring DispatcherServlet 基礎設施將 HTTP 訊息路由到它,並輕鬆地將 Spring bean 匯出為直接 Flex 遠端呼叫的目的地。未來通往最終 1.0 的里程碑版本將在此基礎上構建,提供更深入的功能,例如 Spring Security 整合、使用 Spring 的 JMS 支援進行訊息整合、與 Spring 3.0 的 REST 支援結合使用的 AMFView,以及希望能夠解決社群尚未想到但需要解決的更多問題。這個里程碑版本也是我們首次邀請社群參與的機會,您可以透過試用該版本,並在專案 Jira新的社群論壇中提供反饋。

體驗 Spring BlazeDS Integration

BlazeDS 專案附帶了許多出色的“體驗”示例應用程式,可幫助您瞭解如何構建利用 BlazeDS 遠端呼叫和訊息傳遞功能的 Flex 應用程式。這些示例使用 BlazeDS MessageBrokerServlet 將訊息路由到使用 BlazeDS 特定 XML 配置連線起來的 BlazeDS 管理的 Java 物件。這聽起來不錯,但您現有的基於 Spring 的基礎設施怎麼辦?如果您可以在無需配置單獨的 servlet 並使用熟悉的 Spring 程式設計模型的情況下利用 MessageBroker 的功能,那豈不是很好?這就是 Spring BlazeDS Integration 的用武之地。

我建立了一個修改版的 BlazeDS 體驗示例應用程式,它使用了 Spring BlazeDS Integration。修改後的示例完整原始碼可在此獲取。您應該能夠將該示例匯入 Eclipse 並使用 WTP 執行它。應用程式成功部署後,您可以透過 https://:8080/samples/testdrive.htm 訪問單獨的體驗示例。(請注意,在啟動應用程式之前,必須啟動 /sampledb 中包含的 HSQL 演示資料庫。)在這裡,我將介紹示例中一些更有趣的部分,以說明構建由 Spring 提供支援的 Flex 應用程式所需的內容。

在該專案中值得首先關注的是 /samples/WEB-INF/web.xml。在這裡,您會看到 Spring DispatcherServlet 的一個相當典型的設定


<!-- The front controller of this Spring Web application -->
<servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/config/web-application-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
        
<!-- Map all /spring requests to the DispatcherServlet for handling -->
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/spring/*</url-pattern>
</servlet-mapping>

這取代了標準 BlazeDS 示例中的 MessageBrokerServlet 配置。這個特定的應用程式採用了一種對映策略,允許從同一個應用程式提供 Flex 直接遠端呼叫內容和 RESTful 內容。如果您正在構建一個僅針對 Flex 客戶端的應用程式,您可以使用參考手冊中討論的更簡單的對映策略。

接下來要檢視的是 /samples/WEB-INF/config/web-application-config.xml 中的 Spring 配置。首先,請注意 MessageBrokerFactoryBean 定義


<!-- Bootstraps and exposes the BlazeDS MessageBroker -->
<bean id="mySpringManagedMessageBroker"
    class="org.springframework.flex.messaging.MessageBrokerFactoryBean" />

這會將 BlazeDS MessageBroker 引導為一個 Spring 管理的 bean,使用預設位置 /samples/WEB-INF/flex/services-config.xml 進行 BlazeDS 配置。Spring BlazeDS Integration 的一般方法是繼續使用標準的 BlazeDS XML 配置來處理那些相當靜態且更偏向於基礎設施的部分,例如通道定義,但允許在應用程式開發過程中更頻繁更改的部分,例如遠端呼叫目的地,使用熟悉的 Spring 配置模型進行配置。因此,將 Spring 管理的 bean 暴露給 Flex 客戶端進行直接遠端呼叫,只需簡單地配置一個遠端呼叫匯出器 bean 即可。進一步檢查示例中的 Spring 配置,您會看到實際的用法


<!-- Implementation of ProductService using Spring's SimpleJdbcTemplate -->
<bean id="productService" class="flex.samples.product.JdbcProductService" >
    <constructor-arg ref="dataSource"/>
</bean>
    
<!-- Expose the productService bean for BlazeDS remoting -->
<bean id="product" 
    class="org.springframework.flex.messaging.remoting.FlexRemotingServiceExporter">
    <property name="messageBroker" ref="mySpringManagedMessageBroker"/>
    <property name="service" ref="productService"/>
</bean>

在這裡,您可以看到一個簡單的 Spring bean productService,它被作為遠端呼叫目的地匯出到由 Spring 管理的 MessageBroker。預設情況下,目標的服務 ID 將與 bean 名稱相同。該服務可以從 Flex 客戶端程式碼訪問,例如以下來自 /samples/WEB-INF/flex-src/testdrive-remoteobject/src/main.mxml 的 MXML 示例


<mx:RemoteObject id="srv" destination="product"/>
	
<mx:DataGrid dataProvider="{srv.getProducts.lastResult}" width="100%" height="100%"/> 

<mx:Button label="Get Data" click="srv.getProducts()"/>

由 Spring 管理的 MessageBroker 處理呼叫 productService bean 上的 getProducts 方法以及 Flex 原生 AMF 資料格式與 Java 之間來回序列化的詳細資訊。

這個難題的最後一塊是配置如何將進入 DispatcherServlet 的 Flex AMF 訊息請求實際路由到 MessageBroker。這透過一個簡單的 HandlerMapping 與 Spring 配置中的 MessageBrokerHandlerAdapter 定義相結合來實現


<!-- Maps request paths at /messagebroker to the BlazeDS MessageBroker -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <value>
            /messagebroker/*=mySpringManagedMessageBroker
        </value>
    </property>
</bean>

<!-- Dispatches requests mapped to a MessageBroker -->
<bean class="org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter"/>

這與 DispatcherServlet 的對映相結合的最終結果是,路徑 /spring/messagebroker/* 上的請求將被路由到由 Spring 管理的 MessageBroker。請注意,/WEB-INF/flex/services-config.xml 中的 BlazeDS 通道定義與此對映相對應,例如


<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
    <endpoint url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amf" 
        class="flex.messaging.endpoints.AMFEndpoint"/>
    <properties>
        <polling-enabled>false</polling-enabled>
    </properties>
</channel-definition>

當然,如果您願意,可以在 Flex 客戶端中單獨設定這些通道(這樣您就不必根據 services-config.xml 編譯 Flex 原始碼),甚至可以使用 Spring ActionScript 社群擴充套件

徵集社群反饋

奠定了這個基礎後,我們希望看到 Spring BlazeDS Integration 發展成為使用 Flex 構建由 Spring 提供支援的 RIA 的重要元件。該專案是響應 Spring 社群持續的需求而啟動的,旨在提供一流的解決方案來降低使用 Flex 和 Spring 構建應用程式的複雜性,並且應該透過滿足社群的需求來繼續發展。確保做到這一點的方法是再次邀請您親自試用,並透過論壇Jira參與進來。我們歡迎您的反饋,並期待與您一起努力實現最終的 1.0 版本釋出。

訂閱 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速發展。

瞭解更多

獲取支援

Tanzu Spring 透過一個簡單的訂閱即可為 OpenJDK™、Spring 和 Apache Tomcat® 提供支援和二進位制檔案。

瞭解更多

近期活動

檢視 Spring 社群所有近期活動。

檢視全部