J'ai juste passé trop de temps de ma journée à essayer de trouver des erreurs lors de la connexion d'un bean d'usine JNDI. Le problème s'est avéré être qu'au lieu de cela ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>
J'avais en fait écrit ceci ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/loc"/>
</bean>
J'en déduis que java:comp/env/
peut - être fait référence à une variable d'environnement et fait en sorte que, finalement, mon fichier de contexte soit examiné. La seule différence est java:comp/env/
. De la bouche d'un expert, qu'est-ce que cela fait?
Sans le java:comp/env/
préfixe dans la valeur, j'obtiendrais une erreur qui dit "Le nom jdbc n'est pas lié dans ce contexte" .
jdbc/loc
etjava:comp/env/jdbc/loc
est donc correct), tandis que la réponse de cherouvim implique que vous utilisiez incorrectement le premier exemple (java:comp/env/jdbc/loc
etjdbc/loc
est donc correct). Quoi qu'il en soit, la vraie réponse est: cela dépend du contexte actuel .Réponses:
Citant https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
Ainsi, la liaison que vous avez faite à partir de spring ou, par exemple, d'un descripteur de contexte tomcat va par défaut sous java: comp / env /
Par exemple, si votre configuration est:
Ensuite, vous pouvez y accéder directement en utilisant:
ou vous pouvez faire une étape intermédiaire pour ne pas avoir à spécifier "java: comp / env" pour chaque ressource que vous récupérez:
la source
Il existe également une propriété
resourceRef
deJndiObjectFactoryBean
qui est, lorsqu'elle est définie surtrue
, utilisée pour ajouter automatiquement la chaînejava:comp/env/
si elle n'est pas déjà présente.la source
Après plusieurs tentatives et approfondissant le code source de Tomcat, j'ai découvert que la simple propriété useNaming = "false" faisait l'affaire !! Maintenant, Tomcat résout les noms java: / liferay au lieu de java: comp / env / liferay
la source