Qu’est-ce que Java: comp / env / do?

Je viens juste de passer trop de temps sur ma journée à essayer de trouver des erreurs lors de la connexion de certains fèves JNDI. Le problème s’est avéré être que plutôt que cela …

   

J’avais en fait écrit ça …

    

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 est examiné. La seule différence est java: comp / env /. De la bouche d’un expert, qu’est-ce que ça fait?

Sans le préfixe java: comp / env dans la valeur, j’obtiendrais une erreur indiquant que “Name jdbc n’est pas lié dans ce contexte”.

    Citant https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html

    Le contexte racine de l’espace de noms est une liaison avec le nom “comp”, qui est liée à un sous-arbre réservé aux liaisons liées aux composants. Le nom “comp” est l’abréviation de composant. Il n’y a pas d’autre liaison au contexte racine. Cependant, le contexte racine est réservé à la future extension de la stratégie, en particulier pour nommer des ressources liées non pas au composant lui-même, mais à d’autres types d’entités, tels que des utilisateurs ou des services. Par exemple, les stratégies futures peuvent vous permettre de nommer des utilisateurs et des organisations / services en utilisant des noms tels que “java: user / alice” et “java: org / engineering”.

    Dans le contexte “comp”, il existe deux liaisons: “env” et “UserTransaction”. Le nom “env” est lié à une sous-arborescence réservée aux liaisons liées à l’environnement du composant, telles que définies par son descripteur de déploiement. “env” est court pour environnement. Le J2EE recommande (mais ne nécessite pas) la structure suivante pour l’espace de noms “env”.

    Par conséquent, la liaison que vous avez effectuée depuis le spring ou, par exemple, depuis un descripteur de contexte tomcat, est exécutée par défaut sous java: comp / env /

    Par exemple, si votre configuration est:

        

    Ensuite, vous pouvez 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"); 

    Il existe également une propriété resourceRef de JndiObjectFactoryBean qui, lorsqu’elle est définie sur true , est utilisée pour append automatiquement la chaîne java:comp/env/ si elle n’est pas déjà présente.

         

    Après plusieurs tentatives et en allant profondément dans le code source de Tomcat, j’ai découvert que la propriété simple useNaming = “false” faisait l’affaire !! Maintenant, Tomcat résout les noms java: / liferay au lieu de java: comp / env / liferay