2012-03-12 9 views
9

पर ओएसजीआई सेवाओं को स्वत: शुरू/शुरू करने के लिए कैसे करें Iclipse आरसीपी एप्लिकेशन विकसित करता है जो ओएसजीआई बंडलों का भारी उपयोग करता है जो बाद में उपयोग के लिए सेवाएं प्रदान करता है। उपयोग के मामले में बंडलों को अपनी सेवाओं को पंजीकृत करने की आवश्यकता होती है (जैसे आयात फ़िल्टर) बाद में विभिन्न परिस्थितियों में उपयोग किया जाता है। ओएसजीआई बंडल मेवेन-बंडल-प्लगइन के साथ निर्मित हैं।एक्लिप्स प्लेटफ़ॉर्म

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

ग्रहण के भीतर मुझे ऑटो-स्टार्ट को सही करने का मौका मिला है, लेकिन मैवेन और टाइको द्वारा वितरण के निर्माण में मैं क्या करूँ?

घोषणात्मक सेवाएं लोड नहीं की गई org.eclipse.equinox.ds के मुद्दे के कारण काम नहीं कर रही हैं। क्या मैं इसे एक्टिवेटर की बजाय किसी भी तरह से शुरू कर सकता हूं? यह भी एक समाधान होगा, लेकिन मुझे नहीं पता कि वितरण कैसे बनाया जाए या कॉन्फ़िगरेशन के रूप में क्या सेट किया जाए।

यहां सर्वोत्तम अभ्यास क्या हैं? क्या कोई अन्य संभावनाएं हैं? ग्रहण मंच पर ओएसजीआई बंडलों पर प्रलेखन थोड़ा पतला है।

+1

मुझे मैवेन/टाइको के बारे में पता नहीं है। लेकिन यदि आप पीडीई एंटी स्क्रिप्ट का उपयोग करते हैं, तो ऑटो ऑटो को नियंत्रित करने के लिए यह 'config.ini' का उपयोग करता है। 'वर्कस्पेस \ .metadata \ .plugins \ org.eclipse.pde.core \ your-rcp-product-name.product' के अंतर्गत जेनरेट की गई' config.ini' देखें। –

+1

देखें http://software.2206966.n2.nabble.com/tycho-generated-config-ini-does-not-start-runtime-td6077893.html –

उत्तर

4

आप घोषणात्मक सेवाओं के साथ सही रास्ते पर थे। अपनी सेवाओं को मैन्युअल रूप से पंजीकृत करना बहुत कठिन काम है, और उन्हें सुरक्षित रूप से देखकर और भी काम हो सकता है, और सही होने के लिए मुश्किल हो सकती है। ब्लूप्रिंट के बारे में जागरूक होने के लिए इस क्षेत्र में एक और मानक है, हालांकि मैं निश्चित रूप से सुझाव नहीं देता कि यदि आप डीएस मेटाडाटा में हैं तो आप कुछ भी लिख सकते हैं। ब्लूप्रिंट में बहुत ही गतिशील वातावरण में थोड़ी अच्छी विशेषताएं होती हैं, और एक समृद्ध विन्यास। (मैं ब्लूप्रिंट कार्यान्वयन, अपाचे मेष में से एक पर एक कमिटर हूं।) ब्लूप्रिंट और डीएस दोनों के साथ महत्वपूर्ण बात यह है कि कुछ और आपके लिए आपकी सेवाओं का प्रबंधन कर रहा है।

यह आपको इस मुद्दे के साथ वापस छोड़ देता है कि आपके बंडल क्यों शुरू नहीं किए जा रहे हैं। मुझे लगता है कि इस तथ्य में एक सुराग होना चाहिए कि वे फ़ेलिक्स में शुरू करते हैं। क्या आपने एक विषुव कंसोल निकाल दिया है और पुष्टि की है कि आपके सभी बंडलों को स्थापित और हल किया गया है? (बंडल सूचीबद्ध करने के लिए 'एसएस') क्या आपने config.ini फ़ाइल में एक नज़र डाली है और पुष्टि की है कि आपके बंडल सूचीबद्ध हैं, और उचित प्रारंभ स्तर के साथ - या आप इक्विनोक्स ऑटो-स्टार्ट-सब कुछ बंडल का उपयोग कर रहे हैं?

+0

हां, मैं अगले घोषणात्मक सेवाओं का प्रयास करूंगा। मैं बाद में बताउंगा। –

+0

तो, यह काम कर रहा था। मैंने डीएस को रनटाइम के दौरान शुरू करने दिया और एक्सएमएल के माध्यम से सेवाओं को घोषित करने दिया। पहले सेवाओं को हल किया गया था और शुरू नहीं किया गया था। मैं इसे कैसे प्रभावित कर सकता हूं, मुझे नहीं पता। लेकिन डी एस काम कर रहा है। –

0

MANIFEST.MF इस है:

Bundle-ActivationPolicy: lazy 

यह भी उपयोगी हो सकता है:

http://wiki.eclipse.org/Lazy_Start_Bundles#Should_I_change_to_the_new_Bundle-ActivationPolicy_Header.3F

हालांकि मुझे लगता है मैं जितना संभव हो उतना OSGi सक्रियण पर निर्भर कोशिश करेगा कहेंगे। यदि आपकी समस्या को हल करने का कोई अन्य तरीका नहीं है, तो पिछला लिंक मदद कर सकता है।

+2

आलसी लोडिंग के लिए मेरे एप्लिकेशन को सक्रिय होने के लिए बंडलों के बारे में जानना आवश्यक है । यह नहीं चाहता था और एक अच्छा डिजाइन नहीं है। यही कारण है कि मैं आलसी लोडिंग हटा दिया। फ़ेलिक्स में मेरे बंडल सही ढंग से सक्रिय होते हैं। बस विषुव कुछ परेशानी करता है। मुझे जो चाहिए वह 'बंडल-एक्टिवेशन पॉलिसी: ऑटो' है, लेकिन यह समर्थित नहीं है। –

5

आप अपनी प्लगइन में "org.eclipse.ui.startup" एक्सटेंशन पॉइंट का उपयोग कर सकते हैं। यह आपको एक ISTartup क्लास निर्दिष्ट करने की अनुमति देता है जिसे ग्रहण यूआई शुरू होने पर बुलाया जाएगा। जब तक यह आपके बंडल में एक वर्ग है तब तक आपका बंडल शुरू हो जाएगा।

इसका मतलब प्लगइन.एक्सएमएल फ़ाइल समेत होगा, और यह मानक ओएसजीआई बंडल की बजाय विशेष रूप से एक ग्रहण प्लगइन होगा, लेकिन फिर आप अपने प्लगइन का उपयोग अपने मानक ओएसजीआई बंडलों को सक्रिय करने के लिए कर सकते हैं।

+0

मेरे द्वारा उपयोग किए जाने वाले कुछ बंडल सामान्य हैं और मैं उन्हें प्लगइन्स ग्रहण करने के लिए नहीं बनाना चाहता हूं। मुझे पता है, जार में प्लगइन.एक्सएमएल और अन्य फाइलों को बंडल करने का कोई मुद्दा नहीं है, लेकिन मुझे लगता है कि यह वास्तव में साफ नहीं है। आपका सुझाव अच्छा है और मुझे लगता है कि यह काम करेगा, लेकिन मुझे लगता है कि यह मेरी आखिरी पसंद है। फिर भी धन्यवाद! –

+0

मुझे नहीं लगता कि आपके वर्तमान बंडलों को संशोधित करने की कोई आवश्यकता है। ग्रहण प्लगइन बस यह सुनिश्चित करने के एकमात्र काम के साथ एक नया बंडल हो सकता है कि डीएस बंडल शुरू हो गया है, इस तरह आपकी घोषणात्मक सेवाएं सभी पाए जाएंगी। यह config.ini फ़ाइल में स्टार्टअप बंडल निर्दिष्ट करने से बचाता है। –

8

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

अब तक का सबसे अच्छा समाधान है घोषणात्मक सेवाओं का उपयोग करें। आप तत्काल सेवाओं की घोषणा कर सकते हैं, जो स्टार्टअप पर सक्रिय हो जाएंगे, और आप आलसी सेवाओं की घोषणा कर सकते हैं, जो उपयोग किए जाने पर सक्रिय हो जाते हैं। आलसी निश्चित रूप से पसंदीदा होते हैं (जब आप गूंगा प्रोग्रामर नहीं होते हैं) लेकिन कुछ उपयोग मामलों तत्काल आवश्यकता होती है, एक सर्वर यह इंटरनेट पर सेवाएं प्रदान करता है कि उदाहरण की तरह आप अपने config.ini कि डी एस शुरू कर दिया है सुनिश्चित करने के लिए है

+0

हां, मैंने पहले ही विभिन्न दर्शनों के बारे में पढ़ा है। मुझे आलसी लोडिंग पसंद है और समर्थन है, लेकिन जैसा कि आपने बताया है: कुछ डिज़ाइनों को सेवाओं को पंजीकृत करने के लिए ऑटो लोडिंग की आवश्यकता होती है (व्हाइटबोर्ड पैटर्न)। मैं घोषणात्मक सेवाओं का प्रयास करूंगा। –

+0

जैसा कि आपने कहा था, ग्रहण सामान्य रूप से कॉन्फ़िगरेशन में सूचीबद्ध होने तक किसी भी बंडल को शुरू नहीं करेगा या यह आलसी सक्रियण का उपयोग करता है और इसमें किसी अन्य बंडल द्वारा लोड की गई कक्षा होती है। डीएस के लिए यह एक समस्या है क्योंकि बंद/स्थापित बंडलों को नजरअंदाज कर दिया जाता है। हालांकि, मैंने नोटिस किया कि विषुव सेवा घटक रनटाइम में एक छिपी हुई विशेषता है: यदि आप अपने बंडल को आलसी लोडिंग के रूप में घोषित करते हैं और आपके घटक को "तत्काल" के रूप में चिह्नित किया जाता है, तो एससीआर * आपके लिए * आपके बंडल * को शुरू करेगा (संभवतः क्योंकि एससीआर आंकड़े बताते हैं कि अगर कोई इसे शुरू नहीं करता है, तो कोई और नहीं करेगा)। गैर-तत्काल व्यवहार के बारे में अभी तक कोई विचार नहीं है। – JBert

0

आप अपने .product फाइल करने के लिए इस जोड़ सकते हैं:।।

<configurations> 
    <plugin id="my.plugin.id" autoStart="true" startLevel="4" /> 
</configurations> 

वैकल्पिक रूप से, ग्रहण में .product फ़ाइल खोलें और कॉन्फ़िगरेशन टैब पर जाएं, और वांछित प्रारंभ स्तर के साथ प्लगइन जोड़ें।