`
小嘴冰凉
  • 浏览: 457070 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JNDI的详细介绍

    博客分类:
  • jndi
阅读更多
看到这篇关于JNDI的详细介绍写的非常不错,转过来分享一下
JNDI介绍(详解,什么是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());
        }
    }
}
原路径:http://www.cnblogs.com/beyondwcm/archive/2007/11/14/958868.html


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yinyuan1987/archive/2009/03/27/4028487.aspx
分享到:
评论

相关推荐

    JNDI配置详细介绍

    ### JNDI配置在Tomcat中的详细介绍 JNDI(Java Naming and Directory Interface)是Java平台的一个标准接口,用于访问命名和目录服务。在企业级应用中,JNDI常被用于查找和引用各种资源,如数据库连接、消息队列等...

    JNDI详细配置解析

    本文将详细介绍JNDI在Tomcat中的三种常见配置方式及其应用场景。 #### 二、JNDI配置方式概述 JNDI在Tomcat中有三种常见的配置方式: 1. **全局配置**:在`context.xml`中进行配置,适用于所有Web应用程序。 2. **...

    log4j\c3p0\jndi详细配置实例

    这个“log4j\c3p0\jndi详细配置实例”可能是包含了一个演示如何整合这三个技术的示例项目。下面将分别介绍这三个关键概念及其配置。 **1. log4j** `log4j`是Apache的一个开源项目,提供了一种灵活的日志记录系统。...

    JNDIDemo 以及相关文档

    10. **学习资料**:提供的文档,如`java的JNDI 技术介绍及应用.docx`和`jndi step by step - aurawing - 博客园.pdf`,可能包含JNDI的详细教程和实践指南。`Untitled-1.html`可能是另一个相关文档,虽然其确切内容...

    JNDI示例整合SSH

    **标题:“JNDI示例整合SSH”** 在IT领域,`JNDI`(Java Naming and Directory Interface)是...为了深入学习和实践,你可以解压并研究这些文件,结合文章链接中提供的详细教程,进一步理解JNDI在SSH框架中的应用。

    jndi加密.zip

    本篇将详细介绍如何利用Java Naming and Directory Interface (JNDI) 和 Advanced Encryption Standard (AES) 等技术来实现数据库密码的加密存储,以提高系统安全性。 JNDI是Java平台提供的一种服务,用于查找和...

    JNDI配置原理详解.doc

    本文将详细介绍JNDI配置原理,并通过具体的示例帮助读者更好地理解和应用JNDI。 #### 二、JNDI基本概念 JNDI提供了一个通用的API,用于查找和管理分布式环境中各种命名和目录服务。这些服务包括但不限于DNS、LDAP...

    JNDI.rar_JINI jndi_JNDI相关书籍_jndi

    1. **JNDI基础**:介绍JNDI的基本概念,包括命名空间、上下文、查找和绑定操作。 2. **JNDI实现**:讲解不同类型的JNDI提供商,如文件系统、RMI和LDAP。 3. **Jini与JNDI**:详细阐述如何在Jini环境中使用JNDI进行...

    tomcat6.0连接通过JNDI连接mysql实例

    本文将对 Tomcat 6.0 中的 JNDI 连接 MySQL 实例进行详细的介绍和解释。 配置 JNDI 资源 在 Tomcat 6.0 中,需要在 `META-INF/context.xml` 文件中配置 JNDI 资源。下面是一个基本的配置示例: ```xml type=...

    java JNDI总结

    下面将详细介绍JNDI的基本概念、配置方法以及如何在实际开发中应用它来管理数据库连接等资源。 ##### 1. JNDI的基本概念 JNDI是一种用于访问命名和目录服务的接口,它提供了查找和访问远程对象的能力。通过JNDI,...

    resin jndi配置

    本文将详细介绍Resin中JNDI配置的具体步骤与关键点。 #### JNDI配置基础 在Resin中配置JNDI,首先需要理解的是,JNDI配置主要涉及到数据库连接池的设置。通过JNDI,应用可以动态地查找和获取数据库连接,这极大地...

    tomcat jndi ssl

    1. "tomcat7.0配置JNDI数据源的几种方式.docx" - 这个文档可能详细介绍了在Tomcat 7.0中设置JNDI数据源的不同方法,包括XML配置、Context元素的使用、以及可能的第三方库(如Apache DBCP或C3P0)集成。 2. "tomcat...

    tomcat6中配置JNDI方法

    下面详细介绍在Tomcat6环境下配置JNDI的具体步骤: ##### 3.1 配置`context.xml` - 打开Tomcat安装目录下的`conf/context.xml`文件,在`<Context>`标签内添加数据源配置信息。 ```xml auth="Container" type...

    JNDI支持包

    - `README.txt` 可能提供了关于JNDI库的基本介绍、使用指南或者注意事项,帮助开发者快速了解和开始使用。 - `examples` 目录可能包含了一些使用JNDI的示例代码,这对于学习和理解JNDI的工作原理非常有帮助。 - `doc...

    JNDI数据源配置

    本文将详细介绍如何使用JNDI配置不同的数据库连接,并通过Tomcat服务器进行示例演示。 #### 二、JNDI简介 JNDI是一种标准的API,用于访问命名和目录服务。它允许开发者使用统一的方式在分布式环境中查找和引用远程...

    目录服务和+JNDI

    本章节将详细介绍如何使用JNDI操作LDAP服务器。 ##### 1. 连接LDAP服务器 连接LDAP服务器通常需要指定服务器地址、端口以及连接凭据。使用JNDI,可以通过以下步骤实现: ```java Context initCtx = new ...

    Tomcat JNDI配置

    下面将详细介绍 Tomcat JNDI 配置的步骤和注意事项。 一、添加 JNDI 数据源 首先,需要在 Tomcat 中添加 JNDI 数据源。可以通过 Tomcat 的 administration 组件来实现。在默认情况下,Tomcat 没有安装 ...

    jndi jndi jndi

    根据提供的文档信息,本文将对Java Naming and Directory Interface (JNDI)进行详细的解析与介绍。JNDI作为Java平台中的一个关键组成部分,为应用程序提供了一种统一的方式来访问各种命名和目录服务。以下是对该技术...

    走出 JNDI 迷宫.pdf

    本文深入浅出地介绍了如何使用JNDI在复杂的环境中定位和调用EJB组件。通过提供实用的代码示例和清晰的概念解释,有效地解决了初学者常见的困惑。 #### 总结 本文针对JNDI和EJB组件的查找过程进行了详细的阐述,...

Global site tag (gtag.js) - Google Analytics