Qu'est-ce que des ressources-réf web.xml utilisé pour?

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

J'aurais pensé qu'il serait défini dans votre serveur web / app en utilisant JNDI et ensuite rechercher la référence JNDI dans votre code Java?

La définition resource-ref me semble un peu redondante et je ne peux pas penser à 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>
103
demandé sur Joshua Taylor 2010-05-22 15:54:52

1 réponses

Vous pouvez toujours faire référence aux ressources de votre application directement par leur nom JNDI tel que configuré dans le conteneur, mais si vous le faites, vous câblez essentiellement le nom spécifique au conteneur dans votre code. Cela présente certains inconvénients, par exemple, si vous voulez changer le nom plus tard pour une raison quelconque, vous devrez 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 vous voulez utiliser dans le web .xml , et, en fonction du conteneur, fournir une liaison dans un fichier de configurationspécifique au conteneur .

Alors Voici ce qui se passe : disons que vous voulez rechercher le nom java:comp/env/jdbc/primaryDB. Le conteneur trouve que web.xml a un élément <resource-ref> pour jdbc/primaryDB, donc il se penchera sur la configuration spécifique au conteneur, qui contient quelque chose de similaire à ce qui suit:

<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 la nom de jdbc/PrimaryDBInTheContainer.

L'idée est de spécifier des ressources dans le web .xml a l'avantage de séparer les développeur du deployer rôle. En d'autres termes, en tant que développeur, vous n'avez pas besoin de savoir quelles sont vos ressources requises en production, et en tant que gars déployant l'application, vous aurez une belle liste de noms à mapper aux ressources réelles.

142
répondu candiru 2015-03-27 20:50:41