Java Reference
In-Depth Information
Code ein Verzeichnis namens javacomp. Auß erdem gibt es ein Verzeichnis META-INF, in
dem sich eine Datei namens MANIFEST.MF befi ndet. Die Manifest-Datei enthält mehrere
Zeilen der Form „Schlüsselwort: Wert“. Beispiele für Schlüsselwörter sind:
Bundle-Name: ...
Bundle-SymbolicName: ...
Bundle-Description: ...
Bundle-Vendor: ...
Bundle-Activator: ...
Bundle-Version: ...
Import-Package: ...
Export-Package: ...
Über Bundle-Name, Bundle-Symbolic-Name, Bundle-Description und Bundle-Vendor kann
die betreff ende Komponente beschrieben werden. Bundle-Version, Import- und Export-
Package werden später bei der Besprechung der Beispiele noch erläutert. Durch Bundle-Acti-
vator wird die Einstiegsklasse bestimmt, von der das OSGi-Framework ein Objekt erzeugt.
Die Einstiegsklasse muss die Schnittstelle BundleActivator (s. Listing 9.1) implementieren.
Listing 9.1 OSGi-Schnittstelle BundleActivator
package org.osgi.framework;
public interface BundleActivator
{
public void start(BundleContext context) throws Exception;
public void stop(BundleContext context) throws Exception;
}
Wie zu vermuten ist, ru das Framework die Start-Methode nach der Erzeugung eines
Objekts der Einstiegsklasse auf. Dies passiert immer dann, wenn die Komponente instal-
liert oder das Framework mit bereits installierter Komponente gestartet wird. Analog dazu
wird stop aufgerufen, wenn die Komponente deinstalliert oder das Framework herunterge-
fahren wird. BundleContext ist eine Schnittstelle, über die das Bundle-Objekt Zugriff auf die
Dienste des Frameworks erhält. Zu diesen Diensten gehören eine Registratur zum An- und
Abmelden von Dienstobjekten sowie zum Abfragen angemeldeter Objekte. Es gibt verschie-
dene Ereignisse, auf die ein Bundle reagieren kann. BundleContext bietet dazu die Möglich-
keit, Listener für unterschiedliche Ereignisse anzumelden, die bei Eintreten des betreff en-
den Ereignisses aufgerufen werden. Über BundleContext kann sogar ein Bundle installiert
werden. Weiterhin kann man über den BundleContext Referenzen auf Bundle-Objekte erhal-
ten. Jedes Bundle-Objekt repräsentiert eine installierte Komponente. Von den Bundle-Objek-
ten lassen sich Informationen über die installierten Bundles erfragen (z. B. über alle Infor-
mationen in der Manifest-Datei der Komponente). Auß erdem kann man die Komponenten
damit auch wieder deinstallieren. Nähere Informationen zu BundleContext und Bundle fol-
gen im weiteren Verlauf des Kapitels.
Da die Start- und Stop-Methode vom Main-Thread des Frameworks aufgerufen werden, ist
es sehr ratsam, dass diese Methoden keine lange Ausführungszeit haben (es wird andern-
falls das Framework an der Ausführung weiterer Funktionen gehindert). Falls auch nach
dem Starten der Komponente noch Code ausgeführt werden soll, so muss beim Starten ein
Thread erzeugt werden, der spätestens in der Stop-Methode wieder angehalten werden
sollte. Falls im Thread auch ein Zugriff auf BundleContext nötig ist, so ist dies möglich; dem
 
Search WWH ::




Custom Search