譯自《OSGi R4規范》
Eclipse從3.0版本開始采用基于OSGi的插件體系結構。
××××××××××××××××××××××××
先簡要介紹下OSGi框架
OSGi框架是OSGi服務平臺規范的核心部分。該框架提供了一個大眾化,安全,可管理的平臺,可以支持可擴展可下載應用插件的部署,我們稱這些應用插件為Bundle。
與OSGi兼容的設備可以下載和安裝OSGi bundles,在不需要的時候還可以在運行時卸載它們。OSGi框架使用一種動態的,可協調的方式管理OSGi環境中bundles的安裝和更新,為了完成這個任務,框架會管理bundles、services的依賴細節。
框架使得Bundle的開發者能夠充分利用java平臺的跨平臺性和動態加載能力,這樣,開發部署到大規模的嵌入式設備的服務將更加容易。
OSGi框架的功能模塊主要劃分為以下幾個層面:
* 安全管理層面
* 模塊層面
* 生命周期層面
* 服務層面
* 部署的服務
安全管理層面基于Java 2的安全機制,但另外添加了一些安全方面的限制,還擴充了Java安全方面的一些管理機制。
模塊層面定義了一個基于Java的模塊化模型,它更正了Java部署模型的一些缺陷,它在bundles之間的共享包(package)和隱藏包方面定義了嚴格的規則。模塊層面可以在沒有生命周期層面和服務層面的情況下使用,生命周期層面提供了一個管理模塊層面中bundles的類庫,而服務層面則提供一個bundles之間交互的模型。
生命周期層面提供了一個管理bundles生命周期的API。這個API定義了bundles的運行時模型,它定義了bundles是如何啟動,停止,安裝,更新和卸載的。而且它還提供了一個事件API,使得一個行使管理功能的Bundle能夠控制服務層面的行為。生命周期層面依賴于模塊層面,它不依賴于安全層面。
服務層面為Java Bundle開發者提供了動態,準確和一致的編程模型,通過解耦服務規范及其實現來簡化服務Bundle的開發和部署。這個模型允許Bundle開發者只綁定到接口規范。如果要為了特定需要進行優化,或選擇不同的廠商定制,就可以在運行時選擇相應的實現來替換。
一致的編程模型使得開發者可以協調各個方面的實現問題 -- 這是很重要的,因為框架有可能要運行在不同的設備平臺上,這些平臺有著不同的硬件特性,這會影響到實現的諸多方面。但一致的接口可以保證各個組件能夠重新被組裝起來,構建出穩固的系統。
OSGi框架中,bundles可以在運行時通過服務注冊表選擇可用的實現。Bundles可以注冊新的服務,接受服務的狀態信息,查找已存在的服務來適應設備的當前能力。框架的這些機制使得已經部署的bundles能夠繼續更新和擴展:新的bundles可以被添加以擴充功能,運行中的bundles也可以在不重啟系統的情況下被修改和更新。
版權所有 羅明