JNDI(Java Naming and Directory Interfaces)一组帮助做多个命名和目录服务接口的API。
基本原理
在使用JNDI服务前,首先需求发布这个服务,然后取得该服务。因此它包含两个最主要的操作,即bind和lookup。
- bind:发布服务,它使用一张哈希表存储对象,存储对象的时候要定义好对象的键值字符串,这通常都由Java EE服务器来实现,开发人员只需要往应用服务器中发布组建即可。例:JBoss中发布EJB。
- lookup:负责查找对象,客户端开发人员可以使用键值来获取服务对象。
JNDI接口与服务实现
Sun只提供了JNDI接口,JDK提供的接口分布在如下5个包中。
- javax.naming:包含了访问命名服务的类和接口。例:它定义Context接口,这是命名服务执行查询的入口。
- javax.naming.directory:对命名包的扩充,提供了访问目录服务的类和接口。例:提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。
- javax.naming.event:提供了对访问命名和目录服务时的时间通知的支持。例:NamingEvent类用来表示命名/目录服务器产生的事件,定义了侦听NamingEvents的NamingListener接口。
- javax.naming.ldap:提供了对LDAP版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。
- javax.naming.spi:提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。
JNDI的查找(JBoss)
Properties props = new Properties();
props.setProterty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProterty("java.naming.provider.url", "localhost:1099");
props.setProterty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx = new InitialContext(props);
Object obj = ctx.lookup("mycompany/JNDIService");
完