O'Reilly logo

Die OSGi Service Platform: Eine Einführung mit Eclipse Equinox by Matthias Lübken, Bernd Kolb, Nils Hartmann, Gerd Wütherich

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

8 Fragment Bundles144
2 RESOLVED org.osgibook.translation.impl.deDE_1.0.0
Master=1
3 ACTIVE org.osgibook.helloworld_1.0.0
4 RESOLVED org.osgibook.translation.impl.enUS_1.0.0
Master=1
5 ACTIVE org.osgibook.translation_1.0.0
Durch die Verwendung eines Fragment Bundles sind Sie jetzt in der
Lage, die Übersetzungsdateien des Translation Service getrennt von
seiner Implementierung zu entwickeln und zu deployen. Da es die
OSGi-Spezifikation erlaubt, einem Host auch mehrere Fragmente
zuzuordnen, können Sie (oder Dritte) Fragmente für weitere Sprachen
schreiben, die vom Translation Service genutzt werden, ohne dass Sie
das Bundle
org.osgibook.translation.impl dafür anpassen müssen.
8.2 Fragment Bundles im Detail
Fragment Bundles (oder kurz Fragments) sind spezielle Bundles, die
den Klassenpfad anderer Bundles (den Host Bundles) erweitern und so
das Hinzufügen von Klassen und Ressourcen ermöglichen. Ein Frag-
ment Bundle unterscheidet sich darüber hinaus von einem normalen
Bundle dadurch, dass es keinen eigenen Lebenszyklus besitzt, sondern
einem anderen Bundle, dem Host Bundle, hinzugefügt wird.
Während das Host Bundle keinerlei Kenntnis von etwaigen Frag-
ment Bundles hat, müssen Sie für ein Fragment Bundle in dessen Mani-
fest angeben, welchem Bundle es zugeordnet werden soll. Dazu spezi-
fizieren Sie im Fragment Bundle mit dem Bundle Manifest Header
Fragment-Host den Namen des Host Bundles. Optional können Sie
zusätzlich mit dem Attribut
bundle-version einen Versionsbereich fest-
legen, aus dem das Host Bundle stammen muss:
Fragment-Host: org.osgibook.translation.impl;
bundle-version="1.0.0"
Durch die Verwendung des Bundle Manifest Headers Fragment-Host im
Manifest wird ein Bundle zu einem Fragment Bundle, das zur Laufzeit
seinem Host Bundle hinzugefügt wird (vgl. Abb. 8–6).
Einschränkungen
Obwohl ein Fragment Bundle weitestgehend einem normalen
Bundle entspricht, gibt es einige Einschränkungen in der Arbeit mir
Fragment Bundles. So darf ein Fragment Bundle keinen eigenen
Bundle-Aktivator angeben, da es wie erwähnt nicht über einen eigenen
Lebenszyklus verfügt. Außerdem kann ein Fragment Bundle nicht von
einem anderen Bundle mittels
Require-Bundle referenziert werden.
1458.3 Anwendungsszenarien für Fragment Bundles
8.3 Anwendungsszenarien für Fragment Bundles
Das im Beispiel zu diesem Kapitel vorgestellte Szenario mit Überset-
zungsdateien für unterschiedliche Sprachen wird in der OSGi Service
Platform als das Schlüsselszenario für den Einsatz von Fragment Bund-
les aufgeführt. Generell lassen sich Fragment Bundles in den folgenden
Szenarien sinnvoll einsetzen:
Implementierung von Produktvarianten: Wenn Sie eine Anwen-
dung in unterschiedlichen Varianten bereitstellen wollen, dann
kann der Einsatz von Fragment Bundles eine mögliche Lösung sein.
So wird bspw. beim Standard Widget Toolkit (SWT) die Unterstüt-
zung von unterschiedlichen Betriebssystemen durch den Einsatz
von Fragments realisiert.
In solchen Szenarien wird der generische Teil der Anwendung
innerhalb des Host Bundles implementiert, während die variablen
Anteile in unterscheidlichen Fragments realisiert sind. Je nach Vari-
ante können dann unterschiedliche Fragmente im OSGi Frame-
work installiert werden.
Bereitstellug von Systemkonfigurationen: Einige Bibliotheken
(bspw. Logging-Bibliotheken wie Log4J) erwarten, dass ihre Konfi-
guration Bestandteil ihres Klassenpfades ist. Da diese Konfigurati-
onen abhängig von allen im System installierten Bundles sind, muss
die Konfiguration spezifisch r jede Gesamtinstallation angepasst
werden. Auch hier ist der Einsatz von Fragment Bundles eine mög-
liche Lösung.
META-INF
MANIFEST.MF
org.osgibook.translation.impl
TranslationService
META-INF
MANIFEST.MF
translation_de_DE.properties
META
-
INF
MANIFE
S
T.MF
Translati
onS
S
erv
erv
ice
Bundle-SymbolicName: org.osgibook.translation.impl
MANIFEST
.
MF
t
rans
l
at
i
on_
de_
DE
.
pro
per
t
i
e
s
Bundle-SymbolicName: org.osgibook.translation.impl.deDE
Fragment-Host: org.osgibook.translation.impl
Abb. 8–6
Fragment Bundle
und Host Bundle
8 Fragment Bundles146
8.4 Zuordnung von Fragment Bundles und
Host Bundle
Beim Hinzufügen eines Fragmentes zu seinem Host werden die Import-
Package
-, Require-Bundle- und Export-Package-Header an die entspre-
chenden Header des Host Bundles angehängt. Das bedeutet, dass das
Host Bundle nicht nur auf die Klassen und Ressourcen seiner Frag-
ment Bundles Zugriff hat, sondern auch auf alle Klassen und Ressour-
cen, die von den Fragments über
Import-Package oder Require-Bundle
importiert werden. Gleichzeitig werden auch die vom Fragment-
Package exportierten Packages über das Host Bundle mitexportiert. So
sind in dem in Abb. 8–7 dargestellten Beispiel alle grau unterlegten
Packages innerhalb des Host Bundles über den Klassenpfad zugreifbar.
Ein Fragment Bundle wird einem Host Bundle zugeordnet, wenn das
OSGi Framework die Abhängigkeiten des Host Bundles auflöst. Das
bedeutet, dass ein Fragment nur dann seinem Host zugeordnet wird,
wenn es in dem Moment, in dem das Host Bundle aufgelöst wird,
bereits in der OSGi Service Platform installiert ist. Wenn Sie ein Frag-
ment Bundle nach dem Auflösen der Host-Abhängigkeiten installieren,
wird es dem Host nicht zugeordnet. Gleiches gilt auch, wenn Sie nach-
träglich eine neue Version Ihres Fragments installieren: In beiden Fäl-
len müssen Sie das Host Bundle aktualisieren (refresh).
Der Bundle-Classpath
Mit dem Manifest Header Bundle-Classpath können Sie für ein
Fragment Bundle einen eigenen Klassenpfad definieren, wie es auch für
Abb. 8–7
Host Bundle und
Fragment Bundle
META-INF
MANIFEST.MF
de.bundleA....
META-INF
MANIFEST.MF
de.bundleC....
de.bundleC....
META INF
META-INF
MANIFEST.MF
de.bundleB....
Require-Bundle
Import-Package
META-INF
MANIFEST.MF
de.hostbundle....
META-INF
MANIFEST.MF
de.fragment....
Import-Package

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required