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