摘要:RCP (Rich Client Platform)是基于Eclipse開(kāi)發(fā)平臺(tái)而推出的一套用來(lái)開(kāi)發(fā)富客戶端程序的應(yīng)用框架。傳統(tǒng)B/S架構(gòu)雖然在其程序部署,版本控制等方面有很大的優(yōu)勢(shì),但是C/S也具備其獨(dú)特的優(yōu)勢(shì)比如離線處理能力,低服務(wù)器負(fù)載等等。本文回顧了Eclipse以及RCP程序的特點(diǎn),同時(shí)對(duì)比了基于B/S應(yīng)用的特點(diǎn)。本研究結(jié)合Eclipse平臺(tái)的特點(diǎn)提出一種應(yīng)用于快速開(kāi)發(fā)應(yīng)用的可拓展性平臺(tái)。
關(guān)鍵詞:Eclipse;RCP
中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 23-0000-03
1 Eclipse RCP
Eclipse RCP屬于富客戶端解決方案。富客戶端(Rich Client)的概念產(chǎn)生于20世紀(jì)90年代,具有代表性的開(kāi)發(fā)工具如Visual Basic和Delphi等。富客戶端能夠支持更高用戶使用體驗(yàn)同時(shí)提供本地處理能力。富用戶接口(Rich UI)能夠提供諸如拖放、系統(tǒng)剪切板、系統(tǒng)導(dǎo)航等等功能。于此對(duì)應(yīng)的瘦客戶端則指的是系統(tǒng)終端程序,現(xiàn)在大部分瘦客戶端程序已經(jīng)被富客戶端取代。于此同時(shí),用戶接觸更多的則是C/S和B/S系統(tǒng)架構(gòu)的概念。一個(gè)富客戶端程序往往是基于C/S架構(gòu)的。
Eclipse RCP具有以下特點(diǎn):
(1)組件化。Eclipse框架本身就是基于插件的。這些插件可以是可視的插件,并且可以被其他的插件訪問(wèn)。不同版本的相同插件可以并存,Eclipse RCP程序可以指定運(yùn)行所需插件的特定版本號(hào)。應(yīng)用這樣的框架,RCP程序可以隨時(shí)的增加或者替換組建。這對(duì)于程序的部署而言提供了極大的便利。
(2)Eclipse中間件與Eclipse RCP基礎(chǔ)設(shè)施。進(jìn)行Eclipse RCP開(kāi)發(fā)并不要求開(kāi)發(fā)人員開(kāi)發(fā)所有的東西,開(kāi)發(fā)人員可以將精力集中在業(yè)務(wù)邏輯上,Eclipse RCP開(kāi)發(fā)套件提供了諸如用戶接口支持(UI),可擴(kuò)展的組建系統(tǒng),幫助系統(tǒng),網(wǎng)絡(luò)更新系統(tǒng),錯(cuò)誤處理,日志等等。
(3)本地程序外觀。Java本身提供的窗口API所開(kāi)發(fā)出來(lái)的窗口程序往往不能令人滿意。用戶往往習(xí)慣了長(zhǎng)期使用的操作系統(tǒng)的用戶界面。Eclipse通過(guò)SWT/JFace技術(shù),是的用戶Java開(kāi)發(fā)的程序可以有和本地操作系統(tǒng)一樣的風(fēng)格。
(4)離線處理能力。B/S結(jié)構(gòu)的程序往往不能提供離線處理能力,這也是富客戶端程序的優(yōu)勢(shì)所在。提供離線處理能力或者本地處理能力除了能夠使某些業(yè)務(wù)在網(wǎng)絡(luò)中斷的情況下繼續(xù)執(zhí)行意外,還可以減輕服務(wù)器的處理負(fù)擔(dān),因?yàn)樵S多數(shù)據(jù)可以由本地提供的功能進(jìn)行加工。
2 可擴(kuò)展性RCP平臺(tái)概述
可擴(kuò)展性RCP平臺(tái)旨在節(jié)省開(kāi)發(fā)人員的勞力,將可重用的必備的系統(tǒng)功能組件集成到基本RCP中,具體的業(yè)務(wù)邏輯將以獨(dú)立的Plug-in的形式出現(xiàn),同時(shí)可以動(dòng)態(tài)的加載到RCP中而不用重新編譯整個(gè)RCP平臺(tái),同時(shí)通過(guò)可擴(kuò)展性RCP的內(nèi)建管理模塊管理組件功能以及其在RCP界面中的表現(xiàn)。圖2-1展示了可擴(kuò)展性RCP平臺(tái)的總體結(jié)構(gòu)。
2.1 提供核心組件及其組織
表2-1展示了基本可擴(kuò)展性RCP平臺(tái)的核心組件。其中org.sean.platform組件是本系統(tǒng)的核心組件,其負(fù)責(zé)用戶管理、菜單/權(quán)限管理、業(yè)務(wù)組件的加載、系統(tǒng)首選項(xiàng)的配置、日志等等。該組件的運(yùn)行將依賴于其他組件,這些組件可以是依賴于Apache Software Foundation的開(kāi)源項(xiàng)目,通過(guò)Eclipse直接包裝,或者由程序員自行編寫(xiě)并包裝,這些組件提供了基本的功能,增強(qiáng)了可擴(kuò)展性RCP平臺(tái)的運(yùn)行功能。比如org.sean.hrfm.codec.support組件提供加密/解密功能,org.sean.hrfm.digester.support組件提供xml文件解析功能,org.sean.hrfm. office.support提供Microsoft Office文件以及Adobe PDF文件的創(chuàng)建與訪問(wèn)功能,org.sean.hrfm.jsper.support提供報(bào)表管理、創(chuàng)建功能,org.sean.hrfm.configeration組件提供系統(tǒng)配置文件的加載功能。org.sean.platform組件負(fù)責(zé)組織這些組件并實(shí)現(xiàn)相應(yīng)功能。
表2-1 系統(tǒng)組件(資料來(lái)源:作者整理)
組件編碼組件名稱組件功能組件依賴
org.sean.hrfm.mysql.support數(shù)據(jù)庫(kù)連接器提供常用數(shù)據(jù)庫(kù)的連接:
mysql server 5.1第三方j(luò)ar
org.sean.hrfm.mssql.support數(shù)據(jù)庫(kù)連接器提供常用數(shù)據(jù)庫(kù)的連接:
ms sqlserver 2000第三方j(luò)ar
org.sean.hrfm.db. hibernate
.support數(shù)據(jù)庫(kù)持久層支持提供常用持久層框架jar:hibernate第三方j(luò)ar
org.sean.hrfm.db.ibatis.support數(shù)據(jù)庫(kù)持久層支持提供常用持久層框架jar:ibatis第三方j(luò)ar
org.sean.hrfm.ejb.support分布式支持提供系統(tǒng)分布式處理能力:ejb3.0第三方j(luò)ar
org.sean.hrfm.db.transaction數(shù)據(jù)庫(kù)業(yè)務(wù)層提供系統(tǒng)需要的業(yè)務(wù)邏輯。org.sean.hrfm.db. hibernate
.support
org.sean.hrfm.db.ibatis.support
org.sean.hrfm.mssql.support
org.sean.hrfm.mysql.support org.sean.hrfm.ejb.support
org.sean.hrfm.commons.support阿帕奇公共組件包提供Apache公共組件支持
org.sean.platform系統(tǒng)核心模塊提供系統(tǒng)級(jí)信息管理,包括部件協(xié)調(diào),登入登出系統(tǒng),系統(tǒng)日志等等。全部第三方j(luò)ar組件。
org.sean.hrfm.email.support電子郵件支持模塊對(duì)系統(tǒng)提供電子郵件的支持第三方j(luò)ar
org.sean.hrfm.fetion.support飛信功能支持模塊對(duì)系統(tǒng)提供飛信功能支持第三方j(luò)ar
org.sean.hrfm.office.supportOffice功能支持模塊為系統(tǒng)提供MS Office相關(guān)功能支持。第三方j(luò)ar
org.sean.hrfm.jsper.support報(bào)表功能支持模塊為系統(tǒng)提供報(bào)表功能,提供系統(tǒng)對(duì)Jsper Report的支持。第三方j(luò)ar
2.2 可擴(kuò)展性平臺(tái)通用接口設(shè)計(jì)
目前本系統(tǒng)僅僅對(duì)業(yè)務(wù)邏輯組件中可視化部分有一定的接口要求,其接口類型存放于org.sean.platform.system包下,該接口僅僅要求被實(shí)現(xiàn)的View類能夠支持通用的用戶操作比如:保存、刷新、查詢、關(guān)閉。其接口定義如下:
public interface GeneralViewFunction {
public boolean save();
public boolean query();
public boolean close();
public boolean refresh();
}
只要編寫(xiě)應(yīng)用邏輯組件的程序員實(shí)現(xiàn)了上述接口,那么,系統(tǒng)就可以調(diào)用其相應(yīng)的方法,從而操縱View的行為。
3 可擴(kuò)展性RCP快速開(kāi)發(fā)應(yīng)用實(shí)例—門(mén)診預(yù)約管理系統(tǒng)
本例展示的是如何在可擴(kuò)展性RCP平臺(tái)上快速開(kāi)發(fā)應(yīng)用。本系統(tǒng)作為某網(wǎng)絡(luò)預(yù)約系統(tǒng)的后臺(tái),僅僅是為了作為例子說(shuō)明其開(kāi)發(fā)過(guò)程,因此僅僅展示了該門(mén)診預(yù)約管理系統(tǒng)的兩個(gè)功能的具體開(kāi)發(fā)過(guò)程。
3.1 創(chuàng)建應(yīng)用插件工程
首先,使用Eclipse插件開(kāi)發(fā)平臺(tái)創(chuàng)建插件工程org.sean.hrfm.mzyyxt,如圖3.1-1所示。同時(shí)配置其jar依賴:配置文件org.sean.platform.jar文件至該工程的類路徑,所有數(shù)據(jù)庫(kù)連接等都由org.sean.platfrom平臺(tái)進(jìn)行管理,所以,僅僅引入這一個(gè)包即可。org.sean.platform.jar包并不是所有的類或者接口都對(duì)外可見(jiàn),只有必須的接口和類定義是可以對(duì)外訪問(wèn)的。
3.2 定義用戶接口可視類
如圖3.2-1所示,通過(guò)Eclipse plug-in開(kāi)發(fā)工具包編輯插件配置文件plugin.xml。定義Eclipse視圖類:預(yù)約信息查詢和可預(yù)約數(shù)量編輯器,兩項(xiàng)功能的視圖id分別定義為org.sean.hrfm.mzyyxt.views.ReserveInformation和org.sean.hrfm.mzyyxt.views.ExpertReserveEditor。通過(guò)windowBuilder可以對(duì)該視圖類進(jìn)行可視化編輯,業(yè)務(wù)邏輯代碼可以直接在該類定義中編輯或者另外定義其他的業(yè)務(wù)邏輯組件。
3.3 定義用戶權(quán)限與菜單
用戶菜單與用戶權(quán)限通過(guò)menus.xml文件進(jìn)行配置或者通過(guò)服務(wù)器創(chuàng)建輸出流直接輸出至客戶端,究竟采用哪種方式可以通過(guò)配置可擴(kuò)展性平臺(tái)的配置文件application.properties進(jìn)行選擇。這里我們采用本地文件的形式進(jìn)行配置,其配置內(nèi)容如下:
該配置文件有可擴(kuò)展性RCP平臺(tái)自己加載,同時(shí)根據(jù)具體的參數(shù)配置平臺(tái)所應(yīng)該加載的菜單文件,如圖3.3-2所示。
如果可視用戶接口實(shí)現(xiàn)了2.2中所定義的GeneralViewFunction接口,當(dāng)用戶點(diǎn)擊工具欄的相應(yīng)按鈕時(shí)就會(huì)激活相應(yīng)的處理過(guò)程。
3.4 發(fā)布應(yīng)用程序
通過(guò)Eclipse plugin Exporter將本例開(kāi)發(fā)的應(yīng)用導(dǎo)出為Eclipse插件文件,將該插件文件放入可擴(kuò)展性RCP平臺(tái)程序的plugins目錄下,然后點(diǎn)擊使用程序plugin-updater.exe進(jìn)行更新,或者直接運(yùn)行RCP程序,該程序?qū)⒆詣?dòng)更新相應(yīng)的配置文件。運(yùn)行platform.exe文件,輸入用戶名和密碼即可打開(kāi)3.3-2所示的應(yīng)用程序界面。
4 總結(jié)
通過(guò)介紹可擴(kuò)展性RCP平臺(tái)與門(mén)診預(yù)約管理系統(tǒng)的開(kāi)發(fā)實(shí)例,我們可以看到,通過(guò)簡(jiǎn)單的4個(gè)步驟就可以快速實(shí)現(xiàn)應(yīng)用的開(kāi)發(fā),這樣開(kāi)發(fā)人員就可以將精力集中在業(yè)務(wù)邏輯的開(kāi)發(fā)上,而不用編譯整個(gè)系統(tǒng)。整個(gè)系統(tǒng)的插件相互聯(lián)系而又相互獨(dú)立,這對(duì)于多個(gè)開(kāi)發(fā)人員相互協(xié)作開(kāi)發(fā)也有相當(dāng)?shù)膬?yōu)勢(shì),所有的開(kāi)發(fā)人員均面對(duì)可擴(kuò)展性RCP平臺(tái),大家處于平等的位置。當(dāng)組件或者平臺(tái)本身有新的版本應(yīng)用時(shí),只要保證接口的穩(wěn)定性,整個(gè)平臺(tái)就可以平穩(wěn)運(yùn)行。
然而,該RCP正處于起步階段,僅僅實(shí)現(xiàn)了最基本的功能,其擴(kuò)展余地還有很大,這就需要更多的人付出更多的智慧和努力。
參考文獻(xiàn):
[1]袁赟.Eclipse RCP框架分析和應(yīng)用研究[D].同濟(jì)大學(xué),2008.
[2]劉威.基于Eclipse插件技術(shù)的異構(gòu)數(shù)據(jù)庫(kù)集成研究[D].重慶大學(xué),2008.
[3]任絢兮,周長(zhǎng)勝.基于Eclipse SDK平臺(tái)下插件的研究[J].北京信息科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,(03).
[4] Jason Weathersby,Tom Bondur, Iana Chatalbasheva. Integrating and Extending BIRT 3rd [M] Addison-Wesley
[5] Jeff McAffer , Jean-Michel Lemieux , Chris Aniszczyk. Eclipse Rich Client Platform 2nd [M] Addison-Wesley
[作者簡(jiǎn)介]黃德瑞(1983.10-),男,天津人,本科,天津大學(xué),網(wǎng)絡(luò)管理員,研究方向:信息管理。王秋海(1984.10-),男,天津人,碩士研究生,天津醫(yī)科大學(xué)眼科醫(yī)院,助理工程師,研究方向:數(shù)據(jù)倉(cāng)庫(kù)與數(shù)據(jù)挖掘。
計(jì)算機(jī)光盤(pán)軟件與應(yīng)用2012年23期