Flex And Spring

内容如下

 

·         关于Adobe Flex

·         关于Spring

·         为什么使用FlexSpring

·         FlexSpring的整合

 

关于Flex

Adobe Flex是一套创建富客户端应用(RIAs)的框架.Flex生成的swf文件可以直接运行在Flash Player之中。相比较基于时间轴的Flash开发,Flex框架更适合那些用传统方式开发应用程序的开发人员。Flex应用可以使用Flex builder来开发。这套IDE是基于Eclipse平台开发的。Action Script3语言是用来访问数据和创建用户接口组件的。Flex框架也用到了一种XML语言叫做MXML,它是用来简化Flex开发和布局的。

 

关于Spring

Spring是目前最受欢迎的创建企业级应用的Java框架。不像传统的J2EE开发,Spring提供了轻量级的容器。使用Spring会使应用的测试和开发更为简单。虽然Spring依赖注入的功能最出名,但是它也提供了其他服务端企业程序所需要的功能。如安全和事务处理。

 

为什么使用FlexSpring

Flex技术本身和Java就有很强的关联性,它提供了一个基于EclipseIDEBlazeDS.BlazeDS是个基于服务端的Java远程调用和Web消息的一个开源的技术。有许多应用都是以Java为后端处理的。Flex用于前端。由于JavaFlex一起频繁的使用。人们很容易就想到FlexSpring的整合。有许多企业和组织已经着手开始使用Flex作为用户接口了。在2008年末,Spring社区已经着手Spring BlazeDS整合的项目。为JavaSpring添加更好的Flex支持。

 

默认的情况下BlazeDS创建了一个服务端Java对象的实例,用它们来完成远程对象的请求。但是这种方法并不适用于Spring.因为整个框架使用的服务的对象都是用Spring容器所创建的。SpringBlazeDS的整合,Flex就可以使用Spring中的对象了。

 

整合FlexSpring

为了使用BlazeDS,服务端的Java应用应打包为WAR文件。这部分的代码实例是使用Eclipse来创建和编辑的。步骤如下

 

·         设置服务端的BlazeDS Java工程以及Spring框架。

·         BlazeDS中配置Springbean

·         写一个Flex应用去使用Spring/BlazeDS的服务。

 

所需要的开发环境如下

·         Eclipse3.4(J2EE版本)http://www.eclipse.org/downloads/

·         Flex Builder3http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3email&sdid=EOZPI

·         Tomcat 6http://tomcat.apache.org/

·         BlazeDShttp://opensource.adobe.com/wiki/display/blazeds/BlazeDS/

·         Spring框架:http://www.springsource.org/download

·         Spring BlazeDS整合:http://www.springsource.org/spring-flex

·         ANTLR3.0http://www.antlr.org/download.html

首先设置服务端的JAVA工程,用blazeds.war(blazeds的压缩包中)创建一个WEB工程。步骤如下

·         Choose File>import

·         选择WAR选项。指定blazedsWAR文件的位置。输入工程名test-server

·         点击完成

 现在就可以创建一个服务器来运行这个WEB应用。

·         File>New>Other

·         选择Server>Server

·         点击Next

·         选择Apache>Tomcat6 Server

·         点击Next

·         指定Tomcat的安装位置以及JRE5以上版本)

·         点击Next

·         Availble Projects list中选择test-server

·         点击Add添加到Configured Project list

·         点击Finish

接下来就可以创建Java类了。这个类在JavaFlex之间传输

Java代码 

1.  public class MyEntity {  

2.   private String frstName;  

3.   private String lastName;  

4.   private String emailAddress;  

5.     

6.   public String getFirstName() {  

7.    return frstName;  

8.   }  

9.   public void setFirstName(String frstName) {  

10.   this.frstName = frstName;  

11.  }  

12.  public String getLastName() {  

13.   return lastName;  

14.  }  

15.  public void setLastName(String lastName) {  

16.   this.lastName = lastName;  

17.  }  

18.  public String getEmailAddress() {  

19.   return emailAddress;  

20.  }  

21.  public void setEmailAddress(String emailAddress) {  

22.   this.emailAddress = emailAddress;  

23.  }  

24. }  

 

Java服务接口

Java代码 

1.  import java.util.List;  

2.  public interface MyService {  

3.   public List<MyEntity> getMyEntities();  

4.  }  

 

Java服务的实现

Java代码 

1.  import java.util.ArrayList;    

2.  import java.util.List;    

3.  public class MyServiceImpl implements MyService {    

4.   public List<MyEntity> getMyEntities() {    

5.    List<MyEntity> list = new ArrayList<MyEntity>();    

6.    MyEntity entity = new MyEntity();    

7.    entity.setFirstName("Hello");    

8.    entity.setLastName("World");    

9.    entity.setEmailAddress("hello@world.com");    

10.   list.add(entity);    

11.   MyEntity entity2 = new MyEntity();    

12.   entity2.setFirstName("Hello");    

13.   entity2.setLastName("Space");    

14.   entity2.setEmailAddress("hello@space.com");    

15.   list.add(entity2);    

16.   MyEntity entity3 = new MyEntity();    

17.   entity3.setFirstName("Hello");    

18.   entity3.setLastName("Neighbor");    

19.   entity3.setEmailAddress("hello@neighbor.com");    

20.   list.add(entity3);    

21.   return list;    

22.  }    

23. }    

 

 

这三个类对于例子足够了。在实战中,这个服务类可能要连接到数据库。为了方便我们学习,这个例子中就返回的是个list的硬编码了。

基本的java工程算是完工了。。

 

接下来我们要做Spring的配置了。

·         Spring的库以及Spring BlazeDS整合的库,还有ANTLR库文件放到项目/WEB-INF/lib下。

·         创建一个Spring配置文件。鼠标右键点击WebContent/WEB-INF以及选择New>File,文件名输入application-config.xml.点击完成。配置文件内容如下。

Xml代码 

1.  <?xml version="1.0" encoding="UTF-8"?>    

2.  <beans xmlns="http://www.springframework.org/schema/beans"    

3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    

4.   xsi:schemaLocation="    

5.   http://www.springframework.org/schema/beans    

6.   http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">    

7.   <!-- Spring Beans’s -->    

8.   <bean id="myService" class="MyServiceImpl" />    

9.  </beans>    

 

Spring的人看这配置最熟悉不过了。。

通过这一步,已经有了一个BlazeDS默认配置的Java web工程。下面我们就更改BlazeDS默认配置,去使用新创建的Spring中的bean.

 

为了配置Spring BlazeDS的整合,更新web.xml

Xml代码 

1.  <?xml version="1.0" encoding="UTF-8"?>  

2.  <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

3.      xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  

4.      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  

5.      id="WebApp_ID" version="2.5">  

6.      <display-name>test-server</display-name>  

7.      <servlet>  

8.          <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>  

9.          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

10.         <init-param>  

11.             <param-name>contextConfigLocation</param-name>  

12.             <param-value>/WEB-INF/application-config.xml</param-value>  

13.         </init-param>  

14.         <load-on-startup>1</load-on-startup>  

15.     </servlet>  

16.     <!-- Map /spring/* requests to the DispatcherServlet -->  

17.     <servlet-mapping>  

18.         <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>  

19.         <url-pattern>/spring/*</url-pattern>  

20.     </servlet-mapping>  

21. </web-app>  

 

创建的Servlet可以处理这个请求,http://localhost:8080/test-server/spring

这是访问BlazeDS的基本的URL。当然这也是Spring标准的DispatcherServlet.

现在已经把Spring整合到Java web工程中了。要整合BlazeDS,就要修改下Spring的配置文件。

application-config.xml文件如下

Xml代码 

1.  <?xml version="1.0" encoding="UTF-8"?>  

2.  <beans xmlns="http://www.springframework.org/schema/beans"  

3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

4.   xmlns:flex="http://www.springframework.org/schema/flex"  

5.   xsi:schemaLocation="  

6.   http://www.springframework.org/schema/beans  

7.   http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  

8.   http://www.springframework.org/schema/flex  

9.   http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">    

10.  <!-- Spring Beans’s -->  

11.  <bean id="myService" class="MyServiceImpl" />  

12.  <!-- Simplest possible message broker -->   

13.  <flex:message-broker/>  

14.   <!-- exposes myService as BlazeDS destination -->  

15.  <flex:remoting-destination ref="myService" />  

16. </beans>  

 

通过配置,使BlazeDS接口开放。首先要添加Flexnamespace。添加之后,使用message-broker标签创建MessageBrokerFactoryBean。看下配置只是个简单标签。配置是默认的。要确保WEB-INF/flex 下有service-config.xml这个配置文件。remoting-destination标签使Spring bean变为远程目标。

接下来修改默认的BlazeDS service-config.xml文件。代码如下

Xml代码 

1.  <?xml version="1.0" encoding="UTF-8"?>  

2.  <services-config>  

3.      <services>  

4.          <default-channels>  

5.              <channel ref="my-amf" />  

6.          </default-channels>  

7.      </services>  

8.      <channels>  

9.          <channel-definition id="my-amf"  

10.             class="mx.messaging.channels.AMFChannel">  

11.             <endpoint  

12.                 url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amf"  

13.                 class="flex.messaging.endpoints.AMFEndpoint" />  

14.         </channel-definition>  

15.         <channel-definition id="my-polling-amf"  

16.             class="mx.messaging.channels.AMFChannel">  

17.             <endpoint  

18.                 url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amfpolling"  

19.                 class="flex.messaging.endpoints.AMFEndpoint" />  

20.             <properties>  

21.                 <polling-enabled>true</polling-enabled>  

22.                 <polling-interval-seconds>4</polling-interval-seconds>  

23.             </properties>  

24.         </channel-definition>  

25.     </channels>  

26. </services-config>  

 

看一下 endpoint标签的的url.唯一可以修改的就是content.root之后的spring.所有远程目标配置都应该配置在application-config.xml文件中。

 

现在我们完成了Spring/BlazeDS Java应用。可以启动Tomcat来查看配置是否出错。

 

接下来我们就可以新建一个Flex来远程调用Spring服务。步骤如下

·         File>New>Other

·         选择Flex Project

·         填写工程名称test-flex

·         用默认的地址

·         选择Web application(运行在Flash player)

·         Application Type 选择None

·         点击Next

·         指定Output的文件夹。如   C:\workspace\test-server\WebContent\

·         点击Finish

工程创建完毕,我们会看到一个main.mxml的文件。修改代码如下

Xml代码 

1.  <?xml version="1.0" encoding="utf-8"?>  

2.  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"   

3.      layout="absolute"   

4.      creationComplete="srv.getMyEntities()">  

5.      <mx:AMFChannel id="myamf" uri="/test-server/spring/messagebroker/amf"/>    

6.   <mx:ChannelSet id="channelSet" channels="{[myamf]}"/>    

7.   <mx:RemoteObject id="srv"   

8.     destination="myService" channelSet="{channelSet}"/>    

9.   <mx:DataGrid dataProvider="{srv.getMyEntities.lastResult}"/>  

10. </mx:Application>  

 

以上代码的AMFChannel访问了Spring的服务。

要注意的是RemoteObject标签中的destinationdestination要和springapplication-config.xmlremote-service标签的ref所设置的值保持一致。通过代码可以看出Flex并没有包含关于Spring的东西。编写Flex

开发人员不必知道关于Spring的知识。

 

要更新test-server的程序。可以Refresh这个工程。

 

下面测试一下。启动Tomcat.http://localhost:8080/test-server/main.html

 


 

 

 

为了在Flex builder中调试运行。可以做如下设置

 

·         右键点击test-flex工程。

·         选择Properties,之后是Flex build path

·         Output Folder URL 填写  http://localhost:8080/test-server/

·         点击OK

之后直接运行就可以了。整合完成。

 

posted on 2011-08-29 13:12  破阵子 . 如是我闻  阅读(2250)  评论(0编辑  收藏  举报

导航