基于OSGi搭建動態化的系統

          搭建動態化的系統是作為java開發人員一直就非常追求的目標,一個系統能夠動態化就意味著:
          ★ 添加新功能時不需要重啟系統;
          ★ 修改已存在的功能時不需要重啟系統;
          ★ 刪除一些不需要的功能時不需要重啟系統;
          ★ 修改系統中的配置時可以不需要重啟系統即刻生效;
          ★ 系統的業務行為可動態的改變。
          也許習慣了傳統java開發方式的人而言,沒有這些動態化也沒什么,但不可否認,這些動態化的特征還是非常吸引人的,尤其是如果能很容易就獲得這些好處,那么自然就不會錯過這些好處了,基于OSGi可以很容易的讓我們獲取到這些好處,對于上面所描述的系統的動態化的特征可以歸納為這么三點:
          ★ 模塊的動態化:新增、修改、刪除以及擴展;
          ★ 配置的動態化;
          ★?行為的動態化。
          下面就來看看基于OSGi是怎么樣來構成這樣的動態化的系統的。
          ★ 模塊的動態化:新增、修改、刪除以及擴展;
          ???? ◆ 新增
          ????????? 對于模塊的新增,在OSGi可以通過在控制臺中使用install命令去安裝,或者調用BundleContext的installBundle方法去安裝新的模塊;
          ???? ◆ 修改
          ????????? 當修改了模塊后,只需在控制臺中使用update命令去更新模塊,或者通過調用BundleContext.getBundle(Bundle的id).update();
          ???? ◆ 刪除
          ????????? 當需要刪除不需要了的模塊時,只需在控制臺中使用uninstall命令去刪除,或者通過調用BundleContext.getBundle(Bundle的id).uninstall();
          ?????◆ 擴展
          ????????? 對于模塊的擴展,可以使用OSGi所支持的調用多服務的方式或者使用Equinox提供的擴展點的方式來實現。
          ★?配置的動態化
          ???? 對于配置的動態化方面,使用OSGi的Configuration Admin Service(簡稱CM)可以很容易的實現,使用CM使得系統中的配置可以采用統一的形式去管理、動態的通知變化以及使用。
          ★?行為的動態化
          ?????系統在運行中要根據業務的需求選擇相應的服務是經常會碰到的需求,例如一份文件在某種情況下可能需要進行存儲,而在另一種情況下可能是需要進行提取信息并存儲為其他文件,由于OSGi支持服務選擇時的過濾(如context.getAllServiceReferences(服務接口完整類名,"(key=db)")),使得系統可以在運行時根據需求來選擇或配置使用相應的服務,而OSGi同時又支持了服務的動態化的管理,當服務可用時會自動的通知,當其不可用時同樣會自動的通知,這就保證了開發人員在使用服務時可做出相應的處理。
          如果覺得你所設計的系統需要這些動態化的特征的話,那么建議使用下OSGi(推薦的OSGi框架:Equinox)試試,或者可以參考下OSGi的實現方法自己去實現所需要的動態化的特征。

          posted on 2007-02-18 17:59 BlueDavy 閱讀(3161) 評論(2)  編輯  收藏 所屬分類: OSGi、SOA、SCA

          評論

          # re: 基于OSGi搭建動態化的系統 2008-03-05 15:37 kuanglong

          請教一個問題,在跟著《OSGI進階》實做項目(簡單方式下的留言板)時發現,直接從Eclipse3.3.1導入BlueDavy提供的源碼,啟動后服務不完整(同dist提供的執行結果向比較),凡是和hibernatebundle有關的服務都無法啟動。
          1-hsql的data目錄應放在哪個地方(在EclipseIDE下啟動OSGI)?
          2-ServiceReference[] serviceRefs = bc.getAllServiceReferences(
          WebCommand.class.getName(), "(command=" + action + ")");始終為空是否和這個有關?  回復  更多評論   

          # re: 基于OSGi搭建動態化的系統 2008-03-06 11:41 kuanglong

          用排除法發現在sessionComponent.xml中只要一注入以下log
          <reference name="LogService"
          interface="org.osgi.service.log.LogService" bind="setLog"
          unbind="unsetLog" policy="dynamic" />
          則ds失敗,引發其他依賴他的服務也隨之失敗,但從交互界面上無法感知。很奇怪當我強行打包后放在dist的運行環境又可用,對比發現應該是eclipse3.3.1沒有附log的實現包,靠,搞死個人!!!  回復  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          統計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永福县| 合川市| 延安市| 米林县| 盖州市| 神农架林区| 南投市| 大丰市| 沭阳县| 永清县| 泽普县| 广汉市| 烟台市| 如东县| 紫阳县| 黄山市| 收藏| 梅州市| 南和县| 万盛区| 仪征市| 息烽县| 武川县| 汉川市| 高碑店市| 丹寨县| 阿拉尔市| 富顺县| 门源| 定襄县| 濮阳市| 甘孜县| 峨眉山市| 镇安县| 奈曼旗| 饶阳县| 类乌齐县| 城口县| 邓州市| 阜新市| 铜川市|