JNDI(Java Naming & Directory Interface)即java的命名和目录接口。为开发人员提供了查找和访问的各种命名和目录服务的通用、统一方式。构建在DNS,LDAP等服务之上。
命名服务提供一种绑定服务,即映射标识符到实体或对象。例如DNS——域名系统 (Domain Name System)就是一种命名服务。有了DNS,可以把容易记忆的名字www.baidu.com与IP地址202.108.22.5联系起来,在访问百度网站时只需要在地址栏中输入www.baidu.com即可。
目录服务可以简单的理解为特殊的命名服务,目录服务本质上也提供命名服务,只不过在建立名字到实体的映射时还可以设置更多的属性。
一个使用JNDI命名服务的程序可以分为四层:Java应用程序、JNDI API、JNDI命名管理器,以及不同的命名服务。对于使用命名服务的客户端而言,可以通过统一的接口访问不同的名字服务,这就是JNDI。
JNDI体系架构
通过JNDI体系结构可以看出JNDI命名服务是把RMI、CORBA、LDAP等现有命名服务进行封装,对用户提供统一的接口,大大简化了客户端使用命名服务的复杂度。
二、JNDI优点
1、只需要学习单一的API就可以访问各种目录服务信息。
2、将应用程序与协议和实现细节隔离开。
3、可以连接不同类型的目录服务器。
三、JNDI在J2EE应用开发中的主要用途
1、获取Web应用程序的资源引用。
2、获取EJB对象。
3、获取JMS对象。
4、获取数据源对象。
注:不要将JNDI当做数据库使用:1、JNDI对象存储在内存中;2、访问JNDI对象与网络性能有关。
三、JNDI API包含的5个包
1、javax.naming:包含访问命名服务的类和接口。
2、javax.naming.event: 包含在命名服务中实现事件通知机制的类与接口。
3、javax.naming.ldap: 包含支持LDAP v3扩展和控制的类与接口。
4、javax.naming.spi:为服务提供商提供的接口,一般用户不会涉及。
5、javax.naming.directory:包含访问目录服务的类与接口。
四、JNDI树