趙中樞
遼寧對外經貿學院 信息技術系,遼寧大連 116052
基于Flex與J2EE的整合應用
趙中樞
遼寧對外經貿學院 信息技術系,遼寧大連 116052
Flex作為一種RIA技術,與企業級開發技術緊密聯系,開發完整的Flex系統可能會整合如Struts、Spring、Hibernate等技術。本文主要探討了Flex和J2ee技術整合的有效性和實用性,提出了企業應用的整合方案。
RIA;Flex;j2ee
傳統的Web開發,在表示層受到非常大的約束。基于RIA的Flex技術不僅輕松解決了所有表示層的技術問題,讓客戶感受前所未有的Web應用體驗,更主要的是,基于純面向對象和組件的架構,讓B/S結構表示層的開發,層次分明、結構完整協調。
Flex技術并不需要替換掉現有的體系結構模型[1],如JavaEE、.NET架構等。通常可以和企業級應用體系結構很好地進行整合。將原有的系統構建成更易用、更直觀、更迅速的“網頁應用程序”。在不會影響到原有應用的前提下,對表現層進行了大幅度的增強,進一步提升界面的友好程度,并且減少了用戶與系統的遠程交互頻率,減少了帶寬需求。
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代碼的執行和觀察內存變化。
在設計階段,開發人員將通過開發工具(如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服務。

在企業的應用中主要分為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,完成數據持久化的重任。
Flex在J2EE體系架構中加入了新的功能,如圖顯示了應用Flex以后的J2EE層次結構。在Flex應用程序中,客戶端程序和表示層的邏輯處理程序能夠同時運行在客戶機的由Flash Player提供的平臺上。Flex應用程序通過Flash Player處理用戶交互,數據的校驗,HTTP、SOAP和AMF的數據請求,以及其它一些原本在服務器上執行的操作。因為Flash Player在各個主要的操作系統和瀏覽器上都始終如一地運行,開發者不必擔心Flex應用程序是否會在某個特定瀏覽器或操作系統上無法正常工作[5]。

Flex技術與J2EE集成的架構
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網關的對象作為委托對象,移除動態代理。
用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
趙中樞,講師,工作單位:遼寧對外經貿學院信息技術系,研究方向:多媒體技術、網站開發、動漫設計