Какова цель JNDI
Как вы можете реализовать использование JNDI, с примером, если это возможно?
4 ответа:
JNDI-это интерфейс именования и каталогов Java. Он используется для разделения проблем приложения разработчик и приложения программы. Когда вы пишете приложение, которое опирается на базу данных, вам не нужно беспокоиться об имени пользователя или пароле для подключения к этой базе данных. JNDI позволяет разработчику дать имя базе данных и полагаться на средство развертывания для сопоставления этого имени с фактическим экземпляром базы данных. база данных.
например, если вы пишете код, который выполняется в контейнере Java EE, вы можете написать это, чтобы получить доступ к источнику данных с именем JNDI "Database":
DataSource dataSource = null; try { Context context = new InitialContext(); dataSource = (DataSource) context.lookup("Database"); } catch (NamingException e) { // Couldn't find the data source: give up }
обратите внимание, что здесь нет ничего о драйвере базы данных, имени пользователя или пароле. Это настроено внутри контейнера.
JNDI не ограничивается базами данных (JDBC); все виды услуг могут быть заданы имена. Для более подробной информации, вы должны проверить Солнце учебник на эту тему.
JNDI является очень мощным механизмом для организации информации о конфигурации и обнаружение и прослушивание услуг С помощью
EventContext
. В JNDI вы можете искать и слушать любой "объект" (а не простоDataSource
s), предполагая, что ваш поставщик услуг JNDI поддерживает его.конечно, единственная проблема на самом деле имеет поставщика услуг JNDI; самое замечательное в этом то, что это удивительно легко свернуть свой собственный. Ведь вы можете кодировать любой экземпляр Java на
XML
используя JavaBeansXMLEncoder
иXMLDecoder
: вам не нужно полагаться на работу в пределах сервера приложений!так в чем разница между этим имея конфигурационные файлы? Ну, это может быть намного чище, потому что все ваши приложения могут получить свою конфигурацию от там же. Если им нужно поделиться информацией о конфигурации (например, расположение базы данных), то это может быть определено один раз в JNDI. Предположим, вы переместили серверы баз данных: вам не нужно запоминать конфигурационные файлы gazillion с расположением в нем. Вы просто идете в одно место: JNDI.
JNDI-это API, используемый для доступа к каталогу и службам именования (т. е. средства, с помощью которых имена связаны с объектами). Ассоциация имени с объектом называется привязкой.
простой пример служба имен DNS, который сопоставляет имена компьютеров в IP-адреса.
используя JNDI, приложения могут хранить и извлекать именованные объекты Java любого типа.
в контексте Java это может быть использовано в файлах конфигурации, где вы не хотите жестко закодировать конкретные переменные среды.
Весна Пример:
Spring context file
<bean id="WSClientConfig" class="com.example.BaseClientConfigImpl"> <property name="protocol"> <jee:jndi-lookup jndi-name="java:comp/env/protocol" /> </property> <property name="endpoint"> <jee:jndi-lookup jndi-name="java:comp/env/endpoint" /> </property> <property name="requestPath"> <jee:jndi-lookup jndi-name="java:comp/env/requestPath" /> </property>
Tomcat context file
<Environment name="protocol" type="java.lang.String" value="https://"/> <Environment name="endpoint" type="java.lang.String" value="172.0.0.1"/> <Environment name="requestPath" type="java.lang.String" value="/path/to/service"/>
JNDI позволяет упростить конструкцию ресурса только в имя. Итак, это много деталей группа в 1 для удобства / безопасности / etc. (он же слой абстракции)
реализовать: настройка списка свойств, соответствующего предопределенным полям в контекстном интерфейсе Jndi. (эти свойства определяют настройки для выполнения jndi; но *не имя поиска)
Properties props = new Properties(); //field Context.INITIAL_CONTEXT_FACTORY => property name java.naming.factory.initial //field Context.PROVIDER_URL => property name java.naming.provider.url props.load(new FileInputStream("*properties file*")); //prop file in this case Context ctx = new InitialContext(props); Object o = ctx.lookup("*name of resource*");
в идеале, специализированные функции будет существовать для поддержания каталога LDAP, DNS и т. д. В вашей организации (поэтому единый единый набор картографических служб все, уменьшая расхождения)
список поставщиков услуг JNDI: https://www.ibm.com/support/knowledgecenter/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/concepts/c_jndi_JNDI_Service_Providers_.htm