OSGi-Fragmente

Ein OSGi-Fragment ist eine Java™-Archivdatei mit bestimmten Manifestheadern, durch die eine Verknüpfung zu einem angegebenen Host-Bundle bzw. Host-Bundles für die Funktionsausführung möglich ist. Fragmente werden als Teil der Host-Bundles betrachtet. Relevante Definitionen des Fragments werden mit den Host-Bundle-Definitionen zusammengeführt, bevor der Host aufgelöst wird, vorausgesetzt, die Informationen stehen nicht im Konflikt zueinander. Fragmentabhängigkeiten werden, sofern möglich, aufgelöst. Wenn die Fragmentabhängigkeiten nicht aufgelöst werden können, ist eine Verknüpfung des Fragments mit dem Host-Bundle nicht möglich. Ein Fragment kann keine eigenen Klassenlader oder Bundleaktivatoren haben. Es kann die in den Host-Bundles vorhandenen Informationen nicht überschreiben. Fragmente erweitern Bundles mit Ressourcen, Klassen und zulässigen Headern, sodass Sie Ihre Bundles anpassen können.

OSGi-Fragmentmanifestdateien

Eine OSGi-Fragment-JAR-Datei enthält eine Fragmentmanifestdatei. Mit den dieser Datei enthaltenen Metadaten kann das OSGi-Framework das Fragment mit einem Host-Bundle oder mehreren Host-Bundles verknüpfen.

Der folgende Beispielcode zeigt den Inhalt einer Anwendungsmanifestdatei mit dem Namen META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Fragment
Bundle-SymbolicName: Fragment
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Fragment-Host: WebBundle;bundle-version=1.0.0.qualifier
Import-Package: org.apache.commons.logging;version="1.0.4"
Export-Package: com.sample.myservice.api;version="1.0.0"
Die Metadaten in dieser Manifestdatei enthalten die folgenden Schlüsseleigenschaften:
Fragment-Host
Verknüpft das Fragment mit den entsprechenden potenziellen Bundle-Hosts.
Bundle-Version
Dieser Header gibt die Version des Fragments an und ermöglicht die gleichzeitige Existenz mehrerer aktiver Versionen eines Bundles in derselben Frameworkinstanz.
Bundle-Name
Gibt einen lesbaren Namen für das Fragment an.
Bundle-SymbolicName
Eindeutige Identifizierung des Fragments im Framework. Diese Angabe ersetzt nicht den Header "Bundle-Name", der erforderlich ist.
Import-Package
Deklariert die externen Abhängigkeiten des Fragments, die vom OSGi-Framework für die Fragmentauflö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 Fragment zur Laufzeit importiert werden sollen. Wenn Sie in dieser Eigenschaft nicht das von Ihrem Bundle benötigte Paket angeben, tritt möglicherweise eine Ausnahme vom Typ NoClassDefFound und 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-Package
Deklariert die Pakete, die außerhalb des Fragments sichtbar sind. Alle hier nicht deklarierten Pakete sind nur innerhalb des Fragments sichtbar.
Verwenden Sie diese Eigenschaft, um die Namen der Pakete anzugeben, die von Ihrem Fragment 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.
Symbol das den Typ des Artikels anzeigt. Konzeptartikel
Nutzungsbedingungen für Information Center | Feedback

Symbol für Zeitmarke Letzte Aktualisierung: 29.04.2014

Dateiname: cbundlefragment.html