Java Reference
In-Depth Information
ctx.bind("Counter2", c2);
}
@Stop
public void stop(ComponentContext ctx)
{
System.out.println("CounterService.stop");
ctx.unbind("Counter1");
ctx.unbind("Counter2");
}
}
Auf den ersten Blick sieht es so aus, als könnte auf die Registratur nur in den Start- und
Stop-Methoden zugegriff en werden. Das ist aber nicht richtig. Es könnte nämlich in der
Start-Methode auch ein Thread gestartet werden, dem die Referenz auf den ComponentCon-
text mitgegeben wird. Somit könnte eine Komponente auch nach der Rückkehr von einer
Start-Methode noch auf den ComponentContext zugreifen. Wir werden bei den hier vorge-
stellten Beispielkomponenten davon keinen Gebrauch machen. Die Methoden, welche die
Schnittstelle ComponentContext implementieren, sind aus diesem Grund dennoch vorsorg-
lich alle mit synchronized gekennzeichnet (s. später in Listing 6.11).
6 .1 . 3 Komponente Nr. 3
In der dritten Komponente, welche die zweite nutzen möchte, machen wir nun von der Mög-
lichkeit Gebrauch, Threads zu starten, die aber nicht auf die Registratur des Komponenten-
systems zugreifen. In der Start-Methode bescha sich die Komponente Nr. 3 Zugriff auf die
zwei in der Registratur angemeldeten Counter-Objekte. Anschließend wird für jedes dieser
Counter-Objekte ein Thread gestartet, in dem wiederholt die Methode increment auf das
entsprechende Counter-Objekt angewendet und der zurückgegebene Wert ausgegeben
wird. Damit der Bildschirm nicht mit Ausgaben überfl utet wird, wird zwischen je zwei Aus-
gaben eine bestimmte Zeit gewartet. Die laufenden Threads werden in der Stop-Methode der
Komponente angehalten. In Listing 6.5 ist der Programmcode unserer dritten Komponente
zu fi nden. Da davon ausgegangen wird, dass die Leserinnen und Leser mit dem Thema
Threads in Java vertraut sind, benötigt der Programmcode keine weiteren Erklärungen.
Listing 6.5 Klassen CounterClient und CounterThread
package javacomp.prototype.application3;
import javacomp.prototype.application2.Counter;
import javacomp.prototype.framework.ComponentContext;
import javacomp.prototype.framework.Start;
import javacomp.prototype.framework.Stop;
public class CounterClient
{
private CounterThread thread1;
private CounterThread thread2;
@Start
public void start(ComponentContext ctx)
 
Search WWH ::




Custom Search