2009-11-17 9 views
11

मैं बस ओएसजीआई प्रोग्रामिंग से शुरू कर रहा हूं और सेवाओं को सक्रिय करने के लिए श्रोता के दो तरीकों से आया हूं।सर्विसट्रैकर बनाम सेवा संदर्भ का उपयोग कब करें

पहला तरीका, एक 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(); 

कौन सा इन में से एक है सही और/या दिए गए इंटरफ़ेस को लागू करने वाली सभी सेवाओं का पंजीकरण करने का सबसे अच्छा तरीका? क्या इसे पूरा करने का कोई और तरीका है? एक ही काम करने के दो तरीके क्यों प्रतीत होते हैं?

उत्तर

15

आप पहले से ही पैकेज का नाम org.osgi.util.tracker.ServiceTracker फार्म प्राप्त कर सकते हैं ServiceTracker है एक उपयोगिता वर्ग जो (कुछ मामलों में)

फ्रेमवर्क की सेवा रजिस्ट्री से सेवाओं का उपयोग सरल करता है।

प्रोग्रामिंग में हमेशा चीजों को करने के कई तरीके होते हैं। आप या तो अपने सेवा संदर्भों को स्वयं से प्रबंधित कर सकते हैं या यदि यह आपको उपयुक्त बनाता है या आपकी समस्या बंडल यूटिलिटी क्लास का उपयोग करती है जिसमें इसके उपयोग के मामले हैं।

इसके अलावा इस Best practices for accessing services

कुछ अन्य स्रोतों, जिनके अनुसार समय की यह सबसे यह बुद्धिमान है उपयोग करने के लिए जाँच ServiceTracker

A Comparison of Eclipse Extensions and OSGi Services

OSGi Service Tracker

Getting Started with OSGi: Consuming a Service

संबंधित मुद्दे