使用Blueprint Container規範構建OSGi應用程式

來源:互聯網
上載者:User

簡介

OSGi 架構為開發模組化的Live App程式提供了良好的機制,它最近正變得十分流行。最新的 OSGi Service Platform Release 4 V4.2 規範包括了一個名為 Blueprint Container 的規範。

Spring 動態模組

如果熟悉 Spring 架構的話,您將注意到 Spring 和 Blueprint Container 規範之間有許多相似點。 Blueprint 規範的基礎恰好是 Spring Dynamic Modules 項目。

Blueprint Container 規範為 OSGi 定義了一個 依賴性注入(dependency injection)架構。它的目 的是處理 OSGi 的動態特性,即服務可以在任何時間變得可用和不可用。該規範的另一個意圖是處理普通 舊 Java 對象(POJO),這樣相同的對象就可以用於 OSGi 架構的內部和外部。定義並描述應用程式各個 組件的 Blueprint XML 檔案對 Blueprint 編程模型十分重要。規範描述了組件如何被執行個體化,以及如何 相互串連在一起形成一個可以啟動並執行應用程式。

Blueprint Container 規範使用了一個擴充器(extender)模式,藉助這種模式,擴充器包監視架構 中的包的狀態,並根據這些包的狀態為它們執行操作。Blueprint 擴充器包等待包被啟用,然後檢查它們 是否是 Blueprint 包。如果一個包包含一個或多個 Blueprint XML 檔案,那麼它就被認為是 Blueprint 包。這些 XML 檔案位於一個 OSGI-INF/blueprint/ 目錄下的某個固定位置,或者在 Bundle-Blueprint 清單頭部中顯式指定。

一旦擴充器確定某個包是 Blueprint 包後,它將為這個包建立一個 Blueprint Container。這個 Blueprint Container 負責完成以下操作:

解析 Blueprint XML 檔案

執行個體化

將元件連線在一起

在初始化期間,Blueprint Container 確保強制服務引用得到滿足,將所有服務註冊到服務註冊表中 ,然後建立初始的組件執行個體。Blueprint 擴充器包還在包停止後為該包銷毀 Blueprint Container。

本文將關注 Blueprint XML。通過若干樣本展示組件 XML 定義及其使用。

Blueprint XML

Blueprint XML 檔案被標識為頂級 blueprint 元素,如清單 1 所示。

清單 1. Blueprint XML 檔案片段

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns=”http://www.osgi.org/xmlns/blueprint/v1.0.0”>
   ...
</blueprint>

Blueprint XML 檔案包含各種組件管理器的定義。Blueprint Container 規範定義了四種主要的組件 管理器:一個 bean manager、一個 service manager 和兩個 service reference managers。每種管理 器都負責建立和管理所建立組件的生命週期。管理器提供了一個組件執行個體。每個管理器都擁有相應的 XML 元素,用於描述管理器屬性。管理器可以是頂級管理器,或者內聯在其他管理器定義內。管理器還具有一 些通用的屬性。

id 定義管理器的 ID。id 屬性是可選屬性。如果沒有指定的話,將自動產生一個唯一 ID 並分配給頂 級管理器。內聯管理器被認為是匿名的,因此不允許設定 id 屬性。管理器 ID 在 Blueprint Container 內對於所有頂級管理器必須是唯一的。管理器使用 ID 彼此引用。例如,在注入期間,管理器將要求被引 用的管理器提供對象,該對象將被注入到管理器正在建立的組件中。activation 這個可選屬性為管理器 定義啟用模式。可支援兩種啟用模式:

eager,其中管理器在 Blueprint Container 初始化期間啟用。

lazy,其中管理器按需要啟用。

預設情況下,啟用 eager 啟用模式。然而,通過對 blueprint 元素設定 default-activation 屬性 ,可以為 Blueprint XML 檔案內的所有管理器修改預設啟用模式。當要求管理器提供其第一個組件執行個體 時,管理器將被啟用。當 Blueprint Container 被銷毀時,管理器將被解除啟用。每個管理器都擁有自 己的啟用和解除啟用步驟。dependsOn這個可選屬性指定了一個管理器 ID 列表。所列出的管理器將在其 他管理器之前啟用。管理器可以具有顯式或隱式的依賴關係。dependsOn 屬性定義了顯式的依賴關係。隱 式依賴關係在管理器定義中通過對其他管理器的引用定義。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.