Что такое JNDI?
Каково его основное использование?
Когда это используется?
Что такое JNDI? Каково его основное использование? Когда это используется?
Ответы (9)
Что такое JNDI?
Он означает интерфейс именования и каталогов Java.
Каково его основное использование?
JNDI позволяет распределенным приложениям искать службы абстрактным, независимым от ресурсов способом.
Когда его используют?
Чаще всего используется для настройки пула соединений с базой данных на сервере приложений Java EE. Любое приложение, развернутое на этом сервере, может получить доступ к нужным им соединениям, используя имя JNDI java:comp/env/FooBarPool, без необходимости знать подробности о соединении.
Это дает несколько преимуществ:
- Если у вас есть последовательность развертывания, в которой приложения перемещаются из
devl->int->test->prodсред, вы можете использовать одно и то же имя JNDI в каждой среде и скрыть фактическую используемую базу данных. Приложения не должны меняться при миграции между средами. - Вы можете минимизировать количество людей, которым необходимо знать учетные данные для доступа к производственной базе данных. Только серверу приложений Java EE необходимо знать, используете ли вы JNDI.
Что такое JNDI?
Интерфейс именования и каталогов Java TM (JNDI) - это интерфейс прикладного программирования (API), который обеспечивает функции именования и каталогов для приложений, написанных с использованием языка программирования Java TM. Он определен как независимый от какой-либо конкретной реализации службы каталогов. Таким образом, можно получить доступ к различным каталогам (новым, появляющимся и уже развернутым) обычным способом.
Каково его основное использование?
Большая часть этого описана в приведенном выше ответе, но я хотел бы представить здесь архитектуру, чтобы выше было больше смысла.

Чтобы использовать JNDI, у вас должны быть классы JNDI и один или несколько поставщиков услуг. Пакет SDK для Java 2 версии 1.3 включает трех поставщиков услуг для следующих служб именования и каталогов:
- Облегченный протокол доступа к каталогам (LDAP)
- Common Object Request Broker Architecture (CORBA) Служба имен Common Object Services (COS)
- Реестр удаленного вызова метода Java (RMI)
Таким образом, в основном вы создаете объекты и регистрируете их в службах каталогов, в которых впоследствии вы можете выполнять поиск и выполнять операции.
С точки зрения непрофессионала JNDI - это, по сути, интерфейс для получения экземпляров внутренних / внешних ресурсов, таких как
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
или любой другой тип, определенный адаптером ресурсов JCA. Он предоставляет синтаксис для создания доступа, будь то внутренний или внешний. т.е. (comp / env в этом случае означает, что компонент / среда, есть много другого синтаксиса):
jndiContext.lookup("java:comp/env/persistence/customerDB");
java.lang.String для информации о конфигурации.
- person sleske; 21.01.2014
Обзор JNDI
JNDI - это API, указанный в технологии Java, который обеспечивает функции именования и каталогов для приложений, написанных на языке программирования Java. Он разработан специально для платформы Java с использованием объектной модели Java. Используя JNDI, приложения, основанные на технологии Java, могут сохранять и извлекать именованные объекты Java любого типа. Кроме того, JNDI предоставляет методы для выполнения стандартных операций с каталогами, таких как связывание атрибутов с объектами и поиск объектов с использованием их атрибутов.
JNDI также определяется независимо от какой-либо конкретной реализации службы имен и каталогов. Он позволяет приложениям получать доступ к разным, возможно, множественным службам имен и каталогов, используя общий API. Различные поставщики услуг имен и каталогов могут быть легко подключены к этому общему API. Это позволяет приложениям на основе технологии Java использовать информацию в различных существующих службах именования и каталогов, таких как LDAP, NDS, DNS и NIS (YP), а также позволяет приложениям сосуществовать с унаследованным программным обеспечением и системами.
Используя JNDI в качестве инструмента, вы можете создавать новые мощные и переносимые приложения, которые не только используют преимущества объектной модели Java, но также хорошо интегрированы со средой, в которой они развернуты.
Что такое JNDI?
JNDI расшифровывается как Java Naming and Directory Interface. Он входит в стандартную комплектацию J2EE.
Каково его основное использование?
С помощью этого API вы можете получить доступ ко многим типам данных, таким как объекты, устройства, файлы имен и службы каталогов, например. он используется EJB для поиска удаленных объектов. JNDI предназначен для предоставления общего интерфейса для доступа к существующим службам, таким как DNS, NDS, LDAP, CORBA и RMI.
Когда это используется?
Вы можете использовать JNDI для выполнения операций именования, включая операции чтения и операции для обновления пространства имен. Следующие операции описаны здесь.
Служба именования связывает имена с объектами и находит объекты на основе заданных им имен (реестр RMI является хорошим примером службы имен.) JNDI предоставляет общий интерфейс для многих существующих служб именования, таких как LDAP, DNS.
Без JNDI информация о местоположении или доступе к удаленным ресурсам должна быть жестко запрограммирована в приложениях или сделана доступной в конфигурации. Сохранение этой информации довольно утомительно и чревато ошибками.
Лучшее объяснение мне дано здесь
Что такое JNDI
Это API для предоставления доступа к службе каталогов, то есть к имени сопоставления службы (строки) с объектами, ссылкой на удаленные объекты или простыми данными. Это называется привязкой. Набор привязок называется контекстом. Приложения используют интерфейс JNDI для доступа к ресурсам.
Проще говоря, это похоже на хэш-карту со строковым ключом и значениями объекта, представляющими ресурсы в Интернете.
Какие проблемы решает JNDI
Без JNDI информация о местоположении или доступе к удаленным ресурсам должна быть жестко запрограммирована в приложениях или сделана доступной в конфигурации. Сохранение этой информации довольно утомительно и чревато ошибками.
Если ресурсы были перемещены на другой сервер, например, с другим IP-адресом, все приложения, использующие этот ресурс, должны быть обновлены этой новой информацией. С JNDI в этом нет необходимости. Необходимо обновить только соответствующую привязку ресурса. Приложения по-прежнему могут получить к нему доступ по его имени, и перемещение будет прозрачным.
Мне просто любопытно, почему официальные документы так проигнорированы, которые уже тщательно прорабатывают детали.
Но если вы хотите разобраться в этих случаях, обратитесь к ответу duffymo.
Интерфейс именования и каталогов Java TM (JNDI) - это интерфейс прикладного программирования (API), который обеспечивает функции именования и каталогов для приложений, написанных с использованием языка программирования Java TM. Он определен как независимый от какой-либо конкретной реализации службы каталогов. Таким образом, можно получить доступ к различным каталогам - новым, появляющимся и уже развернутым - одним и тем же способом.
И его архитектура
И обычно как вы его используете.
I am just curious why the official docs are so ignored which elaborate the details meticulously already Может быть, потому, что они недостаточно объясняют, чтобы обычные люди могли понять?
- person skryvets; 18.09.2019
Я воспользуюсь одним примером, чтобы объяснить, как JNDI можно использовать для настройки базы данных без того, чтобы разработчик приложений знал имя пользователя и пароль базы данных.
1) Мы настроили источник данных в standalone-full.xml сервера JBoss. Кроме того, мы также можем настроить детали пула.
<datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
<connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<driver>oracle</driver>
<security>
<user-name>usname</user-name>
<password>pass</password>
</security>
<security>
<security-domain>encryptedSecurityDomain</security-domain>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
<background-validation-millis>1</background-validation-millis>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</pool>
</statement>
</datasource>
Теперь это jndi-name и связанный с ним объект источника данных будут доступны для нашего application.application.
2) Мы можем получить этот объект источника данных с помощью класса JndiDataSourceLookup.
Spring создаст экземпляр bean-объекта источника данных после того, как мы предоставим jndi-name.
Теперь мы можем изменить размер пула, имя пользователя или пароль в соответствии с нашей средой или требованиями, но это не повлияет на приложение.
Примечание: encryptedSecurityDomain, нам нужно настроить его отдельно на сервере JBoss, например
<security-domain name="encryptedSecurityDomain" cache-type="default">
<authentication>
<login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="<usernamefordb>"/>
<module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
</login-module>
</authentication>
</security-domain>
Это один из вариантов использования. Надеюсь, это прояснится.


