Интерфейс именования и каталогов Java ( JNDI ) - это Java API для службы каталогов, который позволяет программным клиентам Java обнаруживать и искать данные и ресурсы (в форме объектов Java ) по имени. Как и все API-интерфейсы Java, которые взаимодействуют с хост-системами, JNDI не зависит от базовой реализации. Кроме того, он определяет интерфейс поставщика услуг (SPI), который позволяет встраивать реализации службы каталогов в структуру. [1] Информация, просматриваемая через JNDI, может быть предоставлена сервером, плоским файлом или базой данных; выбор зависит от используемой реализации.
Типичные варианты использования JNDI включают:
- подключение Java-приложения к внешней службе каталогов (например, к базе данных адресов или к серверу LDAP )
- позволяя сервлету Java искать информацию о конфигурации, предоставленную веб-контейнером хостинга [2]
Задний план
API-интерфейсы Java RMI и Java EE используют JNDI API для поиска объектов в сети. [3]
API обеспечивает:
- механизм привязки объекта к имени
- интерфейс поиска в каталоге, который позволяет выполнять общие запросы
- интерфейс событий, который позволяет клиентам определять, когда записи каталога были изменены
- Расширения LDAP для поддержки дополнительных возможностей службы LDAP
Часть SPI обеспечивает поддержку практически любого типа службы имен и каталогов, включая:
- LDAP
- DNS
- Шекелей
- Служба имен CORBA
- файловая система
Sun Microsystems впервые выпустила спецификацию JNDI 10 марта 1997 г. [4] По состоянию на 2006 г.[Обновить], текущая версия - JNDI 1.2.
Базовый поиск
JNDI (интерфейс именования и каталогов Java) организует свои имена в иерархию. Имя может быть любой строкой, например com.example.ejb.MyBean. Имя также может быть объектом, реализующим Name
интерфейс; однако строка является наиболее распространенным способом наименования объекта. Имя привязывается к объекту в каталоге путем сохранения объекта или ссылки на объект в службе каталогов, идентифицированной по имени.
JNDI API определяет контекст, который указывает, где искать объект. Начальный контекст обычно используется в качестве отправной точки.
В простейшем случае необходимо создать начальный контекст с использованием конкретной реализации и дополнительных параметров, необходимых для реализации. Первоначальный контекст будет использоваться для поиска имени. Начальный контекст аналогичен корню или вершине дерева каталогов для файловой системы. Ниже приведен пример создания начального контекста:
Hashtable contextArgs = новая Hashtable < String , String > ();// Сначала вы должны указать фабрику контекста. // Вот как вы выбираете между реализацией jboss // и реализацией Sun или других поставщиков. contextArgs . положить ( Context . INITIAL_CONTEXT_FACTORY , "com.jndiprovider.TheirContextFactory" );// Следующий аргумент - это URL-адрес, указывающий, где находится хранилище данных: contextArgs . ставить ( Context . PROVIDER_URL , "jndiprovider-базы данных" );// (Возможно, вам также придется предоставить учетные данные безопасности)// Затем вы создаете начальный контекст Context myCurrentContext = new InitialContext ( contextArgs );
Затем контекст используется для поиска ранее связанных имен в этом контексте. Например:
MyBean myBean = ( MyBean ) myCurrentContext . поиск ( "com.mydomain.MyBean" );
Альтернатива приведенному выше коду выглядит следующим образом:
Объект Context также можно настроить, добавив файл jndi.properties в путь к классам, содержащий имя исходного класса фабрики контекста и URL-адрес поставщика. Приведенный выше код будет уменьшен, как показано ниже:
// просто нужно создать начальный объект контекста, он попытается прочитать файл jndi.properties из пути к классам. Контекст myCurrentContext = new InitialContext ();
Затем контекст используется для поиска ранее связанных имен в этом контексте. Например:
MyBean myBean = ( MyBean ) myCurrentContext . поиск ( "com.mydomain.MyBean" );
Searching
Атрибуты могут быть прикреплены к специальным записям, называемым каталогами. Каталоги позволяют искать объекты по связанным с ними атрибутам. Каталоги - это разновидность контекста; они ограничивают пространство имен так же, как это делает структура каталогов в файловой системе. [5]
Смотрите также
Рекомендации
- ^ «Java SE - Основные технологии - Интерфейс именования и каталогов Java (JNDI)» . www.oracle.com . Проверено 17 декабря 2016 .
- ^ "JNDI Resources HOW-TO" . Руководство пользователя Apache Tomcat 7 . Фонд программного обеспечения Apache . Проверено 21 января 2014 года .
- ^ «Поставщик услуг реестра JNDI / RMI» . docs.oracle.com . Проверено 17 декабря 2016 .
- ^ "SUN MICROSYSTEMS, INC. ПРЕДСТАВЛЯЕТ JAVA NAMING AND DIRECTORY INTERFACE API" . sun.com . 1997-03-10. Архивировано из оригинала на 2004-09-08.
- ^ «Фильтры поиска» . docs.oracle.com . Проверено 17 декабря 2016 .