周 江,李 勇,劉 璐
黃河水利委員會信息中心,河南鄭州 450004
Flex在黃河水庫調度運行信息平臺中的應用
周 江,李 勇,劉 璐
黃河水利委員會信息中心,河南鄭州 450004
黃河水庫平臺信息管理系統(tǒng)采用了流行的Spring框架,通過Spring中的JdbcTemplate操作數(shù)據(jù)庫,最后,應用通過Servlet和JSP頁面為用戶提供前端界面,用Flex重新編寫界面會帶來更好的用戶體驗。通過集成Flex到JAVA EE應用和開發(fā)Flex客戶端的方式實現(xiàn)了Flex在黃河水庫調度運行信息平臺中的應用。
水庫平臺;Spring框架;Flex
Flex是通過java或者.net等非Flash途徑,解釋.mxml文件組織components,并生成相應得.swf文件。
Flex技術包括以下幾個主要技術框架:1)描述應用程序界面的XML語言(MXML);2)符合ECMA規(guī)范的腳本語言(ActionScript),處理用戶和系統(tǒng)的事件,構建復雜的數(shù)據(jù)模型;
3)一個基礎類庫;4)運行時的即時服務;5)由MXML與ActionScript文件生成swf文件的編譯器。
在黃河水庫調度運行信息平臺中,采用了流行的Spring框架,通過Spring中的JdbcTemplate 操作數(shù)據(jù)庫。最后,應用通過Servlet和JSP頁面為用戶提供前端界面。由于本系統(tǒng)的信息查詢更接近于傳統(tǒng)的桌面應用程序,因此,用Flex重新編寫界面會帶來更好的用戶體驗。
2.1 集成Flex到JAVA EE應用
將 Flex 集成至該Java EE應用需要讓Flex和Java EE后端通信。針對Java EE開發(fā)的服務器端應用,可以通過集成 BlazeDS,充分利用 AMF 協(xié)議并能輕易與Flex 前端交換數(shù)據(jù),這種方式是Java EE應用程序集成Flex的首選。
盡管現(xiàn)有的應用程序已經(jīng)有了 Facade接口,但這個接口是暴露給 Servlet使用的,最好能再為Flex定義另一個接口FlexService,并隱藏 Java 語言的特定對象。
現(xiàn)在,Java EE后端與Flex前端的接口已經(jīng)定義好了,要完成Java EE后端的接口實現(xiàn)類非常容易,利用Spring強大的依賴注入功能,通過幾行簡單的代碼就可以完成。
然后,我們將 BlazeDS所需的jar包放至 /WEB-INF/lib/。
BlazeDS所需的所有配置文件均放在/WEB-INF/flex/目錄下。BlazeDS將讀取services-config.xml配置文件,該配置文件又引用了remoting-config.xml、proxy-config.xml和messaging-config.xml這3個配置文件,所以,一共需要4個配置文件。
由于BlazeDS需要將Java接口FlexService暴露給Flex前端,因此,我們在配置文件remoting-config.xml中將FlexService接口聲明為一個服務。
然而,按照默認的聲明,BlazeDS會去實例化FlexService對象。對于一個JavaEE應用來說,通常這些服務對象都是被容器管理的(例如,Spring容器或EJB容器),更合適的方法是查找該服務對象而非直接實例化。因此,需要修改配置告訴BlazeDS通過Factory來查找指定的FlexService對象。
由于FlexService對象已經(jīng)被Spring管理,因此,我們需要編寫一個FlexFactory告訴BlazeDS如何找到Spring管理的FlexService的實例。flexFactory在services-config.xml中指定。FlexFactoryImpl實現(xiàn)了FlexFactory接口,該接口完成兩件事情:1)創(chuàng)建FactoryInstance對象;2)通過FactoryInstance對象查找我們需要的FlexService。
BlazeDS查找FlexService接口的過程:BlazeDS將首先創(chuàng)建FlexFactory的實例——FlexFactoryImpl;當接收到Flex前端的遠程調用請求時,BlazeDS通過FlexFactory創(chuàng)建FactoryInstance對象,并傳入請求的ServiceID。在這個應用程序中,被創(chuàng)建的FactoryInstance實際對象是SpringFactoryInstance;
FactoryInstance的lookup()方法被調用,在SpringFactoryInstance中,首先查找Spring容器,然后,通過Bean的ID查找Bean,最終,F(xiàn)lexService接口的實例被返回。
Property的SOURCE屬性由 BlazeDS 讀取XML配置文件獲得。
2.2 開發(fā)Flex客戶端
Flex Builder 將會把生成的 Flash 文件放到項目的 web/Skpt-Flex-debug目錄下。
為了能在 Flex 中實現(xiàn)遠程調用,我們需要定義一個RemoteObject 對象并列出其所有的方法。
使用強類型的RemoteObject接口。這個強類型的RemoteObject最好能通過JavaEE應用的FlexService接口自動生成,這樣,就無需再維護RemoteObject的定義。
現(xiàn)在,JavaEE后端開發(fā)團隊和Flex前端開發(fā)團隊只需協(xié)商定義好FlexService接口,然后,利用Java2ActionScript,F(xiàn)lex團隊就得到了強類型的FlexServiceRO類,而JavaEE團隊則只需集中精力實現(xiàn)FlexService接口。
在開發(fā)的前期,甚至可以用硬編碼的FlexService的實現(xiàn)類。每當FlexService變動時,只需再次運行Ant腳本,就可以獲得最新的FlexServiceRO類。這樣,兩個團隊都可以立刻開始工作,僅需要通過FlexService接口就可以完美地協(xié)同開發(fā)。
在黃河下游水庫調度運行信息平臺中采用了Flex技術有以下的優(yōu)點:
1)利用Flex提升開發(fā)效率
通過在項目中應用Flex,提升了開發(fā)團隊的工作效率。也解決了項目開發(fā)前后端無法及時溝通,需要互相依賴的開發(fā)模式。使得前后端開發(fā)人員可以專注于自己的工作,提升工作質量。
2)利用Flex完善用戶體驗
Flex本身就是基于富互聯(lián)網(wǎng)應用(RIA)的技術,繼承了Flash在表示層上先天性的美感、除了視覺上的舒適感外,還天生具備方便的矢量圖形、動畫和媒體處理接口。通過在黃河水庫調度運行信息平臺中使用Flex,為用戶提供了界面美觀、交互方便的應用系統(tǒng)。
TV7
A
1674-6708(2011)34-0101-01