【J2EE浅析】――JNDI
1、JNDI概述JNDI(JavaNaming Directory Interface)--java命名和目录接口,是1组在Java利用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统1的接口,类似JDBC,都是构建在抽象层上。是J2EE的标准之1,所有的J2EE容器都必须提供1个JNDI的服务。
JNDI的命称可能会让人产生混淆,1开始接触到这1规范觉得这是1个用来操作目录的,事实上,可以把这个目录理解成为JNDI寄存对象时使用的格式,也就是说,JNDI以目录的方式存储对象的属性。
2、命名服务和目录服务命名或目录服务使用户可以集中存储共有信息,这使得这样的利用更调和、更容易管理。例如,可以将打印机设置存储在目录服务中,以便被与打印机有关的利用使用。
我们大家每天都不知不觉地使用了命名服务。命名系统中的对象可以是DNS记录中的名称、利用服务器中的EJB组件(Enterprise JavaBeans Component)、LDAP(LightweightDirectory Access Protocol)中的用户Profile。
目录服务是命名服务的自然扩大。二者之间的关键差别是目录服务中对象可以有属性(例如,用户有email地址),而命名服务中对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。
3、经常使用基本操作1、绑定与释放 1)void bind(String sName,Object object) 绑定:把名称同对象关联的进程 2)void rebind(String sName,Object object) 重新绑定:用来把对象同1个已存在的名称重新绑定。1般使用rebind()而不使用bind(),由于当有重名的时候rebind()不会出现异常,而bind()会报异常。 3)voidunbind(String sName) 释放:用来把对象从目录中释放出来。 利用代码以下: public staticContext getInitialContext() throws NamingException{
Environment env = new Environment();
env.setProviderUrl("xxx");
env.setSecurityPrincipa("system");
env.setSecurityCredendtials("weblogic");
Contextcontext = env.getInitialContext();
returncontext;
}
//取得intial context
Context ctx =getInitialContext();
//创建名为Band的对象
Bank myBank = newBank();
//对象绑定
ctx.bind("theBank",myBank);
//把对象重新绑定到JNDI树
ctx.rebind("theBank",myBank);
//消除绑定
ctx.unbind("theBank");
ctx.close();
2、查找对象 Void lookup(string sName,Object object) 查找:返回目录总的1个对象 importjavax.naming.*;
try{
Context ic = new Context();
Objectobj;
obj= ic.lookup("javax.transaction.UserTransaction");
UserTransactionut = (UserTransaction)obj;
ut.begin();
ic.close();
}catch(NamingExceptione)
{} 3、重命名对象
void rename(String sOldName,StringsNewName) 重命名:用来修改对象名称绑定的名称。 ctx.rename("report.txt","old_report.txt"); 4、获得清单 NamingEnumerationlistBindings(StringsName) 清单:返回绑定在特定上下文中指定属性名对象的清单列表,它返回名字、类和对象本身,它用于那些需要对对象进行实际操作的利用。
//得到初始目录环境的1个援用
Context cntxt = new InitialContext();
//返回绑定在特定上下文中指定属性名对象的清单列表
NamingEnumeration namEnumList = ctxt.listBinding("cntxtName");
//循环列出所着名字、类和对象
while ( namEnumList.hasMore() ) {
Binding bnd = (Binding) namEnumList.next();
String sObjName = bnd.getName();
String sClassName = bnd.getClassName();
//得到对象
SomeObject objLocal = (SomeObject) bnd.getObject();
} 4、总结JNDI的思想是提供1个通用的接口。底层的名字服务时限可以是各种类型,JNDI通过SPI时限代码屏蔽了各种名字和目录服务实现的区分。
JNDI可以解决数据同享,散布式利用,紧耦合的问题,所以可以利用在1些比较大的软件开发中,散布式系统中或是比较重视后期保护和升级的项目中。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |