Java Naming and Directory Interface (JNDI)是J2EE平台的一个主要产品并且支持Enterprise JavaBeans(EJB)。JNDI可以无缝连接不同种类的企业命名和目录服务。程序员们能够使用JNDI建立轻便的目录支持应用程序。让我们来看看它的工作原理以及开始使用它所必需的代码。
名字命名
几乎所有计算平台都要依靠某种标准化的命名系统来查找、获取以及存储资源。例如,文件系统靠的是文件和目录名,目录服务靠的是对象名,而DNS系统依靠URL——你就是靠它找到本文的。
大多数的命名系统使用某种能避免名字冲突的与法。
当试图引用其中一个文件时这会造成很多麻烦。但是,假如每个文件被引用的时候都包括了其父目录,那问题就解决了。为了示范,我们假设命名语法使用一个UNIX式的分隔符。用完整路径名来引用每个名为File 1的文件应该使用如下的语法:
/Root/Directory 2/Directory 2.2.1/File 1
/Root/Directory 2/Directory 2.2.2/File 1
注重每个文件的完整路径都是唯一的。这就保证了操作系统能够正确地对一个文件进行操作,而不必担心会与其它文件发生冲突。提供这种对对象上下文便捷引用的环境被称为命名空间
Java Naming and Directory Interface是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一个服务供给接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。
JDNI通过绑定的概念将对象和名称联系起来。在一个文件系统中,文件名被绑定给文件。在DNS中,一个IP地址绑定一个URL。在目录服务中,一个对象名被绑定给一个对象实体。
JNDI中的一组绑定作为上下文来引用。每个上下文暴露的一组操作是一致的。例如,每个上下文提供了一个查找操作,返回指定名字的相应对象。每个上下文都提供了绑定和撤除绑定名字到某个对象的操作。JNDI使用通用的方式来暴露命名空间,即使用分层上下文以及使用相同命名语法的子上下文。
使用JNDI
Java 2 SDK 1.3版加入了JNDI。假如使用的是1.1或1.2版,可以下载并作为JDK的标准扩展来安装。还必须为想要使用的特定的命名空间安装service provider,比如LDAP、文件系统或RMI。这些service provider可以从Sun的JNDI Web站点下载或从SPI的供给商那里得到。