JNDI#
JNDI (Java Naming and Directory Interface) — это стандартный Java API, который предоставляет унифицированный интерфейс для доступа к различным службам именования и каталогов, например LDAP, DNS, RMI и другим. В Tomcat JNDI используется для предоставления ресурсов: баз данных, очередей сообщений, пользовательских объектов веб-приложениям. Это позволяет централизованно управлять ресурсами на уровне сервера и предоставлять их приложениям через JNDI-контекст.
Основные понятия JNDI:
Ресурсы — объекты, которые могут быть зарегистрированы в JNDI-контексте:
Источники данных (DataSource) для подключения к базам данных.
Очереди сообщений (JMS).
Пользовательские объекты.
JNDI-контекст:
Глобальный контекст — ресурсы, доступные всем веб-приложениям.
Контекст приложения — ресурсы, доступные только конкретному веб-приложению.
JNDI-имя - уникальное имя, по которому ресурс регистрируется в JNDI-контексте.
Настройка web.xml#
Файл web.xml используется для настройки различных аспектов веб-приложения: сервлеты, фильтры, параметры инициализации, безопасность и другие. В Tomcat этот файл расположен в директории /WEB-INF/. Он является частью спецификации Java Servlet и используется для конфигурации приложения на уровне контейнера.
Элементы дескриптора развертывания веб-приложения для определения ресурсов состоят из:
<env-entry>— записи окружения; параметр с одним значением, который может использоваться для настройки работы приложения.<resource-ref>— ссылки на ресурс (JDBC DataSource, сессия JavaMail или пользовательские фабрики объектов).<resource-env-ref>— ссылки на окружение ресурса, добавленной в Servlet 2.4.
Tomcat предоставляет ряд специфических опций для JNDI-ресурсов, которые нельзя указать в web.xml. К ним относятся:
closeMethod— позволяет ускорить очистку JNDI-ресурсов при остановке веб-приложения.singleton— управляет созданием нового экземпляра ресурса при каждом JNDI-запросе.
Чтобы использовать эти параметры конфигурации, ресурс должен быть указан в элементе Context веб-приложения или в элементе GlobalNamingResources файла $CATALINA_BASE/conf/server.xml.
Настройка context.xml#
Файл context.xml используется в Tomcat для настройки контекста веб-приложения. Располагается в нескольких местах, в зависимости от уровня его применения:
Глобальный уровень — файл
$CATALINA_BASE/conf/context.xml(применяется ко всем веб-приложениям на сервере).Уровень хоста — файл
$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default(применяется ко всем веб-приложениям на конкретном виртуальном хосте).Уровень приложения — файл
$CATALINA_BASE/webapps/[appname]/META-INF/context.xml(применяется к конкретному веб-приложению).
Если Tomcat не может определить подходящую фабрику ресурсов и/или требуется дополнительная конфигурационная информация, необходимо указать дополнительные специфичные настройки. Специфичная для Tomcat конфигурация ресурсов указывается в элементах Context и выполняется с использованием следующих элементов:
<Environment>— настройка имен и значений для скалярных записей окружения, которые будут доступны веб-приложению через JNDI InitialContext (эквивалентно включению элементаenv-entryв дескриптор развертывания веб-приложения).<Resource>— настройка имени и типа данных ресурса, предоставляемого приложению (эквивалентно включению элементаresource-refв дескриптор развертывания веб-приложения).<ResourceLink>— добавление ссылки на ресурс, определенный в глобальном JNDI-контексте. Для предоставления доступа веб-приложению к ресурсу, определенному в элементеGlobalNamingResourcesвнутри элементаServer, используйте ссылки на ресурсы.<Transaction>— добавление фабрики ресурсов для создания экземпляра объектаUserTransaction, доступного по адресуjava:comp/UserTransaction.
Если ресурс был определен в элементе Context, нет необходимости определять этот ресурс в /WEB-INF/web.
Настройка Global#
Tomcat поддерживает отдельное пространство имен (namespace) глобальных ресурсов для всего сервера. Данные ресурсы настраиваются в элементе <GlobalNamingResources> файла $CATALINA_BASE/conf/server.xml. Чтобы предоставить доступ веб-приложениям к ресурсам используется элемент <ResourceLink>.
Если ресурс определен с помощью <ResourceLink>, нет необходимости определять этот ресурс в /WEB-INF/web.xml. Однако рекомендуется сохранить запись в /WEB-INF/web.xml, чтобы документировать требования к ресурсам для веб-приложения.