Java Reference
In-Depth Information
Argument kann das anzumeldende Objekt durch zusätzliche Eigenscha en in Form einer
Liste von Name-Wert-Paaren beschrieben werden, wobei die Namen Strings sein müssen.
Wie in Listing 9.4 zu sehen kann durch den Parameterwert null auf die Angabe der Liste
auch verzichtet werden. Der Rückgabewert vom Typ ServiceRegistration kann zur Ände-
rung oder Löschung der Anmeldung verwendet werden. In Listing 9.4 wird der Rückgabe-
wert von registerService nicht benutzt. Übrigens müssen die in der Start-Methode angemel-
deten Objekte in der Stop-Methode nicht unbedingt wieder abgemeldet werden, denn das
OSGi-Framework ist so komfortabel, dass es die entsprechenden Abmeldungen automatisch
durchführt. Aus diesem Grund hat die Stop-Methode in Listing 9.4 keine Funktion zu
erbringen. Es erfolgt wie in der Start-Methode lediglich eine Bildschirmausgabe, um nach-
verfolgen zu können, ob und wann die Methoden vom Framework aufgerufen werden.
Damit liegt der Code der ersten Komponente mit Counter, CounterImpl und CounterService-
Activator vor. Was noch fehlt, ist die Manifest-Datei. Neben rein beschreibenden Zeilen
spielen vor allem die Angaben über die Activator-Klasse, den Im- und Export eine wichtige
Rolle. Die folgende Manifest-Datei wird für die erste Beispielkomponente verwendet:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: CounterService
Bundle-SymbolicName: CounterService
Bundle-Version: 1.0.0
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Vendor: Rainer Oechsle
Bundle-Activator: javacomp.osgi.bundle1.CounterServiceActivator
Import-Package: org.osgi.framework
Export-Package: javacomp.osgi.bundle1
Durch Bundle-Activator wird die Activator-Klasse (also die Einstiegsklasse) festgelegt. Wird
die Zeile weggelassen, so ist dies kein Fehler; eine Activator-Klasse ist nicht zwingend not-
wendig. In diesem Fall kann man an den Ausgaben erkennen, dass die Start- und Stop-
Methoden nie aufgerufen werden. Mit Import-Package muss man die Packages angeben, die
nicht Teil der Komponente sind, aber von der Komponente genutzt werden. In unserem
Beispiel ist dies das Package org.osgi.framework, in dem sich die Schnittstellen Bundle-
Activator und BundleContext befi nden. Im Allgemeinen können beliebig viele Packages
angegeben werden, die durch Kommas voneinander getrennt werden müssen. Wenn die
Zeile Import-Package entfernt wird, gibt es einen Fehler beim Laden der Komponente
(„NoClassDefFoundError: org/osgi/framework/BundleActivator“). Umgekehrt werden mit
Export-Package die eigenen Packages aufgelistet, die von anderen Komponenten durch
Import-Package genutzt werden können. Im Allgemeinen können dies auch mehrere sein.
In unserem Fall hat die Komponente nur ein einziges Package, also können auch nicht mehr
exportiert werden. Wenn die Zeile Export-Package fehlen würde, würde dies zunächst nicht
auff allen. Erst wenn wir in der zweiten Beispielkomponente die erste Komponente nutzen
wollen, würden wir Probleme bekommen.
Die vorhandenen Klassendateien und die Manifest-Datei können wir nun zu einer Kompo-
nente (Bundle) bündeln und installieren. Als Framework nutzen wir die OSGi-Implementie-
rung von Apache Felix, die in Form einer Jar-Datei (felix.jar) von der entsprechenden Web-
Seite bezogen werden kann. Nach dem Starten von Felix (Kommando „java -jar bin\felix.
jar“) können unterschiedliche Kommandos eingegeben werden (durch den Prompt „g!“ zeigt
 
Search WWH ::




Custom Search