JNDI#

JNDI (Java Naming and Directory Interface) — это стандартный Java API, который предоставляет унифицированный интерфейс для доступа к различным службам именования и каталогов, например LDAP, DNS, RMI и другим. В Tomcat JNDI используется для предоставления ресурсов: баз данных, очередей сообщений, пользовательских объектов веб-приложениям. Это позволяет централизованно управлять ресурсами на уровне сервера и предоставлять их приложениям через JNDI-контекст.

Основные понятия JNDI:

  1. Ресурсы — объекты, которые могут быть зарегистрированы в JNDI-контексте:

    • Источники данных (DataSource) для подключения к базам данных.

    • Очереди сообщений (JMS).

    • Пользовательские объекты.

  2. JNDI-контекст:

    • Глобальный контекст — ресурсы, доступные всем веб-приложениям.

    • Контекст приложения — ресурсы, доступные только конкретному веб-приложению.

  3. 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, чтобы документировать требования к ресурсам для веб-приложения.