Passei muito tempo do meu dia tentando descobrir alguns erros ao conectar algum bean de fábrica JNDI. O problema acabou sendo que, em vez disso ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>
Eu realmente tinha escrito isso ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/loc"/>
</bean>
Eu deduzo que o java:comp/env/
talvez faça referência a alguma variável de ambiente e faça com que, em última instância, meu arquivo de contexto seja examinado. A única diferença é java:comp/env/
. Da boca de um especialista, o que isso faz?
Sem o java:comp/env/
prefixo no valor, eu obteria um erro que dizia "O nome jdbc não está vinculado a este contexto" .
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 .Respostas:
Citando https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
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:
Em seguida, você pode acessá-lo diretamente usando:
ou você pode fazer uma etapa intermediária para não precisar especificar "java: comp / env" para cada recurso recuperado:
fonte
Também existe uma propriedade
resourceRef
deJndiObjectFactoryBean
que, quando definida comotrue
, é usada para preceder automaticamente a stringjava:comp/env/
se ela ainda não estiver presente.fonte
Depois de várias tentativas e me aprofundando no código-fonte do Tomcat, descobri que a propriedade simples useNaming = "false" funcionou !! Agora o Tomcat resolve nomes java: / liferay em vez de java: comp / env / liferay
fonte