什么是JNDI? 它的基本用途是什么? 什么时候使用?
当前回答
对我来说最好的解释在这里
什么是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.
其他回答
我只是好奇为什么官方文件如此被忽视,而这些文件已经一丝不苟地阐述了细节。
但如果你想了解这些案例,请参考duffymo的答案。
Java命名和目录接口(JNDI)是一个应用程序编程接口(API),为使用JavaTM编程语言编写的应用程序提供命名和目录功能。它被定义为独立于任何特定的目录服务实现。因此,可以以通用的方式访问各种目录——新的、正在出现的和已经部署的目录。
以及它的结构
以及通常如何使用它。
什么是JNDI ?
Java命名和目录接口(JNDI)是一个应用程序编程接口(API),为使用JavaTM编程语言编写的应用程序提供命名和目录功能。它被定义为独立于任何特定的目录服务实现。因此,可以以通用的方式访问各种目录(新目录、新目录和已经部署的目录)。
它的基本用途是什么?
上面的答案涵盖了大部分内容,但我想在这里提供架构,以便上面的内容更有意义。
要使用JNDI,您必须拥有JNDI类和一个或多个服务提供者。Java 2 SDK v1.3包含三个服务提供者,用于以下命名/目录服务:
轻量级目录访问协议(LDAP) CORBA (Common Object Request Broker Architecture)通用对象服务(COS)名称服务 Java远程方法调用注册表
所以基本上你创建对象并在目录服务上注册它们,然后你可以在目录服务上进行查找和执行操作。
对我来说最好的解释在这里
什么是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.
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 ?
它代表Java命名和目录接口。
它的基本用途是什么?
JNDI允许分布式应用程序以抽象的、独立于资源的方式查找服务。
什么时候使用?
最常见的用例是在Java EE应用服务器上设置数据库连接池。部署在该服务器上的任何应用程序都可以使用JNDI名称java:comp/env/FooBarPool访问所需的连接,而无需了解有关连接的详细信息。
这有几个优点:
如果你有一个应用程序从devl->int->test->prod环境迁移的部署序列,你可以在每个环境中使用相同的JNDI名称,并隐藏实际使用的数据库。应用程序在环境之间迁移时不必更改。 您可以尽量减少需要知道访问生产数据库的凭据的人数。只有Java EE应用服务器需要知道您是否使用JNDI。