Citando https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
En el contexto raíz del espacio de nombres hay un enlace con el nombre "comp", que está enlazado a un subárbol reservado para enlaces relacionados con componentes. El nombre "comp" es la abreviatura de componente. No hay otras vinculaciones en el contexto raíz. Sin embargo, el contexto raíz está reservado para la futura expansión de la política, específicamente para nombrar recursos que no están vinculados al componente en sí, sino a otros tipos de entidades como usuarios o departamentos. Por ejemplo, las políticas futuras podrían permitirle nombrar usuarios y organizaciones / departamentos usando nombres como "java: user / alice" y "java: org / engineering".
En el contexto "comp", hay dos enlaces: "env" y "UserTransaction". El nombre "env" está vinculado a un subárbol que está reservado para los enlaces relacionados con el entorno del componente, según lo definido por su descriptor de implementación. "env" es la abreviatura de medio ambiente. J2EE recomienda (pero no requiere) la siguiente estructura para el espacio de nombres "env".
Entonces, el enlace que hizo desde Spring o, por ejemplo, desde un descriptor de contexto de Tomcat, va por defecto en java: comp / env /
Por ejemplo, si su configuración es:
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="foo"/>
</bean>
Entonces puedes acceder a él directamente usando:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");
o puede realizar un paso intermedio para no tener que especificar "java: comp / env" para cada recurso que recupere:
Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");
jdbc/loc
y por lo tantojava:comp/env/jdbc/loc
es correcto), mientras que la respuesta de cherouvim implica que estaba usando incorrectamente el primer ejemplo (java:comp/env/jdbc/loc
y por lo tantojdbc/loc
es correcto). Independientemente, la respuesta real es: depende del contexto actual .