命名服务概述
命名服务(Naming Service)是可以将复杂数据对象或其引用关联到已知名称的机制.然后可以发布这些名称,客户可以使用这些名称查询与它们相关联的数据对象.名称与对象之间的关联称为绑定.命名服务通常与其它服务(如文件系统,目录和数据库等)集成以提供这种绑定.大家可以从现代图书馆的卡片目录系统来理解命名服务.
JNDI介绍(Java Naming and Directory Inteface,Java命名与目录接口)
JNDI是Java命名与目录接口(Java Naming and Directory Inteface)的缩写,有时也简称Java名录服务,J2EE组件通过调用JNDI提供的查找(lookup)方法以定位对象。JNDI是专门为Java设计的,一个Java应用程序可以用JNDI检索Java对象.JNDI还可以执行标准目录操作,如关联属性和对象,并用对象的属性搜索它们.
JNDI名字是对象的友好名字,这些名字通过J2EE服务器提供的命名目录服务绑定到各自的对象上。由于J2EE组件是通过JNDI编程接口访问服务的,所以通常情况下把对象的友好名字称之为JNDI名字。比如,mydatabase数据库的JNDI名字为jdbc/mydatabase,一旦J2EE服务器启动,系统自动从配置文件读取相关信息,并将jdbc/mydatabase的JNDI数据库名字添加到名字空间。
Sun公司对JNDI的定义为”一种对Java平台的标准扩展,它为Java技术编写的应用程序提供了对企业中多种命名和目录服务的统一接口.作为Java Enterprise API集的一部分,JNDI使与异构企业命名和目录服务的无缝连接提供了可能”.
连接工厂(Connection Factory)
连接工厂(Connection Factory)是用于产生链接对象,使得J2EE组件可以访问资源的一种对象。比如,用于数据库的连接工厂是javax.sql.Database对象,它产生java.sql.Connection对象。
JNDI和Weblogic Server
Weblogic提供了在JNDI规范中规定的实现.这使Java客户可以用标准JNDI调用连接到Weblogic Server.客户可以在Weblogic命名空间中访问Weblogic命名服务并使对象可用,还可以检索它们.
如果希望访问已经加载到Weblogic Server的JNDI树中的对象的Java客户一般要执行以下任务:
1.与服务器建立一个上下文
2.对JNDI树进行查询或者更新
取得上下文例程
这是在命名空间中访问绑定对象的第一步.应用程序将获得引导上下文称为InitialContext.它是从InitialContext工厂获得的.这个工厂使用几个属性标识上下文需要指向的Weblogic Server.
Hashtable ht=new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
创建一个绑定例程
要在WeblogicJNDI树中创建一个新的绑定,可使用Context.bind方法.这个方法以新绑定的名称以及绑定到这个名称号的对象为参数.注意这个对象必须是可序列化的,也就是说它必须实现java.io.Serializablejie接口(实现这个接口无需实现任何方法,它只是告诉JVM这个对象可以序列化).
Hashtable ht=new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
String text="菩提本非树,明镜亦非台,本来无一物,何处染尘埃.";
ctx.bind("TEST", text);
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
下面是在Weblogic中查看刚才创建的绑定内容图示
一.点击环境,服务器,点击“查看JNDI树链接”
二.可以看到已经绑定到JNDI树中的对象
删除现有的绑定例程
使用Context.unbind方法可以从JNDI树中删除绑定,不能再从树中访问这些对象了.
Hashtable ht=new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
ctx.unbind("TEST");
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
总结
JNDI为应用程序提供了标准统一的方式,连接和使用企业中存在的多个对象目录的能力.WeblogiocServer提供了JNDI的实现,客户机可以和它无缝连接.同一客户机还可以用JNDI API连接到另一命名服务上.Weblogic Server大量利用JNDI树完成其常规功能.如果应用程序使用EJB,那么这个EJB就发布在JNDI树中,类似的其它对象如DataSource对象,事务对象都发布在JNDI树上.
参考例程:
WeblogicJNDI(注意:weblogic.jar请自行加入lib目录)