【J2EE浅析】——JNDI

一、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可以解决数据共享,分布式应用,紧耦合的问题,所以可以应用在一些比较大的软件开发中,分布式系统中或者是比较重视后期维护和升级的项目中。



时间: 2024-10-10 10:20:56

【J2EE浅析】——JNDI的相关文章

j2ee规范——JNDI

看了j2ee的视频,有点意思呀,视频里的老师讲的很深奥呀.如果真把老师讲的学会了,那肯定又能提高一大截. JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用名称访问对象.目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性.(360百科) 从上面的定义中可以看出JNDI提供了两种API 命名服务是将名称和对象联系起来.例如我们的手机的通讯

J2EE之JNDI

1.什么是JNDI? JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展,提供了一组接口.类和关于命名空间的概念.如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个 API和一个服务供应接口(SPI).这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术.JNDI目前所支持的技术包括 LDAP.CORBA Common Object Service(COS)名字服务.R

【J2EE浅析】——EJB

一.EJB概述 EJB(EnterpriseJava Bean)--java企业Bean,是J2EE十三种规范的一部分,为服务器端组件模型,设计目标与核心应用是部署分布式应用程序.EJB是java的核心代码,包括三种Bean类型:会话Bean(Session Bean),实体Bean(EntityBean)和消息驱动Bean(MessageDriven Bean). 通俗的说,EJB就是一个运行在独立的服务器上,封装了业务逻辑的组件.在一个商务软件中,核心部分就是其业务逻辑,它抽象了整个商务过程

浅析 Jndi / DataSource / ConnectionPool 三者

最近有个用户量 5W-10W 的 web 应用,频繁导致 weblogic 崩溃,让运维组很难受. 通过几天跟踪系统日志和 weblogic 运行状况,发现报错的姿势有很多,其中对定位问题比较关键的报错: ExecuteThread: '496' for queue: 'weblogic.kernel.Default (self-tuning)' has beenbusy for "712" seconds working on the request "XXXX"

【J2EE浅析】——JDBC

 J2EE平台由一整套服务(Services).应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,核心内容是对13种技术规范(API和组件)的学习和使用.接下来介绍一下Java数据库链接. 一.JDBC简介 JDBC(Java Data BaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由由一组用Java语言编写的类和接口组成.JDBC为工具/数据库开发人员提供了一个标准的API,

【J2EE浅析】——RMI

一.RMI概述 RMI(Remote Method Invoke)-远程调用方法,是java的一组用户开发分布式应用程序的API.通过该RMI机制,可以实现程序组件在不同操作系统之间的通信.它是一种被EJB使用的更底层的协议,比如:一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法. RMI使用了序列化方式在客户端和服务器端传递数据, 这样,我们就可以在远程方式下编写和使用对象,而不必知道它们实际上是远程的对象. 目标: *无缝地支持在不同的Java虚拟机上的远程对象的使用. *支

【J2EE浅析】——表示层:Servlet & JSP

 一.简介 JSP(Java Server Pages):JSP页面由HTML代码和嵌入其中的Java代码所组成.服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器. Java Servlet:Servlet是一种小型的Java程序,它扩展了Web服务器的功能.作为一种服务器端的应用,当被请求时开始执行,这和CGIPerl脚本很相似.Servlet提供的功能大多与JSP类似,不过实现的方式不同.JSP通常是大多数HTML代码中嵌入少量的Ja

java总结(三)——jndi在j2ee和j2se中的应用

JNDI,Java命名和目录接口,允许应用程序通过公共接口访问各种命名和目录服务.下图显示了JNDI架构.如JDBC(Java数据库连接),JNDI是不是服务,而是一组接口; 它允许应用程序使用一个标准化的API来访问许多不同的目录服务供应商.就像使用JDBC,那么JDK包含了JNDI接口,但不包括JNDI服务提供者 - 尽管Sun Microsystems公司提供的适配器,用于连接到现有的目录服务供应商,如LDAP(轻量级目录访问协议),DNS(域名服务)和CORBA.但是,您可以使用多种免费

j2se jndi

http://blog.csdn.net/lldwolf/article/details/2299622 正如你可以看到,从JNDI中检索对象是相当方便,简单.通过使用JNDI来存储配置信息,无状态对象或对象的工厂,你可以轻松地构建灵活的应用程序包含了配置的复杂性在一个地方,同时,即使是分布式应用程序.(如果您的组件从JNDI名称空间访问对象,在组件的Javadoc中记录这些依赖关系.) JNDI是不是只是用于J2EE 尽管JNDI客户端接口是J2SE发行版的一部分,大多数的J2SE应用程序不使