Java Naming and Directory Interface (JNDI) - это API для доступа к службам имен и каталогов. Прежде чем погружаться в JNDI, поясним, о каких службах идет речь. Службой имен, в самом широком смысле, называют систему, управляющую отображением множества имен во множество объектами. Зная имя объекта в системе, клиент может получить доступ к этому объекту или ассоциировать с этим именем другой объект. Примером является DNS, служба доменных имен.
JNDI состоит из следующих пяти пакетов:
* javax.naming - содержит основные классы и интерфейсы, необходимые для взаимодействия со службами имен. В частности, интерфейс Context для поиска объектов, привязки объекта к имени, создания и удаления контекстов.
* javax.naming.directory - расширяет пакет javax.naming средствами взаимодействия со службами каталогов. Определяет интерфейс DirContext, позволяющий работать с атрибутами объектов каталога.
* javax.naming.event - определяет классы и интерфейсы событий, происходящих в каталоге, а также средства перехвата этих событий.
* javax.naming.ldap - предоставляет средства для работы со специфическими возможностями LDAP v3, не покрываемыми более общим пакетом javax.naming.directory. Однако эти возможности редко используются, и в большинстве случаев достаточно использовать пакет javax.naming.directory.
* javax.naming.spi определяет способ интеграции новых систем имен или каталогов с JNDI, чтобы клиенты могли пользоваться этими службами из Java-программ средствами JNDI.
JNDI используется в Enterprise JavaBeans в качестве службы указания имен для EJB компонент в сети и других службах контейнера, таких как транзакции. JNDI работает очень похоже с другими стандартами, такими как CORBA Naming (сервис именования), и может на самом деле быть реализован в виде надстройки над ним.
При развертывании бина имя для публикации в JNDI домашнего интерфейса EJB берется из дескриптора развертывания.
Когда клиентская программа хочет вызвать EJB, она должна найти EJB компонент внутри JNDI и получить ссылку на домашний интерфейс EJB компонента. Домашний интерфейс используется для создания экземпляра EJB.