web-dev-qa-db-fra.com

A quoi sert ressource-ref dans web.xml?

Je me demande simplement quand/pourquoi vous définiriez un élément resource-ref dans votre fichier web.xml?

J'aurais pensé que cela serait défini dans votre serveur Web/application à l'aide de JNDI, puis rechercher la référence JNDI dans votre Java?

La définition de ressource-ref me semble un peu redondante et je ne vois pas quand cela pourrait être utile. Exemple:

<resource-ref>
  <description>Primary database</description>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
</resource-ref>
107
JMM

Vous pouvez toujours faire référence aux ressources de votre application directement par leur nom JNDI configuré dans le conteneur, mais si vous le faites, vous connectez essentiellement le nom spécifique au conteneur à votre code. Cela présente certains inconvénients. Par exemple, si vous souhaitez modifier le nom ultérieurement pour une raison quelconque, vous devez mettre à jour toutes les références dans toutes vos applications, puis les reconstruire et les redéployer.

<resource-ref> introduit une autre couche d'indirection: vous spécifiez le nom que vous souhaitez utiliser dans web.xml, et, en fonction du conteneur, vous fournissez une liaison dans un spécifique au conteneur fichier de configuration.

Donc voici ce qui se passe: disons que vous voulez rechercher le Java:comp/env/jdbc/primaryDB prénom. Le conteneur trouve que web.xml a un <resource-ref> élément pour jdbc/primaryDB, il examinera donc la configuration spécifique au conteneur, qui contient quelque chose de similaire au suivant:

<resource-ref>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>

Enfin, il retourne l'objet enregistré sous le nom de jdbc/PrimaryDBInTheContainer.

L'idée est que spécifier des ressources dans le web.xml présente l'avantage de séparer le rôle développeur du rôle deployer rôle. En d’autres termes, en tant que développeur, vous n’avez pas besoin de savoir quelles sont les ressources requises qui sont réellement appelées en production, et en tant que responsable du déploiement de l’application, vous aurez une belle liste de noms à associer à des ressources réelles.

148
candiru