`
小嘴冰凉
  • 浏览: 448069 次
  • 性别: 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配置详细介绍

    tomcat的JNDI配置详细介绍 介绍详细,思路清晰

    j2ee JNDI服务

    详细介绍jndi命名目录服务在企业级开发中的使用

    Tomcat中配置数据源JNDI

    详细介绍了在Tomcat中配置数据源JNDI的三种方法,其中第一种方法最好用,附带一部分源代码

    JNDI.rar_JINI jndi_JNDI相关书籍_jndi

    分多章节详细介绍了Jini技术及相关开发环境,并辅以实例作为说明。

    封装JNDI的LDAP服务器的工具类

    封装JNDI的LDAP服务器所要使用的类的详细介绍。 封装JNDI操作LDAP服务器的工具类.doc

    JNDT 有关技术的详细介绍

    什么是JNDI JNDI全称 Java Naming and Directory Interface JNDI 是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一...

    Spring jndi数据源配置方法详解

    主要为大家详细介绍了Spring jndi数据源的配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下解

    jdbc的详细介绍

    第一章 1. 应用程序连接数据库的方式? 2. JDBC 能完成的功能: 3. JDBC API 包含的内容? 4. JDBC driver 5. JDBC Driver的种类. ...3. JNDI(java naming derectory interface) java命名和目录服务接口

    servlet的详细介绍

    什么是servlet? web服务器 web应用(b/s架构软件)的目录结构: Web.xml 参数 系统如何提供表单给用户? 系统如何处理用户提交的...数据源(java对象)和jndi(j2ee规范) Servlet的请求转发方式 状态持久 范围 过滤器 事件处理

    tomcatJNDI连接池

    tomcatJNDI连接池,详细介绍了如何在tomcat中配置JNDI数据源

    sap常用数据源介绍

    本文档收录了sap中常用的数据源的详细说明及表格组成

    基于LDAP目录服务的研究与应用

    目录服务则通过信息的集中存储解决了现实中面临的管理和维护的...为了在实际中应用和部署LDAP,本文讨论了LDAP应用部署的详细过程,并简要介绍了三种LDAP编程模型LDAPCAPI、ADSI、JNDI。文章的后面是LDAP应用方案实例。

    BEA WebLogic Server管理指南

    本书详细介绍了当今领先的应用程序服务器WebLogic Server。从安装与工作负载管理到部署J2EE服务与集成应用程序,涉及了运行和维护WebLogic Server的专业知识,包括许多工作的详细步骤,如管理控制台、性能调整与查错...

    WebLogic_管理员

    本资源详细介绍了weblogic的管理,如数据源、jndi等常用的功能。是管理员参考书籍

    Tomcat JDNI数据源配置详解

    在Tomcat配置数据源有多种方法,这里主要详细介绍通过JNDI来配置数据源.在实际项目中经常用到.

    jdbc学习全程

    该教程包含jdbc数据库连接的方方面面,非常详细,也包含大量实例,是非常好的学习资料和参考资料教你,本教程说明了怎样使用 JDBC 连接到数据库。虽然这个主题看起来乏味,但事实上它对于新手和老手来说都是一块绊脚...

    EJB应用开发详解+书中源码

    本书详细介绍了J2EE框架的重要组成部分——EJB及其相关技术。全书以剖析EJB 2.0的技术核心以及开发与部署的过程为中心,共分3大部分20章,包括无状态会话Bean、有状态会话Bean、CMP实体Bean、EJB QL语言、集成RMI-...

    服务器端接口编程.pptx

    本章导读 面向对象的开发过程中,对系统的功能进行详细分析,划分成若干模块,分别由各个对象协作完成的。 如果将系统功能按前后台来划分,前台即客户端,主要实现UI部分,负责和用户交互;后台即服务器端,负责...

    精通spring--源代码

     详细介绍Spring2.5核心技术。包括控制反转容器,面向切面编程  对DA0层集成技术进行了详细阐述。包括DA0抽象支持。JDBC集成,事务集成,单元和集成测试。Hibernate集成,Java持久化API集成  深入讲解Java EE服务...

    精通Spring(书签版)

     详细介绍Spring2.5核心技术。包括控制反转容器,面向切面编程  对DA0层集成技术进行了详细阐述。包括DA0抽象支持。JDBC集成,事务集成,单元和集成测试。Hibernate集成,Java持久化API集成  深入讲解Java EE服务...

Global site tag (gtag.js) - Google Analytics