Що таке JNDI ?
Яке його основне використання?
Коли він використовується?
Що таке JNDI ?
Яке його основне використання?
Коли він використовується?
Відповіді:
Що таке JNDI?
Він розшифровується як Java Naming та Directory Interface .
Яке його основне використання?
JNDI дозволяє розподіленим програмам шукати служби абстрактно, незалежно від ресурсів.
Коли він використовується?
Найпоширеніший випадок використання - це налаштування пулу підключення до бази даних на сервері додатків Java EE. Будь-яка програма, розгорнута на цьому сервері, може отримати доступ до потрібних з'єднань, використовуючи ім'я JNDI, java:comp/env/FooBarPool
не знаючи деталей про з'єднання.
Це має ряд переваг:
devl->int->test->prod
середовищ, ви можете використовувати одне і те ж ім'я JNDI у кожному середовищі та приховати фактичну базу даних, яка використовується. Програми не повинні змінюватися, оскільки вони мігрують між середовищами.Що таке JNDI?
Java Naming and Directory Interface TM (JNDI) - це інтерфейс програмування додатків (API), який забезпечує функціонування імен та каталогів додатків, написаних мовою програмування Java TM . Він визначений як незалежний від будь-якої конкретної реалізації каталогу послуг. Таким чином, до різноманітних каталогів (нових, нових, і вже розгорнутих) можна отримати доступ загальним способом.
Яке його основне використання?
Більшість із них висвітлена у наведеній вище відповіді, але я хотів би надати тут архітектуру, щоб вище було більше сенсу.
Щоб використовувати JNDI, ви повинні мати класи JNDI та одного або декількох постачальників послуг. Java 2 SDK, v1.3 включає три постачальника послуг для таких служб імен / каталогів:
Таким чином, ви в основному створюєте об'єкти і реєструєте їх у службах каталогів, на яких пізніше можна виконати пошук та виконати операцію.
З точки зору мирян, 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
для інформації про конфігурацію.
Огляд 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 та Directory Interface. Він поставляється стандартно з J2EE.
Яке його основне використання?
За допомогою цього API ви можете отримати доступ до багатьох типів даних, наприклад, до об'єктів, пристроїв, файлів служб імен та служб каталогів, наприклад. він використовується EJB для пошуку віддалених об'єктів. JNDI призначений для надання загального інтерфейсу для доступу до існуючих служб, таких як DNS, NDS, LDAP, CORBA та RMI.
Коли він використовується?
Ви можете використовувати JNDI для виконання іменних операцій, включаючи операції зчитування та операції з оновлення простору імен. Наступні операції описані тут .
Служба іменування пов'язує імена з об'єктами та знаходить об'єкти на основі їх імен. (Реєстр RMI є хорошим прикладом служби іменування.) JNDI надає загальний інтерфейс для багатьох існуючих служб іменування, таких як LDAP, DNS.
Без JNDI інформацію про місцеположення або доступ до віддалених ресурсів потрібно було б чітко кодувати в додатках або бути доступною в конфігурації. Забезпечення цієї інформації є досить втомливим та схильним до помилок.
Мені просто цікаво, чому офіційні документи так ігноруються, що детально розглядають деталі.
Але якщо ви хочете розібратися у випадках, зверніться до відповіді duffymo .
Java Naming and Directory Interface TM (JNDI) - це інтерфейс програмування додатків (API), який забезпечує функціонування імен та каталогів додатків, написаних мовою програмування Java TM . Він визначений як незалежний від будь-якої конкретної реалізації каталогу послуг. Таким чином, до різних каталогів - нових, що з'являються та вже розгорнутих - можна отримати доступ загальним способом.
І його архітектура
І зазвичай, як ви цим користуєтеся .
I am just curious why the official docs are so ignored which elaborate the details meticulously already
Може тому, що вони не пояснюють достатньою мірою, щоб звичайні люди могли зрозуміти?
Я буду використовувати один приклад, щоб пояснити, як JNDI може бути використаний для налаштування бази даних без того, щоб розробник додатків знав ім'я користувача та пароль бази даних.
1) Ми налаштували джерело даних в автономному сервері JBoss- автономного-full.xml . Крім того, ми також можемо налаштувати деталі басейну.
<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-ім'я та пов'язаний з ним об’єкт джерела даних буде доступно для нашого застосування.
2) Ми можемо отримати цей об'єкт даних за допомогою класу JndiDataSourceLookup.
Весна створить джерело джерела даних, після того, як ми надамо jndi-ім'я.
Тепер ми можемо змінити розмір пулу, ім’я користувача або пароль відповідно до нашого оточення чи вимог, але це не вплине на додаток.
Примітка : 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>
Це один із випадків використання. Сподіваюся, це прояснить.
Найкраще пояснення мені дано тут
Що таке JNDI
Це API для надання доступу до служби каталогів, тобто імені (відображення рядків) служби з об'єктами, посилання на віддалені об'єкти або прості дані . Це називається зв’язуванням. Сукупність прив’язок називається контекстом . Програми використовують інтерфейс JNDI для доступу до ресурсів.
Простіше кажучи, це як хеш-карта з клавішею String і об'єктними значеннями, що представляють ресурси в Інтернеті.
Які проблеми вирішує JNDI
Без JNDI інформацію про місцеположення або доступ до віддалених ресурсів потрібно було б чітко кодувати в додатках або бути доступною в конфігурації. Забезпечення цієї інформації є досить втомливим та схильним до помилок.
Якщо ресурси було перенесено на інший сервер, наприклад, з іншою IP-адресою, усі додатки, що використовують цей ресурс, повинні бути оновлені цією новою інформацією. З JNDI це не потрібно. Необхідно оновлювати лише відповідне прив'язування ресурсів. Програми все ще можуть отримати доступ до нього з назвою, а переміщення - прозорим.