2009-11-17 13 views
11

Ich beginne gerade mit OSGi Programmierung und habe zwei Möglichkeiten gefunden, Listener für Dienste zu aktivieren.Wann ich ServiceTracker vs ServiceReference verwenden sollte

Der erste Weg, von einem EclipseRCP Buch verwendet 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])); 
} 

Die zweite, aus dem Internet Beispielen verwendet 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(); 

Welche davon ist die richtige und/oder beste Art, ein Verzeichnis aller Dienste zu führen, die eine bestimmte Schnittstelle implementieren? Gibt es einen anderen Weg, dies zu erreichen? Warum scheint es zwei Möglichkeiten zu geben, dasselbe zu tun?

Antwort

15

Wie Sie bereits ableiten können ServiceTracker eine Utility-Klasse, die org.osgi.util.tracker.ServiceTracker ist die Paketnamen bilden (in einigen Fällen)

Nutzung von Dienstleistungen aus der Registrierung Framework Service vereinfacht.

In der Programmierung gibt es immer mehrere Möglichkeiten, Dinge zu tun. Sie können Ihre ServiceReferences entweder selbst verwalten oder wenn es für Sie oder Ihr Problem geeignet ist, verwenden Sie die gebündelte Utility-Klasse mit ihren Anwendungsfällen.

Überprüfen Sie auch dieses Best practices for accessing services

Einige andere Quellen Zustand, der, dass es die meiste Zeit ist es ratsam, ServiceTracker

A Comparison of Eclipse Extensions and OSGi Services

OSGi Service Tracker

Getting Started with OSGi: Consuming a Service

zu verwenden
Verwandte Themen