मैं बस ओएसजीआई प्रोग्रामिंग से शुरू कर रहा हूं और सेवाओं को सक्रिय करने के लिए श्रोता के दो तरीकों से आया हूं।सर्विसट्रैकर बनाम सेवा संदर्भ का उपयोग कब करें
पहला तरीका, एक EclipseRCP किताब से, 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]));
}
दूसरा, इंटरनेट उदाहरण से, 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();
कौन सा इन में से एक है सही और/या दिए गए इंटरफ़ेस को लागू करने वाली सभी सेवाओं का पंजीकरण करने का सबसे अच्छा तरीका? क्या इसे पूरा करने का कोई और तरीका है? एक ही काम करने के दो तरीके क्यों प्रतीत होते हैं?