Что такое JNDI? Каково его основное использование? Когда это используется?

  • Что такое JNDI?

  • Каково его основное использование?

  • Когда это используется?


person LetsSyncUp    schedule 06.12.2010    source источник
comment
См. Определение и варианты использования в личном блоге: tshikatshikaaa.blogspot.com/2013/01/   -  person Jérôme Verstrynge    schedule 29.01.2013


Ответы (9)


Что такое JNDI?

Он означает интерфейс именования и каталогов Java.

Каково его основное использование?

JNDI позволяет распределенным приложениям искать службы абстрактным, независимым от ресурсов способом.

Когда его используют?

Чаще всего используется для настройки пула соединений с базой данных на сервере приложений Java EE. Любое приложение, развернутое на этом сервере, может получить доступ к нужным им соединениям, используя имя JNDI java:comp/env/FooBarPool, без необходимости знать подробности о соединении.

Это дает несколько преимуществ:

  1. Если у вас есть последовательность развертывания, в которой приложения перемещаются из devl->int->test->prod сред, вы можете использовать одно и то же имя JNDI в каждой среде и скрыть фактическую используемую базу данных. Приложения не должны меняться при миграции между средами.
  2. Вы можете минимизировать количество людей, которым необходимо знать учетные данные для доступа к производственной базе данных. Только серверу приложений Java EE необходимо знать, используете ли вы JNDI.
person duffymo    schedule 06.12.2010
comment
так что это в основном более безопасная альтернатива файлам свойств с информацией о соединении jdbc? - person grinch; 16.01.2014
comment
@grinch: По сути, да. Он более безопасен и стандартизирован, что упрощает развертывание (не нужно угадывать, какое имя должно быть у файла свойств и т. Д.). - person sleske; 21.01.2014
comment
В чем же тогда разница между использованием переменных среды и JNDI? Это похожая концепция? - person skryvets; 18.09.2019

Что такое JNDI?

Интерфейс именования и каталогов Java TM (JNDI) - это интерфейс прикладного программирования (API), который обеспечивает функции именования и каталогов для приложений, написанных с использованием языка программирования Java TM. Он определен как независимый от какой-либо конкретной реализации службы каталогов. Таким образом, можно получить доступ к различным каталогам (новым, появляющимся и уже развернутым) обычным способом.

Каково его основное использование?

Большая часть этого описана в приведенном выше ответе, но я хотел бы представить здесь архитектуру, чтобы выше было больше смысла.

введите описание изображения здесь

Чтобы использовать JNDI, у вас должны быть классы JNDI и один или несколько поставщиков услуг. Пакет SDK для Java 2 версии 1.3 включает трех поставщиков услуг для следующих служб именования и каталогов:

  1. Облегченный протокол доступа к каталогам (LDAP)
  2. Common Object Request Broker Architecture (CORBA) Служба имен Common Object Services (COS)
  3. Реестр удаленного вызова метода Java (RMI)

Таким образом, в основном вы создаете объекты и регистрируете их в службах каталогов, в которых впоследствии вы можете выполнять поиск и выполнять операции.

person Aniket Thakur    schedule 20.01.2014

С точки зрения непрофессионала 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");
person mel3kings    schedule 14.06.2013
comment
Это только часть картины. JNDI позволяет вам искать объекты Java - они могут быть ресурсами, такими как DataSource, или чем-то еще, даже простым java.lang.String для информации о конфигурации. - person sleske; 21.01.2014
comment
@sleske Тогда я предлагаю вам дать свой собственный ответ. - person Ced; 25.06.2016

Обзор JNDI

JNDI - это API, указанный в технологии Java, который обеспечивает функции именования и каталогов для приложений, написанных на языке программирования Java. Он разработан специально для платформы Java с использованием объектной модели Java. Используя JNDI, приложения, основанные на технологии Java, могут сохранять и извлекать именованные объекты Java любого типа. Кроме того, JNDI предоставляет методы для выполнения стандартных операций с каталогами, таких как связывание атрибутов с объектами и поиск объектов с использованием их атрибутов.

JNDI также определяется независимо от какой-либо конкретной реализации службы имен и каталогов. Он позволяет приложениям получать доступ к разным, возможно, множественным службам имен и каталогов, используя общий API. Различные поставщики услуг имен и каталогов могут быть легко подключены к этому общему API. Это позволяет приложениям на основе технологии Java использовать информацию в различных существующих службах именования и каталогов, таких как LDAP, NDS, DNS и NIS (YP), а также позволяет приложениям сосуществовать с унаследованным программным обеспечением и системами.

Используя JNDI в качестве инструмента, вы можете создавать новые мощные и переносимые приложения, которые не только используют преимущества объектной модели Java, но также хорошо интегрированы со средой, в которой они развернуты.

Справочник

person Chathuranga Chandrasekara    schedule 06.12.2010

Что такое JNDI?

JNDI расшифровывается как Java Naming and Directory Interface. Он входит в стандартную комплектацию J2EE.

Каково его основное использование?

С помощью этого API вы можете получить доступ ко многим типам данных, таким как объекты, устройства, файлы имен и службы каталогов, например. он используется EJB для поиска удаленных объектов. JNDI предназначен для предоставления общего интерфейса для доступа к существующим службам, таким как DNS, NDS, LDAP, CORBA и RMI.

Когда это используется?

Вы можете использовать JNDI для выполнения операций именования, включая операции чтения и операции для обновления пространства имен. Следующие операции описаны здесь.

person Sabin Chirila    schedule 17.01.2014

Служба именования связывает имена с объектами и находит объекты на основе заданных им имен (реестр RMI является хорошим примером службы имен.) JNDI предоставляет общий интерфейс для многих существующих служб именования, таких как LDAP, DNS.

Без JNDI информация о местоположении или доступе к удаленным ресурсам должна быть жестко запрограммирована в приложениях или сделана доступной в конфигурации. Сохранение этой информации довольно утомительно и чревато ошибками.

person Chetan Laddha    schedule 29.11.2017

Лучшее объяснение мне дано здесь

Что такое JNDI

Это API для предоставления доступа к службе каталогов, то есть к имени сопоставления службы (строки) с объектами, ссылкой на удаленные объекты или простыми данными. Это называется привязкой. Набор привязок называется контекстом. Приложения используют интерфейс JNDI для доступа к ресурсам.

Проще говоря, это похоже на хэш-карту со строковым ключом и значениями объекта, представляющими ресурсы в Интернете.

Какие проблемы решает JNDI

Без JNDI информация о местоположении или доступе к удаленным ресурсам должна быть жестко запрограммирована в приложениях или сделана доступной в конфигурации. Сохранение этой информации довольно утомительно и чревато ошибками.

Если ресурсы были перемещены на другой сервер, например, с другим IP-адресом, все приложения, использующие этот ресурс, должны быть обновлены этой новой информацией. С JNDI в этом нет необходимости. Необходимо обновить только соответствующую привязку ресурса. Приложения по-прежнему могут получить к нему доступ по его имени, и перемещение будет прозрачным.

person xagaffar    schedule 03.02.2020

Мне просто любопытно, почему официальные документы так проигнорированы, которые уже тщательно прорабатывают детали.

Но если вы хотите разобраться в этих случаях, обратитесь к ответу duffymo.

Интерфейс именования и каталогов Java TM (JNDI) - это интерфейс прикладного программирования (API), который обеспечивает функции именования и каталогов для приложений, написанных с использованием языка программирования Java TM. Он определен как независимый от какой-либо конкретной реализации службы каталогов. Таким образом, можно получить доступ к различным каталогам - новым, появляющимся и уже развернутым - одним и тем же способом.

И его архитектура

введите описание изображения здесь

И обычно как вы его используете.

person Hearen    schedule 28.03.2019
comment
I am just curious why the official docs are so ignored which elaborate the details meticulously already Может быть, потому, что они недостаточно объясняют, чтобы обычные люди могли понять? - person skryvets; 18.09.2019
comment
Больше голосов за этот комментарий выше, чем за этот ответ. @Hearen - я думаю, вы знаете, почему официальные документы бесполезны - person Abhinandan Dubey; 27.07.2020

Я воспользуюсь одним примером, чтобы объяснить, как 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>

Это один из вариантов использования. Надеюсь, это прояснится.

person Yogesh Sanchihar    schedule 31.12.2019