duf*_*ymo 223
什么是JNDI?
它代表Java命名和目录接口.
它的基本用途是什么?
JNDI允许分布式应用程序以抽象的,与资源无关的方式查找服务.
什么时候使用?
最常见的用例是在Java EE应用程序服务器上设置数据库连接池.部署在该服务器上的任何应用程序都可以使用JNDI名称访问所需的连接,java:comp/env/FooBarPool而无需了解有关连接的详细信息.
这有几个好处:
devl->int->test->prod环境移动的部署顺序,则可以在每个环境中使用相同的JNDI名称并隐藏正在使用的实际数据库.应用程序不必在环境之间迁移时进行更改.Ani*_*kur 96
什么是JNDI?
Java命名和目录接口TM(JNDI)是一种应用程序编程接口(API),它为使用Java TM编程语言编写的应用程序提供命名和目录功能.它被定义为独立于任何特定的目录服务实现.因此,可以以通用方式访问各种目录(新的,新兴的和已经部署的).
它的基本用途是什么?
大部分内容都在上面的答案中介绍,但我想在这里提供架构,以便上面的内容更有意义.

要使用JNDI,您必须具有JNDI类和一个或多个服务提供者.Java 2 SDK v1.3包含三个用于以下命名/目录服务的服务提供程序:
所以基本上你创建对象并在目录服务上注册它们,以后你可以查找和执行操作.
mel*_*ngs 29
外行人的JNDI基本上是一个接口,可以获得内部/外部资源的实例,如
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
Run Code Online (Sandbox Code Playgroud)
或JCA资源适配器定义的任何其他类型.它提供了一种语法,能够创建访问权限,无论它们是内部还是外部.ie(此实例中的comp/env表示组件/环境,还有很多其他语法):
jndiContext.lookup("java:comp/env/persistence/customerDB");
Run Code Online (Sandbox Code Playgroud)
Cha*_*ara 14
JNDI概述
JNDI是Java技术中指定的API,它为使用Java编程语言编写的应用程序提供命名和目录功能.它专为使用Java对象模型的Java平台而设计.使用JNDI,基于Java技术的应用程序可以存储和检索任何类型的命名Java对象.此外,JNDI还提供了执行标准目录操作的方法,例如将属性与对象相关联以及使用其属性搜索对象.
JNDI也是独立于任何特定命名或目录服务实现而定义的.它使应用程序能够使用通用API访问不同的,可能是多个命名和目录服务.可以在此通用API后面无缝插入不同的命名和目录服务提供程序.这使基于Java技术的应用程序能够利用各种现有命名和目录服务(如LDAP,NDS,DNS和NIS(YP))中的信息,并使应用程序能够与传统软件和系统共存.
使用JNDI作为工具,您可以构建新的功能强大且可移植的应用程序,这些应用程序不仅可以利用Java的对象模型,而且还可以与部署它们的环境很好地集成.
Yog*_*har 13
我将用一个例子来解释如何使用 JNDI 来配置数据库,而无需任何应用程序开发人员知道数据库的用户名和密码。
1)我们在JBoss服务器的standalone-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>
Run Code Online (Sandbox Code Playgroud)
现在,这个 jndi-name 及其关联的数据源对象将可用于我们的 application.application。
2)我们可以使用 JndiDataSourceLookup 类检索此数据源对象。
在我们提供 jndi-name 后,Spring 将实例化数据源 bean。
现在,我们可以根据我们的环境或要求更改池大小、用户名或密码,但这不会影响应用程序。
注意:加密的SecurityDomain,我们需要在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>
Run Code Online (Sandbox Code Playgroud)
这是用例之一。希望它能澄清。
xag*_*far 11
这里给了我最好的解释
什么是 JNDI
它是一个提供对目录服务的访问的 API,即服务映射名称(字符串)与对象、对远程对象的引用或简单数据。这称为绑定。绑定集称为上下文。应用程序使用 JNDI 接口来访问资源。
简而言之,它就像一个哈希图,其中包含一个字符串键和代表网络上资源的对象值。
JNDI解决什么问题
如果没有 JNDI,远程资源的位置或访问信息就必须在应用程序中进行硬编码或在配置中提供。维护这些信息非常乏味且容易出错。
例如,如果某个资源已被重新定位到另一台具有另一个 IP 地址的服务器上,则所有使用该资源的应用程序都必须使用此新信息进行更新。对于 JNDI,这是不必要的。只需要更新相应的资源绑定。应用程序仍然可以使用其名称来访问它,并且重定位是透明的。
命名服务将名称与对象相关联,并根据给定的名称查找对象.(RMI注册表是命名服务的一个很好的例子.)JNDI为许多现有的命名服务提供了一个通用接口,例如LDAP,DNS.
如果没有JNDI,远程资源的位置或访问信息必须在应用程序中进行硬编码或在配置中可用.维护此信息非常繁琐且容易出错.
| 归档时间: |
|
| 查看次数: |
195174 次 |
| 最近记录: |