2009-12-21 9 views
8

मैं वर्तमान में एक नए आवेदन पर ओजीसी (स्प्रिंग डीएम) का परीक्षण कर रहा हूं। एप्लिकेशन को फाइल सिस्टम इवेंट्स को सुनने में सक्षम होना चाहिए। आज मैंने इसे एक साधारण समय आधारित परामर्श के साथ हल किया है, लेकिन जब जावा 7 जारी किया जाता है तो शायद मैं इसे एनआईओ 2 आधारित कार्यान्वयन के साथ बदलना चाहता हूं।एक ही इंटरफ़ेस के कार्यान्वयन के साथ अलग ओजीआई बंडल - उस इन्फर्फ़ेस को कहां रखा जाए?

अब तक मैं तीन बंडल देख रहा हूं, दो फाइल सेवा कार्यान्वयन के लिए और एक सेवाओं के उपभोग के लिए एक व्यवसाय तर्क के लिए। दो कार्यान्वयनों को एक ही इंटरफेस को लागू करना चाहिए, इसलिए मेरा सवाल यह है कि, उस इंटरफ़ेस को कहां रखा जाए? कार्यान्वयन वाले बंडल में इंटरफ़ेस रखने से सेवा उपभोक्ताओं में से किसी एक पर निर्भर करेगी।

यह संरचना करने के लिए सबसे अच्छा और सबसे osgi जैसा तरीका क्या होगा? अब तक मेरा सबसे अच्छा शर्त कार्यान्वयन के लिए सामान्य इंटरफेस को परिभाषित करने वाला एक नया "एपीआई" बंडल बनाना है।

+0

मुझे लगता है कि आप कर रहे हैं "एपीआई मॉड्यूल" विचार जाने का रास्ता है। – skaffman

उत्तर

8

अलग-अलग एपी-बंडल शायद सबसे अच्छा choise है। यह आपको बाद में बंडल इम्प्लांटेशन को प्रतिस्थापित करने की अनुमति देता है। इसके अलावा अलग-अलग एपीआई-बंडल के साथ आप उपभोक्ता को फिर से शुरू करने की आवश्यकता के साथ अपने वर्तमान बंडल को गर्म-प्रतिस्थापित करने में सक्षम हैं।

कक्षाएं (और इंटरफेस) उनके नाम और कक्षा लोडर द्वारा मान्यता प्राप्त हैं। इसलिए यदि आप उसी बंडल में सेवा-इंटरफ़ेस को कार्यान्वयन के रूप में रखते हैं तो आप चल रहे बंडल को गर्म करने की क्षमता खो देते हैं। हालांकि इंटरफेस का एक ही नाम है, और यह हर तरह से समान है कि नए तैनात बंडल के पास एक अलग वर्ग लोडर => उपभोक्ता नए तैनात बंडल इंटरफ़ेस को एक नई कक्षा के रूप में मानता है, और इसकी निर्भरताएं अब पूरी नहीं हुई हैं।

सेवा संगतता और संस्करणों पर अधिक जानकारी (टिप्पणी देखें) के लिए: http://wiki.osgi.org/wiki/Service_Compatibility

+3

इसके अतिरिक्त आपको बंडल-संस्करणों का उपयोग करना चाहिए। इस तरह आप एक ही एपीआई बंडल के विभिन्न संस्करणों और यहां तक ​​कि एक ही ढांचे में तैनात एक ही सेवा भी कर सकते हैं। – akr

+1

जबकि आप ओएसजीआई के साथ ऐसा कर सकते हैं, यदि आपके पास एक ही एपीआई के विभिन्न संस्करण हैं, तो यह आपके एप्लिकेशन को उन क्षेत्रों में विभाजित करेगा जो प्रत्येक संस्करण का उपयोग करते हैं, और संभवतः वे बहुत अच्छी तरह से सहयोग करने में सक्षम नहीं होंगे, क्योंकि असंगत क्लासलोडर्स होंगे। उदाहरण के लिए डिफ़ॉल्ट ओएसजीआई ऐसी सेवाएं नहीं बनाएगा जो एपीआई के एक अलग संस्करण को लागू करते हैं। – Thilo

+0

यह सही है। मैं बस यह इंगित करना चाहता था कि मामले में यहां संस्करण का उपयोग करना वास्तव में महत्वपूर्ण है, उदाहरण के लिए, केवल एक बंडल (कार्यान्वयन या एपीआई) अपडेट किया गया है। अन्यथा आप एक गड़बड़ी में समाप्त हो सकते हैं क्योंकि आप नहीं देखते हैं कि एपीआई, कार्यान्वयन बंडल और उपयोग बंडल मेल नहीं खाता है। क्या आप समझा सकते हैं कि "असंगत क्लासलोडर्स" के साथ आपका क्या मतलब है? – akr

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