Verwaltung dynamischer Inhalte
Die Installation von Bundles erfolgt in der Regel in der Laufzeitumgebung durch deren Auflistung im Header Subsystem-Content der Featuremanifestdatei. Sie haben allerdings auch die Möglichkeit, OSGi-Bundles dynamisch hinzuzufügen und zu entfernen, indem Sie ein benutzerdefiniertes Bundle als Teil des Headers Subsystem-Content eines benutzerdefinierten Features installieren. Das benutzerdefinierte Bundle ruft den OSGi-Bundle-Kontext ab, um zusätzliche Bundles zu installieren und zu steuern.
Bundles in Liberty installieren, starten, stoppen und deinstallieren
- Bundles installieren
- Sie können
FeatureBundleA mit einer der folgenden Methoden so definieren, dass
der OSGi-Bundle-Kontext (org.osgi.framework.BundleContext) abgerufen wird:
- Implementieren Sie die BundleActivator-Schnittstelle org.osgi.framework.BundleActivator. Der Parameter BundleContext der Startmethode wird vom OSGi-Framework übergeben. Dieses ist für das benutzerdefinierte Bundle verfügbar, sobald das Bundle aktiviert wird. Weitere Informationen zur BundleActivator-Schnittstelle finden Sie unter OSGi-Bundle mit einfacher Aktivierung entwickeln.
- Implementieren Sie eine verfügbare Spezifikation, z. B. "OSGi Declarative Services" oder "Blueprint", die den Zugriff auf den Bundlekontext über eine andere Methode oder Schnittstelle ermöglicht. Weitere Informationen finden Sie unter Erweiterte Features mit OSGi Declarative Services erstellen und unter Blueprint-Bundles.
Nachdem FeatureBundleA den Bundlekontext abgerufen hat, können weitere Bundles mit der Methode installBundle(String location) oder mit der Methode installBundle(String location, InputStream stream) installiert werden.
Dynamisch installierte Bundles werden nach einem Standardneustart im vorherigen Status fortgesetzt. Wenn Sie einen sauberen Neustart (clean) ausführen, bleiben sie jedoch nicht erhalten, sondern müssen erneut installiert werden. Weitere Informationen finden Sie unter Bundle-Caching.
- Bundles starten
- Wenn ein installiertes Bundle gestartet werden soll, ist es die Aufgabe des Installationsbundles (FeatureBundleA), die Methode start für das Bundle aufzurufen.
- Bundles stoppen und deinstallieren
- Wenn das benutzerdefinierte Feature UserFeatureA aus der Serverkonfiguration entfernt wird,
dann wird FeatureBundleA gestoppt und deinstalliert. Die Deinstallation
von FeatureBundleA löst die Deinstallation
aller von FeatureBundleA installierten Bundles aus, falls diese noch nicht deinstalliert wurden.
Die Methode
org.osgi.framework.Bundle.uninstall() wird für jedes Bundle aufgerufen. Dadurch wird das Bundle gestoppt und deinstalliert.
Dieser Deinstallationsprozess tritt auch in Kraft, wenn
FeatureBundleA auf andere Weise deinstalliert wird.
Wenn UserFeatureA aus der Serverkonfiguration entfernt wird, während der Server gestoppt ist, werden die von UserFeatureA installierten Bundles beim nächsten Serverstart entfernt. Wenn die Startebenen der Bundles den Standardwerten entsprechen, werden die Bundles vor dem Neustart entfernt. Wurden die Startebenen der Bundles geändert, werden die Bundles eventuell erst nach dem Neustart entfernt.
FeatureBundleA führt gemäß der "OSGi Core Specification" weitere Tasks für Lebenszyklusmanagement aus. Dazu werden die Schnittstellen org.osgi.framework.Bundle und org.osgi.framework.BundleContext verwendet.
Bundle-Caching, Paketsichtbarkeit und Programmiermodellunterstützung in Liberty
- Bundle-Caching
- Wenn der Server heruntergefahren wird, werden alle derzeit installierten Bundles gestoppt und die OSGi-Metadaten bleiben als persistente Daten in einem Bundle-Cache erhalten. Beim nächsten Standardstart werden diese installierten Bundles wieder in den vorherigen Status zurückversetzt. Bei einem sauberen Neustart (clean) werden die persistenten Daten aller von FeatureBundleA installierten Bundles gelöscht. Folglich werden diese Bundles bei einem sauberen Neustart nicht fortgesetzt. FeatureBundleA selbst wird fortgesetzt, weil es vom Feature-Manager erneut installiert wird, sofern UserFeatureA weiterhin in der Serverkonfiguration enthalten ist. Wenn Sie nach einem sauberen Neustart erneut Bundles installieren möchten, ist die Neuinstallation Aufgabe von FeatureBundleA. Sie werden nicht benachrichtigt, wenn ein sauberer Neustart ausgeführt wird, aber Sie können mit der OSGi-Methode BundleContext getBundle(String location) prüfen, ob ein Bundle installiert ist.
- Paketsichtbarkeit
- Bundles, die dynamisch installiert werden und nicht im Header
Subsystem-Content der Featuremanifestdatei aufgelistet sind, haben folgende Sichtbarkeit:
- Dynamisch installierte Bundles können API- und SPI-Pakete, die von den derzeit konfigurierten Features bereitgestellt werden, importieren.
- Pakete, die von anderen Bundles innerhalb derselben Produkterweiterung exportiert werden und nicht als API oder SPI deklariert sind, sind für dynamisch installierte Bundles nicht sichtbar.
- Pakete, die von dynamisch installierten Bundles exportiert werden, können nicht als API oder SPI deklariert werden.
- Für den Import von Paketen, die aus dynamisch installierten Bundles exportiert werden, gelten keine Beschränkungen.
- Programmiermodellunterstützung
- Dynamisch installierte Bundles können Implementierungen von OSGi-Unternehmensspezifikationen verwenden, sofern die dafür erforderlichen Laufzeitfeatures konfiguriert sind.