【J2EE浅析】——JNDI
来源:互联网 发布:蚁群算法处理tsp问题 编辑:程序博客网 时间:2024/05/29 03:50
一、JNDI概述
JNDI(JavaNaming Directory Interface)--java命名和目录接口,是一组在Java应用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC,都是构建在抽象层上。是J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。
JNDI的命称可能会让人产生混淆,一开始接触到这一规范觉得这是一个用来操作目录的,事实上,可以把这个目录理解成为JNDI存放对象时使用的格式,也就是说,JNDI以目录的方式存储对象的属性。
二、命名服务和目录服务
命名或目录服务使用户可以集中存储共有信息,这使得这样的应用更协调、更容易管理。例如,可以将打印机设置存储在目录服务中,以便被与打印机有关的应用使用。
我们大家每天都不知不觉地使用了命名服务。命名系统中的对象可以是DNS记录中的名称、应用服务器中的EJB组件(Enterprise JavaBeans Component)、LDAP(LightweightDirectory Access Protocol)中的用户Profile。
目录服务是命名服务的自然扩展。两者之间的关键差别是目录服务中对象可以有属性(例如,用户有email地址),而命名服务中对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。
三、常用基本操作
1、绑定与释放
1)void bind(String sName,Object object)绑定:把名称同对象关联的过程
2)void rebind(String sName,Object object) 重新绑定:用来把对象同一个已经存在的名称重新绑定。一般使用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) 查找:返回目录总的一个对象
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) 清单:返回绑定在特定上下文中指定属性名对象的清单列表,它返回名字、类和对象本身,它用于那些需要对对象进行实际操作的应用。
//得到初始目录环境的一个引用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();}
四、总结
JNDI的思想是提供一个通用的接口。底层的名字服务时限可以是各种类型,JNDI通过SPI时限代码屏蔽了各种名字和目录服务实现的区别。
JNDI可以解决数据共享,分布式应用,紧耦合的问题,所以可以应用在一些比较大的软件开发中,分布式系统中或者是比较重视后期维护和升级的项目中。
- 【J2EE浅析】——JNDI
- J2EE——JNDI
- J2EE——JNDI
- j2ee规范——JNDI
- J2EE规范——JNDI
- J2EE规范——JNDI
- J2EE规范——JNDI
- J2EE技术(一)——JNDI
- JNDI——J2EE规范(一)
- J2EE技术规范(一)——JNDI
- 【J2EE浅析】——JDBC
- 【J2EE浅析】——EJB
- 【J2EE浅析】——JDBC
- 【J2EE浅析】——RMI
- J2EE的十三种技术——JNDI
- J2EE--JNDI
- 【J2EE浅析】——基本介绍
- 浅析JNDI
- webView loadData 中文乱码问题
- 对RFID安全机制的分析和解决方案
- 【SPOJ】Triple Sums【FFT】
- ios笔记-NSDictionary
- 第八周项目四 【炒鸡难!!高能预警!】String类的构造(重载双目运算符)
- 【J2EE浅析】——JNDI
- 一篇很全面的freemarker教程
- qtp论坛
- CGFloat、CGPoint、CGSize CGRect UIView UIWindow
- 在rails中引入bootstrap-sass
- ios笔记-NSSet
- UITableView 折叠效果 masksToBounds
- Java处理正则表达式特殊字符转义
- 【Git学习笔记】git fetch取回远程库的更新到本地仓库中