Vous pouvez toujours vous référer vers les ressources de votre application directement par leur nom JNDI comme configuré dans le conteneur, mais si vous le faites, essentiellement, vous êtes le câblage le conteneur de nom spécifique dans votre code. Cela a des inconvénients, par exemple, si vous souhaitez modifier le nom plus tard pour une raison quelconque, vous aurez besoin de mettre à jour toutes les références dans toutes vos applications, et puis de reconstruire et de les redéployer.
<resource-ref>
introduit une autre couche d'indirection: vous indiquez le nom que vous souhaitez utiliser dans le web.xmlet, selon le conteneur, fournir une liaison dans un conteneur spécifique fichier de configuration.
Donc voici ce qui arrive: disons que vous voulez pour la recherche de l' java:comp/env/jdbc/primaryDB
nom. Le conteneur trouve que web.xml a un <resource-ref>
élément jdbc/primaryDB
, donc à chercher dans le conteneur de configuration spécifique, qui contient quelque chose de semblable à la suivante:
<resource-ref>
<res-ref-name>jdbc/primaryDB</res-ref-name>
<jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>
Enfin, il renvoie l'objet enregistré sous le nom de jdbc/PrimaryDBInTheContainer
.
L'idée est que la spécification de ressources dans le web.xml a l'avantage de séparer le développeur rôle de la deployer rôle. En d'autres termes, en tant que développeur, vous n'avez pas de savoir ce que les ressources nécessaires sont en fait appelé dans la production, et que le gars du déploiement de l'application, vous aurez une belle liste de noms à la carte à des ressources réelles.