मैं अपनी संपत्तियों द्वारा समान इंटरफ़ेस को लागू करने वाली प्रकाशित ओएसजीआई सेवाओं के बीच अंतर कैसे कर सकता हूं?गुणों द्वारा ओएसजीआई सेवाओं की खोज करें
उत्तर
मान लें कि आप गुणों के लिए कुछ मूल्यों के आधार पर पंजीकृत सेवाओं को पुनर्प्राप्त करना चाहते हैं, तो आपको फ़िल्टर (जो LDAP वाक्यविन्यास पर आधारित है) का उपयोग करने की आवश्यकता है।
उदाहरण के लिए:
int myport = 5000;
String filter = "&(objectClass=" + MyInterface.class.getName()
+ ")(port=" + myport + ")";
ServiceReference[] serviceReferences = bundleContext.getServiceReferences(null,filter);
, जहां आप सेवाएं दोनों MyInterface
लागू करने और port
संपत्ति myport
के बराबर का मान रखने के लिए देखने के लिए चाहते हैं।
Here संदर्भ प्राप्त करने के लिए प्रासंगिक जावाडोक है।
टिप्पणी 1:
ऊपर के उदाहरण और जावाडोक रिलीज 4.2 का संदर्भ लें। यदि आप जे 2 एसई 1.4 रनटाइम तक सीमित नहीं हैं, तो मेरा सुझाव है कि आप रिलीज 4.3 syntax पर एक नज़र डालें, जहां आप जेनिक्स का उपयोग कर सकते हैं।
टिप्पणी 2: (रे के सौजन्य से)
आप भी अपने फिल्टर की सत्यता की बजाय एक filterStr
स्ट्रिंग से एक Filter वस्तु बनाने के द्वारा पूर्व की जाँच कर सकते हैं:
Filter filter = bundleContext.createFilter(filterStr);
जो भी अनुमति देता है आप फ़िल्टर को अन्य मानदंडों से मेल खाते हैं। संदर्भ प्राप्त करने के लिए आप अभी भी filterStr
पास करते हैं, क्योंकि Filter
तर्क के लिए कोई ओवरलोडिंग नहीं है। कृपया ध्यान रखें, इस तरह, इस तरह आप दो बार शुद्धता की जांच करेंगे: getServiceReferences
और createFilter
फ़िल्टर को पार्स करने पर InvalidSyntaxException
फेंक दें। निश्चित रूप से एक शो-स्टॉपर अक्षमता नहीं, मुझे लगता है, लेकिन यह उल्लेखनीय है।
ऊपर लुका का उत्तर सही है, हालांकि यह मानता है कि आप सेवाओं तक पहुंच के लिए निम्न स्तर API का उपयोग कर रहे हैं।
यदि आप घोषणात्मक सेवाओं का उपयोग कर रहे हैं (जो मैं आमतौर पर अनुशंसा करता हूं) तो फ़िल्टर को सेवा संदर्भ के target
विशेषता में जोड़ा जा सकता है। उदाहरण के लिए (डी एस के लिए bnd एनोटेशन का उपयोग):
@Reference(target = "(port=8080)")
public void setHttpService(HttpService http) {
// ...
}
मैं वास्तव में चाहता हूं कि डीएस (+ एनोटेशन) का उपयोग करने पर एक संपूर्ण ट्यूटोरियल था। नील, क्या आप एक के बारे में जानते हैं (भले ही यह खरीद के लिए है)? मान लीजिए 4.2 (4.3 सबसे अधिक)। – Ray
@ रे: जहां तक किताबें जाती हैं, कोई भी मानक पर नहीं होने के कारण बीएनडी एनोटेशन का इलाज करता है। डीएस के लिए मैं "ओएसजीआई और इक्विनोक्स" (आर 4.2, "ओएसजीआई इन गहराई" में कुछ संदर्भों को छोड़कर आर 4.3 के लिए अभी भी कोई पुस्तक नहीं सुझाऊंगा) –
खाका में आप संदर्भ या संदर्भ-सूची तत्व पर फिल्टर विशेषता निर्दिष्ट कर सकते हैं। उदाहरण के लिए:
<reference id="sampleRef"
interface="org.sample.MyInterface"
filter="(port=5000)"/>
जो काम नहीं करता है, आपको असंतुष्ट आवश्यकता है): --------------------------- सेवा: (और (सेवा = MyInterface) (पोर्ट = 5000)) [कंटेनर- नाम] कंटेनर शुरू करते समय (कक्षा और कंटेनर नाम उचित रूप से बदल गए)। कोई फर्क नहीं पड़ता कि वह त्रुटि क्या कहने की कोशिश कर रही है। अफसोस की बात है कि हम निराशाजनक दस्तावेज फ्यूज सामान का उपयोग कर रहे हैं ... – StripLight
- 1. गुइसे और ओएसजीआई सेवाओं को एकीकृत करना
- 2. एंड्रॉइड एनएसडी सभी सेवाओं की खोज नहीं कर रहा है
- 3. ओएसजीआई: ब्लूप्रिंट घोषणात्मक सेवाओं को प्रतिस्थापित करता है?
- 4. ओएसजीआई घटक और सेवाओं के बीच क्या अंतर है
- 5. ओएसजीआई
- 6. ओएसजीआई ओबीआर भंडार होस्टिंग?
- 7. गुणों द्वारा एंड्रॉइड सॉर्ट सरणीसूची
- 8. ओएसजीआई बंडल की पैकेज संरचना
- 9. ओएसजीआई
- 10. ओएसजीआई
- 11. एक बुद्धिमान तरीके से कई ओएसजीआई सेवाओं के बीच रनटाइम में कैसे चयन करें?
- 12. आरआईए सेवाओं द्वारा लौटा सिल्वरलाइट पीओसीओ
- 13. गुणों के बजाय गुणों का उपयोग कब करें?
- 14. वेब सेवाओं की सुरक्षा
- 15. दूरस्थ ओएसजीआई सेवा
- 16. इंटेलिज़ ओएसजीआई संदर्भ विशेषता
- 17. छवि एपीआई द्वारा Google खोज?
- 18. SavJECT द्वारा जावामेल आईएमएपी खोज
- 19. वैश्विक चर और उसके गुणों में एक मूल्य की खोज करें
- 20. ओएसजीआई बंडल
- 21. प्रतिबिंब - सभी शून्य गुणों की जांच करें
- 22. क्या ओएसजीआई एप्लिकेशन में पंजीकृत सेवाओं को देखने का कोई तरीका है?
- 23. रीस्टफुल वेब सेवाओं की वेब निर्देशिका?
- 24. ओएसजीआई बंडल
- 25. ओएसजीआई रनटाइम
- 26. वितरित इंफ्रास्ट्रक्चर में ओएसजीआई
- 27. ओएसजीआई थ्रेडिंग मॉडल
- 28. गुणों और प्रकारों के लिए स्प्री खोज फ़िल्टर
- 29. ओएसजीआई सेवाएं वास्तुकला: उपभोक्ता
- 30. ओएसजीआई परिनियोजन व्यवस्थापक सेवा की स्थिति
मैं सिर्फ जोड़ना होगा कि यह फ़िल्टर फिल्टर = bundleContext.createFilter (filterStr) का उपयोग कर फिल्टर वाक्य रचना को मान्य करने के लिए अच्छा हो सकता है; सबसे पहले, केवल प्रारंभिक सैनिटी जांच के लिए, विशेष रूप से आपके फ़िल्टर निर्माण को और अधिक गतिशील हो जाता है। – Ray
@ रे: बनाने के लिए एक अच्छी टिप्पणी। यह दुर्भाग्यपूर्ण है कि ओएसजीआई फ़िल्टर को पास करने के लिए मजबूर नहीं करता है (या यहां तक कि अनुमति भी देता है)। –
@LucaGeretti घोषणात्मक ओएसजीआई सेवाओं को खोजने का कोई और स्मार्ट तरीका है? –