賈璐+張旻+田丹+麥先根
摘 要: 傳統(tǒng)C/S結(jié)構(gòu)的遠(yuǎn)程處理程序存在高度依賴客戶端,界面響應(yīng)速度慢,不能充分發(fā)揮客戶端性能等弱點(diǎn)。隨著Eclipse平臺(tái)和RSE框架的出現(xiàn),使遠(yuǎn)程處理應(yīng)用程序開(kāi)發(fā)重新成為了焦點(diǎn)。使用基于Eclipse平臺(tái)和RSE軟件框架構(gòu)建遠(yuǎn)程處理正在成為當(dāng)前越來(lái)越多的企業(yè)采用的一種方法,這種方法快速、高效、開(kāi)發(fā)團(tuán)隊(duì)只需要將關(guān)注點(diǎn)投射于領(lǐng)域業(yè)務(wù)邏輯即可。在此深入地分析RSE框架的體系結(jié)構(gòu),并結(jié)合實(shí)例介紹Eclipse下采用RSE開(kāi)發(fā)遠(yuǎn)程處理的實(shí)現(xiàn)方法。該方法使軟件架構(gòu)更加合理,可維護(hù)性強(qiáng),并且大幅縮短了開(kāi)發(fā)時(shí)間,取得了良好效果。
關(guān)鍵詞: Eclipse; RSE; MVC; Plug?in
中圖分類(lèi)號(hào): TN911?34; TP311 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)14?0048?03
Application of RSE framework in Eclipse
JIA Lu, ZHANG Min, TIAN Dan, MAI Xian?gen
(Xian Aeronautics Computing Technique Research Institute, AVIC, Xian 710065, China)
Abstracts: The remote processing program of traditional C/S structure highly depends on the client?side, has slow interface responses, and can not make fully use of the performance of client?side. Along with the appearance of Eclipse platform and RSE structures, the remote processing application program development becomes a focus again. More and more companies are developing their own remote processing devices based on Eclipse and RSE. It is an efficient way that the development teams needs to focus on building their field logic only. The architecture of RSE framework is deeply analyzed in this paper. The method to develop and implement the remote processing device by using RSE in Eclipse is introduced with examples. The method makes the software architecture more reasonable and maintainability stronger, and can greatly reduce the development time.
Keywords: Eclipse; RSE; MVC; Plug?in
隨著Eclipse和RSE的出現(xiàn),使C/S結(jié)構(gòu)的遠(yuǎn)程處理應(yīng)用程序開(kāi)發(fā)重新進(jìn)入人們的視線。Eclipse[1]的最大優(yōu)點(diǎn)在于其插件機(jī)制,在Eclipse平臺(tái)上只需要下載一個(gè)RSE[2]插件,再通過(guò)簡(jiǎn)單地?cái)U(kuò)展和部署,就能實(shí)現(xiàn)專(zhuān)用的遠(yuǎn)程系統(tǒng),并能為該遠(yuǎn)程系統(tǒng)添加新功能[3],從而較好地解決了傳統(tǒng)客戶端應(yīng)用程序不易擴(kuò)展,難以適應(yīng)需求變化的問(wèn)題。
1 RSE框架機(jī)制
RSE是基于Eclipse 項(xiàng)目的一個(gè)開(kāi)發(fā)遠(yuǎn)程系統(tǒng)客戶端應(yīng)用程序的框架,旨在提供一種快速開(kāi)發(fā)的,功能強(qiáng)大的,可擴(kuò)展的應(yīng)用平臺(tái)。RSE不僅提供了遠(yuǎn)程系統(tǒng)的數(shù)據(jù)模型和應(yīng)用框架,還支持遠(yuǎn)程系統(tǒng)的訪問(wèn)命令和文件服務(wù)模型。
RSE是一個(gè)插件體系結(jié)構(gòu)的完整的應(yīng)用平臺(tái),它既是一個(gè)插件,又是一些插件的集合。基于RSE的應(yīng)用程序的入口必須實(shí)現(xiàn)org.eclipse.core. runtime. applications擴(kuò)展點(diǎn)。在Eclipse 啟動(dòng)時(shí),只能指定一個(gè)被運(yùn)行的application,這個(gè)application 的主類(lèi)必須實(shí)現(xiàn)IplatformRunnable 接口,由此接口所提供的run 方法接管Eclipse 平臺(tái)的控制權(quán),當(dāng)此application 結(jié)束時(shí),Eclipse 平臺(tái)也會(huì)退出。
2 RSE框架體系結(jié)構(gòu)和設(shè)計(jì)方法分析
2.1 RSE框架體系結(jié)構(gòu)
RSE框架工作在Eclipse平臺(tái)的基礎(chǔ)上,RSE框架的體系結(jié)構(gòu)見(jiàn)圖1。
DataModel模型是RSE框架的核心,負(fù)責(zé)封裝遠(yuǎn)程系統(tǒng)處理程序中的系統(tǒng)數(shù)據(jù)和業(yè)務(wù)邏輯,返回視圖對(duì)數(shù)據(jù)的查詢,將數(shù)據(jù)的變化通知給視圖,用不同的方式實(shí)現(xiàn)數(shù)據(jù)模型接口。
圖1 RSE框架結(jié)構(gòu)圖
RSE框架為DataModel模型提供了可選的Service服務(wù),包括Files,Processes,Shells服務(wù)。
View視圖和Wizard向?qū)Ь褪沁h(yuǎn)程處理應(yīng)用中的用戶界面,負(fù)責(zé)展示DataModel模型中的數(shù)據(jù),通過(guò)向Eclipse平臺(tái)的事件處理代理發(fā)送使用者的動(dòng)作,完成RSE框架和使用者的交互,同時(shí)也允許控制器來(lái)選擇所要顯示的視圖。
在遠(yuǎn)程處理的事件處理過(guò)程中,RSE框架使用Eclipse的事件處理器代理,來(lái)把使用者操作轉(zhuǎn)化成對(duì)DataModel模型的更新,并選擇需要顯示的View視圖。
2.2 RSE框架設(shè)計(jì)方法
RSE框架采用了MVC[4]設(shè)計(jì)模式來(lái)設(shè)計(jì)和實(shí)現(xiàn),分為模型、視圖、控制器三層。其中模型層采用RSE專(zhuān)用的 RSEModelObject來(lái)實(shí)現(xiàn)RemoteModel;視圖層采用的技術(shù)是SWT/JFace;而系統(tǒng)注冊(cè)器SystemRegistry作為控制器接收視圖層的請(qǐng)求,執(zhí)行業(yè)務(wù)邏輯、操作業(yè)務(wù)模型, 完成遠(yuǎn)程系統(tǒng)內(nèi)部資源的訪問(wèn)、操作和變更。基于MVC的RSE框架實(shí)現(xiàn)工作流程見(jiàn)圖2。
圖2 MVC實(shí)現(xiàn)的RSE框架圖
整個(gè)RSE框架的入口點(diǎn)是遠(yuǎn)程處理客戶端的請(qǐng)求事件。系統(tǒng)根據(jù)所造成影響的不同,將事件分為兩類(lèi):只影響前臺(tái)的Light Weight 事件和影響后臺(tái)數(shù)據(jù)的Heavy Weight 事件。
事件由Eclipse平臺(tái)的Handler Proxy事件代理統(tǒng)一管理,再轉(zhuǎn)發(fā)給遠(yuǎn)程系統(tǒng)的SystemRegistry事件注冊(cè)器,對(duì)每個(gè)事件進(jìn)行處理.。
3 RSE應(yīng)用實(shí)例
下面通過(guò)一個(gè)應(yīng)用實(shí)例說(shuō)明如何使用RSE框架構(gòu)建遠(yuǎn)程處理應(yīng)用程序。該實(shí)例是一個(gè)基于SSH協(xié)議遠(yuǎn)程系統(tǒng)的事件日志記錄遠(yuǎn)程客戶端系統(tǒng),包括遠(yuǎn)程連接、屬性集合和事件處理與記錄。
3.1 遠(yuǎn)程連接
遠(yuǎn)程連接中包括遠(yuǎn)程系統(tǒng)模型、遠(yuǎn)程系統(tǒng)模型和控制器。遠(yuǎn)程系統(tǒng)模型的屬性有名稱(chēng)、IP地址和連接協(xié)議類(lèi)型,控制器在接收到來(lái)自視圖的創(chuàng)建遠(yuǎn)程連接的請(qǐng)求后,會(huì)通知注冊(cè)器檢查該遠(yuǎn)程連接目前是否已經(jīng)存在,如果還不存在,就新建并保存到注冊(cè)器中。遠(yuǎn)程連接的設(shè)計(jì)如圖3所示。
圖3 遠(yuǎn)程連接設(shè)計(jì)示意圖
創(chuàng)建遠(yuǎn)程連接的方法具體代碼如下:
public void run() {
String hostName = "build.eclipse.org";
ISystemRegistry registry = RSECorePlugin.getDefault().getSystemRegistry();
ISystemProfile profile = registry.getSystemProfileManager()
.getDefaultPrivateSystemProfile();
IHost host = registry.getHost(profile, hostName);
if (host == null) {
host = registry.createHost(
"SSH Only", //System Type Name
hostName, //Connection name
hostName, //IP Address
"Connection to Eclipse site"); //description
} }
3.2 屬性集合
遠(yuǎn)程連接屬性集合負(fù)責(zé)記錄并維護(hù)遠(yuǎn)程系統(tǒng)的狀態(tài):已連接、已斷開(kāi)連接和密碼驗(yàn)證。當(dāng)一個(gè)遠(yuǎn)程系統(tǒng)包括多個(gè)子系統(tǒng)時(shí),例如同時(shí)包括文件子系統(tǒng)和shells子系統(tǒng),針對(duì)這些子系統(tǒng),不但允許各子系統(tǒng)使用不同協(xié)議類(lèi)型的連接,而且一個(gè)遠(yuǎn)程連接還能夠被多個(gè)子系統(tǒng)共享。優(yōu)點(diǎn)是不但提高了遠(yuǎn)程系統(tǒng)的可擴(kuò)展性和靈活性,也實(shí)現(xiàn)了已有構(gòu)件的有效復(fù)用。創(chuàng)建遠(yuǎn)程連接的方法具體代碼如下:
IConnectorService[]conServices=host.getConnectorServices();
if (conServices != null && conServices.length > 0) {
IPropertySet set = null;
IPropertySet[] sets = conServices[0].getPropertySets();
if (sets != null && sets.length > 0) {
set = sets[0]; }
else { set = new PropertySet("System Info"); conServices[0].addPropertySet(set); }
set.addProperty("Arch", " PPC64"); }
通過(guò)上述方法實(shí)現(xiàn)的遠(yuǎn)程系統(tǒng)屬性集合如圖4所示。應(yīng)用實(shí)例中的遠(yuǎn)程系統(tǒng)采用的是PPC64體系結(jié)構(gòu)。
圖4 屬性集合圖
3.3 事件處理和日志記錄
3.3.1 事件處理
本文中的事件特指在遠(yuǎn)程處理過(guò)程中遠(yuǎn)程系統(tǒng)內(nèi)部數(shù)據(jù)的操作,這些數(shù)據(jù)可以復(fù)用已有RSE模型對(duì)象RSEModelObject,也可以是自定義的。但必須實(shí)現(xiàn)IAdaptable[5]接口,為自身定義一個(gè)私有適配器。該適配器實(shí)現(xiàn)ISystemViewElementAdapter[6]接口,在Eclipse平臺(tái)的UI視圖中,為遠(yuǎn)程系統(tǒng)資源和針對(duì)這些資源的操作提供顯示功能。系統(tǒng)事件注冊(cè)器SystemRegistry負(fù)責(zé)具體RSE事件的處理,實(shí)現(xiàn)方法是通過(guò)實(shí)現(xiàn)ISystemResourceChangeListener、ISystemModelChangeListener和ISystemRemoteChangeListener接口的監(jiān)聽(tīng)器偵聽(tīng)遠(yuǎn)程處理事件,并進(jìn)行處理。
3.3.2 記錄事件日志
記錄事件日志實(shí)現(xiàn)方法是首先創(chuàng)建一個(gè)輸出到控制臺(tái)的RSE事件監(jiān)聽(tīng)器,然后將把該監(jiān)聽(tīng)器注冊(cè)到遠(yuǎn)程系統(tǒng)注冊(cè)器中。事件處理和日志記錄方法的具體實(shí)現(xiàn)代碼如下:
Public Void systemResourceChanged(
ISystemResourceChangeEvent event) {
int type = event.getType();
String eventStr = getResourceChangeEventType(type);
if (resource instanceof IAdaptable) {
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter) ((IAdaptable)resource).getAdapter(ISystemViewElementAdapter.class);
if (adapter != null) {
String type = adapter.getType(resource);
String name = dapter.getName(resource);
String message = eventStr + ":\t(" + type + ")\t" + name;
logEvent(message); //print into Console; could also do stdout
} } }
通過(guò)上述方法實(shí)現(xiàn)的日志記錄控制臺(tái)如圖5所示。
圖5 日志記錄控制臺(tái)圖
遠(yuǎn)程處理過(guò)程中發(fā)生的所有事件都會(huì)以文本方式輸出到控制臺(tái),這為遠(yuǎn)程系統(tǒng)處理的調(diào)試工作提供了故障診斷依據(jù)。
4 結(jié) 語(yǔ)
Eclipse是功能強(qiáng)大的開(kāi)發(fā)平臺(tái)。實(shí)例說(shuō)明, 在其中使用RSE框架開(kāi)發(fā)遠(yuǎn)程系統(tǒng)插件, 可以成功實(shí)現(xiàn)面向遠(yuǎn)程應(yīng)用的擴(kuò)展,并且使遠(yuǎn)程處理軟件的軟件架構(gòu)更加合理,可維護(hù)性強(qiáng),并且大幅縮短了開(kāi)發(fā)時(shí)間,取得了良好效果。
參考文獻(xiàn)
[1] Eclipse Org. Eclipse home [EB/OL]. [2013?03?11]. http://www.eclipse.org.
[2] OBERHUBER Martin. TM?2.0?release review [M]. USA: Wind River Inc, 2007.
[3] AJITH A R. RSE using Eclipse in Ubuntu [M] USA: Toobler Web Development Company, 2011.
[4] 李海峰.MVC模式架構(gòu)的應(yīng)用研究[J].自動(dòng)化與儀器儀表,2013(1):4 ?7.
[5] 谷鈺.Eclipse 插件體系結(jié)構(gòu)的研究[J].電腦知識(shí)與技術(shù),2009,31(5):8706?8711.
[6] 克萊柏格.ECLIPSE 插件開(kāi)發(fā)[M].北京:機(jī)械工業(yè)出版社,2011.
3.3.2 記錄事件日志
記錄事件日志實(shí)現(xiàn)方法是首先創(chuàng)建一個(gè)輸出到控制臺(tái)的RSE事件監(jiān)聽(tīng)器,然后將把該監(jiān)聽(tīng)器注冊(cè)到遠(yuǎn)程系統(tǒng)注冊(cè)器中。事件處理和日志記錄方法的具體實(shí)現(xiàn)代碼如下:
Public Void systemResourceChanged(
ISystemResourceChangeEvent event) {
int type = event.getType();
String eventStr = getResourceChangeEventType(type);
if (resource instanceof IAdaptable) {
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter) ((IAdaptable)resource).getAdapter(ISystemViewElementAdapter.class);
if (adapter != null) {
String type = adapter.getType(resource);
String name = dapter.getName(resource);
String message = eventStr + ":\t(" + type + ")\t" + name;
logEvent(message); //print into Console; could also do stdout
} } }
通過(guò)上述方法實(shí)現(xiàn)的日志記錄控制臺(tái)如圖5所示。
圖5 日志記錄控制臺(tái)圖
遠(yuǎn)程處理過(guò)程中發(fā)生的所有事件都會(huì)以文本方式輸出到控制臺(tái),這為遠(yuǎn)程系統(tǒng)處理的調(diào)試工作提供了故障診斷依據(jù)。
4 結(jié) 語(yǔ)
Eclipse是功能強(qiáng)大的開(kāi)發(fā)平臺(tái)。實(shí)例說(shuō)明, 在其中使用RSE框架開(kāi)發(fā)遠(yuǎn)程系統(tǒng)插件, 可以成功實(shí)現(xiàn)面向遠(yuǎn)程應(yīng)用的擴(kuò)展,并且使遠(yuǎn)程處理軟件的軟件架構(gòu)更加合理,可維護(hù)性強(qiáng),并且大幅縮短了開(kāi)發(fā)時(shí)間,取得了良好效果。
參考文獻(xiàn)
[1] Eclipse Org. Eclipse home [EB/OL]. [2013?03?11]. http://www.eclipse.org.
[2] OBERHUBER Martin. TM?2.0?release review [M]. USA: Wind River Inc, 2007.
[3] AJITH A R. RSE using Eclipse in Ubuntu [M] USA: Toobler Web Development Company, 2011.
[4] 李海峰.MVC模式架構(gòu)的應(yīng)用研究[J].自動(dòng)化與儀器儀表,2013(1):4 ?7.
[5] 谷鈺.Eclipse 插件體系結(jié)構(gòu)的研究[J].電腦知識(shí)與技術(shù),2009,31(5):8706?8711.
[6] 克萊柏格.ECLIPSE 插件開(kāi)發(fā)[M].北京:機(jī)械工業(yè)出版社,2011.
3.3.2 記錄事件日志
記錄事件日志實(shí)現(xiàn)方法是首先創(chuàng)建一個(gè)輸出到控制臺(tái)的RSE事件監(jiān)聽(tīng)器,然后將把該監(jiān)聽(tīng)器注冊(cè)到遠(yuǎn)程系統(tǒng)注冊(cè)器中。事件處理和日志記錄方法的具體實(shí)現(xiàn)代碼如下:
Public Void systemResourceChanged(
ISystemResourceChangeEvent event) {
int type = event.getType();
String eventStr = getResourceChangeEventType(type);
if (resource instanceof IAdaptable) {
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter) ((IAdaptable)resource).getAdapter(ISystemViewElementAdapter.class);
if (adapter != null) {
String type = adapter.getType(resource);
String name = dapter.getName(resource);
String message = eventStr + ":\t(" + type + ")\t" + name;
logEvent(message); //print into Console; could also do stdout
} } }
通過(guò)上述方法實(shí)現(xiàn)的日志記錄控制臺(tái)如圖5所示。
圖5 日志記錄控制臺(tái)圖
遠(yuǎn)程處理過(guò)程中發(fā)生的所有事件都會(huì)以文本方式輸出到控制臺(tái),這為遠(yuǎn)程系統(tǒng)處理的調(diào)試工作提供了故障診斷依據(jù)。
4 結(jié) 語(yǔ)
Eclipse是功能強(qiáng)大的開(kāi)發(fā)平臺(tái)。實(shí)例說(shuō)明, 在其中使用RSE框架開(kāi)發(fā)遠(yuǎn)程系統(tǒng)插件, 可以成功實(shí)現(xiàn)面向遠(yuǎn)程應(yīng)用的擴(kuò)展,并且使遠(yuǎn)程處理軟件的軟件架構(gòu)更加合理,可維護(hù)性強(qiáng),并且大幅縮短了開(kāi)發(fā)時(shí)間,取得了良好效果。
參考文獻(xiàn)
[1] Eclipse Org. Eclipse home [EB/OL]. [2013?03?11]. http://www.eclipse.org.
[2] OBERHUBER Martin. TM?2.0?release review [M]. USA: Wind River Inc, 2007.
[3] AJITH A R. RSE using Eclipse in Ubuntu [M] USA: Toobler Web Development Company, 2011.
[4] 李海峰.MVC模式架構(gòu)的應(yīng)用研究[J].自動(dòng)化與儀器儀表,2013(1):4 ?7.
[5] 谷鈺.Eclipse 插件體系結(jié)構(gòu)的研究[J].電腦知識(shí)與技術(shù),2009,31(5):8706?8711.
[6] 克萊柏格.ECLIPSE 插件開(kāi)發(fā)[M].北京:機(jī)械工業(yè)出版社,2011.