基於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的實現方法自己去實現所需要的動態化的特徵。