2011-07-01 8 views
7

मेरी टीम ओएसजीआई के आधार पर एक नई प्रणाली विकसित करने की कोशिश कर रही है, और अब हमारे पास 50 से अधिक बंडल और गिनती है। समस्या यह है कि बंडलों के बीच निर्भरता है। उदाहरण के लिए, जब एक स्टार्टअप बंडल होता है, तो यह ओएसजीआई को एक सेवा पंजीकृत करेगा, और जब बी स्टार्टअप बंडल करेगा, तो वह उस सेवा का उपयोग करेगा। इसलिए मुझे बंडल की तुलना में पहले स्टार्टअप की आवश्यकता है। ऐसा करने के लिए, मैंने बंडल का प्रारंभ स्तर सेट किया है। बंडल बी से कम एक्या ओएसजीआई बंडलों के बीच निर्भरताओं का प्रबंधन करने के लिए विभिन्न स्टार्ट लेवल का उपयोग करना उचित है?

हमने स्टार्ट स्तर को सेट करने से बचने के लिए सर्विसट्रैकर का उपयोग करने की कोशिश की, लेकिन जब सेवाएं बढ़ती जा रही हैं ऊपर, पूरे सिस्टम को प्रबंधित करना और समझना मुश्किल हो जाता है।

हालांकि, मुझे इंटरनेट पर यह आलेख मिला: OSGi and Start Levels। मैं इसमें दो वाक्यों के साथ यकीन नहीं है: शुरुआत के स्तर के भीतर

  • प्रारंभ आदेश अनिश्चित है!
  • पूरी तरह से, प्रारंभ स्तर के साथ काम करते समय, प्रारंभ आदेश पर कभी भी निर्भर न करें। प्रबंधन के मुद्दे के रूप में प्रारंभ स्तर के बारे में सोचें, विकास समय के मुद्दे पर नहीं।

क्या इसका मतलब यह है कि प्रारंभ स्तर प्रारंभ आदेश का निर्धारण नहीं करेगा? तो मुझे इसका इस्तेमाल कब करना चाहिए?

क्या ओएसजीआई बंडलों के बीच निर्भरताओं का प्रबंधन करने के लिए विभिन्न स्टार्ट लेवल का उपयोग करना उचित है?

सभी बंडल गतिशील मॉड्यूल होने के लिए संभव है (सेवा सेवाओं को उपयोग करने वाली सभी सेवाओं को ट्रैक करने के लिए उपयोग करें), लेकिन इसमें अधिक समय लगता है और वरिष्ठ डेवलपर्स की मांग होती है, और सिस्टम डीबग करना मुश्किल हो जाता है।

उत्तर

9

मेरा जवाब बर्ट्रेंड के समान है: यदि आप अपने समाधान के लिए एक उच्च स्तरीय घटक आधारित अमूर्त उपयोग करने पर विचार करना चाहिए: एससीआर, iPOJO, खाका, आदि

शुरू स्तरों का उपयोग निर्भरता नियंत्रित करने के लिए एक छोटे से उपयोग करने जैसा है दौड़ की स्थिति को ठीक करने के लिए जावा में थ्रेड प्राथमिकताएं। निश्चित रूप से, आप चीजों को थोड़ी देर के लिए काम कर सकते हैं, लेकिन आप प्रक्रिया में पागल हो जाएंगे - और आप अंततः वैसे भी हार जाएंगे।

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

उस ने कहा, मैंने तीसरे पक्ष के बंडलों (उदाहरण के लिए, वसंत) में मिलने वाली बग्स निर्भरता को हल करने के लिए प्रारंभ स्तर का उपयोग किया है, हालांकि इसमें सेवा आदेश शामिल नहीं था लेकिन संसाधनों को खोजने के बारे में धारणाएं (वसंत के साथ, एक एक्सएसडी के लिए वसंत एकीकरण कस्टम नेमस्पेस)।

+0

मेरी टीम ने इसी तरह के मुद्दों के लिए प्रारंभ स्तर का उपयोग किया है। समस्याओं का शिकार करने का यह एक शानदार तरीका है और यदि आपके पास अंतर्निहित समस्या को तुरंत ठीक करने का समय नहीं है तो यह एक उपयोगी शॉर्ट-टर्म समाधान है। – Jon7

+0

+1 rsteele के उत्तर में +1। प्रारंभिक आदेश के आधार पर चरम नाजुकता का परिचय देता है। स्टार्ट-लेवल के लिए एक अन्य उपयोग-मामला हालांकि अनुकूलन है। आपके बंडलों को हमेशा काम करना चाहिए * कोई फर्क नहीं पड़ता कि वे किस क्रम में शुरू कर रहे हैं ... हालांकि कभी-कभी एक बंडल को अपने प्रारंभिक आदेश के आधार पर कम या ज्यादा काम करने की आवश्यकता हो सकती है। तो आप अपने ऐप के प्रदर्शन को अनुकूलित करने के लिए स्टार्ट लेवल का उपयोग कर सकते हैं, बस वास्तविक कार्यक्षमता के लिए उन पर निर्भर न हों। –

+0

धन्यवाद नील। मैंने दक्षता मुद्दा नहीं माना था, लेकिन यह बहुत समझ में आता है। –

7

सेवाओं के बीच निर्भरताओं का प्रबंधन करने के लिए प्रारंभ स्तर का उपयोग करना एक बुरा विचार है - सेवा घटक रनटाइम (एससीआर) इसे प्रबंधित करने का एक बेहतर तरीका है, और यदि सही हो तो सभी निर्भरताओं, स्टार्टअप ऑर्डर, घटकों को पुनरारंभ करने का ख्याल रखेगा जब उनके आवश्यक सेवाओं को पुन: प्रारंभ कर रहे हैं, आदि

आप Maven उपयोग कर रहे हैं, अपाचे फेलिक्स एससीआर प्लगइन (http://felix.apache.org/site/scr-annotations.html) यह आसान बस कुछ ही जावा एनोटेशन का उपयोग एससीआर-प्रबंधित सेवाओं बनाने के लिए बनाता है। अपाचे स्लिंग का कोड (http://sling.apache.org) इसका उपयोग कर उदाहरणों से भरा है।

+0

हम Maven उपयोग नहीं कर रहे हैं, और हम फेलिक्स के बजाय विषुव ues। कोई और सुझाव? –

+0

एससीआर के संबंध में विषुव को कोई फर्क नहीं पड़ता है, और यदि आप मेवेन का उपयोग नहीं कर रहे हैं तो आप सीधे बीएनडी का उपयोग कर सकते हैं (http://www.aqute.biz/Bnd/Bnd) - यही वह मैवेन प्लगइन्स है जो मैंने उल्लेख किया है हुड के नीचे उपयोग करें। –

1

प्रारंभ स्तर/निर्भरता मुद्दे के बारे में एक अच्छा सारांश जो बताता है कि आपको प्रारंभिक स्तर के साथ अपने बंडलों के बीच निर्भरताओं को परिभाषित करने से क्यों बचाना है।

http://wiki.osgi.org/wiki/Avoid_Start_Order_Dependencies

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

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