2009-11-17 13 views
11

Sto solo iniziando con la programmazione OSGi e ho trovato due modi di ascolto per i servizi attivati.Quando utilizzare ServiceTracker vs ServiceReference

Il primo modo, da un libro EclipseRCP, usa 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])); 
} 

Il secondo, da esempi reperiti su Internet, utilizza 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(); 

Quale di questi è il corretto e/o miglior modo di tenere un registro di tutti i servizi che implementano una determinata interfaccia? C'è un altro modo per realizzare questo? Perché sembrano esserci due modi per fare la stessa cosa?

risposta

15

Come già possibile derivare formare il nome del pacchetto è org.osgi.util.tracker.ServiceTrackerServiceTracker una classe di utilità, che (in alcuni casi)

semplifica l'utilizzo dei servizi dal Registro di sistema del servizio del quadro.

Nella programmazione ci sono sempre diversi modi di fare le cose. Puoi gestire le tue ServiceReferences da solo o se ti va bene o il tuo problema utilizzare la classe di utilità in bundle che ha i suoi casi d'uso.

controllare anche questo Best practices for accessing services

Alcune altre fonti che affermano che la maggior parte del tempo è saggio usare ServiceTracker

A Comparison of Eclipse Extensions and OSGi Services

OSGi Service Tracker

Getting Started with OSGi: Consuming a Service

Problemi correlati