อ้างถึงhttps://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
ที่บริบทรูทของเนมสเปซคือการผูกด้วยชื่อ "comp" ซึ่งถูกผูกไว้กับทรีย่อยที่สงวนไว้สำหรับการเชื่อมโยงที่เกี่ยวข้องกับคอมโพเนนต์ ชื่อ "comp" ย่อมาจากส่วนประกอบ ไม่มีการผูกอื่น ๆ ที่บริบทราก อย่างไรก็ตามบริบทรากถูกสงวนไว้สำหรับการขยายนโยบายในอนาคตโดยเฉพาะสำหรับการตั้งชื่อทรัพยากรที่ไม่เชื่อมโยงกับตัวคอมโพเนนต์ แต่เป็นเอนทิตีประเภทอื่นเช่นผู้ใช้หรือแผนก ตัวอย่างเช่นนโยบายในอนาคตอาจอนุญาตให้คุณตั้งชื่อผู้ใช้และองค์กร / แผนกโดยใช้ชื่อเช่น "java: user / alice" และ "java: org / engineering"
ในบริบท "comp" มีการเชื่อมโยง 2 แบบ ได้แก่ "env" และ "UserTransaction" ชื่อ "env" ถูกผูกไว้กับทรีย่อยที่สงวนไว้สำหรับการโยงที่เกี่ยวข้องกับสภาพแวดล้อมของคอมโพเนนต์ตามที่กำหนดโดยตัวอธิบายการปรับใช้ "env" ย่อมาจากสิ่งแวดล้อม J2EE แนะนำ (แต่ไม่ต้องการ) โครงสร้างต่อไปนี้สำหรับเนมสเปซ "env"
ดังนั้นการเชื่อมโยงที่คุณทำตั้งแต่ฤดูใบไม้ผลิหรือตัวอย่างเช่นจากตัวบอกบริบท tomcat จะไปตามค่าเริ่มต้นภายใต้ java: comp / env /
ตัวอย่างเช่นหากการกำหนดค่าของคุณคือ:
<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
ถูกต้อง) ในขณะที่คำตอบของ cherouvim บ่งบอกว่าคุณใช้ตัวอย่างแรกไม่ถูกต้อง (java:comp/env/jdbc/loc
จึงjdbc/loc
ถูกต้อง) ไม่ว่าคำตอบที่แท้จริงคือขึ้นอยู่กับบริบทปัจจุบัน