Flex4 中使用Spring flex 来集成BlazeDS 进行远程调用

原文:http://www.nomanland.net/2010/05/21/flex-series-guide-integration2/

 

Spring BlazeDS Integration 是什么? 
Spring BlazeDS Integration 是 SpringSource 的开源项目,用于整合 Spring 与 BlazeDS。

为什么需要 Spring BlazeDS Integration? 
正如“Flex4 系列教程之六 ”介绍的:不使用 Spring BlazeDS Integration 同样可以整合 Spring 与 BlazeDS。但这种整合方式不自然,需要额外维护一个 BlazeDS 配置文件,Spring BlazeDS Integration 会改善这种处境。

Spring BlazeDS Integration 需要的软件环境:

  • Java 5 或更高
  • Spring 2.5.6 或更高
  • BlazeDS 3.2 或更高

Spring BlazeDS Integration 特征

  • MessageBroker(BlazeDS 的核心组件)被配置为 Spring 管理的 Bean
  • Flex 客户端发出的 HTTP 消息通过 Spring 的 DispatcherServlet 路由给 MessageBroker
  • Remote objects 以 Spring 的annonation方式扫描托管在 Spring中
  • 开放RDS服务器。以方便FB4 的(数据/服务)功能菜单的使用

注意事项:


第一步:准备所需 jar 包 
将以下 3 部分 jar 包拷贝到 sampleApp 项目的 lib 下

  1. Spring Framework
    org.springframework.aop-3.0.2.RELEASE.jar
    org.springframework.asm-3.0.2.RELEASE.jar
    org.springframework.beans-3.0.2.RELEASE.jar
    org.springframework.context-3.0.2.RELEASE.jar
    org.springframework.core-3.0.2.RELEASE.jar
    org.springframework.expression-3.0.2.RELEASE.jar
    org.springframework.web.servlet-3.0.2.RELEASE.jar
    org.springframework.web-3.0.2.RELEASE.jar
  2. Spring Framework dependencies
    org.aopalliance 内的 com.springsource.org.aopalliance-1.0.0.jar
    edu.emory.mathcs.backport 内的 com.springsource.edu.emory.mathcs.backport-3.0.0.jar
    net.sourceforge.cglib 内的 com.springsource.net.sf.cglib-2.2.0.jar
    [注:]Spring 3 的依赖包用Ivy 或 Maven 管理会很方便,完成本系列教程后我会单独整理这部分。暂且手动拷贝吧 :)
  3. Spring BlazeDS Integration
    org.springframework.flex-1.5.0.CI-498.jar

第二步:修改 web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app
id="WebApp_ID"
version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>zara</display-name>

<context-param>
<param-name>flex.class.path</param-name>
<param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-value>
</context-param>

<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>


<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>



<!-- 定义spring 以及 spring flex 集成的配置 -->
<servlet>
<servlet-name>MessagebrokerServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/META-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map /spring/* requests to the DispatcherServlet -->
<servlet-mapping>
<servlet-name>MessagebrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<!-- 定义spring 以及 spring flex 集成的配置 结束-->

<!-- 访问RDS 定义开始-->
<servlet>
<servlet-name>RDSDispatchServlet</servlet-name>
<display-name>RDSDispatchServlet</display-name>
<servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
<init-param>
<param-name>useAppserverSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>messageBrokerId</param-name>
<param-value>_messageBroker</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping
id="RDS_DISPATCH_MAPPING">
<servlet-name>RDSDispatchServlet</servlet-name>
<url-pattern>/CFIDE/main/ide.cfm</url-pattern>
</servlet-mapping>
<!-- 访问RDS 定义结束 -->

</web-app>

第三步:配置 web-application-config.xml

  1. 创建应用上下文配置文件 applicationContext.xml

 

[xhtml:nogutter] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans   
  3.            http://www.springframework.org/schema/beans/spring-beans.xsd  
  4.            http://www.springframework.org/schema/context  
  5.            http://www.springframework.org/schema/context/spring-context.xsd">  
  6.     <context:component-scan base-package="com.alcor" />       <!-- 扫描规则 -->  
  7.     <import resource="jpa.xml" />  
  8.     <import resource="alcor.xml"/>  
  9.     <import resource="springFlex.xml"/>    
  10.     <!--  import resource="security.xml"/ -->  
  11. </beans>  

 

 

 

第四步:配置 springFlex.xml

 

 

[xhtml:nogutter] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:flex="http://www.springframework.org/schema/flex"  
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.        http://www.springframework.org/schema/flex  
  9.        http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">  
  10.     <!-- 自定义处理器的方式并配合标签定义RO 开始  
  11.     <flex:message-broker>  
  12.         <flex:config-processor  
  13.             ref="messageBrokerConfigProcessor" />  
  14.     </flex:message-broker>  
  15.     <bean  
  16.         id="messageBrokerConfigProcessor"  
  17.         class="com.softvan.spring.flex.FlexMessageBrokerConfigProcessor">  
  18.         <property  
  19.             name="pattern"  
  20.             value="${shortName}RO" />  
  21.     </bean>  
  22.       
  23.         自定义处理器的方式结束-->  
  24.   
  25.     <!--使用标准的配置文件注入方式    开始--><!--  
  26.     <flex:message-broker />  
  27.     <bean      id="myService"      class="com.alcor.test.MyService" />  
  28.     <flex:remoting-destination     ref="myService" />  
  29.   
  30.     --><!-- 使用标准的配置文件注入方式    结束   -->  
  31.     <!-- 使用标签注入方式    开始 -->  
  32.     <flex:message-broker>  
  33.         <flex:remoting-service default-channels="my-amf"/>  
  34.     </flex:message-broker>  
  35.     <!-- 使用标签注入方式    结束 -->      
  36. </beans>  
  37.    

 

 

第五步:编写后台Bean,使用标签@RemotingDestination来透出接口,给flex client调用

 

 

[java:nogutter] view plaincopy
  1. package com.alcor.test;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import org.springframework.flex.remoting.RemotingDestination;  
  5. import org.springframework.flex.remoting.RemotingInclude;  
  6. import org.springframework.stereotype.Service;  
  7. @Service  
  8. @RemotingDestination  
  9. public class MyService {  
  10.     @RemotingInclude  
  11.     public List<MyEntity> getMyEntities() {  
  12.         List<MyEntity> list = new ArrayList<MyEntity>();  
  13.         MyEntity entity = new MyEntity();  
  14.         entity.setFirstName("Hello");  
  15.         entity.setLastName("World");  
  16.         entity.setEmailAddress("hello@world.com");  
  17.         list.add(entity);  
  18.         MyEntity entity2 = new MyEntity();  
  19.         entity2.setFirstName("Hello");  
  20.         entity2.setLastName("Space");  
  21.         entity2.setEmailAddress("hello@space.com");  
  22.         list.add(entity2);  
  23.         MyEntity entity3 = new MyEntity();  
  24.         entity3.setFirstName("Hello");  
  25.         entity3.setLastName("Neighbor");  
  26.         entity3.setEmailAddress("hello@neighbor.com");  
  27.         list.add(entity3);  
  28.         return list;  
  29.     }  
  30. }  

 

 

 

注意:为了使用FB4 中的 (数据/服务)功能。在编辑器中可以访问后端的java bean。

必须在建立项目的时候,先建立一个web项目,然后再加入flex project的性能的方法。使得这个项目具有web应用和flex应用2重性。

不能直接建立一个flex project 选中使用WTP整合java/flex的功能。否则在IDE下无法使用(数据/服务)菜单访问后台的bean。

posted @ 2012-02-18 13:37  张良  阅读(719)  评论(0编辑  收藏  举报