產品延伸

您可以撰寫產品延伸來展開 Liberty 的功能。

您可以撰寫您自己的 Liberty 特性,將它們安裝在現有的 Liberty 伺服器中,或將它們包裝起來,以便交付給您的使用者。

Liberty 提供了各種「系統程式設計介面 (SPI)」,供您用來延伸執行時期環境;您也可以使用更進階的特性,例如,以程式設計的方式,從您的 Java™ 應用程式操作 Liberty 伺服器。

產品延伸

產品延伸是一個在磁碟上的目錄,結構類似於 Liberty 安裝目錄 ${wlp.install.dir}。它是透過 ${wlp.install.dir}/etc/extensions 目錄中稱為 extension-name.properties 的檔案,而定義到 Liberty 安裝架構中。 之後,會利用產品延伸目錄的內容來延伸 Liberty。多重產品延伸可以安裝在一起,但它們必須有唯一名稱;這是透過內容檔命名來強制施行。 預設產品延伸位置 ${wlp.user.dir}/extension 不需要內容檔;這個位置下的內容會自動偵測,執行時期會將它識別為 "usr" 產品延伸。

產品延伸通常包含一或多個 Liberty 特性,但任何內容都有可能延伸 Liberty 環境,例如,Script 或資源。

最佳作法: 請將您的產品延伸安裝到更新 Liberty 環境時不會受影響的目錄中。如需相關資訊,請參閱套用服務或升級可能會修改什麼?
圖 1.
圖表顯示含有 "Supergui" 和 "App Services" 這兩個特性的 Liberty 安裝
產品延伸檔有下列內容:
com.ibm.websphere.productId=your_product_id
com.ibm.websphere.productInstall=absolute_or_relative_file_path
註: 當使用相對檔案路徑時,它必須是 ${wlp.install.dir} 值的同層級。
例如:
com.ibm.websphere.productId=org.acme.supergui
com.ibm.websphere.productInstall=supergui/wlp-ext

特性

Liberty 特性由一個定義檔(特性資訊清單)及一個 OSGi 軟體組集合組成,這些 OSGi 軟體組提供對應於 Liberty 執行時期環境中之特定功能的類別和服務。

利用 Liberty 特性來取代一般應用程式的實務

在若干實務中,相對於將函數當作一個應用程式來實作,將它當作一項 Liberty 特性來實作會比較適當。 下列清單說明使用特性的一些好處:
  • 特性是透過特性管理程式配置來控制,因此,會將它們和使用者應用程式分開管理。
  • 特性碼可以存取 Liberty SPI,從而能夠加深與執行時期環境的整合。
  • 特性可以從 server.xml 檔接收使用者指定的配置,並將它們的配置設定顯現在開發工具中,工具不需進行任何改變。
  • 特性很容易彼此顯現類別和服務,以及向使用者應用程式顯現類別和服務。
  • 特性可以是極輕量型,不具備任何應用程式儲存器相依關係。
  • 特性可用來擴增特定程式設計模型。 比方說,「使用者特性」可以新增對於自訂藍圖名稱空間處理常式的支援,或新增藍圖註釋到 OSGi 應用程式設計模型中。
註: 特性通常不具備直接移往其他應用程式伺服器的可攜性;如果可攜性很重要,請使用符合規格的應用程式。

在伺服器中使用特性

如果要在 Liberty 伺服器中使用使用者撰寫的特性,您必須將它安裝在產品延伸目錄中。這可能是預先定義的「使用者產品延伸」位置,或是在 Liberty 安裝目錄之外的一項延伸。之後,您可以新增特性名稱到伺服器配置中。

使用者產品延伸是一個預先定義的目錄,伺服器在這個目錄中尋找其他特性。 特性定義 .mf 檔必須複製到 ${wlp.user.dir}/extension/lib/features 目錄中,軟體組 .jar 檔必須複製到 ${wlp.user.dir}/extension/lib 目錄中。

使用者撰寫的特性會依照產品特性的相同方式新增到伺服器配置中。 為了避免不同提供者的特性名稱發生衝突,您必須將延伸名稱附加到產品延伸中之各項特性的字首。 usr/extension/lib 目錄中的特性,預設字首是 usr:

比方說,如果您已將稱為 simple-1.0 的一項特性安裝到 ${wlp.user.dir}/extension/lib 目錄中,您必須依照下列方式,將這個特性配置在 server.xml 中:
<featureManager>
    <feature>usr:simple-1.0</feature>
</featureManager>
如果您已在自己的位置安裝一個稱為 myFeature 的特性,且在 ${wlp.install.dir}/etc/extensions/myExt.properties 檔中定義了一項產品延伸,您必須依照下列方式,將這個特性配置在 server.xml 檔中:
<featureManager>
    <feature>myExt:myFeature</feature>
</featureManager>

當您啟動伺服器時,特性管理程式會偵測到這個特性,軟體組會安裝在 OSGi 架構中並予以啟動。

另請參閱 新增及移除 Liberty 特性特性管理

以程式設計方式,從應用程式使用特性

特性可以向應用程式顯現類別和服務。

如果要顯現 Java 類別供應用程式使用,您必須在特性資訊清單的 IBM-API-Package 標頭中列出各個類別套件。在 IBM-API-Package 標頭中列出類別套件,會使應用程式類別載入器能夠見到這些類別。 API 套件的可見性可以透過 API 可見性類型來進行控制。 請參閱指定 Liberty 特性專案的 API 和 SPI 套件

如果要將服務提供給 OSGi 應用程式使用,您必須將它們列在特性資訊清單的 IBM-API-Service 標頭中。 特性會提供 OSGi 服務,以便您以程式設計方式,從應用程式參照這些服務。

服務必須登錄於 OSGi 服務登錄 (SR) 中,讓應用程式(或其他特性)能夠找到它們。 OSGi 應用程式和其他特性可以從 SR 執行直接查閱,也可以利用藍圖或「OSGi 宣告式服務」之類的功能來注入它們的服務相依關係。 Java EE 應用程式更有可能透過 JNDI 找到服務;在 Liberty 中有一項 SR 和 JNDI 的聯合,可供 Java EE 應用程式利用 JNDI 在 SR 中尋找服務。如需相關資訊,請參閱使用 OSGi 服務登錄

將特性顯現為 Web 應用程式

如果要將 Liberty 特性顯現為 Web 應用程式,您可以將特性中的 OSGi 軟體組發佈為 Web 應用程式軟體組 (WAB)。 除了軟體組所需要的 OSGi 標頭,您還可以利用 Web-ContextPath 標頭來指定 Web 應用程式環境定義路徑。

例如:

Web-ContextPath: myWABapp
Bundle-ClassPath: WEB-INF/classes

配置注入和處理

使用特性的主要好處之一,是使用者可以很容易在 server.xml 檔(以及併入檔)中配置它們。 Liberty 核心會監視及剖析配置檔,每當有了改變,產生的內容集可以注入相關的元件中。

Liberty 配置由核心中的「OSGi 配置管理 (CA)」服務來管理,可以根據這個規格來進行存取。 配置內容集用持續保存的身分 (PID) 來識別,這個身分用來將 server.xml 檔中的元素關聯於為了接收內容而登錄的元件。

比方說,如果您利用 com.acme.console 這個 PID 向 CA 服務登錄您的特性,使用者可以在 server.xml 檔中指定下列配置:
<com.acme.console color="blue" size="17"/>
您的特性會收到下列內容:
  • color="blue"
  • size="17"

您可以利用「OSGi meta 類型」描述子,選擇性地提供說明配置內容的 meta 資料。 使用描述子會使您的配置 meta 資料併入到 Liberty 所產生,並由「開發人員工具」使用的配置綱目中,因此,當應用程式開發人員配置其伺服器時,您的配置內容會自動呈現。

如需接收和說明配置內容的詳細資料,請參閱讓服務接收配置資料

Liberty 中的宣告式服務

特性越大、越複雜,通常就會因使用「OSGi 宣告式服務 (DS)」而受益,特性能夠由多重服務組成,且可以管理相依關係和配置內容的注入。 使用 DS 容許延遲啟動服務,將 Java 類別延遲到使用服務時才載入,並根據相依關係來安排啟動服務的順序。 Liberty 產品中的大部分特性都由 DS 管理。

另請參閱 利用 OSGi 宣告式服務來撰寫進階特性


指示主題類型的圖示 概念主題

檔名:cwlp_prod_ext.html