Siempre puede hacer referencia a los recursos en su aplicación directamente por su nombre JNDI como está configurado en el contenedor, pero si lo hace, esencialmente está conectando el nombre específico del contenedor en su código. Esto tiene algunas desventajas, por ejemplo, si alguna vez desea cambiar el nombre más adelante por alguna razón, deberá actualizar todas las referencias en todas sus aplicaciones y luego reconstruirlas y volver a implementarlas.
<resource-ref>
introduce otra capa de direccionamiento indirecto: usted especifica el nombre que desea usar en web.xml y, según el contenedor, proporciona un enlace en un archivo de configuración específico del contenedor .
Entonces, esto es lo que sucede : digamos que desea buscar el java:comp/env/jdbc/primaryDB
nombre. El contenedor encuentra que web.xml tiene un <resource-ref>
elemento para jdbc/primaryDB
, por lo que buscará en la configuración específica del contenedor, que contiene algo similar a lo siguiente:
<resource-ref>
<res-ref-name>jdbc/primaryDB</res-ref-name>
<jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>
Finalmente, devuelve el objeto registrado con el nombre de jdbc/PrimaryDBInTheContainer
.
La idea es que especificar recursos en web.xml tiene la ventaja de separar el rol de desarrollador del rol de implementador . En otras palabras, como desarrollador, no tiene que saber cómo se llaman realmente los recursos necesarios en producción, y como el tipo que implementa la aplicación, tendrá una buena lista de nombres para asignarlos a recursos reales.