OSGI
基本簡介
OSGi服務平台提供在多種網絡設備上無需重啟的動態改變構造的功能。為了最小化耦合度和促使這些耦合度可管理,OSGi技術提供一種面向服務的架構,它能使這些組件動態地發現對方。OSGi聯盟已經開發了為例如象HTTP服務器、配置、日誌、安全、用戶管理、XML等很多公共功能標準組件接口。這些組件的兼容性插件實現可以從進行了不同優化和使用代價的不同計算機服務提供商得到。然而,服務接口能夠基於專有權基礎上開發。
因為OSGi技術為集成提供了預建立和預測試的組件子系統,所以OSGi技術使你從改善產品上市時間和降低開發成本上獲益。因為這些組件能夠動態發佈到設備上,所以OSGi技術也能降低維護成本和擁有獨一無二的新的配件市場機會。
框架結構
OSGi規範的核心組件是OSGi框架。這個框架為應用程式(被叫做組件(bundle))提供了一個標準環境。整個框架可以劃分為一些層次:
L0:運行環境L1:模塊L2:生命周期管理L3:服務註冊
還有一個無處不在的安全系統滲透到所有層。
L0層執行環境是Java環境的規範。Java2配置和子規範,象J2SE,CDC,CLDC,MIDP等等,都是有效的執行環境。OSGi平台已經標準化了一個執行環境,它是基於基礎輪廓和在一個執行環境上確定了最小需求的一個小一些的變種,該執行環境對OSGi組件是有用的。
L1模塊層定義類的裝載策略。OSGi框架是一個強大的具有嚴格定義的類裝載模型。它基於Java之上,但是增加了模塊化。在Java中,正常情況下有一個包含所有類和資源的類路徑。OSGi模塊層為一個模塊增加了私有類同時有可控模塊間連結。模塊曾同安全架構完全集成,可以選擇部署到部署封閉系統,防禦系統,或者由廠商決定的完全由用戶管理的系統。
L2生命周期層增加了能夠被動態安裝、開啟、關閉、更新和卸載的bundles。這些bundles依賴于于具有類裝載功能的模塊層,但是增加了在運行時管理這些模塊的API。生命周期層引入了正常情況下不屬於一個應用程式的動態性。擴展依賴機制用於確保環境的操作正確。生命周期操作在安全架構保護之下,使其不受到病毒的攻擊。
L3層增加了服務註冊。服務註冊提供了一個面向bundles的考慮到動態性的協作模型。bundles能通過傳統的類共享進行協作,但是類共享同動態安裝和卸載代碼不兼容。服務註冊提供了一個在bundles間分享對象的完整模型。定義了大量的事件來處理服務的註冊和刪除。這些服務僅僅是能代表任何事物的Java對象。很多服務類似服務器對象,例如HTTP服務器,而另一些服務表示的是一個真實世界的對象,例如附近的一個藍牙手機。這個服務模塊提供了完整安全保障。該服務安全模塊使用了一個很聰明的方式來保障bundles之間通信安全。
安全協議
安全機制是建立在Java和Java2安全模型基礎之上。Java語言的設計對很多結構進行了限制。例如病毒中經常遇到的緩存溢出是不可能發生的。Java語言中的訪問控制符限制了代碼可見性。
OSGi平台通過使用私有類(在Java中不能用標準方式使用的機制)擴展了該模型。Java2安全模型提供了一個完整模塊檢查代碼對於資源的可訪問性。OSGi增加了完全動態的權限管理,簡化了操作者和系統管理員的工作。
OSGi聯盟已經定義了很多協議服務,這些服務將外部協議映射為OSGi服務。HTTP服務(HttpService)該HTTP服務是servlet運行器。bundles提供servlets,這些服務端小程序基於HTTP協議成為可用的。OSGi服務平台的動態更新功能使HTTP服務成為一個非常具有吸引力的Web服務器,它能伴隨着新的servlet被更新,如果需要可以遠程更新而無需重啟。
UPnP服務(UPnPService)通用即插即用(UPnP)是一個正在形成中的消費電子標準。OSGi中的UPnP服務在一個UPnP網絡上將設備映射到服務註冊中。同樣,它也可以將OSGi服務映射到UPnP網絡。這是發佈版本3中的推薦規範。
DMT管理(DMTAdmin)開放移動聯盟(OMA)基於設備管理樹為移動設備管理提供了一個完整規定。DMT管理服務定義該樹如何被訪問和/或者在OSGi服務平台中被擴充。
標準服務
在該框架之上,OSGi聯盟定義了很多服務。這些服務通過一個Java接口指定。bundles能夠實現這個接口,並在註冊服務層註冊該服務。服務的客戶端在註冊庫中找到它,或者當它出現或者消失時做出響應。這個同SOA架構使用Web服務進行發佈的方式相似。
兩者主要不同是Web服務總是需要傳輸層,這個使它比採用直接方法調用的OSGi服務慢幾千倍。同時,OSGi組件能夠對這些服務的出現和消失做出響應。更多的信息可以從OSGi服務平台發行版本4手冊或者PDF下載中找到。需要注意的是每一種服務都是抽象定義的,與不同計算機服務商的實現相獨立。
框架服務
OSGi框架提供一個權限管理服務,一個包管理服務和一個開始級別服務。這些服務是一個可選部分,指示框架的操作。框架服務如下:
權限管理(PermissionAdmin)目前或者將來的bundles的權限通過這種服務進行維護。一旦設置了它們,權限服務立即激活。
包管理(PackageAdmin)bundles同類和資源分享包。bundles的更新可能需要系統重新計算這些依賴。這個包管理服務提供關於系統的實際包分享狀態和能夠刷新已經共享的包。也就是,取消依賴和重新計算依賴。
啟動級別(StartLevel)啟動級別是一個bundles集合,它們應該同時運行或者應該在其它已經啟動以前被初始化。啟動級別服務設置當前的啟動級別,為每個bundle排一個啟動級別和審核當前的設置。
URL處理者(URLHandler)Java環境為URL處理者支持一個提供者模型。然而,這是一個單件,不可能在一個象OSGi可能有很多提供者的協作環境上使用它。此服務規範使任何組件提供額外的URL處理者。
系統服務
系統服務提供水平功能,它在每個系統是必須的。日誌服務,配置管理服務,設備訪問服務,用戶管理服務,IO連接器服務和參數服務都是系統服務的一個方面。
日誌服務(LogService)日誌信息,警告,調試或者錯誤信息通過日誌服務來處理的。它接受日誌實體並分派這些實體到訂閱了這個信息的其他bundles。
配置管理服務(ConfigurationAdminService)該服務提供一個設置和獲取配置信息的靈活、動態模型。
設備訪問服務(DeviceAccessService)設備訪問是OSGi為一個新的設備匹配一個驅動,並自動下載一個實現該驅動的bundles的機制。這個可用作即插即用方案。
用戶管理服務(UserAdminService)該服務使用一個用於授權和驗證目的的用戶信息數據庫。
IO連接器服務(IOConnectorService)該IO連接器服務實現了CDC/CLDCjavax.microedition.io包,並作為一個服務。該服務允許bundles提供新的可交換協議模式。
參數服務(PreferencesService)該服務提供了參數層級數據庫的可訪問性,同Windows註冊表或者Java參數類相似。
組件運行時服務(ComponentRuntime)服務的動態特性--它們能夠在任何時間來去自由--使編寫軟件變得更難。組建運行時規範通過提供一個基於依賴聲明的XML文件來簡化處理這些動態方面。
部署管理服務(DeploymentAdmin)OSGi的主要部署格式是bundle,它是一個JAR/ZIP文件。部署管理提供第二種可選格式:部署包。部署包能夠將bundles和相應資源聯接成可被安裝和卸載的單個交付。完整的資源處理器模型允許用戶代碼擴充資源類型。
事件管理服務(EventAdmin)很多OSGi事件有特定的類型化的接口,使其很難接收和過濾事件。事件服務提供一個泛化的基於主題的事件機制。這個規範包括為所有已存框架和服務事件的映射。
應用程式管理服務(ApplicationAdmin)OSGibundle模型不同於依賴於啟動和關閉形式的典型的桌面或者流動電話應用程式模型。該應用程式管理服務提供了傳統應用程式模型和它所要求的管理設施。