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.
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.
Der eindeutige symbolische Name der OSGi-Anwendung mit einer Java-ähnlichen Paketnotation.
Die Version der Anwendung, die OSGi-Syntax für eine Bundleversion verwendet.
Der Name der Anwendung..
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.
<service identifier>;<directives>;<attributes>
Beispiel: test.it;filter="some_filter"
Der Header "Application-ImportService" hat das folgende Attribut: 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.
<service identifier>;<directives>;<attributes>
Beispiel: test.it;filter="some_filter"
Der Header "Application-ExportService" hat das folgende Attribut: 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.
Liste der dynamischen Webprojekte ohne OSGi, die in die Anwendung enthalten sind.
Dieser Header ist nicht Teil des OSGi-Standards.
<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" 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.
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.
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.