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/loc
ve bu nedenlejava:comp/env/jdbc/loc
doğru), oysa cherouvim'in cevabı, ilk örneği yanlış kullandığınızı ima ediyor (java:comp/env/jdbc/loc
ve bu nedenlejdbc/loc
doğrudur). Ne olursa olsun, gerçek cevap şudur: mevcut duruma bağlıdır .