Java Naming and Directory Interface (JNDI) — это набор JavaAPI, организованный в виде службы каталогов, который позволяет Java-клиентам открывать и просматривать данные и объекты по их именам. Как любой другой Java API, как набор интерфейсов, JNDI не зависит от нижележащей реализации. В дополнению к этому, он предоставляет реализацию service provider interface (SPI), которая позволяет службам каталогов работать в паре с каким-либо фреймворком. Это может быть сервер, файл или база данных[1].
Концепция JNDI основана на двух основных определениях: ассоциация и контекст. Ассоциация (англ.binding) — это соответствие JNDI-имени и объекта. Контекст (англ.context) — это среда, в которой хранится набор ассоциаций между объектами и именами.
Архитектура
Сервисы Java RMI и Jakarta EE API используют подходы, описанные в JNDI API, для поиска объектов в сети.
API предоставляет:
механизм ассоциации (связывания) объекта с именем;
интерфейс просмотра каталогов для выполнения общих запросов;
интерфейс событий, который позволяет определить клиентам, когда элементы каталога были изменены;
LDAP-расширение для поддержки дополнительных возможностей LDAP-сервисов.[2]
SPI часть интерфейсов позволяет поддерживать практически любой тип именования каталогов, включая:
В простейшем случае, из метода main() создаётся начальный контекст. Тип именования каталогов указывается с помощью установки переменных среды. Один из вариантов их установки — использование объекта типа Hashtable, который передаётся в конструктор класса InitialContext: