JNDI介绍与使用

原创 2007年09月18日 19:03:00
JNDI简介
JNDI:
分布式计算环境通常使用命名和目录服务来获取共享的组件和资源。命名和目录服务将名称与位置、服务、信息和资源关联起来。它为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。命名服务提供了一种为对象命名的机制,这样你就可以在无需知道对象位置的情况下获取和使用对象。只要该对象在命名服务器上注册过,且你必须知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。就可以找到该对象,获得其引用,从而运用它提供的服务。命名服务提供名称—对象的映射。目录服务提供有关对象的信息,并提供定位这些对象所需的搜索工具。
Java 命名和目录接口或 JNDI 提供了一个用于访问不同的命名和目录服务的公共接口(JAVA API)。运

用一个命名服务来查找与一个特定名字相关的一个对象,JDBC可以用JNDI来访问一个关系数据库。
JNDI可访问的现有的目录及服务有:
DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol 轻型目录访问协议)、

CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
JNDI优点:
包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务;
可以同时连接到多个命名或目录服务上;
建立起逻辑关联,允许把名称同Java对象或资源关联起来,而不必指导对象或资源的物理ID。

(2)JNDI程序包
javax.naming:命名操作;
javax.naming.directory:目录操作;
javax.naming.event:在命名目录服务器中请求事件通知;
javax.naming.ldap:提供LDAP支持;
javax.naming.spi:允许动态插入不同实现。

(3)常用的JNDI操作:
void bind(String sName,Object object);――绑定:把名称同对象关联的过程
void rebind(String sName,Object object);――重新绑定:用来把对象同一个已经存在的名称重新绑定
void unbind(String sName);――释放:用来把对象从目录中释放出来
void lookup(String sName,Object object);――查找:返回目录总的一个对象
void rename(String sOldName,String sNewName);――重命名:用来修改对象名称绑定的名称
NamingEnumeration listBinding(String sName);――清单:返回绑定在特定上下文中对象的清单列表
NamingEnumeration list(String sName);

(4)重命名:用来修改对象名称绑定的名称
NamingEnumeration listBinding(String sName);――清单:返回绑定在特定上下文中对象的清单列表
NamingEnumeration list(String sName);
代码示例:重新得到了名称、类名和绑定对象。
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();
}

(5)JNDI与JMS:
消息通信是软件组件或应用程序用来通信的一种方法。

JMS就是一种允许应用程序创建、发送、接收、和读取消息的JAVA技术。
代码示例:
try{
Properties env = new Properties();
InitialContext inictxt = new InitialContext(env);
TopicConnectionFactory connFactory = (TopicConnectionFactory) inictxt.lookup

("TTopicConnectionFactory");
...
}
catch(NamingException ne){
...


}
访问特定目录:举个例子,人是个对象,他有好几个属性,诸如这个人的姓名、电话号码、电子邮件地址、邮政编码等属性。通过getAttributes()方法
Attribute attr =directory.getAttributes(personName).get("email");
String email = (String)attr.get();


通过使用JNDI让客户使用对象的名称或属性来查找对象:
foxes = directory.search("o=Wiz,c=US", "sn=Fox", controls);
通过使用JNDI来查找诸如打印机、数据库这样的对象,查找打印机的例子:
Printer printer = (Printer)namespace.lookup(printerName);
printer.print(document);
浏览命名空间:
NamingEnumeration list = namespace.list("o=Widget, c=US");
while (list.hasMore()) {
NameClassPair entry = (NameClassPair)list.next();
display(entry.getName(), entry.getClassName());
}


(6)例子:
注意:必须导入jbossall-client.jar包
    在jboss/Client文件中
JNDIDemo.java中

package com.sun;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class JNDIDemo {

    public static void main(String[] args) throws NamingException {
             
        Properties p = new Properties();
        p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        p.put(Context.PROVIDER_URL, "localhost:1099");
        Context ctx = new InitialContext(p);       
          //在context下建立两个子上下文,在文件系统中对应目录。
        ctx.createSubcontext("/com2");
        ctx.createSubcontext("com2/zjay");
       
        Value value = new Value();
        ctx.bind("com2/zjay/name", value);
       
        Context ctx1 = (Context) ctx.lookup("com2");
        Context ctx2 = (Context) ctx1.lookup("zjay");
        Value s = (Value) ctx2.lookup("name");
        System.out.println(s.getValue());

    }

}


Value.java中

package com.sun;

public class Value {
   
    public String getValue(){
        return "successful";
       
    }

}

相关文章推荐

DBCP、C3P0,JNDI 连接池配置使用

  • 2012年05月18日 17:34
  • 1.76MB
  • 下载

Jndi的使用简介

  • 2013年11月08日 09:42
  • 16KB
  • 下载

关于JNDI的一些介绍,很好。

JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有...

JNDI配置详细介绍

  • 2009年08月18日 08:07
  • 2KB
  • 下载

关于JNDI介绍

我们分三个部分来研究JNDI,首先了解一些JNDI的框架,然后再写一个类似helloword实例并分析源码 一: JNDI架构及接口: (1):架构图 JNDI主要分三个部分,其中...

JNDI(Java Naming and Directory Interface)介绍

原文地址:http://www.cnblogs.com/chinafine/archive/2010/06/16/1759246.html   名词解释     jndi是Java 命名和目录接...

JNDI技术、JDBC框架、几种元数据介绍

JNDI技术、JDBC框架、几种元数据介绍 JNDI技术简介 JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中...

JNDI介绍

[转载自http://gaoqinqing.blog.163.com/blog/static/470200220116185228198/] JNDI是 Java 命名与目录接口(Java Nam...
  • lxqluo
  • lxqluo
  • 2011年11月07日 17:53
  • 267

JNDI、JTA和JMS介绍

什么是JNDIJNDI全面总结原理:         在DataSource中事先建立多个数据库连接,保存在数据库连接池中。当程序访问数据库时,只用从连接池中取空闲状态的数据库连接即可,访问结束,销毁...
  • cuiran
  • cuiran
  • 2014年11月09日 16:02
  • 3754
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNDI介绍与使用
举报原因:
原因补充:

(最多只允许输入30个字)