基于Flex与J2EE的整合应用
2010-06-13赵中枢
赵中枢
辽宁对外经贸学院 信息技术系,辽宁大连 116052
基于Flex与J2EE的整合应用
赵中枢
辽宁对外经贸学院 信息技术系,辽宁大连 116052
Flex作为一种RIA技术,与企业级开发技术紧密联系,开发完整的Flex系统可能会整合如Struts、Spring、Hibernate等技术。本文主要探讨了Flex和J2ee技术整合的有效性和实用性,提出了企业应用的整合方案。
RIA;Flex;j2ee
0 引言
传统的Web开发,在表示层受到非常大的约束。基于RIA的Flex技术不仅轻松解决了所有表示层的技术问题,让客户感受前所未有的Web应用体验,更主要的是,基于纯面向对象和组件的架构,让B/S结构表示层的开发,层次分明、结构完整协调。
Flex技术并不需要替换掉现有的体系结构模型[1],如JavaEE、.NET架构等。通常可以和企业级应用体系结构很好地进行整合。将原有的系统构建成更易用、更直观、更迅速的“网页应用程序”。在不会影响到原有应用的前提下,对表现层进行了大幅度的增强,进一步提升界面的友好程度,并且减少了用户与系统的远程交互频率,减少了带宽需求。
1 Flex技术
1.1 Flex技术简介
Flex是排版打印软件和图形渲染软件巨头Adobe公司在其著名的Flash平台(Flash Player)上,用ActionScript语言开发的一套RIA软件开发套件(SDK)及其集成开发环境。
Flex SDK由Flex框架类库、Flex编译器、调试器、MXML和ActionScript编程语言以及其他工具组成。Flash Builder则是其集成开发环境,Flash Builder构建在开源集成开发环境Eclipse之上,目前版本是Flash Builder 4。利用Flash Builder,开发者可以通过拖拽的方式开发人机界面,用ActionScript 3语言编写代码,调用Flash及Flex SDK所提供的API进行RIA开发,然后用Flash Builder编译器进行编译,编译后的产品可以运行在Flash虚拟机中,同时Flash Builder集成了调试工具和性能查看工具,可以跟踪ActionScript代码的执行和观察内存变化。
1.2 Flex程序运行机制
在设计阶段,开发人员将通过开发工具(如Eclipse或Flex Builder)进行表现页面MXML与ActionScript代码的编写,其中MXML主要负责页面的显示功能,ActionScript负责部分业务和数据服务的交互功能。在编译阶段,所有与Flex应用程序有关的组件,包括MXML,ActionScript,CSS样式表[2],以及图像资源,最终被编译并合并成SWF文件,使之能运行于Flash Player中。在运行阶段,Flex应用程序将根据需要同外部的资源,服务及数据源进行交互。
Flex应用程序以一种及时模型进行编译,不会产生任何用户体验的中断。Flex应用程序在首次引用时进行编译,然后缓存起来供以后调用;如果任何有关文件进行了更新,Flex应用程序也会随之自动重新编译。
标准的Flex应用程序并不要求服务器端的Flex服务,可以在本地编译它们并直接部署在Web服务器的HMTL页面上。Flex应用程序还可以部署在应用服务器,使用Adobe公司的LiveCycle ES2,ColdFusion Flash远程服务或者是J2EE服务。
2 J2EE框架技术
在企业的应用中主要分为3个层次, Struts 用于展现层,Spring 用于领域层, Hibernate 用于数据源层[3]。
展现层(Struts)为应用设计业务逻辑处理程序。Struts框架中的控制器是一个ActionServlet实例,一般不需要开发者自己定义或修改控制器,但是必须设计业务处理逻辑,控制器会将相应的请求映射到这些处理程序中(Action),相应的配置也在Strutsconfig.xml中。
领域层(Spring)负责处理应用程序的业务逻辑和业务校验,管理事务,管理业务层级别的对象的依赖。Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案[4]。
数据源层(Hibernate)对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
3 Flex技术与J2EE的集成应用
3.1 Flex技术与J2EE集成的架构
Flex在J2EE体系架构中加入了新的功能,如图显示了应用Flex以后的J2EE层次结构。在Flex应用程序中,客户端程序和表示层的逻辑处理程序能够同时运行在客户机的由Flash Player提供的平台上。Flex应用程序通过Flash Player处理用户交互,数据的校验,HTTP、SOAP和AMF的数据请求,以及其它一些原本在服务器上执行的操作。因为Flash Player在各个主要的操作系统和浏览器上都始终如一地运行,开发者不必担心Flex应用程序是否会在某个特定浏览器或操作系统上无法正常工作[5]。
Flex技术与J2EE集成的架构
3.2 Flex的数据服务
Flex技术同J2EE的集成时,使用了Adobe公司的产品——Flex数据服务(LiveCycle Data Services,简称LCDS),LCDS是Flex的服务器端组件,必须将其安装在Java 2企业级版本(Java2 Enterprise Edition,J2EE)服务器中。LCDS由4个组件组成,包括:Flex消息服务(Flex Messaging Services,FMS)、发布-订阅消息(Publish-Subscribe messaging)、数据推送(Data push)、RPC服务。利用LCDS中这些组件,能够实现一系列强大的服务器端数据管理功能,使开发人员能够快速实现数据密集型Flex应用程序。
将LCDS部署为标准Web J2EE应用程序,其基于强大的消息体系结构,与现有的基于标准的中间设备相集成,提供客户和服务器之间的数据自动同步服务,增加对实时数据推送和发布/订阅消息的支持,并实现应用程序的协作和偶尔连接。
LCDS运行在J2EE平台上或Servlet容器内,与Flex客户端程序交互并从J2EE服务器获得其它功能支持。在表示层上应用Flex技术不需要改动业务逻辑层和综合层,可以重用原有网络应用程序中的业务逻辑层和综合层代码。
Flex提供了多种方法与其它J2EE组件进行交互,主要有HTTP通信、Web service通信,以及由AMF网关通信(Action Script Messaging Format)。AMF网关是一种类似与Flash Remoting的高性能二进制协议,远程对象能够通过AMF网关传递到客户端的Flex应用程序上。
3.2 .1 Flex与展现层的整合
Flex的请求会先被发送到Struts框架,由Struts转发Flex的请求到其它层。模型中Flex通过HttpService组件发送和接收HTTP请求,数据通常是XML格式的。
这种模型的优点是可以很快、很方便的将Flex整合到已有的J2EE框架中而不影响原有的框架结构,但Flex依赖与视图层Struts,会造成系统维护和扩展的困难。Flex与视图层Struts整合而不是替代视图层Struts,适用于将Flex应用于已有的J2EE应用中,作为视图层的组件。
3.2 .2 Flex与领域层的整合
在Spring反转控制背后的想法是让容器实例化组件(并且注入他们的依赖)。然而,默认的服务器端Flex destination实例化Flex客户端远程访问的组件。Flex/Spring整合的关键之处是配置Flex destination来让Spring容器负责实例化Spring beans。Flex数据服务(Data Services)支持工厂的概念,使之可以自定义组件的安装类型。工厂的角色仅仅是为Flex destination提供即用的组件实例(而不是让Flex destination实例它自己的组件)。
3.2 .3 Flex与数据源层的整合
通常J2EE应用中视图层并不直接访问持久层。在使用Flex时不应该改变这个体系结构,业务层将代替和持久层的通信。在AMF gateway环境下使用 Hibernate和远程对象时,不能访问一个不含有已初始化Hibernate会话对象的集合,访问一个没有被初始化的动态代理对象的集合会导致运行时错误。AMF网关不知道如何特定的去寻找Hibernate动态代理对象,可以用面向方面的编程(AOP)如 JBoss AOP,AspectJ,Spring AOP 等,将一个即将传送AMF网关的对象作为委托对象,移除动态代理。
4 结论
用Flex技术在客户端设计极具视觉体验和动态人机交互的图形用户界面,用J2EE技术在服务器端实现复杂的事务逻辑,再通过Flex客户端丰富的数据服务组件与J2EE服务器端应用进行数据交互和数据绑定,从而实现性能优越的RIA应用系统,使Flex在客户端的优势与J2EE在服务器端的高效得到完美的结合。
[1]兰天,曲鹏东编著.Flex企业应用开发实战[M],2010.
[2]杨占波,扬铭,翁颖编著.Flex 3 RIA开发详解与精深实 践[M],2009.
[3]秦京渝,编著.企业级Java开发与架构[M],2008.
[4]袁华强,王亚强,朱君.利用J2EE轻量级框架构建Web应用 研究[J].计算机工程与设,2007,1(1),22-23.
[5]拓守恒.基于Flex和J2EE多层架构的RIA教学质量评价系统 的研究与实现[D].电子科技大学,2008-10-01.
Application of Flex and J2EE
ZHAO Zhongshu
Flex as a RIA technology,is closely connected to enterprise development technologies.A fully-developed Flex system can integrate technologies like Struts、Spring、Hibernate.The article mainly discusses the availability and practicality of the intergration of Flex,j2EE,and puts forward the integration scheme of applying it in the enterprises.
RIA;Flex;j2ee
TP393
A
1674-6708(2010)28-0118-02
赵中枢,讲师,工作单位:辽宁对外经贸学院信息技术系,研究方向:多媒体技术、网站开发、动漫设计