一、什么是JNDI
早就听说J2EE有13个规范,今天接触了第一个——JNDI,这里所说的规范,其实是一种标准,就像Web开发中接触到的W3C和IE类似。规定了开发人员在一个领域开发时使用某种技术所必须遵循的开发标准或开发方法,具有一定的强制性。
而JNDI也是这13个规范之中的一个:是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个 API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。很多技术利用JNDI来命名和定位实体,因此,可以把它理解为一种对象和名字捆绑在一起的技术,也就是说通过名字我们就可以找到它对应的对象。那么此时要求名字是唯一的。
所以,JDNI可以应用于查找技术,主要用于查找:
1、Web应用环境变量
2、EJBs和他们的环境变量
3、通过DataSources的数据库连接池
4、JMS目标和连接工厂
5、其它服务
注意:1、不能讲JNDI当做数据库使用
2、JNDI的对象存储在内存中
3、访问JNDI对象与网络性能有关
二、JNDI的应用
1、JNDI树
JNDI中存放对象是以树的形式来存放的,如图:
如上图所示:context相当于树中的节点,而树的叶子节点则相当于实际存储的对象。
2、创建JNDI树
1、创建初始节点InitialContext
//创建一个InitialContext Context ctx=new InitialContext(); //创建Enviroment对象 Weblogic.jndi.Enviroment env=new weblogic.jndi.Enviroment(); Env.setProviderurl("t3://127.0.0.1:7001");//server的位置 Env.setSecurityPrincipal("system")//安全信息 Env.setSecurityCredentials("PassWord"); //使用Environment对象创建InitialContext Context ctx=env.getInitialContext();
2、创建子节点,可用于绑定对象
//创建Enviroment对象 Context ctx=env.getInitialContext(); //填写Enviroment Context subcontext=ctx.createSubcontext("newSubcontext");//在当前Context下创建新的Subcontext Subcontext.rebind("boundObject",object);//绑定一个对象 Subcontext.close();//当结束时关闭访问 Ctx.close();
3、绑定对象
Context ctx=getInitialContext(); //创建名为myBank的对象 Bank myBank=new Bank(); //把对象绑定到JNDI树 Ctx.rebind("theBank",myBank); Ctx.close();
3、JNDI中的常用方法
bind(String sName,Object object);――绑定:把名称同对象关联的过程
void rebind(String sName,Object object);――重新绑定:用来把对象同一个已经存在的名称重新绑定
void unbind(String sName);――释放:用来把对象从目录中释放出来
void lookup(String sName,Object object);――查找:返回目录总的一个对象
void rename(String sOldName,String sNewName);――重命名:用来修改对象名称绑定的名称
NamingEnumeration listBinding(String sName);――清单:返回绑定在特定上下文中对象的清单列表
NamingEnumeration list(String sName);
以上是关于J2EE中的JNDI的一个简单的介绍,更多信息请参考博客:http://javacrazyer.iteye.com/blog/759485