का हवाला देते हुए https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
नामस्थान के मूल संदर्भ में "कॉम्प" नाम के साथ एक बंधन है, जो घटक से संबंधित बाइंडिंग के लिए आरक्षित एक उप-सीमा से जुड़ा है। "COMP" नाम घटक के लिए छोटा है। मूल संदर्भ में कोई अन्य बाइंडिंग नहीं हैं। हालांकि, रूट संदर्भ नीति के भविष्य के विस्तार के लिए आरक्षित है, विशेष रूप से उन संसाधनों के नामकरण के लिए जो केवल घटक के लिए नहीं बल्कि अन्य प्रकार की संस्थाओं जैसे कि उपयोगकर्ता या विभाग से बंधे हैं। उदाहरण के लिए, भविष्य की नीतियां आपको "java: user / alice" और "java: org / इंजीनियरिंग" जैसे नामों का उपयोग करके उपयोगकर्ताओं और संगठनों / विभागों का नाम देने की अनुमति दे सकती हैं।
"COMP" संदर्भ में, दो बाइंडिंग हैं: "env" और "UserTransaction"। "Env" नाम एक सबट्री के लिए बाध्य है जो घटक के पर्यावरण से संबंधित बाइंडिंग के लिए आरक्षित है, जैसा कि इसके तैनाती विवरणक द्वारा परिभाषित किया गया है। "env" पर्यावरण के लिए छोटा है। J2EE "env" नामस्थान के लिए निम्नलिखित संरचना की सिफारिश करता है (लेकिन इसकी आवश्यकता नहीं है)।
तो आपने जो बंधन वसंत से किया है या, उदाहरण के लिए, एक टॉमकैट संदर्भ डिस्क्रिप्टर से जावा के तहत डिफ़ॉल्ट रूप से जाना: COMP / en /
उदाहरण के लिए, यदि आपका कॉन्फ़िगरेशन है:
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="foo"/>
</bean>
तब आप इसे सीधे उपयोग करके देख सकते हैं:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");
या आप एक मध्यवर्ती कदम बना सकते हैं ताकि आपको हर संसाधन के लिए "java: comp / env" निर्दिष्ट न करना पड़े:
Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");
jdbc/loc
और इस प्रकारjava:comp/env/jdbc/loc
सही है), जबकि चेरोविम का उत्तर यह बताता है कि आप गलत तरीके से पहले उदाहरण का उपयोग कर रहे थे (java:comp/env/jdbc/loc
और इस तरहjdbc/loc
सही है)। भले ही, असली जवाब यह है: यह वर्तमान संदर्भ पर निर्भर करता है।