Java Reference
In-Depth Information
Um unterschiedliche Versionen einer Klasse unterscheiden zu können, gibt es Konstanten
mit den Namen INCREMENT und VERSION, die von Version zu Version verä ndert werden
können. Durch die Methode version kann die Konstante VERSION erfragt werden. Die Kon-
stante INCREMENT spielt bei der Methode increment eine Rolle; der Zähler wird bei jedem
Aufruf um INCREMENT erhöht.
Die erste Komponente enthält außerdem eine Activator-Klasse namens CounterServiceActi-
vator (s. Listing 9.4), welche die Schnittstelle BundleActivator implementiert. In der Start-
Methode wird ein Objekt der Klasse CounterImpl erzeugt und in der Registratur, die vom
BundleContext-Parameter bereitgestellt wird, angemeldet.
Listing 9.4 Klasse CounterServiceActivator
package javacomp.osgi.bundle1;
import org.osgi.framework.*;
public class CounterServiceActivator implements BundleActivator
{
public void start(BundleContext context) throws Exception
{
System.out.println("CounterServiceActivator.start");
context.registerService(Counter.class,
new CounterImpl(),
null);
}
public void stop(BundleContext context) throws Exception
{
System.out.println("CounterServiceActivator.stop");
}
}
Das Anmelden eines Objekts erfolgt über den BundleContext-Parameter. Als Suchschlüssel
wird in der Methode registerService eine Klasse oder Schnittstelle angegeben. Die Methode
registerService ist mehrfach überladen. Es gibt eine Variante, in der die Klasse bzw. Schnitt-
stelle als String angegeben wird. Es kann aber nur ein String angegeben werden, der auch
tatsächlich einer Klasse oder Schnittstelle entspricht. In Listing 9.4 wird die Variante von
registerService verwendet, in der der Suchschlüssel durch ein Class-Objekt spezifi ziert
wird. Die Signatur dieser generischen Methode sieht so aus:
public <S> ServiceRegistration<S> registerService(Class<S> clazz,
S service,
Dictionary<String,?> properties)
Der zweite Parameter von registerService ist das anzumeldende Objekt. Suchschlüssel und
anzumeldendes Objekt müssen kompatibel zueinander sein. Verwendet man die Methode,
in der die Klasse oder Schnittstelle als String angegeben wird, dann fällt eine Inkompatibi-
lität erst zur Laufzeit auf. Der Vorteil der verwendeten Variante ist, dass in diesem Fall die
Inkompatibilität bereits zur Übersetzungszeit bemerkt wird. Wenn z. B. Listing 9.3 so ver-
ä ndert wird, dass die Klasse CounterImpl nicht mehr die Schnittstelle Counter implemen-
tiert, dann meldet der Compiler für den Aufruf von registerService in Listing 9.4 den Fehler:
„The method registerService . . . is not applicable for the arguments . . .“. Mit dem dritten
 
Search WWH ::




Custom Search