JNDI即Java命名和目录接口(JavaNaming and Directory Interface),它属于J2EE规范范畴,是J2EE的核心技术之一,提供了一组接口、类和关于命名空间的概念。JDNI是provider-based技术,它暴露一个API和一个服务供应接口(SPI)。它将名称和对象联系起来,使我们可以用名称访问对象。我们可以把JNDI简单地看成是里面封装了一个name到实体对象的映射,通过字符串可以方便得到想要的对象资源,例如JDBC、JMail、JMS、EJB等。这意味着任何基于名字的技术都能通过JNDI而提供服务,现在它支持的技术包含了LDAP、RMI、CORBA、NDS、NIS、DNS、Windows注册表等等。
竟然我们都可以直接各种服务,为什么还要在封装一层JNDI?总的来说,JNDI的出现就是为了分布式开发服务,用一条线把责任任务分成两边,一边的人负责开发这些分布式对象,一边的人只要使用这些分布式对象即可。两边的人不必是同属一个公司,并且两边的人开发通常不是并行的,也不必同属一个项目,就像一个应用服务器的JNDI中注册了一个数据源,不管在哪个项目中,只要有需要就可以通过JNDI使用这个数据源。总结起来就是随着分布式应用的发展,远程访问对象成为常用方法,尽管我们通过socket可以实现远程通信,但要关心每一个远程访问的具体细节并实现,这样局限性还是比较大,效率低下。而伴随着JNDI技术的出现,将大大简化远程调用,方便查找远程或本地的对象。
JNDI包含了很多的服务接口,如图3-1-8-1,JNDIAPI提供了访问不同JNDI服务的一个标准的统一的实现,其具体实现可由不同的Service Provider来完成,具体调用类及通信过程对