Java Naming and Directory Interface
Java Naming and Directory Interface (JNDI) — это набор Java API, организованный в виде службы каталогов, который позволяет Java-клиентам открывать и просматривать данные и объекты по их именам. Как любой другой Java API, как набор интерфейсов, JNDI не зависит от нижележащей реализации. В дополнению к этому, он предоставляет реализацию service provider interface (SPI), которая позволяет службам каталогов работать в паре с каким-либо фреймворком. Это может быть сервер, файл или база данных[1].
Концепция JNDI основана на двух основных определениях: ассоциация и контекст. Ассоциация (англ. binding) — это соответствие JNDI-имени и объекта. Контекст (англ. context) — это среда, в которой хранится набор ассоциаций между объектами и именами.
Архитектура
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/6/6d/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_Java_Naming_Directory_Interface.png)
Сервисы Java RMI и Jakarta EE API используют подходы, описанные в JNDI API, для поиска объектов в сети. API предоставляет:
- механизм ассоциации (связывания) объекта с именем;
- интерфейс просмотра каталогов для выполнения общих запросов;
- интерфейс событий, который позволяет определить клиентам, когда элементы каталога были изменены;
- LDAP-расширение для поддержки дополнительных возможностей LDAP-сервисов.[2]
SPI часть интерфейсов позволяет поддерживать практически любой тип именования каталогов, включая:
Создание контекста
[править | править код]
Для обращения к контексту и работы с JNDI требуется импорт и взаимодействие с API и классами из пакета javax.naming
[4].
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
В простейшем случае, из метода main()
создаётся начальный контекст. Тип именования каталогов указывается с помощью установки переменных среды. Один из вариантов их установки — использование объекта типа Hashtable
, который передаётся в конструктор класса InitialContext
:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
Context ctx = new InitialContext(env);
Извлечь ранее сохранённый объект из контекста возможно с помощью вызова Context.lookup()
на объекте контекста[5]:
Object obj = ctx.lookup("/com/sampleproject/SampleObject");
Примечания
[править | править код]- ↑ Oracle Documentation. JNDI Concepts . docs.oracle.com. docs.oracle.com. Дата обращения: 5 июня 2017. Архивировано 23 мая 2017 года.
- ↑ Служба имен и каталогов JNDI . java-online.ru. Дата обращения: 5 июня 2017. Архивировано 9 июня 2017 года.
- ↑ Oracle Documentation. JNDI Overview . docs.oracle.com. docs.oracle.com. Дата обращения: 5 июня 2017. Архивировано 24 мая 2017 года.
- ↑ javax.naming . Java Platform SE 8 API Documentation. Дата обращения: 5 июня 2017. Архивировано 17 марта 2017 года.
- ↑ Naming Example . Oracle Tutorial. Дата обращения: 5 июня 2017. Архивировано 31 мая 2017 года.