JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是命名服务的一种自然扩展。两者之间的关键差别是目录服务中对象不但可以有名称还可以有属性(例如,用户有email地址),而命名服务中对象没有属性。(百度百科)
JNDI是J2EE的一个API,JNDI是网络查找定位的标准方法。可以用于查找:
- web应用环境变量
- EJBs和它们的环境变量
- 通过DataSources的数据库连接池
- JMS目标和连接工厂
- 其它服务
不可以将JNDI当做数据库使用,JNDI对象存储在内存中,访问JNDI对象与网络性能有关。
JDNI就像一棵树,本地的机器可以把东西挂在这棵树上,远程的机器也可以把东西放在这颗树上,大家取东西的时候就从这棵树上取就行了。
如何连接JNDI:
- 从服务器端对象连接到JNDI,默认当前,返回一个context
<span style="font-size:18px;">//创建一个InitialContext
context ctx= new InitialContext(); </span>
- 从任何一个地方连接到JDNI,需要线设置环境变量。
//创建Environment对象
weblogic.jndi.Enviroment env = new weblogic.jndi.Enviroment();
//填写Environment
//weblogic server的位置
env.setProviderurl("t3://127.0.0.1:7011");
env.setSecurityPrincipal("System");
//安全信息
env.setSecurityCredenttials("PassWord");
//使用Environment对象创建InitialContext
context ctx =env.getInitialContext();
一些JNDI环境属性:
从JNDI查找
Lookup()从JNDI树中获得对象
通过lookup()返回的对象必须映射到合适的类型:
<span style="font-size:18px;">importjavax.naming.*;
try{
Contextic = new Context();
Objectobj;
obj= ic.lookup("javax.transaction.UserTransaction");
UserTransactionut = (UserTransaction)obj;
ut.begin();
...
ic.close();
}catch(NamingException e) {...} </span>
JNDI是J2EE规范当中的一种,目前只是理解一点,希望在实践中应用。