Citando https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
No contexto raiz do namespace está uma associação com o nome "comp", que está ligada a uma subárvore reservada para associações relacionadas ao componente. O nome "comp" é uma abreviação de componente. Não há outras ligações no contexto raiz. No entanto, o contexto raiz é reservado para a expansão futura da política, especificamente para nomear recursos que estão vinculados não ao próprio componente, mas a outros tipos de entidades, como usuários ou departamentos. Por exemplo, políticas futuras podem permitir que você nomeie usuários e organizações / departamentos usando nomes como "java: user / alice" e "java: org / engineering".
No contexto "comp", existem duas ligações: "env" e "UserTransaction". O nome "env" está vinculado a uma subárvore reservada para as ligações relacionadas ao ambiente do componente, conforme definido por seu descritor de implantação. "env" é a abreviação de ambiente. O J2EE recomenda (mas não requer) a seguinte estrutura para o namespace "env".
Portanto, a ligação que você fez a partir do spring ou, por exemplo, de um descritor de contexto do tomcat vai por padrão em java: comp / env /
Por exemplo, se sua configuração for:
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="foo"/>
</bean>
Em seguida, você pode acessá-lo diretamente usando:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");
ou você pode fazer uma etapa intermediária para não precisar especificar "java: comp / env" para cada recurso recuperado:
Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");
jdbc/loc
e, portanto,java:comp/env/jdbc/loc
está correto), enquanto a resposta de cherouvim implica que você estava usando incorretamente o primeiro exemplo (java:comp/env/jdbc/loc
e, portanto,jdbc/loc
está correto). Independentemente disso, a verdadeira resposta é: depende do contexto atual .