eXtreme-Scale-Container mit nicht dynamischen Plug-ins in einer OSGi-Umgebung ausführen

Wenn Sie die dynamischen Funktionen einer OSGi-Umgebung nicht verwenden müssen, können Sie trotzdem die starre Verbindung, das deklarative Packen und die Serviceabhängigkeiten nutzen, die das OSGi-Framework bietet.

Vorbereitende Schritte

  1. Entwickeln Sie Ihre Anwendung mit den APIs und Plug-ins von WebSphere eXtreme Scale.
  2. Packen Sie die Anwendung mit den entsprechenden Import- bzw. Exportabhängigkeiten, die in einem oder mehreren Bundlemanifesten deklariert sind, in ein oder mehrere OSGi-Bundles. Stellen Sie sicher, dass alle Klassen und Pakete, die für die Plug-ins, Agenten, Datenobjekte usw. erforderlich sind, exportiert werden.

Informationen zu diesem Vorgang

Mit dynamischen Plug-ins können Sie ein Upgrade Ihrer Plug-ins durchführen, ohne das Grid zu stoppen. Zur Verwendung dieser Funktionalität müssen die ursprünglichen und die neuen Plug-ins kompatibel sein. Wenn Sie keine Plug-ins aktualisieren müssen oder es sich leisten können, das Grid zu stoppen, um die Plug-ins zu aktualisieren, benötigen Sie die Komplexität dynamischer Plug-ins möglicherweise nicht. Es gibt trotzdem gute Gründe für die Ausführung Ihrer Anwendung von eXtreme Scale in einer OSGi-Umgebung. Zu diesen Gründen gehören die starre Verbindung, das deklarative Packen, die Serviceabhängigkeiten usw.

Eine Problemstellung beim Hosten des Grids oder Clients in einer OSGi-Umgebung ohne dynamische Plug-ins (d. h. ohne Deklaration der Plug-ins mit OSGi-Services) ist die Art und Weise, in der das Bundle von eXtreme Scale die Plug-in-Klassen lädt. Das Bundle von eXtreme Scale stützt sich beim Laden von Plug-in-Klassen auf OSGi-Services, so dass das Bundle Objektmethoden in Klassen anderer Bundles aufrufen kann, ohne die Pakete dieser Klassen direkt zu importieren.

Wenn die Plug-ins nicht über OSGi-Services bereitgestellt werden, muss das Bundle von eXtreme Scale in der Lage sein, die Plug-in-Klassen direkt zu importieren. Anstatt das Manifest des Bundles von eXtreme Scale für den Import der Benutzerklassen und Pakete zu ändern, erstellen Sie ein Bundlefragment, das die erforderlichen Paketimporte hinzufügt. Das Fragment kann auch die Klassen für andere Nicht-Plug-in-Benutzerklassen wie Datenobjekte und Agentenklassen importieren.

Vorgehensweise

  1. Erstellen Sie ein OSGi-Fragment, das das Bundle von eXtreme Scale (Client oder Server, je nach geplanter Implementierungsumgebung) als Host verwendet. Das Fragment deklariert die Abhängigkeiten (Import-Package) in allen Paketen, die von einem oder mehreren Plug-ins geladen werden müssen. Wenn Sie beispielsweise ein Plug-in für eine Serialisierungsmethode installieren, dessen Klassen sich im Paket com.mycompany.myapp.serializers befinden und das von Klassen im Paket com.mycompany.myapp.common abhängig ist, gleicht die Datei META-INF/MANIFEST.MF für Ihr Fragment dem folgenden Beispiel:
    Bundle-ManifestVersion: 2
    Bundle-Name: Plug-in fragment for XS serializers
    Bundle-SymbolicName: com.mycompany.myapp.myfragment; singleton:=true
    Bundle-Version: 1.0.0
    Fragment-Host: com.ibm.websphere.xs.server; bundle-version=7.1.1
    Manifest-Version: 1.0
    Import-Package: com.mycompany.myapp.serializers,
     com.mycompany.myapp.common
    …
    Dieses Manifest muss in eine Fragment-JAR-Datei gepackt werden, die in diesem Beispiel den Namen com.mycompany.myapp.myfragment_1.0.0.jar hat.
  2. Implementieren Sie das neu erstellte Fragment, das Bundle von eXtreme Scale und die Anwendungsbundles in Ihrer OSGi-Umgebung. Starten Sie jetzt die Bundles.

Ergebnisse

Jetzt können Sie Ihre Anwendung in der OSGi-Umgebung testen und ausführen, ohne OSGi-Services wie Plug-ins und Agenten zum Laden der Benutzerklassen zu verwenden.