開發 OSGi 應用程式

您可以利用 org.apache.aries.blueprint 套件中的類別來延伸 OSGi 應用程式設計模型;這個協力廠商 SPI 是透過 blueprint-1.0 伺服器特性來提供。 您必須存取 OSGi 應用程式軟體組來套用您的延伸。 在 Liberty 中,OSGi 應用程式會當作子系統來執行。如果要尋找 OSGi 應用程式,您可以在使用者特性中建立一個 ServiceTracker

關於這項作業

這個主題說明使用者特性的開發人員如何尋找執行中的 OSGi 應用程式。 提供 OSGi 應用程式之程式設計模型延伸的使用者特性通常需要這個作業。 比方說,新的使用者特性可能會實作新的軟體組延伸器(通常稱為儲存器),或更簡單地,追蹤和呼叫從某些 OSGi 應用程式內發佈的服務,來提供這類延伸。

這類使用者特性必須利用特定的執行中 OSGi 應用程式的 BundleContext 來建立新的 BundleTrackerServiceTracker 實例。 這個 BundleContext 可以從與 OSGi 應用程式相關聯的 org.osgi.service.subsystem.Subsystem 中取得。 下列程序說明如何取得 SubSystem 服務。

程序

如果要在使用者特性中建立 ServiceTracker 來尋找 OSGi 應用程式,請完成下列步驟:

  1. 建構以您想要尋找的 Subsystem 為目標的 org.osgi.framework.Filter
  2. 建立一個 org.osgi.util.tracker.ServiceTracker,利用步驟 1 的 Filter 來取得與您想要尋找的 OSGi 應用程式相關聯的 org.osgi.service.subsystem.Subsystem 服務。 這個 Subsystem 服務實例提供使用 OSGi 應用程式所需要的一切項目。

範例

下列範例顯示如何利用使用者特性中的 ServiceTracker,以符號名稱 my.app 來尋找應用程式:
import org.osgi.framework.BundleContext;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
在下列程式碼摘錄中,ctx 變數是使用者特性其中一個軟體組的 BundleCoNtext
String SERVICE_FILTER = "(&(objectClass=org.osgi.service.subsystem.Subsystem)
                           (subsystem.type=osgi.subsystem.application)(subsystem.symbolicName=my.app))"
    
      org.osgi.framework.Filter filter = ctx.createFilter(SERVICE_FILTER);
最後一個 'null' 參數可以更換為實作 ServiceTrackerCustomizer<Subsystem, Subsystem> 的類別實例:
org.osgi.util.tracker.ServiceTracker<Subsystem, Subsystem> str = new ServiceTracker<Subsystem, Subsystem>(ctx, filter, null);
SERVICE_FILTER 可以建構成使用如下常數:
org.osgi.framework.Constants.OBJECTCLASS;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_SYMBOLICNAME_PROPERTY;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_PROPERTY;

指示主題類型的圖示 作業主題



「時間戳記」圖示 前次更新: 2016 年 11 月 30 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_locate_osgi
檔名:twlp_locate_osgi.html