`
ludaojuan21
  • 浏览: 224153 次
  • 性别: Icon_minigender_1
  • 来自: 回龙观
社区版块
存档分类
最新评论

详解什么是JNDI

阅读更多
JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。
JNDI可访问的现有的目录及服务有:
DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol 轻型目录访问协议)、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
JNDI优点:
包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务;
可以同时连接到多个命名或目录服务上;
建立起逻辑关联,允许把名称同Java对象或资源关联起来,而不必指导对象或资源的物理ID。
JNDI程序包:


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


利用JNDI的命名与服务功能来满足企业级APIs对命名与服务的访问,诸如EJBs、JMS、JDBC 2.0以及IIOP上的RMI通过JNDI来使用CORBA的命名服务。
JNDI与JDBC:
JNDI提供了一种统一的方式,可以用在网络上查找和访问服务。通过指定一个资源名称,该名称对应于数据库或命名服务中的一个纪录,同时返回数据库连接建立所必须的信息。
代码示例:


try{
Context cntxt = new InitialContext();
DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");
}
catch(NamingException ne){
...
}


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());
}


常用的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);


代码示例:重新得到了名称、类名和绑定对象。


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连接数据库模型



package DBUtil;

import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;

public class DBConnection {
    private Connection conn = null;
    private Statement stmt = null;
    private ResultSet rs = null;
    private int resultNum = 0;

    /**
     * 构造函数
     * 找到数据源,并用这个数据源创建连接
     */
    public DBConnection() {
        try {
            Context ctx = new InitialContext();
     if (ctx == null) throw new Exception("No Context");
     DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
            if (ds == null) throw new Exception("jdbc/oracle is an unknown DataSource");
            conn = ds.getConnection();
            stmt = conn.createStatement();
        } catch (Exception e) {
            System.out.println("naming:" + e.getMessage());
        }
    }






    /**
     * 执行SQL语句:查询记录
     * @param sql SQL语句
     * @return ResultSet 记录集
     */
    public ResultSet executeQuery(String sql) {
        rs = null;
        try {
            rs = stmt.executeQuery(sql);
        } catch(SQLException se) {
            System.out.println("Query error:" + se.getMessage());
        }
        return rs;
    }

    /**
     * 执行SQL语句 :插入与更新记录
     * @param sql SQL语句
     * @return int resultNum 更新的记录数
     */
    public int executeUpdate(String sql) {
        resultNum=0;
        try {
            resultNum = stmt.executeUpdate(sql);
        } catch (SQLException se) {
            System.err.println("Update error:" + se.getMessage());
        }
        return resultNum;
    }

    /**
     * 关闭连接
     */
    public void close() {
        try {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
               stmt.close();
               stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        } catch (SQLException se) {
            System.out.println("close error:" + se.getMessage());
        }
    }
}
分享到:
评论

相关推荐

    JNDI配置原理详解.doc

    ### JNDI配置原理详解 #### 一、引言 JNDI(Java Naming and Directory Interface)是Java平台的一部分,它允许开发人员访问命名服务,从而可以存储和检索应用程序组件名称和服务之间的映射关系。本文将详细介绍...

    JNDI配置方法详解

    JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,...

    J2EE JNDI配置原理详解 JBOSS安装配置 Maven入门 Ant使用入门

    1.1 Apache Tomcat各版本 1.2 Apache Tomcat Versions 1.3 Java事务处理总结 1.4 JavaBean中使用JDBC...1.22 JNDI配置原理详解 1.23 JSF+Seam框架学习心得 1.24 java jdbc驱动的四种类型 1.25 resource-ref元素

    Tomcat中JNDI原理

    ### Tomcat中JNDI原理详解 #### 一、引言 Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录服务的API。它为开发者提供了访问各种命名和目录服务(如DNS、LDAP等)的统一接口。在Tomcat...

    jndi连接池帮助文档

    【JNDI连接池详解】 JNDI,全称为Java Naming and Directory Interface,是一种Java API,主要用于对象的命名和目录服务。它允许开发者在无需直接与底层命名服务器交互的情况下查找和使用注册的对象,降低了编程...

    JNDI示例整合SSH

    **JNDI详解:** 1. **JNDI基础:** JNDI的核心概念包括名称上下文(Name Context)、查找(Lookup)和绑定(Bind)。名称上下文提供了一种组织命名对象的方式,查找是通过名称找到对象,绑定则是将名称与对象关联...

    JNDI使用

    **JNDI(Java Naming and Directory Interface)使用详解** JNDI是Java平台中的一个标准接口,它为Java应用程序提供了一种访问命名和目录服务的统一方式。在Java应用程序中,JNDI主要用来查找和绑定对象,这些对象...

    jboss配置MySql的JNDI

    ### 配置步骤详解 #### 步骤一:准备MySQL数据源XML文件 首先,需将包含MySQL数据源配置的`mysql-ds.xml`文件复制至JBoss服务器的`deploy`目录下。此文件通常位于JBoss文档示例文件夹`jca`中,路径为`D:\jboss-...

    resin jndi配置

    ### Resin中的JNDI配置详解 在Java开发领域,JNDI(Java Naming and Directory Interface)是一个重要的概念,它为应用程序提供了一种查找和访问各种类型命名对象的方法,包括远程对象、数据库连接等。而Resin作为...

    jndi jndi jndi

    ### 接口详解 #### 5.1 命名接口 - **上下文和名称**:`Context`类是命名接口的基础,所有的命名操作都是通过这个类来完成的。`Name`接口代表了命名系统中的一个名称。 - **绑定**:通过`bind`方法可以将名称与...

    com.sun.jndi.providerutil.jar

    稀缺资源详解》 在Java开发领域,`com.sun.jndi.providerutil.jar`是一个至关重要的组件,它属于Sun Microsystems公司的JNDI(Java Naming and Directory Interface)框架的一部分。JNDI是Java平台提供的一种标准...

    tomcat6中配置JNDI方法

    ### Tomcat6中配置JNDI方法详解 #### 一、引言 在Java Web开发过程中,连接数据库是一项基础而重要的工作。常见的连接方式包括直接使用JDBC(Java Database Connectivity)以及通过JNDI(Java Naming and Directory...

    JNDI配置文件

    ### JNDI配置文件详解 1. **JNDI的基本概念** - **命名服务**:存储和检索对象的名字与引用之间的映射关系。 - **目录服务**:扩展了命名服务,提供了更丰富的属性搜索功能。 - **JNDI上下文(Context)**:是访问...

    javaJNDI连接数据库

    ### Java JNDI 连接数据库详解 #### JNDI简介 Java Naming and Directory Interface (JNDI) 是一种在Java环境中访问命名和目录服务的API。它为开发人员提供了查找和引用远程对象的标准方法,这包括数据库资源、消息...

    tomcat配置jndi

    **Tomcat配置JNDI详解** Java Naming and Directory Interface (JNDI) 是Java平台提供的一种标准服务,用于管理和查找应用程序中的资源,如数据源、邮件服务器等。在Tomcat应用服务器中,JNDI被用来注册和查找数据...

    目录服务和+JNDI

    ### JNDI与目录服务详解 #### 一、JNDI概述 JNDI(Java Naming and Directory Interface)是Java平台提供的一种标准接口,用于访问各种命名和目录服务。它提供了一种统一的方式,使得Java应用程序可以透明地访问...

    JNDI数据源配置

    ### JNDI数据源配置详解 #### 一、引言 在现代企业级应用开发中,数据库连接管理是一项至关重要的任务。为了简化这一过程并提高应用程序的可移植性和可维护性,Java命名与目录接口(Java Naming and Directory ...

    Jndi连接池

    **Jndi连接池详解** 在Java应用开发中,数据库连接池是不可或缺的一部分,它能够有效地管理和优化数据库连接,提高系统的性能和效率。JNDI(Java Naming and Directory Interface)是一种Java API,用于查找和管理...

    JNDI详细配置解析

    ### JNDI 配置详解 #### 一、引言 JNDI(Java Naming and Directory Interface,Java命名和目录接口)是Java平台提供的一套API,用于在Java应用程序中访问命名和目录服务。它允许开发者以统一的方式查找、绑定和...

    JNDI培训资料(经典).pdf

    ### JNDI培训资料知识点详解 #### 一、基本概念 **Java命名和目录接口 (JNDI)** - **定义**: JNDI (Java Naming and Directory Interface) 是 Java 平台上的一个 API,用于 Java 应用程序访问命名和目录服务。 - ...

Global site tag (gtag.js) - Google Analytics