什么是JNDI? 它的基本用途是什么? 什么时候使用?


当前回答

Java命名和目录接口(JNDI)是一个应用程序编程接口(API),为使用JavaTM编程语言编写的应用程序提供命名和目录功能。它被定义为独立于任何特定的目录服务实现。因此,可以以通用的方式访问各种目录——新的、正在出现的和已经部署的目录。

尽管JNDI在轻量级、容器化的Java应用程序(如Spring Boot)中扮演的角色较少,但还有其他用途。仍然使用JNDI的三种Java技术是JDBC、EJB和JMS。它们在Java企业应用程序中都有广泛的用途。

例如,一个独立的DevOps团队可能在所有环境中管理敏感数据库连接的用户名和密码等环境变量。JNDI资源可以在web应用程序容器中创建,JNDI被用作在所有环境中工作的一致抽象层。

这种设置允许开发人员为开发目的创建和控制本地定义,同时通过相同的JNDI名称连接到生产环境中的敏感资源。

参考: https://docs.oracle.com/javase/tutorial/jndi/overview/index.html

其他回答

对我来说最好的解释在这里

什么是JNDI

它是一个API,用于提供对目录服务的访问,即服务映射名称(字符串)与对象、对远程对象或简单数据的引用。这叫做 绑定。绑定的集合称为上下文。应用程序使用JNDI接口访问资源。 简单地说,它就像一个带有String键和Object值的hashmap,表示web上的资源。

JNDI解决了什么问题

Without JNDI, the location or access information of remote resources would have to be hard-coded in applications or made available in a configuration. Maintaining this information is quite tedious and error prone. If a resources has been relocated on another server, with another IP address, for example, all applications using this resource would have to be updated with this new information. With JNDI, this is not necessary. Only the corresponding resource binding has to be updated. Applications can still access it with its name and the relocation is transparent.

什么是JNDI ?

JNDI代表Java命名和目录接口。它是J2EE的标准。

它的基本用途是什么?

使用这个API,您可以访问许多类型的数据,如对象、设备、命名文件和目录服务。EJB使用它来查找远程对象。JNDI旨在提供一个公共接口来访问现有的服务,如DNS、NDS、LDAP、CORBA和RMI。

什么时候使用?

您可以使用JNDI执行命名操作,包括读取操作和更新名称空间的操作。此处介绍以下操作。

什么是JNDI ?

Java命名和目录接口(JNDI)是一个应用程序编程接口(API),为使用JavaTM编程语言编写的应用程序提供命名和目录功能。它被定义为独立于任何特定的目录服务实现。因此,可以以通用的方式访问各种目录(新目录、新目录和已经部署的目录)。

它的基本用途是什么?

上面的答案涵盖了大部分内容,但我想在这里提供架构,以便上面的内容更有意义。

要使用JNDI,您必须拥有JNDI类和一个或多个服务提供者。Java 2 SDK v1.3包含三个服务提供者,用于以下命名/目录服务:

轻量级目录访问协议(LDAP) CORBA (Common Object Request Broker Architecture)通用对象服务(COS)名称服务 Java远程方法调用注册表

所以基本上你创建对象并在目录服务上注册它们,然后你可以在目录服务上进行查找和执行操作。

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");

我只是好奇为什么官方文件如此被忽视,而这些文件已经一丝不苟地阐述了细节。

但如果你想了解这些案例,请参考duffymo的答案。

Java命名和目录接口(JNDI)是一个应用程序编程接口(API),为使用JavaTM编程语言编写的应用程序提供命名和目录功能。它被定义为独立于任何特定的目录服务实现。因此,可以以通用的方式访问各种目录——新的、正在出现的和已经部署的目录。

以及它的结构

以及通常如何使用它。