Java Reference
In-Depth Information
erzeugt und die Start-Methode aufgerufen worden. Eine nochmalige Ausführung von lb
zeigt, dass sich damit auch unsere Beispielkomponente im Zustand Active befi ndet.
Auf die Zustände einer Komponente (Installed, Active usw.) wird später noch genauer einge-
gangen. Dasselbe gilt für die Versionsnummern, die jeweils am Ende der von lb ausgegebenen
Zeilen in Klammern stehen. Auf die Spalte Level wollen wir in diesem Buch nicht eingehen.
Ich möchte noch auf eine Problematik hinweisen, die ich aus eigener leidvoller Erfahrung
kenne. Auch am Ende der letzten Zeile der Manifest-Datei muss ein Newline-Zeichen stehen.
Ist dieses nicht vorhanden, was bei einer Betrachtung mit einem Editor in der Regel nicht
auff ällt, so ist die Wirkung so, als gäbe es die Zeile nicht. In diesem speziellen Beispiel
betri dies die Export-Package-Zeile, was für die erste Komponente — wie oben bereits
erwähnt — kein Problem darstellt. Wenn man aber in der zweiten Komponente die erste
Komponente nutzen möchte und dieses auch nach vielen Versuchen immer noch nicht funk-
tioniert, ist es unter Umstä nden nicht leicht, dies auf das Fehlen des Newline-Zeichens in
der Manifest-Datei des ersten Bundles zurückzuführen.
93 Zweites Beispiel-Bundle
Die zweite Komponente bescha sich in ihrer Start-Methode aus der Registratur das von
der ersten Komponente angemeldete Objekt und startet einen Thread, der dieses Objekt
wiederholt nutzt. In der Stop-Methode wird der Thread wieder angehalten (s. Listing 9.5).
Listing 9.5 Klassen CounterClientActivator und CounterThread
package javacomp.osgi.bundle2;
import javacomp.osgi.bundle1.*;
import org.osgi.framework.*;
public class CounterClientActivator implements BundleActivator
{
private ServiceReference<Counter> ref;
private CounterThread thread;
public void start(BundleContext context) throws Exception
{
System.out.println("CounterClientActivator.start");
ref = context.getServiceReference(Counter.class);
if(ref != null)
{
Counter counter = context.getService(ref);
if(counter != null && thread == null)
{
thread = new CounterThread(counter);
thread.start();
}
}
public void stop(BundleContext context) throws Exception
 
Search WWH ::




Custom Search