OSGi: ServiceTracker

Generic1

Top Contributor
Hallo,

hätte eine Frage zum ServiceTracker und zwar hab ich folgende CodeZeilen:

Java:
cAT = new ServiceTracker(context, ConfigurationAdmin.class.getName(), null);
cAT.open();

mit ist klar, dass ich mich mit dem ServiceTracker bei der ServiceRegistry anmelde und wenn sich in dieser Service- Registry was tut, dann werde ich über den ServiceTracker informiert. Nun wird beim ServiceTracker ein Klassenname angegeben (ConfigurationAdmin.class.getName()) und dieser Name bereitet mir ein paar Kopfzerbrechen. Wenn ich ConfigurationAdmin.class.getName() als Klassennamen angebe, heißt das dann, dass, wenn sich in der Configuration des OSGi- Frameworks was tut, das Bundle mit dem "context" informiert wird oder bin ich da am Holzweg?

Ich kenn bis jetzt nur die Lösung, dass ich vom ServiceTracker ableite und dann die Methoden addingService(...) und removedService(...) überschreibe.
Besten Dank,
lg
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 5909

Gast
Nun wird beim ServiceTracker ein Klassenname angegeben (ConfigurationAdmin.class.getName()) und dieser Name bereitet mir ein paar Kopfzerbrechen. Wenn ich ConfigurationAdmin.class.getName() als Klassennamen angebe, heißt das dann, dass, wenn sich in der Configuration des OSGi- Frameworks was tut, das Bundle mit dem "context" informiert wird oder bin ich da am Holzweg?

Du überwachst dann den OSGi Service ConfigurationAdmin


Ich kenn bis jetzt nur die Lösung, dass ich vom ServiceTracker ableite und dann die Methoden addingService(...) und removedService(...)

Das ist auch der richtige weg wenn du pure OSGi verwendest


Les dir am besten die OSGi Spec ab Seite 461 durch:
OSGi Alliance | Download / File

EDIT: eine andere Möglichkeit mit pure OSGi wäre z.B. der EventService

oder aber du nimmst Equinox DS / iPOJO / Spring DM / Google Guice + Peaberry
 
Zuletzt bearbeitet von einem Moderator:

Generic1

Top Contributor
Hätte noch eine Frage zu den Services von OSGi,
wenn ich in einem Bundle schreibe:

Java:
BundleContext#registerService(TranslationService.class.getName(), new TranslationServiceImpl(locale), properties);
also einen Service anmelde und in einem anderen Bundle den Service abfrage mit:

Java:
final TranslationService translationService = (TranslationService) translationServiceTracker.getService();

dann gebe ich beim Abfragen ja garnicht an, was ich für einen Service von der Service Registry haben will. Gibt mir da OSGi irgendeinen Service zurück der aus den ReferenzeTyp passt, in diesem Fall "TranslationService" oder wie macht das das OSGi Framework?
Besten Dank,
lg

[Edit]
ist schon klar -> gelöst!!
 
G

Gelöschtes Mitglied 5909

Gast
wenn einer registriert ist kriegst du den einen.
SOnst kannst du dir auch alle holen, oder du verwendest filter
 

Ähnliche Java Themen

Neue Themen


Oben