Citation : https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
Dans le contexte Root de l'espace de nom se trouve une liaison portant le nom "comp", qui est liée à un sous-arbre réservé pour les liaisons liées aux composants. Le site nom "comp" est l'abréviation de component. Il n'y a pas d'autres liaisons dans le contexte contexte Root. Cependant, le contexte Root est réservé pour la future expansion de la politique, en particulier pour nommer les ressources qui ne sont pas liées au composant lui-même mais à d'autres d'entités telles que des utilisateurs ou services. Par exemple, les futures politiques futures pourraient vous permettre de nommer les utilisateurs et les organisations/départements en utilisant noms tels que "java:user/alice" et "java:org/engineering". "java:org/engineering".
Dans le contexte "comp", il existe deux liaisons liaisons : "env" et "UserTransaction". Le nom "env" est lié à un sous-arbre qui est réservé aux liaisons du composant liées à l'environnement du composant, telles que définies par son descripteur de déploiement. "env" est l'abréviation de environment. Le site J2EE recommande (mais n'exige pas) la structure suivante pour l'espace de noms "env". espace de noms.
Ainsi, les liaisons que vous avez effectuées à partir de spring ou, par exemple, à partir d'un descripteur de contexte de tomcat vont par défaut sous java:comp/env/
Par exemple, si votre configuration est :
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="foo"/>
</bean>
Vous pouvez alors y accéder directement en utilisant :
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");
ou vous pourriez faire une étape intermédiaire pour ne pas avoir à spécifier "java:comp/env" pour chaque ressource que vous récupérez :
Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");
3 votes
Lequel avez-vous utilisé au départ ? Votre question implique que vous utilisiez incorrectement le deuxième exemple (
jdbc/loc
et doncjava:comp/env/jdbc/loc
est correcte), tandis que la réponse de cherouvim implique que vous utilisiez incorrectement le premier exemple (java:comp/env/jdbc/loc
et doncjdbc/loc
est correcte). Quoi qu'il en soit, la vraie réponse est la suivante : cela dépend de l'identité de l'utilisateur. actuel le contexte.1 votes
Celui qui n'a pas fonctionné était en effet dépourvu de java:comp/env/jdbc/loc, comme indiqué. Le fichier de contexte vers lequel on a pointé incluait la ressource "loc". Quelles sont les possibilités pour les contextes "actuels" ?
1 votes
J'ai répondu à cette question ici : stackoverflow.com/a/66325569/1051589 .