子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 71, 文章 - 0, 評論 - 915, 引用 - 0
          數(shù)據(jù)加載中……

          RCP最靈活的模塊組織方式

          文/陳剛 from www.ChenGang.com.cn at 2006年4月29日 (轉(zhuǎn)載請標(biāo)明出處)

          起因是這樣的,有一個(gè)已經(jīng)開發(fā)了比較多功能的RCP程序,它包含這樣幾個(gè)模塊:JMX瀏覽器(類似于MC4J的功能)、系統(tǒng)事件監(jiān)控器、權(quán)限控制框架等。這些模塊是寫在一個(gè)RCP項(xiàng)目中的。

          現(xiàn)在,我想更靈活些。比如,JMX瀏覽器模塊這個(gè)是通用的,但如果誰要使用這個(gè)功能,就必須運(yùn)行整個(gè)RCP項(xiàng)目才行,而我希望這個(gè)JMX模塊是可簡單裝卸的。充分運(yùn)行Eclipse的插件機(jī)制,讓各模塊成為一個(gè)獨(dú)立的插件,應(yīng)該可以實(shí)現(xiàn)這個(gè)功能。

          比如,JMX模塊形成一個(gè)獨(dú)立的插件:它既可以讓其他人當(dāng)做一個(gè)普通插件,安裝到Eclipse中;也可以成為一個(gè)模塊,插入我RCP項(xiàng)目中來。這樣的設(shè)計(jì),讓模塊的開重用性變得很高了。

          這個(gè)想法中,RCP部份,僅僅成為一個(gè)空殼,提供更插件的插入機(jī)制。這個(gè)方案特別適合那種想把原有插件項(xiàng)目,改裝成RCP而發(fā)布的項(xiàng)目,基本上原有插件無需做改動(dòng)。

          然而這個(gè)想法是否可行呢?
          (1) 插件能否想插入到Eclipse,插入到RCP空殼項(xiàng)目中?
          (2) 插件中的如果存在依賴關(guān)系(比如,一個(gè)插件需要用到另一個(gè)插件的代碼),怎么實(shí)現(xiàn)。
          (3) 插件依然的JAR包怎么處理。比如有三個(gè)插件都要用到log4j.jar來輸出日志,如果把log4j.jar放在插件項(xiàng)目的lib目錄來使用的話,log4j.jar在三個(gè)插件各有一份,就會(huì)有三份。當(dāng)三個(gè)插件合到RCP項(xiàng)目中時(shí),就有兩個(gè)log4j是冗余的。這會(huì)增在RCP項(xiàng)目的大小。
          (4) RCP項(xiàng)目有一些界面元素須要根據(jù)插入的插件,做相應(yīng)的變化。怎么實(shí)現(xiàn)?


          為了驗(yàn)證第(1)點(diǎn),我做了這個(gè)實(shí)驗(yàn):

          創(chuàng)建一個(gè)很簡單的插件項(xiàng)目,此插件項(xiàng)目包含一個(gè)很簡單的透視圖。我要看看這個(gè)透視圖能否出現(xiàn)在RCP項(xiàng)目中的。很順便,當(dāng)我把插件項(xiàng)目導(dǎo)出后,安裝到RCP項(xiàng)目的plugin目錄,再運(yùn)行RCP項(xiàng)目,發(fā)現(xiàn)這個(gè)插件項(xiàng)目的透視圖出現(xiàn)在了RCP項(xiàng)目的透視圖列表中。

          如果是開發(fā)時(shí),我希望運(yùn)行RCP項(xiàng)目時(shí),就能看到插件項(xiàng)目插入進(jìn)來后的效果。實(shí)現(xiàn)也不難,步驟如下:
          (1) 在Plugin.xml的dependencies項(xiàng),把插件項(xiàng)目加入到Required Plug-ins中。(表示項(xiàng)目的依賴)
          (2) 在run..里的Plug-ins項(xiàng),選擇插件項(xiàng)目和RCP項(xiàng)目,并單擊Add Required Plug-ins(表現(xiàn)運(yùn)行時(shí)的依賴)


          為了驗(yàn)證第(2)點(diǎn),我做了這個(gè)實(shí)驗(yàn):
          在插件項(xiàng)目中創(chuàng)建一個(gè)類,在RCP項(xiàng)目中使用這個(gè)類,這時(shí)還是找不到類的。解決辦法是:在打開插件項(xiàng)目的plugin.xml-->runtime選項(xiàng)卡-->Exported Packages(輸出的包),把這個(gè)類所在的包加入進(jìn)來。這下RCP項(xiàng)目可以使用插件項(xiàng)目的類了。

          關(guān)于第(3)點(diǎn),我沒有做實(shí)驗(yàn),我的想法是:把jar包封裝成插件(可參考eclipse對junit的封裝),從而將項(xiàng)目對JAR包的依賴,轉(zhuǎn)變成對插件的依賴。

          關(guān)于第(4)點(diǎn),我沒有做實(shí)驗(yàn),我的想法是:通過自定義RCP項(xiàng)目的擴(kuò)展點(diǎn)來實(shí)現(xiàn)。


          在我這個(gè)項(xiàng)目分解模塊還會(huì)遇到這樣的問題:權(quán)限安全模塊是影響到整個(gè)RCP項(xiàng)目的,但JMX模塊獨(dú)立出來后,顯然不是必須要權(quán)限安全模塊的。怎么解除這種依賴關(guān)系呢。我看是解除不了的了,但可以設(shè)一個(gè)開關(guān),讓權(quán)限安全模塊失效。這樣雖然代碼和權(quán)限安全模塊有依賴,但可以把權(quán)限檢查的功能關(guān)閉。


          總結(jié):

          這種方式雖然靈活,但也是有代價(jià)的---編程和項(xiàng)目管理更復(fù)雜了。

          posted on 2006-04-29 12:40 陳剛 閱讀(2536) 評論(10)  編輯  收藏 所屬分類: Eclipse

          評論

          # re: RCP最靈活的模塊組織方式  回復(fù)  更多評論   

          我買了你的書,一個(gè)很嚴(yán)重的問題,《Eclipse從入門到精通》上的網(wǎng)址www.chengang.com.cn根本無法訪問,可能你的域名解析出問題了,
          我是通過百度快照找到這里來的,http://www.baidu.com/s?ct=0&ie=gb2312&bs=updates5.0net.zip&sr=&z=&cl=3&f=8&wd=www.chengang.com.cn%2F
          2006-05-15 14:21 | 農(nóng)民

          # re: RCP最靈活的模塊組織方式  回復(fù)  更多評論   

          不錯(cuò),寫得很好!
          "關(guān)于第(3)點(diǎn):把jar包封裝成插件(可參考eclipse對junit的封裝),從而將項(xiàng)目對JAR包的依賴,轉(zhuǎn)變成對插件的依賴。"
          能不能說得詳細(xì)點(diǎn).因現(xiàn)在做的項(xiàng)目正有這樣的需要。先謝了。
          2006-06-06 15:32 | limeiyong

          # re: RCP最靈活的模塊組織方式  回復(fù)  更多評論   

          文中的四點(diǎn)想法對我現(xiàn)在所從事的項(xiàng)目具有很大的借鑒意義。
          我的RCP應(yīng)用已經(jīng)實(shí)現(xiàn)了擴(kuò)展應(yīng)用。關(guān)于第(1)點(diǎn)的驗(yàn)證:
          按1.1的方法驗(yàn)證:但是按照你說的第一點(diǎn)修改的時(shí)候:既RCP是一個(gè)獨(dú)立的應(yīng)用程序,我將它原來所利用到的插件(在同一個(gè)工程中定義的插件)制作成一個(gè)獨(dú)立插件,然后將此插件放到該RCP應(yīng)用程序的plugin目錄中,卻沒有實(shí)現(xiàn)擴(kuò)展。
          按1.2的方法驗(yàn)證:可以實(shí)現(xiàn)擴(kuò)展,同時(shí)還發(fā)現(xiàn)可以通過增加config.ini文件中的jar包引用實(shí)現(xiàn)擴(kuò)展。但是這種方式的擴(kuò)展對插件的加載是不受控制的,就是什么時(shí)候加載哪個(gè)插件我是不知道的。
          請問如何解決以上問題?謝謝!
          2006-06-06 21:09 | dew_chx

          # re: RCP最靈活的模塊組織方式  回復(fù)  更多評論   

          以上的1、2點(diǎn)實(shí)驗(yàn)成功。謝謝本文作者,繼續(xù)關(guān)注3、4的實(shí)現(xiàn)。
          不過還有一個(gè)疑問:就是我想在自己的RCP應(yīng)用程序中自定義一個(gè)透視圖擴(kuò)展點(diǎn),其他的透視圖插件實(shí)現(xiàn)該擴(kuò)展。如果能夠?qū)崿F(xiàn)的話,我就可以控制插件的加載過程。
          2006-06-13 10:28 | dew_chx

          # re: RCP最靈活的模塊組織方式  回復(fù)  更多評論   

          你的書不錯(cuò),我最近在學(xué)習(xí)!
          2006-12-13 10:26 | 服務(wù)器超時(shí)

          # re: RCP最靈活的模塊組織方式  回復(fù)  更多評論   

          博主,你好。
          我根據(jù)你的對第一點(diǎn)想法的做法也做了一個(gè)實(shí)驗(yàn),但沒成功。不知道是怎么回事,請教一下。
          你在博文中說:“創(chuàng)建一個(gè)很簡單的插件項(xiàng)目,此插件項(xiàng)目包含一個(gè)很簡單的透視圖。我要看看這個(gè)透視圖能否出現(xiàn)在RCP項(xiàng)目中的。很順便,當(dāng)我把插件項(xiàng)目導(dǎo)出后,安裝到RCP項(xiàng)目的plugin目錄,再運(yùn)行RCP項(xiàng)目,發(fā)現(xiàn)這個(gè)插件項(xiàng)目的透視圖出現(xiàn)在了RCP項(xiàng)目的透視圖列表中。”
          我按照你的做法,實(shí)驗(yàn)步驟如下(我用的是eclipse3.3 europa):
          1,新建一個(gè)插件工程,用的是hello word模板,此模板的功能為添加窗口添加了一個(gè)“sample menu”菜單,并有一個(gè)菜單項(xiàng)。
          2,新建了一個(gè)rcp 插件工程,用的是view模板。
          3,將1所建的插件工程導(dǎo)出為deployable plug-ins and fragments.得到一個(gè)plugins文件夾,里面為一個(gè)jar包。
          4,在rcp工程下,新建一個(gè)lib文件夾,將3所得的jar包拷貝到文件夾中。然后在plugin.xml-》runtime選項(xiàng)卡的classpath中加入此jar包。在buid選項(xiàng)卡中將lib,bin勾上。
          5,對rcp工程進(jìn)行以eclipse application 方式運(yùn)行,但結(jié)果去只有2的結(jié)果,1的結(jié)果沒有加上去。

          對你說的在開發(fā)的時(shí)候怎么加載我也做了實(shí)驗(yàn),實(shí)驗(yàn)成功了。
          請指點(diǎn)一二。不甚感激。
          2007-08-21 20:24 | yqouyang

          # re: RCP最靈活的模塊組織方式  回復(fù)  更多評論   

          @yqouyang
          @limeiyong
          @dew_chx

          這篇文章的更細(xì)節(jié)的內(nèi)容,在《Eclipse從入門到精通》的第二版的第33章有論述。
          2007-08-25 11:33 | 陳剛

          # re: RCP最靈活的模塊組織方式  回復(fù)  更多評論   

          @陳剛
          非常感謝。
          2007-08-25 18:38 | yqouyang

          # re: RCP最靈活的模塊組織方式[未登錄]  回復(fù)  更多評論   

          謝謝樓主,在你那書學(xué)習(xí)到很多,不過現(xiàn)在有個(gè)問題就是,菜單通過配置生成的,怎么在菜單生成里加入權(quán)限呢!
          2008-09-05 09:34 | 小剛

          # re: RCP最靈活的模塊組織方式[未登錄]  回復(fù)  更多評論   

          請問樓主,rcp里的權(quán)限應(yīng)怎么權(quán)限呢,通actionset里配置的菜單,有沒有辦法加入權(quán)限,讓有權(quán)限權(quán)限顯視,無權(quán)限的不讓顯視呢....謝謝
          2008-09-05 15:13 | 小剛
          主站蜘蛛池模板: 天等县| 安国市| 新郑市| 迁西县| 曲靖市| 二手房| 合阳县| 门源| 大洼县| 庄河市| 广德县| 南陵县| 资溪县| 江永县| 巴南区| 烟台市| 白山市| 陈巴尔虎旗| 苗栗市| 崇礼县| 礼泉县| 利辛县| 凉山| 肥城市| 华池县| 邵阳市| 两当县| 平遥县| 三台县| 辽中县| 增城市| 错那县| 乐亭县| 吉安市| 武汉市| 陕西省| 历史| 东丽区| 雷州市| 横山县| 洛扎县|