OSGI Enterprise Release 5 specification के अध्याय 126 अनुकूलता का उल्लेख है: "। समर्थन पारंपरिक JNDI प्रोग्रामिंग जावा SE और जावा ईई ग्राहकों द्वारा इस्तेमाल किया मॉडल"क्या ओएसजीआई जेएनडीआई गैर-ओएसजीआई कोड से जेएनडीआई कॉल के साथ सह-अस्तित्व की अनुमति देता है?
और OSGi-अनजान कोड का उपयोग करें:
"ग्राहक और JNDI प्रसंग प्रदाताओं कि OSGi से अनजान हैं स्थिर तरीकों का उपयोग JRE JNDI कार्यान्वयन से कनेक्ट करने के InitialContext वर्ग एक के लिए उपयोग प्रदान करता है। प्रदाता से संदर्भ और प्रदाता ऑब्जेक्ट रूपांतरण करने और URL संदर्भों को खोजने के लिए स्थिर नामकरण प्रबंधक विधियों का उपयोग करते हैं। यह पारंपरिक मॉडल ओएसजीआई से अवगत नहीं है और इसलिए ओएसजीआई जागरूकता की इस कमी के परिणाम के परिणामस्वरूप विश्वसनीय रूप से उपयोग किया जा सकता है। "
लेकिन यह मेरे लिए स्पष्ट नहीं है कि इस पाठ केवल "विरासत" कोड एक OSGi बंडल के अंदर निष्पादित करने के लिए, या भी OSGi कंटेनर के बाहर कोड करने के लिए लागू होता है, एक परिदृश्य में च पूर्व जहां OSGi कंटेनर में एम्बेडेड है एक आवेदन पत्र।
एक एम्बेडिंग परिदृश्य में, ओएसजीआई कंटेनर के बाहर और अंदर दोनों में कोड कोड हो सकता है जो जेएनडीआई कॉल करता है, और जैसे ही वे एक ही जेवीएम में निष्पादित होते हैं, वे जेएनडीआई कार्यान्वयन साझा करेंगे।
प्रश्न: चाहिए एक एम्बेडेड OSGi कंटेनर में एक OSGi JNDI कार्यान्वयन चल अपने JNDI सामान्य की तरह कहता है, या कुछ पोर्टिंग के लिए "OSGi जागरूकता" आवश्यक है प्रदर्शन करने के लिए कंटेनर के बाहर OSGi-अनजान कोड की अनुमति देते हैं?
अपाचे कराफ 2.3.0 (जो अपाचे मेष जेएनडीआई 1.0.0 का उपयोग करता है) के साथ इसे स्वयं करने का प्रयास करता है, यह काम नहीं लगता है, क्योंकि अपाचे मेष को जेएनडीआई क्लाइंट कॉल को ओएसजीआई बंडल से उत्पन्न करने की आवश्यकता होती है।
आंशिक स्टैकट्रेस:
javax.naming.NoInitialContextException: The calling code's BundleContext could not be determined.
at org.apache.aries.jndi.OSGiInitialContextFactoryBuilder.getInitialContext(OSGiInitialContextFactoryBuilder.java:46)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.init(InitialContext.java:242)
at javax.naming.InitialContext.<init>(InitialContext.java:192)
प्रश्न: यह सही व्यवहार है, या वहाँ विनिर्देश मुझे लगता है कि उल्लेख कर सकते हैं का एक वर्ग इस सीमा का उल्लंघन कर रहा है?