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";
       
    }

}

配置数据库连接池使用之JNDI的方式

一、JNDI: JNDI就是(java Naming and Directory Inteface)java名称目录接口。 JNDI的作用:就是将资源引入到服务器中。可以将JNDI当成一个仓库。将...
  • cw_hello1
  • cw_hello1
  • 2016年06月14日 15:38
  • 6550

为什么用JNDI连接数据库

NDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真...
  • KevinwuwenboA
  • KevinwuwenboA
  • 2016年12月19日 01:24
  • 495

什么是jndi,什么时候使用jndi,tomcat配置jndi,spring使用jndi数据源

JNDI 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JN...
  • u012572955
  • u012572955
  • 2016年08月30日 10:29
  • 1338

Tomcat中使用JNDI引用外部资源

JNDIJNDI(Java Naming and Directory Interface )是Java EE中容器服务的重要组成部分. 主要作用是给多种命名和目录服务提供了统一的接口1. 使用JNDI...
  • yzmyyff
  • yzmyyff
  • 2016年01月15日 16:44
  • 527

java 使用JNDI数据源

Java Naming and Directory Interface,Java命名和目录接口,即通过名称将资源与服务进行关联 连接池是由容器提供的,用来管理池中连接对象。程序获取数据库连接不再由程序...
  • a3226988
  • a3226988
  • 2017年01月07日 10:52
  • 1145

JNDI介绍(详解,什么是JNDI)

JNDI介绍(详解,什么是JNDI) JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用...
  • s464036801
  • s464036801
  • 2013年05月20日 17:03
  • 424

通过JNDI从服务器容器中获取资源_Spring JNDI+Mysql+Tomcat

通过JNDI从服务器容器中获取DataSource资源 (由容器管理,不要关闭它,容器自己会处理)...
  • Jerome_s
  • Jerome_s
  • 2014年05月23日 12:49
  • 1674

spring学习笔记(18)使用JNDI模拟访问应用服务器多数据源实例

database2 在这一篇文章中,我们要用JNDI访问我们的应用服务器配置好的多数据源。在本实例中,我们使用本地的tomcat服务器来模拟远程服务器,由于本地只有mysql数据库,故通过访问不同的...
  • qwe6112071
  • qwe6112071
  • 2016年03月25日 00:24
  • 1497

JNDI 介绍和使用

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的统一的API。 JNDI使用通用接口来访问不同种类的...
  • conquer0715
  • conquer0715
  • 2013年08月17日 18:35
  • 4685

Tomcat使用数据源(JNDI/直接使用)

Tomcat 在 7.0 以前的版本都是使用 commons-dbcp 做为连接池的实现,但是 dbcp 饱受诟病,原因有: dbcp 是单线程的,为了保证线程安全会锁整个连接池dbcp 性能不佳...
  • zmx729618
  • zmx729618
  • 2016年04月21日 15:33
  • 3276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNDI介绍与使用
举报原因:
原因补充:

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