OSGi-Anwendungen suchen

Sie können Klassen im Paket org.apache.aries.blueprint verwenden, um das OSGi-Anwendungsprogrammiermodell zu erweitern. Diese Systemprogrammierschnittstelle eines anderen Herstellers wird über das Server-Feature blueprint-1.0 bereitgestellt. Sie müssen auf OSGi-Anwendungsbundles zugreifen, um Ihre Erweiterungen anzuwenden. Im Liberty-Profil werden OSGi-Anwendungen als Subsysteme ausgeführt. Wenn Sie eine OSGi-Anwendung lokalisieren möchten, können Sie in einem Benutzerfeature einen ServiceTracker erstellen.

Informationen zu diesem Vorgang

In diesem Abschnitt wird beschrieben, wie der Entwickler eines Benutzerfeatures eine aktive OSGi-Anwendung finden kann. Dies ist oft erforderlich für Benutzerfeatures, die OSGi-Anwendungen Programmiermodellerweiterungen bereitstellen. Ein neues Benutzerfeature könnte beispielsweise solche Erweiterungen über die Implementierung eines neuen Bundle-Extenders (Erweiterungsprogramm), oft als Container bezeichnet, bereitstellen, oder noch einfacher, über Verfolgen und Aufrufen von Services, die innerhalb bestimmter OSGi-Anwendungen veröffentlich werden.

Solche Benutzerfeatures müssen den BundleContext einer bestimmten aktiven OSGi-Anwendung verwenden, um neue BundleTracker- und ServiceTracker-Instanzen zu erstellen. Dieser BundleContext kann aus dem Subsystem org.osgi.service.subsystem.Subsystem abgerufen werden, das der OSGi-Anwendung zugeordnet ist. Die folgende Prozedur beschreibt, wie Sie diesen SubSystem-Service abrufen.

Vorgehensweise

Wenn Sie eine OSGi-Anwendung lokalisieren möchten, indem Sie in einem Benutzerfeature einen ServiceTracker erstellen, führen Sie die folgenden Schritte aus:

  1. Erstellen Sie einen Filter org.osgi.framework.Filter mit dem Subsystem als Ziel, das Sie lokalisieren möchten.
  2. Erstellen Sie einen Service-Tracker org.osgi.util.tracker.ServiceTracker, der den Filter aus Schritt 1 verwendet, um den Service org.osgi.service.subsystem.Subsystem abzurufen, der der OSGi-Anwendung zugeordnet ist, die Sie lokalisieren möchten. Diese Subsystem-Serviceinstanz stellt alles bereit, was Sie für die Arbeit mit der OSGi-Anwendung benötigen.

Beispiel

Im folgenden Beispiel sehen Sie, wie Sie eine Anwendung mit dem symbolischem Namen my.app lokalisieren, indem Sie in einem Benutzerfeature einen ServiceTracker verwenden:
import org.osgi.framework.BundleContext;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
Im folgenden Codeextrakt steht die Variable ctx für den Bundlekontext (BundleContext) eines der Bundles des Benutzerfeatures:
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);
Der letzte 'null'-Parameter kann durch eine Instanz einer Klasse ersetzt werden, die ServiceTrackerCustomizer<Subsystem, Subsystem> implementiert:
org.osgi.util.tracker.ServiceTracker<Subsystem, Subsystem> str = new ServiceTracker<Subsystem, Subsystem>(ctx, filter, null);
Die Angabe SERVICE_FILTER kann dazu verwendet werden, Konstanten wie die folgenden zu verwenden:
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;

Symbol das den Typ des Artikels anzeigt. Taskartikel

Nutzungsbedingungen für Information Center | Feedback


Symbol für Zeitmarke Letzte Aktualisierung: 25.08.2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_locate_osgi
Dateiname: twlp_locate_osgi.html