Alıntı https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
Ad alanının kök bağlamında, bileşenle ilgili bağlamalar için ayrılmış bir alt ağaca bağlı olan "comp" adlı bir bağlama bulunur. "Comp" adı, bileşenin kısaltmasıdır. Kök bağlamda başka bağlama yoktur. Ancak, kök bağlam, politikanın gelecekteki genişletilmesi için, özellikle bileşenin kendisine değil, kullanıcılar veya departmanlar gibi diğer varlık türlerine bağlı kaynakların adlandırılması için ayrılmıştır. Örneğin, gelecekteki politikalar, "java: kullanıcı / alice" ve "java: org / mühendislik" gibi adlar kullanarak kullanıcıları ve kuruluşları / departmanları adlandırmanıza izin verebilir.
"Comp" bağlamında, iki bağlama vardır: "env" ve "UserTransaction". "Env" adı, dağıtım tanımlayıcısında tanımlandığı gibi bileşenin çevreyle ilgili bağlamaları için ayrılmış bir alt ağaca bağlıdır. "env", ortamın kısaltmasıdır. J2EE, "env" ad alanı için aşağıdaki yapıyı önerir (ancak gerektirmez).
Yani, yaydan veya örneğin bir tomcat bağlam tanımlayıcısından yaptığınız bağlama, varsayılan olarak java: comp / env / altına gider
Örneğin, yapılandırmanız şuysa:
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="foo"/>
</bean>
Daha sonra aşağıdakileri kullanarak doğrudan erişebilirsiniz:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");
veya aldığınız her kaynak için "java: comp / env" belirtmenize gerek kalmaması için bir ara adım atabilirsiniz:
Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");
jdbc/locve bu nedenlejava:comp/env/jdbc/locdoğru), oysa cherouvim'in cevabı, ilk örneği yanlış kullandığınızı ima ediyor (java:comp/env/jdbc/locve bu nedenlejdbc/locdoğrudur). Ne olursa olsun, gerçek cevap şudur: mevcut duruma bağlıdır .