《JNDI技术及其使用方法(图文).docx》由会员分享,可在线阅读,更多相关《JNDI技术及其使用方法(图文).docx(5页珍藏版)》请在三一文库上搜索。
1、JNDI技术及其使用方法(图文)论文导读:在JavaEE项目中,各种应用组件种类繁多,其中JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是使用JavaEE各种服务的基础。本文将对JNDI的结构进行分析,以及通过实例阐述其使用方法。关键词:JNDI,使用方法 引言JNDI分为命名服务和目录服务两部分。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。类比一下,命名服务就是一个电话簿或是一本字典。而命名服务中的对象是可以多样化的,他可以是域名系统中的名称、应用服务器中的组件或某些必要的环境变量等。目录服务是命名服务的自然扩展,两
2、者之间的关键差别是目录服务中的对象可以有属性(例如,用户用email地址),而命名服务中的对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。命名或目录服务是你可以集中存储共有信息,这一点在网络应用中是重要的,因为这使得这样的应用更协调、更容易管理。例如,可以将打印机设置存储在目录服务中,以便被与打印机有关的应用使用。JNDI允许我们访问文件系统中的文件,定位远程RMI注册的对象,访问像LDAP(LightweightDirectory Access Protocol)这样的目录服务,定位网络上的EJB组件。下面我们从JNDI的结构谈起。1.JNDI的结构图1 :JNDI体系结构JNDI
3、从结构上提供了标准的独立于命名系统的API,这些API构建在与命名系统有关的驱动之上。这一层有助于将应用与实际数据源分离,因此不管应用访问的是LDAP(Lightweight DirectoryAccess Protocol)、RMI(Remote MethodInvocation)、DNS,还是其他的目录服务。换句话说,JNDI独立于目录服务的具体体现,只要你有目录的服务提供接口(或驱动),你就可以使用目录。关于JNDI要注意的一点是,它提供了应用编程接口(Application Programming Interface,API)和服务提供者接口(Service ProviderInter
4、face,SPI)。这一点的真正含义是,要让你的应用与命名服务或目录服务交互,必须有这个服务的JNDI服务提供者,这正是JNDI SPI发挥作用的地方。服务提供着基本上是一组类,这些类为各种具体的命名和目录服务实现了JNDI接口很像JDBC驱动为各种具体的数据库实现了JDBC接口一样。作为一个应用开发着,你不必操心JNDISPI。你只需要确认你要使用的每一个命名或目录服务都有服务提供者。2.使用JNDI进行程序开发在Java EE开发中,JNDI主要用于保存一些经常用到的小对象或是一些只读属性。一个JNDI树包括几个要素:(1)Content:JNDI树中的一个节点,可包含子节点和绑定的对象;
5、(2)Root Content:JNDI树结构中最顶端的节点;(3)Initial Content:对JNDI操作的初始点;(4)Object:绑定在节点上的对象。下面使用具体的实例给出Content接口的使用步骤:(1)在Eclipse环境下建立JndiCase项目,建立Test.java文件,同时添加weblogic.jar文件到环境变量。注意,在weblogic环境下,weblogic.jar在WEBLOGIC_HOMEserverlib目录中。主要功能代码如下:初始化JNDI属性:Hashtable env= new Hashtable();env.put(Context.INITIA
6、L_CONTEXT_FACTORY,'weblogic.jndi.WLInitialContextFactory');env.put(Context.PROVIDER_URL,'t3:/localhost:7001');Context ctx=new InitialContext(env);上述代码片段的作用是,利用Hashtable来设置JNDI属性,从而得到InitialContext对象。绑定(命名):Date date=new Date();ctx.rebind('date', date);上述代码片段的作用是,把Date类型的对象dat
7、e绑定到应用服务器中,并命名为date。创建子节点:Context subCtx=ctx.createSubcontext('test');subCtx.rebind('date', date);subCtx.rebind('username', '张三');上述代码片段的作用是,给已创建的date节点绑定子节点username。寻找节点:Date date=(Date)ctx.lookup('date');System.out.println('date:'+date);上述代码片段的作用是,寻找
8、应用服务器中名为date的节点,并输出其信息。取消绑定(移除):ctx.unbind('date');上述代码片段的作用是,寻找应用服务器中名为date的节点,并取消绑定,即移除这个节点及其子节点。(2)运行上述某一功能的代码。(3)启动weblogic服务器,在weblogic的控制台下观察JNDI树。(4)反复执行(2)(3)观察执行各功能的代码后,JNDI树的变化。4.总结Content接口的常用方法(1)bind(StringjndiName,Object o),将对象绑定到JNDI树。(2)unbind(StringjndiName)Action,将对象从JNDI树中
9、解绑定。(3)lookup(StringjndiName),从JNDI树中查找对象。(4)createSubcontext(StringsubContextName),创建子节点。(5)rebind(StringjndiName,Object o),将对象重新绑定(先解绑定,再绑定)。参考文献1.JNDI APITutorial and Reference 作者: (美)Rosanna Lee, (美)Scott Seligman,出版社:Addison-Wesley LongmanPublishing Co., Inc. Boston, MA, USA(2000-2)2. J2EE Applications and BEA WebLogic Server作者:(美)Michael Girdley Rob Woolen Sandra L.Emerson,译者:邢国庆,电子工业出版社(2002-4)