動態內容管理
您通常會將軟體組列在特性資訊清單檔的 Subsystem-Content 標頭中,從而將它們安裝到執行時期環境中。 不過,您也可以將使用者撰寫的軟體組安裝成使用者撰寫的特性之 Subsystem-Content 的一部分,從而動態新增及移除 OSGi 軟體組。 使用者撰寫的軟體組會取得 OSGi 軟體組環境定義來安裝及控制其他軟體組。
安裝、啟動、停止和解除安裝 Liberty 設定檔中的軟體組
註: 在下列各節中,使用者撰寫的特性稱為 UserFeatureA,使用者撰寫的軟體組稱為 FeatureBundleA。
- 安裝軟體組
- 您可以利用下列其中一個方法來撰寫 FeatureBundleA,以取得 OSGi 軟體組環境定義 org.osgi.framework.BundleContext:
- 實作 BundleActivator 介面 org.osgi.framework.BundleActivator。 OSGi 架構會傳入 start 方法的 BundleContext 參數,當啟動使用者撰寫的軟體組時,這個軟體組便可以使用它。 如需 BundleActivator 介面的相關資訊,請參閱開發含有簡式啟動的 OSGi 軟體組。
- 實作可用的規格,例如「OSGi 宣告式服務」或 Blueprint,以透過另一個方法或介面來提供軟體組環境定義的存取權。 如需相關資訊,請參閱利用 OSGi 宣告式服務來撰寫進階特性和 Blueprint 軟體組。
FeatureBundleA 取得軟體組環境定義之後,可以利用 installBundle(String location) 或 installBundle(String location, InputStream stream) 方法來安裝其他軟體組。
動態安裝的軟體組會在預設重新啟動時回復狀態。 在全新啟動之後,它們不會持續保存,需要重新安裝。 請參閱軟體組快取,以取得詳細資料。
- 啟動軟體組
- 如果您想要啟動已安裝的軟體組,進行安裝的軟體組 FeatureBundleA 負責呼叫該軟體組的 start 方法。
- 停止和解除安裝軟體組
- 如果從伺服器配置中移除使用者撰寫的特性 UserFeatureA,會停止並解除安裝 FeatureBundleA。
如果 FeatureBundleA 所安裝的軟體組還沒有解除安裝,解除安裝 FeatureBundleA 會觸發解除安裝所有這些軟體組。
這時會針對每個軟體組來呼叫 org.osgi.framework.Bundle.uninstall() 方法,這個方法會將軟體組停止並解除安裝。
如果用任何其他方法來解除安裝 FeatureBundleA,也適用這個解除安裝程序。
如果在伺服器停止時,從伺服器配置中移除 UserFeatureA,下一次啟動伺服器時,會移除 UserFeatureA 所安裝的軟體組。 如果軟體組的啟動層次預設值不曾修改,會在重新啟動這些軟體組之前,將它們移除。 如果已修改軟體組的啟動層次,這些軟體組可能要等到重新啟動之後才會移除。
其他生命週期管理作業是由 FeatureBundleA 根據 OSGi 核心規格,利用 org.osgi.framework.Bundle 和 org.osgi.framework.BundleContext 介面來執行。
Liberty 設定檔中的軟體組快取、套件可見性和程式設計模型支援
- 軟體組快取
- 當伺服器關機時,目前安裝的所有軟體組都會停止,OSGi meta 資料會持續保存在軟體組快取中。 在預設啟動時,這些已安裝的軟體組會回到它們先前的狀態。 在全新啟動時,FeatureBundleA 所安裝的任何軟體組都會刪除其持續資料。 因此,在全新啟動時,不會回復這些軟體組。 FeatureBundleA 本身則會回復,因為只要 UserFeatureA 仍在伺服器配置中,特性管理程式就會重新安裝它。 如果您想在全新啟動之後,重新安裝任何軟體組,FeatureBundleA 負責進行這項重新安裝。 您不會收到全新啟動的通知,但您可以利用 OSGi BundleContext getBundle(String location) 方法來檢查是否安裝了某個軟體組。
- 套件可見性
- 未列在特性資訊清單檔的 Subsystem-Content 標頭中的動態安裝軟體組,其可見性如下:
- 動態安裝的軟體組可以匯入目前配置的特性集所提供的任何 API 和 SPI 套件。
- 在相同產品延伸內,未宣告為 API 或 SPI 的其他軟體組所匯出的套件,動態安裝的軟體組無法看到它們。
- 從動態安裝的軟體組匯出的套件無法宣告為 API 或 SPI。
- 從動態安裝的軟體組匯出的套件,在匯入時,沒有任何限制。
- 程式設計模型支援
- 動態安裝的軟體組可以使用 OSGi 企業規格實作,但必須已配置適當的執行時期特性來啟用它們。