OSGi-Bundles

Ein OSGi-Bundleprojekt ist eine Java™-Archivdatei, die Java-Code, Ressourcen und ein Manifest enthält, das das Bundle und seine Abhängigkeiten beschreibt. Das Bundle ist die Implementierungseinheit für eine Anwendung.

Bundletypen
OSGi-Bundlemanifestdatei
Bundlelebenszyklus

Bundletypen

Anwendungsbundles
Anwendungsbundles sind Bundles, die Sie speziell für Ihre Anwendung erstellen. Sie sind instanzspezifisch oder isolliert, d. h., sie sind nicht für die gemeinsame Nutzung bestimmt. Sie werden im Anwendungsmanifest im Header "Application-Content" referenziert.
Gemeinsam genutzte Bundles
Gemeinsam genutzte Bundles sind nicht anwendungsspezifisch. Eine Einzelinstanz eines Pakets aus einem gemeinsam genutzten Bundle kann von vielen Anwendungen verwendet werden. Gemeinsam genutzte Bundles können keine Pakete oder Services aus Anwendungsbundles importieren. Gemeinsam genutzte Bundles in einer Anwendung müssen durch Referenz bereitgestellt werden und dürfen nicht direkt in einer Anwendung enthalten sein.
Gemeinsam genutzte Bundles werden weiter in Verwendungsbundles und Bereitstellungsbundles unterteilt:
Verwendungsbundles
Ein Verwendungsbundle ist ein gemeinsam genutztes Bundle, das mindestens ein Paket für ein Anwendungsbundle bereitstellt. Verwendungsbundles werden im Anwendungsmanifest im Header "Use-Bundle" referenziert.
Bereitstellungsbundles
Ein Bereitstellungsbundle ist ein gemeinsam genutztes Bundle, das einem Anwendungsbundle, einem Verbundbundle oder einem anderen Bereitstellungsbundle mindestens ein Paket oder einen Service bereitstellt. Bereitstellungsbundles werden nicht im Anwendungsmanifest referenziert, und Ihre Anwendung weiß nicht, wie die Anforderung für jedes Bereitstellungsbundle erfüllt wird.
OSGi-Bundles können an den folgenden Positionen gespeichert werden:
  • EBA-Datei (Enterprise Bundle Archive, Unternehmensbundlearchiv) der Anwendung
  • Serverinternes OSGi-Bundle-Repository
  • Externe OSGi-Bundle-Repositorys

Anwendungsbundles können in der EBA-Datei oder in einem Repository gespeichert werden. Gemeinsam genutzte Bundles werden in einem Repository gespeichert, da sie ansonsten nicht gemeinsam genutzt werden können.

Der Prozess des Abrufens von Bundles aus den Repositorys wird als "Bereitstellung" bezeichnet. Für Bereitstellungszwecke wird die folgende Terminologie für Bundles verwendet:
Referenzierte Bundles
Ein referenziertes Bundle ist ein Bundle, das im Anwendungsmanifest referenziert wird und in einem Repository gespeichert ist.
Abhängigkeitsbundles
Ein Abhängigkeitsbundle ist ein Bundle, das nicht im Anwendungsmanifest referenziert wird, aber von im Anwendungsmanifest referenzierten Bundles oder anderen Abhängigkeitsbundles verwendet wird.

Nicht direkt in der EBA-Datei enthaltene Anwendungsbundles sind instanzspezifische referenzierte Bundles. Verwendungsbundles sind gemeinsam genutzte referenzierte Bundles. Bereitstellungsbundles sind gemeinsam genutzte Abhängigkeitsbundles.

OSGi-Bundlemanifestdatei

Eine OSGi-Bundle-JAR-Datei enthält eine JAR-Manifestdatei. Die in dieser Datei enthaltenen Metadaten ermöglichen dem OSGi-Framework die Verarbeitung der modularen Aspekte des Bundles.

Der folgende Beispielcode zeigt den Inhalt einer Anwendungsmanifestdatei mit dem Namen META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MyService bundle
Bundle-SymbolicName: com.sample.myservice
Bundle-Version: 1.0.0
Bundle-Activator: com.sample.myservice.Activator
Import-Package: org.apache.commons.logging;version="1.0.4"
Export-EJB: ExampleBean
Export-Package: com.sample.myservice.api;version="1.0.0"
Die Metadaten in dieser Manifestdatei enthalten die folgenden Schlüsseleigenschaften:
Bundle-Version
Dieser Header gibt die Version des Bundles an und ermöglicht die gleichzeitige Existenz mehrerer aktiver Versionen eines Bundles in derselben Frameworkinstanz.
Bundle-Name
Gibt einen lesbaren Namen für ein Bundle an.
Bundle-SymbolicName
Eindeutige Identifizierung eines Bundles im Framework. Diese Angabe ersetzt nicht den Header "Bundle-Name", der erforderlich ist.
Bundle-Activator
Empfängt Benachrichtigungen vom Framework zu Änderungen im Bundlelebenszyklus. Diese Eigenschaft gibt die Klasse an, die die Schnittstelle org.osgi.framework.BundleActivator implementiert.
Import-Package
Deklariert die externen Abhängigkeiten des Bundles, die vom OSGi-Framework für die Bundleauflösung verwendet werden. Es können bestimmte Versionen oder Versionsbereiche für jedes Paket deklariert werden. In dieser Beispielmanifestdatei wird das Paket org.apache.commons.logging in der Version 1.0.4 oder höher vorausgesetzt.
Verwenden Sie diese Eigenschaft, um die Namen der Pakete anzugeben, die von Ihrem Bundle zur Laufzeit importiert werden sollen. Wenn Sie in dieser Eigenschaft nicht das von Ihrem Bundle benötigte Paket angeben, tritt möglicherweise ein Kompilierungsfehler beim Laden des Bundles auf.
Anmerkung: Sie müssen dieses Paket auch in der Eigenschaft "Export-Package" des Bundles angeben, das das Paket enthält.
Einschränkung: Wenn Ihre Bundlemanifestdatei die Eigenschaft Import-Package verwendet, um eine Bundleabhängigkeit für ein Bundle zu deklarieren, das sich nicht in Ihrem Arbeitsbereich oder auf Ihrer Zielplattform befindet, markiert der Editor die Abhängigkeit als Fehler. Um diese Einschränkung zu umgehen, vergewissern Sie sich, dass sich alle von Ihnen deklarierten Abhängigkeitsbundles in Ihrem Arbeitsbereich befinden, oder verwenden Sie die Schnellkorrektur, um das Paket der Zielplattform hinzuzufügen. Wenn Sie die Schnellkorrektur verwenden möchten, wechseln Sie zur Ansicht "Markierung" und klicken Sie dann mit der rechten Maustaste auf die Fehlermarkierung und wählen Schnellkorrektur aus.
Wichtig: Wenn Sie Bundleabhängigkeiten in Ihrer Datei MANIFEST.MF angeben, verwenden Sie die Eigenschaft Import-Package anstelle von Require-bundle. Wenn Sie Require-bundle verwenden, um Bundleabhängigkeiten anzugeben, kann Ihre Anwendung nicht implementiert werden.
Die Verwendung der Eigenschaft Import-Package ist bei der Deklaration von Abhängigkeiten die flexiblere Lösung:
  • Sie können die Abhängigkeiten für die von Ihnen benötigte Funktionalität deklarieren statt das Bundle zu verwenden, auf dem die Funktionalität basiert, da auf diese Weise keine unnötigen Abhängigkeiten für Pakete hinzugefügt werden, die für Ihr Bundle nicht erforderlich sind, jedoch im Abhängigkeitsbundle enthalten sind.
  • Sie können Versionen oder Versionsbereiche für das deklarierte Bundle angeben und müssen daher nicht auf Änderungen in den verschiedenen Bundleversionen reagieren.
Export-EJB:
Wird ein EJB-Projekt in ein OSGi-Bundle konvertiert, wird dem Manifest der Abschnitt "Export-EJB" hinzugefügt. Verwenden Sie diesen Abschnitt, um EJBs aufzulisten, die Sie zur Verfügung stellen möchten. EJBs können diesem Abschnitt entweder manuell hinzugefügt werden oder Sie klicken mit der rechten Maustaste auf ein konvertiertes EJB-Projekt und wählen OSGi > EJB-Exporte verwalten aus.
Export-Package
Deklariert die Pakete, die außerhalb des Bundles sichtbar sind. Alle hier nicht deklarierten Pakete sind nur innerhalb des Bundles sichtbar.
Verwenden Sie diese Eigenschaft, um die Namen der Pakete anzugeben, die von Ihrem Bundle zur Laufzeit exportiert werden sollen. Wenn Sie in dieser Eigenschaft nicht die von anderen Bundles benötigten Pakete angeben, können die Abhängigkeitsbundles möglicherweise nicht aufgelöst werden.

Bundlelebenszyklus

Das Framework verwaltet den Lebenszyklus von Bundles. Bei der Installation und Ausführung durchläuft ein Bundle verschiedene Stadien.

Diese sind im Folgenden aufgeführt:
Installiert
Das Bundle wurde installiert, es wurden jedoch nicht alle Abhängigkeiten des Bundles aufgelöst. Für das Bundle sind Pakete erforderlich, die von keinem der momentan installierten Bundles exportiert wurden.
Gelöst
Das Bundle wurde installiert und die Abhängigkeiten des Bundles wurden gelöst, es kann jedoch nicht ausgeführt werden. Wenn ein Bundle gestartet wird und alle Abhängigkeiten des Bundles gelöst wurden, überspringt das Bundle diesen Status.
Starten
Ein temporärer Status, den das Bundle beim Starten hat.
Aktiv
Das Bundle wird ausgeführt.
Stoppen
Ein temporärer Status, den das Bundle beim Stoppen hat.
Deinstalliert
Das Bundle ist im Framework nicht mehr vorhanden.
Symbol das den Typ des Artikels anzeigt. Konzeptartikel
Nutzungsbedingungen für Information Center | Feedback

Symbol für Zeitmarke Letzte Aktualisierung: 29.04.2014

Dateiname: cbundles.html