![jndi](https://i-blog.csdnimg.cn/blog_migrate/09523c809b0d8662e75abee13165b169.png)
jndi
JNDI代表Java命名和目录接口。 它是一种API,用于提供对目录服务的访问,即,目录与对象的服务映射名称(字符串),对远程对象或简单数据的引用。 这就是所谓的约束力。 绑定集称为上下文。 应用程序使用JNDI接口访问资源。
简而言之,它就像一个带有String键和代表Web资源的Object值的hashmap。 通常,这些资源是根据目录服务中的层次结构组织的。 级别用分隔符定义(例如对于DNS,“。”,对于LDAP,例如“。”)。 这是一个命名约定。 每个上下文都有其命名约定。
SPI代表服务提供商接口。 换句话说,这些是服务的API。 JNDI指定一个SPI来实现目录服务。 存储在目录中的对象可以具有属性(id和value)。 可以对这些属性执行CRUD操作。 如果目录允许,也可以根据对象的属性搜索对象,而不是提供名称。 用户应用程序提供的信息称为搜索过滤器。
JNDI解决了哪些问题?
没有JNDI,远程资源的位置或访问信息将必须在应用程序中进行硬编码或在配置中可用。 维护此信息非常繁琐且容易出错。
例如,如果资源已使用另一IP地址重定位在另一台服务器上,则必须使用此新信息来更新使用此资源的所有应用程序。 使用JNDI,这不是必需的。 仅需要更新相应的资源绑定。 应用程序仍然可以使用其名称访问它,并且重定位是透明的。
另一个常见用途是将应用程序从开发环境移至测试环境,最后移至生产环境。 在每个阶段,可能要使用不同的数据库进行开发,测试和生产。 在每种情况下,可以对每个数据库进行不同的绑定。 该应用程序不需要加注。
什么是LDAP?
LDAP代表轻型目录应用协议。 它通常在JNDI中用作目录服务。 今天,公司将LDAP服务器设置为专用于响应JNDI请求。 通常的用途是维护公司员工的名单,以及他们的电子邮件和访问其他应用程序的凭据。
通过集中这些信息,每个应用程序都不必在其自己的数据库中存储员工信息的多个副本,这更易于维护,并且更不容易出现错误和不一致。
JCA和CCI呢?
JCA代表Java EE连接器体系结构。 它是一种Java技术,通过为应用程序服务器及其应用程序提供连接,从而帮助它们连接到其他信息系统。 JCA为连接器服务定义了自己的SPI。 CCI代表通用客户端接口。 它被定义为JCA的一部分。 用户应用程序用来访问JCA连接服务的API。
JCA帮助集成单独开发的信息系统。 通常,用户应用程序可以使用JCA来连接到这些数据库(或信息系统),而不是使用JDBC来访问数据库(或多或少等同于硬编码配置)。 JCA实例可以在JDNI目录中注册,也可以由用户应用程序检索。
Web应用程序呢?
通常,Web应用程序在称为应用程序服务器的容器中运行。 Web应用程序可以创建自己的JNDI服务来存储对象,但也可以使用相应的名称从容器本身检索这些对象。 在这种情况下,资源(通常是数据库)是在容器级别配置的。
参考:什么是JNDI,SPI,CCI,LDAP和JCA? 从我们的JCG合作伙伴Jerome Versrynge在技术说明博客中获得。
翻译自: https://www.javacodegeeks.com/2013/02/what-is-jndi-spi-cci-ldap-and-jca.html
jndi