Java Reference
In-Depth Information
CounterImpl ersetzen. Die Beispielkomponenten würden auch in dieser Form problemlos
funktionieren. Wie im folgenden Abschnitt noch deutlich werden wird, gibt es aber gute
Gründe für die Verwendung einer Schnittstelle.
Eine weitere Gefahr einer falschen Verallgemeinerung besteht darin, dass man annimmt,
dass das Nutzen einer Komponente immer über das Anmelden eines Objekts in der Registra-
tur und dem Abfragen dieses Objekts durch die andere Komponente erfolgen muss. Wenn
wir die Beispielkomponenten nochmals ansehen, dann stellen wir fest, dass die Client-Kom-
ponente nicht nur das von der Service-Komponente bereitgestellte Objekt, sondern auch die
Schnittstelle Counter und die Klasse CounterImpl nutzt, die ebenfalls von der Service-Kom-
ponente zur Verfügung gestellt werden. Nun ist es aber auch durchaus möglich, dass die
Nutzung nur auf Klassenebene erfolgt. Wir könnten unser Beispiel also z. B. wie folgt verä n-
dern: In der Manifest-Datei der Service-Komponente wird die Angabe über den Bundle-Acti-
vator gelöscht (die Klasse CounterServiceActivator kann, muss aber nicht aus dem Package
entfernt werden). Dadurch wird beim Installieren und Starten der Service-Komponente kein
CounterImpl-Objekt erzeugt und registriert. Die Client-Komponente kann selbst ein Objekt
der Klasse CounterImpl erzeugen, wie die Klasse CounterClientActivator in Listing 9.6 zeigt.
Listing 9.6 Variante der Klasse CounterClientActivator mit Erzeugung eines
CounterImpl-Objekts
package javacomp.osgi.bundle2;
import javacomp.osgi.bundle1.*;
import org.osgi.framework.*;
public class CounterClientActivator implements BundleActivator
{
private CounterThread thread;
public void start(BundleContext context) throws Exception
{
System.out.println("CounterClientActivator.start");
Counter counter = new CounterImpl();
thread = new CounterThread(counter);
thread.start();
}
public void stop(BundleContext context) throws Exception
{
System.out.println("CounterClientActivator.stop");
if(thread != null)
{
thread.interrupt();
thread = null;
}
}
}
class CounterThread extends Thread
{
//unverändert wie bisher
...
}
 
Search WWH ::




Custom Search