Quand utiliser ServiceTracker vs ServiceReference
Je commence tout juste avec OSGi programmation et avons rencontré deux façons à l'auditeur pour les services en cours d'activation.
La première manière, à partir d'un EclipseRCP livre, utilise ServiceReference:
String filter="(objectclass="+IModelCreator.class.getName()+")";
context.addServiceListener(this, filter);
modelCreators = Collections.synchronizedMap(
new HashMap<ModelID, List<IModelCreator>>());
ServiceReference references[] = context.getServiceReferences(null, filter);
if(references==null) return;
for(int i=0;i<references.length;++i) {
this.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED,
references[i]));
}
La seconde, à partir de l'internet des exemples, utilise ServiceTracker:
ServiceTracker logReaderTracker = new ServiceTracker(context,
org.osgi.service.log.LogReaderService.class.getName(), null);
logReaderTracker.open();
Object[] readers = logReaderTracker.getServices();
if (readers != null) {
for (int i = 0; i < readers.length; i++) {
LogReaderService lrs = (LogReaderService) readers[i];
m_readers.add(lrs);
lrs.addLogListener(m_logger);
}
}
logReaderTracker.close();
Lequel des deux est le bon et/ou de meilleure façon de tenir un registre de tous les services qui implémentent une Interface donnée? Est-il une autre façon de régler ce problème? Pourquoi ne semble y avoir deux façons de faire la même chose?
source d'informationauteur KitsuneYMG
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez déjà peut dériver formulaire le nom du package
org.osgi.util.tracker.ServiceTracker
estServiceTracker
une classe utilitaire qui (dans certains cas)Dans la programmation, il y a toujours plusieurs façons de faire les choses. Vous pouvez gérer vos ServiceReferences par vous-même ou si elle vous convient ou votre problème, utilisez l'utilitaire fourni de classe qui a ses cas d'utilisation.
Également vérifier ce Les meilleures pratiques pour l'accès aux services
Certains autres sources qui affirment que le plus de temps, il est sage d'utiliser
ServiceTracker
Une Comparaison de l'Éclipse d'Extensions et de Services OSGi
OSGi Service Tracker
Mise en route avec OSGi: la consommation d'un Service