子在川上曰

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

          RCP最靈活的模塊組織方式

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

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

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

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

          這個想法中,RCP部份,僅僅成為一個空殼,提供更插件的插入機制。這個方案特別適合那種想把原有插件項目,改裝成RCP而發布的項目,基本上原有插件無需做改動。

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


          為了驗證第(1)點,我做了這個實驗:

          創建一個很簡單的插件項目,此插件項目包含一個很簡單的透視圖。我要看看這個透視圖能否出現在RCP項目中的。很順便,當我把插件項目導出后,安裝到RCP項目的plugin目錄,再運行RCP項目,發現這個插件項目的透視圖出現在了RCP項目的透視圖列表中。

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


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

          關于第(3)點,我沒有做實驗,我的想法是:把jar包封裝成插件(可參考eclipse對junit的封裝),從而將項目對JAR包的依賴,轉變成對插件的依賴。

          關于第(4)點,我沒有做實驗,我的想法是:通過自定義RCP項目的擴展點來實現。


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


          總結:

          這種方式雖然靈活,但也是有代價的---編程和項目管理更復雜了。

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

          評論

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

          我買了你的書,一個很嚴重的問題,《Eclipse從入門到精通》上的網址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 | 農民

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

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

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

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

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

          以上的1、2點實驗成功。謝謝本文作者,繼續關注3、4的實現。
          不過還有一個疑問:就是我想在自己的RCP應用程序中自定義一個透視圖擴展點,其他的透視圖插件實現該擴展。如果能夠實現的話,我就可以控制插件的加載過程。
          2006-06-13 10:28 | dew_chx

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

          你的書不錯,我最近在學習!
          2006-12-13 10:26 | 服務器超時

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

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

          對你說的在開發的時候怎么加載我也做了實驗,實驗成功了。
          請指點一二。不甚感激。
          2007-08-21 20:24 | yqouyang

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

          @yqouyang
          @limeiyong
          @dew_chx

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

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

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

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

          謝謝樓主,在你那書學習到很多,不過現在有個問題就是,菜單通過配置生成的,怎么在菜單生成里加入權限呢!
          2008-09-05 09:34 | 小剛

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

          請問樓主,rcp里的權限應怎么權限呢,通actionset里配置的菜單,有沒有辦法加入權限,讓有權限權限顯視,無權限的不讓顯視呢....謝謝
          2008-09-05 15:13 | 小剛
          主站蜘蛛池模板: 枣庄市| 伊宁市| 阳高县| 常德市| 湘潭县| 方正县| 静宁县| 梅州市| 阿拉善盟| 读书| 水城县| 三穗县| 和林格尔县| 竹北市| 隆化县| 泗阳县| 湖州市| 泰来县| 静宁县| 惠水县| 应城市| 同江市| 颍上县| 华亭县| 利川市| 淄博市| 额敏县| 随州市| 台北县| 嘉鱼县| 富蕴县| 敦化市| 灵武市| 平原县| 哈密市| 巴东县| 临武县| 洛隆县| 寻甸| 额敏县| 读书|