O que é resource-ref em web.xml usado para?

Eu só estou querendo saber quando / por que você iria definir um elemento resource-ref no seu arquivo web.xml?

Eu teria pensado que seria definido em seu servidor web / aplicativo usando JNDI e, em seguida, procure a referência JNDI em seu código Java?

A definição ref-resource parece um pouco redundante para mim e não consigo pensar em quando pode ser útil. Exemplo:

 Primary database jdbc/primaryDB javax.sql.DataSource CONTAINER  

Você sempre pode se referir a resources em seu aplicativo diretamente pelo nome JNDI conforme configurado no contêiner, mas, se fizer isso, essencialmente, estará conectando o nome específico do contêiner ao seu código. Isso tem algumas desvantagens, por exemplo, se você quiser alterar o nome posteriormente por algum motivo, será necessário atualizar todas as referências em todos os seus aplicativos e, em seguida, reconstruí-los e reimplementá-los.

introduz outra camada de indirecção: você especifica o nome que deseja usar no web.xml e, dependendo do contêiner, fornece uma binding em um arquivo de configuração específico do contêiner .

Então, eis o que acontece : digamos que você queira pesquisar o nome java:comp/env/jdbc/primaryDB . O contêiner descobre que o web.xml possui um elemento para jdbc/primaryDB , portanto, ele examinará a configuração específica do contêiner, que contém algo semelhante ao seguinte:

  jdbc/primaryDB jdbc/PrimaryDBInTheContainer  

Finalmente, retorna o object registrado sob o nome de jdbc/PrimaryDBInTheContainer .

A ideia é que a especificação de resources no web.xml tenha a vantagem de separar a function de desenvolvedor da function de implementador . Em outras palavras, como desenvolvedor, você não precisa saber quais são os resources necessários na produção e, como o cara que implementa o aplicativo, você terá uma boa lista de nomes para mapear para resources reais.