¿Para qué se usa resource-ref en web.xml?

Me pregunto cuándo / por qué definirías un elemento resource-ref en tu archivo web.xml.

Hubiera pensado que se definiría en su servidor web / de aplicaciones utilizando JNDI y luego buscaría la referencia JNDI en su código Java.

La definición de resource-ref me parece un poco redundante y no se me ocurre cuándo podría ser útil. Ejemplo:

 Primary database jdbc/primaryDB javax.sql.DataSource CONTAINER  

Siempre puede consultar los recursos en su aplicación directamente por su nombre JNDI configurado en el contenedor, pero si lo hace, esencialmente está conectando el nombre específico del contenedor con su código. Esto tiene algunas desventajas, por ejemplo, si alguna vez desea cambiar el nombre más tarde por algún motivo, deberá actualizar todas las referencias en todas sus aplicaciones y luego reconstruirlas y volver a desplegarlas.

introduce otra capa de direccionamiento indirecto: especifica el nombre que desea utilizar en el archivo 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 nombre de java:comp/env/jdbc/primaryDB . El contenedor encuentra que web.xml tiene un elemento para jdbc/primaryDB , por lo que buscará en la configuración específica del contenedor, que contiene algo similar a lo siguiente:

  jdbc/primaryDB jdbc/PrimaryDBInTheContainer  

Finalmente, devuelve el objeto registrado con el nombre de jdbc/PrimaryDBInTheContainer .

La idea es que la especificación de recursos en web.xml tenga la ventaja de separar la función de desarrollador de la función de implementación . En otras palabras, como desarrollador, no tiene que saber cuáles son los recursos requeridos que realmente se llaman en producción, y como el tipo que implementa la aplicación, tendrá una buena lista de nombres para asignar a recursos reales.