Подтвердить что ты не робот

Что такое 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>
4b9b3361

Ответ 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 имеет преимущество разделения роли разработчика от роли deployer. Другими словами, как разработчик, вам не нужно знать, какие ваши требуемые ресурсы действительно вызывают на производстве, и как парень, развертывающий приложение, у вас будет хороший список имен для сопоставления с реальными ресурсами.