6.3 小结
JNDI(命名和目录接口)是一个为Java应用程序提供命名服务的应用程序编程接口(API)。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。
命名服务是一种服务,它提供了为给定的数据集创建一个标准名字的能力。允许把名称同Java对象或资源关联起来,而不必指导对象或资源的物理ID。
目录服务是一种特殊类型的数据库,与SQL Server、Access、Oracle等关系数据库管理系统相反,构造目录服务的目的是为了处理基于行为的事务,并且使用一种关系信息模型。目录服务将命名服务的概念进一步引申为提供具有层次结构的信息库。
LDAP 是在20世纪90年代早期作为标准目录协议进行开发的,它是目前最流行的目录协议,与厂商跟平台无关。LDAP定义客户应当如何访问服务器中的数据,它并 不指定数据应当如何存储在服务器上。不使用服务提供者就不能用JNDI。在使用JNDI时,只需要了解JNDI,而服务提供者才关注实际的网络协议、编码 /解码值等细节。一个服务提供者就是一组Java类的集合,SDK中的服务提供者包括LDAP、NIS、COS(CORBA对象服务)、RMI注册及文件 系统的提供者等。
JNDI中包括5个包:javax.naming、javax.naming.directory、javax.naming.event、javax.naming.ldap和javax.naming.spi。
常用的JNDI操作有:bind、unbind、lookup、rename、NamingEnumeration listBindings和NamingEnumeration list。
使用JNDI来访问命名服务或者目录服务,操作步骤如下:
(1)建立一个散列表(hashtable),它包含定义所希望使用的JNDI服务的属性,所希望连接的LDAP服务器IP地址以及工作的端口。
(2)将与认证成用户登录有关的任何信息添加到散列表中。
(3)创建初始context对象。如果访问命名服务,则使用InitialContext类,如果访问目录服务,则要使用InitialDirContext。
(4)使用刚才得到的context对象执行所需的操作(如添加新的条目或者搜索条目)。
(5)完成操作后关闭context对象。