OSGi-Anwendungen

Eine OSGi-Anwendung gruppiert eine Reihe von Bundles, um eine kohärente Geschäftslogik zur Verfügung zu stellen. Die Anwendung kann aus unterschiedlichen Bundletypen wie webfähigen Bundles und persistenzfähigen Bundles (JPA) bestehen.

Bundles in einer OSGi-Anwendung sind von Bundles, Services oder Paketen, die in einer anderen OSGi-Anwendung definiert sind, isoliert, wenn diese Bundles, Services oder Pakete explizit von beiden Anwendungen gemeinsam genutzt werden. Eine OSGi-Anwendung kann entweder selbst OSGi-Bundles enthalten oder Bundles referenzieren, die in einem OSGi-Bundle-Repository gehostet werden.

Die OSGi-Bundles in der Anwendung können Services mit anderen OSGi-Anwendungen gemeinsam nutzen. Wenn eine OSGi-Anwendung externe Services oder Referenzen produziert, werden diese explizit durch Deklaration in einem Anwendungsmanifest bereitgestellt. Alle externen Services und Referenzen, die eine OSGi-Anwendung konsumiert, werden auf ähnliche Weise im Anwendungsmanifest deklariert. Eine OSGi-Anwendung kann auch Metadaten verwenden, um die gemeinsame Nutzung einiger zur Anwendung gehöriger Bundles im System zuzulassen. Eine solche gemeinsame Nutzung kann den Speicher- und Ressourcenbedarf eines Systems reduzieren.

Eine OSGi-Anwendung enthält Folgendes:
Archivinhalt
Anwendungsmanifest
Implementierungsmanifest

Archivinhalt

Der Archivinhalt wird auf zwei verschiedene Arten verwendet, je nachdem, ob ein Header "Application-Content" im Anwendungsmanifest definiert ist oder nicht.
  • Wenn ein Header "Application-Content" nicht definiert ist, definiert der Archivinhalt den OSGi-Anwendungsinhalt.
  • Ist ein Header "Application-Content" definiert, definiert der Archivinhalt das Anfangs-Bundle-Repository, aus dem Bundles bereitgestellt werden können. Wenn ein Bundle mit einer bestimmten Version in ein geregeltes Repository installiert wird, und das Bundle auch in einem Anwendungsarchiv enthalten ist, wird das Bundle aus dem Archiv verwendet.

Anwendungsmanifest

Das Anwendungsmanifest META-INF/APPLICATION.MF beschreibt die Modularität auf Anwendungsebene. Ohne deklariertes Anwendungsmanifest ist der Anwendungsinhalt standardmäßig die Gruppe von OSGi-Bundles, die in der OSGi-Anwendung enthalten ist, und es werden keine externen Services oder Referenzen produziert oder konsumiert.

Ein Anwendungsmanifest kann die folgenden Header enthalten:
Application-SymbolicName

Der eindeutige symbolische Name der OSGi-Anwendung mit einer Java-ähnlichen Paketnotation.

Application-Version

Die Version der Anwendung, die OSGi-Syntax für eine Bundleversion verwendet.

Application-Name

Der Name der Anwendung..

Application-ImportService

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 jeden Service deklariert werden.

Eine Reihe von Filtern für externe Services, die von der Anwendung konsumiert werden. Das Anwendungsmanifest muss die für die Services erforderlichen Klassen enthalten. Ohne Angabe dieses Headers wird kein erforderlicher Service importiert.

Geben Sie die erforderlichen Services in einer durch Kommas getrennte Liste an, wobei zuerst der Name der Serviceschnittstelle und dann die Attribute oder Anweisungen genannt werden.
<service identifier>;<directives>;<attributes>
Beispiel:
test.it;filter="some_filter"
Der Header "Application-ImportService" hat das folgende Attribut:
filter
Ein OSGi-Servicefilter.
Application-ExportService

Deklariert die Services, die außerhalb des Bundles sichtbar sind. Alle hier nicht deklarierten Services sind nur innerhalb des Bundles sichtbar.

Eine Reihe von Filtern für externe Services, die von der Anwendung produziert werden. Ohne Angabe dieses Headers wird kein erforderlicher Service exportiert.

Geben Sie die exportierten Services in einer durch Kommas getrennte Liste an, wobei zuerst der Name der Serviceschnittstelle und dann die Attribute oder Anweisungen genannt werden.
<service identifier>;<directives>;<attributes>
Beispiel:
test.it;filter="some_filter"
Der Header "Application-ExportService" hat das folgende Attribut:
filter
Ein OSGi-Servicefilter.
Use-Bundle

Ein gemeinsam genutztes Bundle, das mindestens ein Paket für ein Anwendungsbundle bereitstellt.

Eine Liste mit Bundles oder Verbundbundles, die verwendet werden, um die Paketabhängigkeiten der Bundles in der Application-Content-Liste zu erfüllen. Jedes Bundle oder Verbundbundle in der Use-Bundle-Liste muss mindestens ein Paket für mindestens ein Bundle in der Application-Content-Liste bereitstellen. Diese Bundles werden zur Laufzeit im gemeinsam genutzten Speicherbereich für Bundles bereitgestellt.

In vielen Fällen ist kein Header "Use-Bundle" erforderlich, aber in manchen Situationen kann er hilfreich sein. Mit diesem Header können Sie den Geltungsbereich für die gemeinsame Nutzung beschränken. Beispielsweise können Sie sicherstellen, dass eine Anwendung nur das Bundle für Paketimporte verwendet, mit dem sie getestet wurde. Alternativ können Sie sicherstellen, dass zwei Anwendungen dasselbe Bundle für Paketimporte verwenden. Durch die Festlegung der Einschränkung auf Anwendungsebene bleibt das Bundle flexibel.

Application-WebModules

Liste der dynamischen Webprojekte ohne OSGi, die in die Anwendung enthalten sind.

Dieser Header ist nicht Teil des OSGi-Standards.

Application-Content
Eine Liste der Verbundbundles, Bundlefragmente und Bundles, die sich innerhalb des Bereichs der OSGi-Versionsspezifikation befinden, die in der Anwendung enthalten sind.
Tipp: Wenn Sie ein Bundlefragment in der Liste "Application-Content" einschließen, stellen Sie sicher, dass Sie das Host-Bundle für das Fragment ebenfalls enthalten ist.
Das Format ist eine durch Kommas getrennte Liste mit Moduldeklarationen, wobei jede Moduldeklaration das folgende Format verwendet:
<module identifier>;<directives>;<attributes>

In der Regel ist die Modul-ID der symbolische Name eines Bundles. Zum Referenzieren einer Ressource, die kein Bundle ist, wird die Modul-ID als relativer Pfad zum OSGi-Anwendungsstammverzeichnis angegeben.

Der Header "Application-Content" hat das folgende Attribut:
version
Die Version des Moduls, die mit der OSGi-Syntax für einen Versionsbereich angegeben wird. Geben Sie die mindestens erforderliche Version der Anwendung gefolgt von der maximal verwendbaren Version an, auf die die Anwendung aktualisiert werden kann. So bedeutet die Angabe "[1.0.0,2.0.0)" zum Beispiel: Version 1.0.0 und alle nachfolgenden Versionen bis (aber ausschließlich) Version 2.0.0.

Der Header "Application-Content" definiert die wichtigen Anwendungen, aus denen sich die Geschäftsservices zusammensetzen, aber keine vollständige Liste mit den Bundles in der Anwendung. Wenn ein im Inhalt aufgelistetes Bundle ein Paket verwendet, das nicht in der Anwendung enthalten ist, wird eine Abhängigkeitsanalyse durchgeführt und alle fehlenden Bundles werden einbezogen. Diese Bundles können keine externen Services für die Anwendung bereitstellen und es kann keine Sicherheit auf diese Bundles angewendet werden. Mithilfe dieses Verfahrens eingeschlossene Bundles werden gemeinsam genutzt.

Implementierungsmanifest

Bei der Installation einer OSGi-Anwendung gibt das Anwendungsmanifest die Bundles an, aus denen sich eine Anwendung zusammensetzt. Es kann für einige Bundles mehr als eine Version angeben.

Das Implementierungsmanifest META-INF/DEPLOYMENT.MF gibt alle Bundles an, die zur Anwendung gehören, einschließlich der Bundles, die laut Abhängigkeitsanalyse erforderlich sind. Im Implementierungsmanifest ist auch angegeben, welche Versionen der einzelnen Bundles in der Anwendung verwendet werden. Dieses Manifest wird automatisch beim Installieren eines EBA-Assets erstellt. Es stellt sicher, dass bei jedem Starten eines Anwendungsservers dieselben Bundles für die Anwendung verwendet werden.

Ein Unternehmensbundlearchiv (EBA, Enterprise Bundle Archive) definiert eine Gruppe von OSGi-Bundles, die als eine einzige OSGi-Anwendung implementiert werden und die von anderen OSGi-Anwendungen isoliert sind. Eine EBA-Datei ist eine einzelne Archivdatei mit der Dateierweiterung .eba. Sie enthält entweder eine Gruppe von Anwendungsmodulen oder ein Anwendungsmanifest oder beides.

Nach dem Installieren einer Anwendung kann die Version eines Bundles durch Konfigurieren des EBA-Assets aktualisiert werden.

Ein Implementierungsmanifest enthält die folgenden Header:
Application-SymbolicName
Der eindeutige symbolische Name der Anwendung mit einer Java-ähnlichen Paketnotation. Entspricht dem Wert "Application-SymbolicName" im Anwendungsmanifest.
Application-Version
Die Version der Anwendung, die OSGi-Syntax für eine Bundleversion verwendet. Entspricht dem Wert "Application-Version" im Anwendungsmanifest.
Deployed-Content

Eine durch Kommas getrennte Liste mit den symbolischen Namen der Bundles und den zu verwendenden Bundleversionen.

Die Liste enthält alle im Header "Application-Content" des Anwendungsmanifests aufgeführten Bundles sowie alle Bundles, die aufgrund der Abhängigkeitsanalyse importiert werden. Für Nicht-OSGi-Modultypen wird der symbolische Name des konvertierten Bundles angegeben.

Der Header "Deployed-Content" hat die folgende Anweisung:
deployed-version
Die genaue Version des Bundles, die mit der OSGi-Syntax für eine Version angegeben wird.
Symbol das den Typ des Artikels anzeigt. Konzeptartikel
Nutzungsbedingungen für Information Center | Feedback

Symbol für Zeitmarke Letzte Aktualisierung: 29.04.2014

Dateiname: ceba.html