OSGi技術
原文:
http://www.osgi.org/osgi_technology/index.asp?section=2
簡介
OSGi規范為網絡化的服務定義了一個標準的,面向組件的計算環境.給網絡設備添加OSGi服務平臺,使之可以有能力在網絡的任何地點管理軟件組件的生命周期.組件可以在運行期間被安裝,更新或刪除,無需打斷設備的其他操作.軟件組件是可以動態查找和使用其他組件的庫或程序.軟件組件可以通過購買或自行開發.OSGi聯盟已經開發了許多標準的組件接口,諸如HTTP服務器,配置,日志管理,安全,用戶管理,xml等等這些常用功能.可以從不同的提供商那里獲得這些即插即用的兼容實現.
軟件組件體系正面臨一個日益凸現的問題:大量需要開發和維護的配置.而標準化的OSGi組件體系極大的簡化了這個配置過程.
框架
OSGi規范的核心組件是OSGi框架.他為應用提供了一個被稱為包捆(bundle)標準環境.OSGi包括這樣四層:
L0.執行環境
L1.模塊
L2.生命周期管理
L3.服務注冊表
此外還包含一個安全系統.
執行環境就是Java環境.J2SE,CDC,CLDC,MIDP等都是合法的執行環境.OSGi同時根據核心定義(foundation profile)和一個最簡版本制定了一個標準的執行環境.
模塊層定義了類裝載策略.OSGi框架是一個強大的類裝載模型.以Java為基礎但加入了模塊化的思想.在Java中,只有一個包含了所有的可用類和資源類路徑.OSGi的模塊層還為一個模塊提供了私有類以及模塊之間的連接.
生命周期層將包捆動態地安裝,啟動,停止,更新和卸載,包捆依賴于模塊層的類裝載但提供了一套API來在運行期管理所有的模塊.擴展的依賴機制用于確保正確模塊依賴關系.
服務注冊表為包捆提供一個互操作模型實現動態性.包捆可以通過傳統的類共享來互操作,但是類共享在當動態安裝和卸載代碼時會表現得很不穩定.服務注冊表提供了一個易于理解的模型來在包捆之間共享對象.大量的事件被定義于處理服務之間的交互.服務如同Java對象一樣,可以代表任何事物.許多服務和對象是一樣的,像http服務器,服務就是現實中的一個對象,比如一個附近的藍牙電話.
安全是建立在Java和Java2安全模型之上.語言級的限制避免了許多可能出現的隱患(The language by design limits many possible constructs). 比如,病毒常用的緩沖區溢出是不可能的.訪問修飾符可以限制代碼的可見性.OSGi通過"允許私有類"擴展了這一模型,在標準Java中不包含這種機制.Java2安全模型提供一個易理解的模型來檢查代碼對資源的訪問權限.OSGi加入了完全的對訪問請求動態管理.
標準服務
在框架之上,OSGi聯盟制定了許多服務.服務由一個Java接口定義.包捆可以實現這個接口并把實現注冊到服務注冊表.服務的用戶可以從服務注冊表中找到他,或者對服務的加入或取消做出反應.
以下各部分給出OSGi release 3服務的一個簡單介紹.更多資料可以找OSGi服務平臺release 3的書籍或PDF下載.要注意每個服務都是先被抽象地定義然后由不同廠商獨立實現.
框架服務
OSGi框架提供一個權限管理服務(permission admin service ),一個包管理服務(package admin servie),和一個啟動級別服務(start level service).這些服務是可選的 and direct the orperation of the Framework(不知道怎么譯).
• 訪問管理(Permission Admin) - 當前或將來的包捆的訪問權限可以通過這個服務來操作.
• 包管理(Package Admin) - 包捆之間共享類和資源.包捆的更新可能需要系統重新更新包捆之間的依賴關系.該服務提供系統實際包的共享狀態并刷新共享的包.如,取消或者重新計算依賴關系.
• 啟動級別(Start Level) - 啟動級別是一個包捆的集合,這個集合中的包捆必須一同運行或者要在其他服務啟動之前初始化.啟動級別服務設置當前的啟動級別,制定某個包捆的啟動級別,查看當前設置.
系統服務
系統服務提供橫向功能(horizontal function),這些在每個真實的系統中都是存在的.比較常見的有,日志服務(Log Service),配置管理服務(Configuration Admin Service),設備訪問服務(Device Access Service),用戶管理服務(User Admin SErvice),IO連接服務(IO Connector Service)和參數選擇服務(Preferences Service).
• 日志服務 - 信息,警告,調試信息的紀錄,或者處理錯誤.他接收日志紀錄信息然后分配他們給其他訂閱了這些信息的包捆
• 配置管理服務 - 該服務提供一個易伸縮的動態模型來設置和獲得配置信息
• 設備訪問服務 - 設備訪問是配置一個驅動器到一個新設備并自動下載實現該驅動器的包捆的機制
• 用戶管理服務 - 該服務使用一個用戶信息數據庫(私有和公有)來鑒權和授權.
• IO連接服務 - 實現了CDC/CLDC的javax.microedition.io包作為一個服務.該服務允許包捆提供新的,可選協議方案.
• 參數選擇服務 - 提供屬性數據庫的訪問.和Windows的注冊表或Java的Preferences類.
協議服務
OSGi聯盟定義了以下外部協議服務:
• Http服務 - 一個servlet容器.包捆可以提供servlet.OSGi的動態更新機制服務平臺使得Http服務變得非常誘人,加入新的servlet而不需要重啟.
• UPnp服務 - 通用即插即用(Universal Plug and Play)是一個正在興起的用于用戶電子設備的標準,OSGi UPnP 將一個UPnP網絡設備映射到服務注冊表.或者,將一個服務映射到UPnP網絡(該服務在release 3中被推薦).
• Jini服務 - Jini是一個網絡協議,用于在網絡上發現Jini服務并下載執行.(該服務在release 3中被推薦).
其他服務
• 關聯管理服務(Wire Admin Service) - 通常包捆會自己建立查找服務的規則.但是在很多情況下,這是一個發布時需要考慮的問題.因此關聯管理服務會通過一個配置文件把不同的服務連接起來.使用消費者和生產者的概念來達到對象之間的互操作.
• XML解析服務 - 允許一個包捆定位一個解析器并使用相應的屬性.與JAXP兼容.
結論
OSGi規范的適用范圍很廣.因為它通過一個很簡單的層使得同一個虛擬機的Java組件高效率的交互.通過一個擴展的安全模型來使組件運行在一個安全的環境中.通過恰當的訪問限制,組件可以被重用和組合.OSGi 框架還提供了一個擴展的部署機制來讓這種交互可行,安全.
各個領域構建在OSGi之上的中間件的大量出現,這就給OSGi軟件組件創造了一個很大的軟件市場.The rigid definition of the OSGi Service Platform enables components that can run on a variety of devices, from very small to very big.
采用OSGi規范可以降低軟件開發成本,同時提供新的商業機會.
進一步閱讀
OSGi Service Platform, Release 3下載:
http://www.osgi.org/osgi_technology/download_specs2.asp?section=2
或買書:
https://secure.inventures.com/osgi/sales/R3Book_order_form.asp
OSGi聯盟寫的技術白皮書:
http://www.osgi.org/documents/osgi_technology/osgi-sp-overview.pdf
更深入介紹OSGi的白板白皮書(whiteboard whitepaper):
http://www.osgi.org/documents/osgi_technology/whiteboard.pdf
譯者:derekzhangv.at.hotmail.com
歡迎指正,討論