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