Для чего используется resource-ref в web.xml?

Мне просто интересно, когда / почему вы бы определили элемент resource-ref в своем файле web.xml?

Я бы подумал, что он будет определен на вашем веб-сервере / сервере приложений с использованием JNDI, а затем искать ссылку на JNDI в вашем коде Java?

Определение resource-ref кажется мне несколько излишним, и я не могу понять, когда это может быть полезно. Пример:

<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>

1 ответ

Решение

Вы всегда можете обратиться к ресурсам в вашем приложении напрямую по их имени JNDI, как настроено в контейнере, но если вы это сделаете, то, по сути, вы встраиваете специфичное для контейнера имя в свой код. Это имеет некоторые недостатки, например, если вам когда-нибудь понадобится изменить имя позже по какой-либо причине, вам необходимо обновить все ссылки во всех ваших приложениях, а затем перестроить и заново развернуть их.

<resource-ref> вводит еще один уровень косвенности: вы указываете имя, которое хотите использовать в файле web.xml, и, в зависимости от контейнера, предоставляете привязку в файле конфигурации конкретного контейнера.

Итак, вот что происходит: допустим, вы хотите найти java:comp/env/jdbc/primaryDB название. Контейнер обнаруживает, что web.xml имеет <resource-ref> элемент для jdbc/primaryDB, поэтому он будет смотреть на специфичную для контейнера конфигурацию, которая содержит что-то похожее на следующее:

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

Наконец, он возвращает объект, зарегистрированный под именем jdbc/PrimaryDBInTheContainer,

Идея состоит в том, что указание ресурсов в web.xml имеет то преимущество, что отделяет роль разработчика от роли развертывателя. Другими словами, как разработчик, вам не нужно знать, как на самом деле называются ваши требуемые ресурсы в производственном процессе, и, как парень, развертывающий приложение, у вас будет хороший список имен для сопоставления с реальными ресурсами.

Другие вопросы по тегам