Java Reference
In-Depth Information
Bundle-SymbolicName: CounterService
Bundle-Version: 2.0.0
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Vendor: Rainer Oechsle
Import-Package: org.osgi.service.component, javacomp.osgi.bundle0
Service-Component: OSGI-INF/counterservice.xml
Wie zu sehen ist, befi ndet sich in unserem Beispielfall die XML-Datei in einem eigenen
Verzeichnis. Die Jar- bzw. Zip-Datei unserer Komponente besitzt auf der obersten Ebene also
die Verzeichnisse javacomp, META-INF und OSGI-INF. Die Datei counterservice.xml hat den
folgenden Inhalt:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"
activate="activate" deactivate="passivate" immediate="true"
name="DeclarativeCounterService">
<implementation
class="javacomp.osgi.bundle4.CounterImpl"/>
<service>
<provide
interface="javacomp.osgi.bundle0.Counter"/>
</service>
</scr:component>
Die XML-Datei sollte zum großen Teil verständlich sein. Im Element <implementation> wird
die „Einstiegsklasse“ der Komponente angegeben. Das Element <service> spezifi ziert die
Schnittstelle, die mit registerService als Dienst angemeldet wird. Auß erdem werden als
Attribute des Elements <component> die Namen der Methoden für die Aktivierung und
Deaktivierung angegeben. Durch das Setzen von immediate auf true wird beim Starten der
Komponente sofort ein Objekt der Einstiegsklasse erzeugt und die Aktivierungsmethode
aufgerufen. Man sieht also die Ausgabe der Methode activate direkt beim Start. Setzt man
immediate auf false, so wird das Erzeugen und Aktivieren des Objekts der Einstiegsklasse
so lange verschoben, bis die Komponente tatsächlich von einer anderen Komponente
benutzt wird. In diesem Fall sieht man die Ausgabe der Methode activate erst dann, wenn
man die Client-Komponente startet, die jetzt besprochen wird.
Auch die Client-Komponente hat keinen BundleActivator mehr. Zu Demonstrationszwecken
gibt es stattdessen Methoden, die beim Starten und Stoppen der Komponente aufgerufen
werden. Für die Funktionalität wichtig sind die beiden Methoden startCounterThread und
stopCounterThread. Durch entsprechende Konfi guration in der XML-Datei werden diese
jedes Mal dann aufgerufen, wenn ein Dienst des Typs javacomp.osgi.bundle0.Counter ver-
fügbar wird bzw. wenn dieser Dienst nicht mehr verfügbar ist. Listing 9.9 zeigt den Pro-
grammode der neuen Client-Komponente.
Listing 9.9 Klasse CounterClient zur Verwendung mit Declarative Services
package javacomp.osgi.bundle5;
import javacomp.osgi.bundle0.Counter;
import org.osgi.service.component.ComponentContext;
public class CounterClient
{
 
Search WWH ::




Custom Search