溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

OSGi 4.2的新特性有什么

發(fā)布時(shí)間:2022-01-11 13:40:40 來源:億速云 閱讀:115 作者:柒染 欄目:編程語言

本篇文章為大家展示了OSGi 4.2的新特性有什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

一些 OSGi 實(shí)現(xiàn),例如 Equinox 3.5 與 Felix 2.0 早已針對(duì) OSGi 4.2 規(guī)范做了一些兼容實(shí)現(xiàn),但當(dāng)時(shí) OSGi 4.2 還沒有發(fā)布,當(dāng)然也不能說其實(shí)現(xiàn)了 OSGi 4.2 規(guī)范。現(xiàn)在規(guī)范正式發(fā)布了,各實(shí)現(xiàn)團(tuán)隊(duì)還需要進(jìn)行一些調(diào)整已完全滿足規(guī)范要求。

新的規(guī)范里有哪些特性呢?

框架啟動(dòng)( Framework launching)

以前雖然可以在 Java 應(yīng)用中(例如 Equinox 的 servlet 橋接 )啟動(dòng)嵌入的 OSGi 引擎,但針對(duì)特定引擎都有特定的啟動(dòng)方式。雖然有一些包裝器(例如 Pax Runner )使得引擎啟動(dòng)相對(duì)容易,但還是必須熟悉特定引擎的知識(shí)。在現(xiàn)在的規(guī)范中,定義了透明的啟動(dòng)機(jī)制使得不需要知道 OSGi 實(shí)現(xiàn)引擎就可以將其啟動(dòng)。這樣一來,不管是在 Equinox 還是 Felix 下測(cè)試都只用替換啟動(dòng)類路徑下的相應(yīng)引擎 Jar 包就可以了。

遠(yuǎn)程服務(wù)(Remote Service)

以前也許你曾經(jīng)聽說過分布式 OSGi(Distributed OSGi)以及 RFC 113,而 OSGi 4.2 中的遠(yuǎn)程服務(wù)就是類似技術(shù)的新名字,它將各個(gè) OSGi 虛擬機(jī)(OSGi VMs)連接到了一起。遠(yuǎn)程服務(wù)采用了服務(wù) 的概念(熱拔插 OSGi 應(yīng)用的精髓),提供了導(dǎo)出服務(wù)到遠(yuǎn)程消費(fèi)端與在本地消費(fèi)遠(yuǎn)程服務(wù)的機(jī)制。與其他分布式方法(例如 RMI)不同的是,遠(yuǎn)程服務(wù)不需要實(shí)現(xiàn)特殊接口,也不用拋出 checked exception 。當(dāng)然,發(fā)生異常的時(shí)候遠(yuǎn)程服務(wù)不會(huì)裝作工作正常,可以把異常看作是一種在任何情況下都因該進(jìn)入并作用于 OSGi 環(huán)境的服務(wù)。

籌備服務(wù)(Blueprint Service)

OSGi 4.2 中的籌備服務(wù)的概念非常類似于控制反轉(zhuǎn) / 依賴注射。它允許客戶端從外部配置文件指定連接的服務(wù),此服務(wù)將被動(dòng)態(tài)地連接到客戶端。向聲明式服務(wù)一樣,你可以對(duì)服務(wù)類型上做些限制,例如是否為強(qiáng)制(mandatory);但與聲明式服務(wù)也有些不同,當(dāng)所需服務(wù)缺失時(shí)籌備服務(wù)可以提供一個(gè)默認(rèn)的服務(wù)代理實(shí)現(xiàn),當(dāng)客戶代碼嘗試調(diào)用此服務(wù)時(shí),客戶端將被服務(wù)代理阻塞,直到真正的服務(wù)連接成功。綜上,使用籌備服務(wù)的特性可以避免與 OSGi 產(chǎn)生耦合,這使得應(yīng)用既可以在 OSGi 環(huán)境內(nèi)運(yùn)行,也可以脫離 OSGi 環(huán)境運(yùn)行。

Bundle 追蹤器(Bundle Tracker)

OSGi 早已有了服務(wù)追蹤器,用于監(jiān)控服務(wù)的來龍去脈;而 Bundle 追蹤器是追蹤 bundles 的一個(gè)擴(kuò)展。在以前在服務(wù)中就可以使用 BundleListener 來監(jiān)聽 bundle 動(dòng)態(tài)進(jìn)出,而如今的 BundleTracker 與 ServiceListener 有著同等的可用性。其可被用于執(zhí)行動(dòng)態(tài)注冊(cè)當(dāng)籌備服務(wù)或是聲明式服務(wù)正在讀?。ㄅc處理)元數(shù)據(jù)。例如,一個(gè)基于 Web 的引擎就可以自動(dòng)地掃描出新安裝的 bundles,并通過 HttpService 自動(dòng)注冊(cè) servlets。

服務(wù)鉤子(Service Hooks)

在判斷存在什么服務(wù)時(shí),是可以對(duì)服務(wù)之間的事件進(jìn)行攔截、過濾的。例如在實(shí)現(xiàn)一個(gè)基于角色的權(quán)限模型或是針對(duì)不同產(chǎn)品級(jí)禁用 / 可用對(duì)應(yīng)功能集。另一個(gè)方法是提供代理服務(wù)(或是負(fù)載均衡)從而攔截其他 bundle 的事件將其隱藏,以備在后續(xù)階段代理給其他機(jī)制(例如分布式服務(wù))。另外,監(jiān)聽鉤子也可以在服務(wù)沒有被注冊(cè)前按需將服務(wù)啟動(dòng)。

條件化的權(quán)限(Conditional permissions)

OSGi 4.2 在有關(guān)權(quán)限方面的升級(jí)包含了拒絕訪問(DENY access)與允許訪問。在認(rèn)證簽名后,可以為 bundles 子集顯示地指定操作權(quán)限??梢枣i定未簽名的 bundles 的安裝,有助于構(gòu)建一個(gè)安全的 OSGi 平臺(tái)。

OSGi 4.2 規(guī)范相對(duì)于 4.1 版還有很多變化,例如 OSGi bundles 有自己的 MIME 類型 (application/vnd.osgi.bundle ),可以為某個(gè) bundle 指定圖標(biāo)以及許可證,對(duì)于聲明式服務(wù)可以簡(jiǎn)化其權(quán)限集合設(shè)置(使用包內(nèi)友好替代了 protected)。DS schema 也允許其他對(duì)特定服務(wù)信息有助的 XML 元素。另外,提供了一個(gè)機(jī)制使得應(yīng)用管理員可以在應(yīng)用結(jié)束是獲取該應(yīng)用的返回值。

Equinox 3.5 已經(jīng)提供了一些類似的功能,Apache Felix 對(duì)類似功能在這個(gè)月初也通過了測(cè)試(早于 4.2 規(guī)范發(fā)布)。

上述內(nèi)容就是OSGi 4.2的新特性有什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI