JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.它提供了应用编程接口(API)和服务提供者接口(SPI),命名服务将名称和对象联系起来,使得我们可以用名称访问对象。
JNDI通过注册、查找JNDI服务,可以直接使用服务,而无需关心服务提供者,这样程序不至于与访问的资源耦合!
有很多产品都支持JNDI。比如LDAP,DNS,NIS,RMI和文件系统等。
在网络应用环境经常需要改变时、EJB的环境经常需要改变时或者通过数据源使用数据库连接池时,我们最好使用JNDI。但是我们不要把JNDI当成一个数据库。一个觉的错误观点就是JNDI存储了大数据结构,存在的目的和数据库差不多。实际上,JNDI存储了相对较小的数供重复查询。
一个JNDI树包含了很多结点。叶子结点称为object。非叶子结点称为context。根结点称为root context。一个叶子结点可以绑定到多个context上。JNDI通过值来存储object。如果一个object绑定到多个context上,那么JNDI会保存这个object的多个副本。修改某个副本不会影响其他的副本。
连接JNDI的两个情况:
Cnnect to jndi from a server-side object
Context cx = new InitialContext();
Cnnect to jndi from anywhere
weblogic.jndi.Envrionment env = new weblogic.jndi.Envrionment();
env.setProviderUrl(“t3://127.0.0.1:7001”);
env.setSecurityPricipal(“system”);
env.setSecurityCredentials(“PaSsWoRd”);
Context cx = env.getInitialContext():
创建subcontext:
Context subContext = cx.createSubcontext(“newSubcontext”);
subContext.rebind(“boundObject”,anobject);
subContext.close();
cx.close();
Jndi的使用。得到context后,调用lookup()方法查询。例如。cx.lookup("java:comp/env/jdbc/mydatasource");