看到这篇关于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
分享到:
相关推荐
tomcat的JNDI配置详细介绍 介绍详细,思路清晰
详细介绍jndi命名目录服务在企业级开发中的使用
详细介绍了在Tomcat中配置数据源JNDI的三种方法,其中第一种方法最好用,附带一部分源代码
分多章节详细介绍了Jini技术及相关开发环境,并辅以实例作为说明。
封装JNDI的LDAP服务器所要使用的类的详细介绍。 封装JNDI操作LDAP服务器的工具类.doc
什么是JNDI JNDI全称 Java Naming and Directory Interface JNDI 是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一...
主要为大家详细介绍了Spring jndi数据源的配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下解
第一章 1. 应用程序连接数据库的方式? 2. JDBC 能完成的功能: 3. JDBC API 包含的内容? 4. JDBC driver 5. JDBC Driver的种类. ...3. JNDI(java naming derectory interface) java命名和目录服务接口
什么是servlet? web服务器 web应用(b/s架构软件)的目录结构: Web.xml 参数 系统如何提供表单给用户? 系统如何处理用户提交的...数据源(java对象)和jndi(j2ee规范) Servlet的请求转发方式 状态持久 范围 过滤器 事件处理
tomcatJNDI连接池,详细介绍了如何在tomcat中配置JNDI数据源
本文档收录了sap中常用的数据源的详细说明及表格组成
目录服务则通过信息的集中存储解决了现实中面临的管理和维护的...为了在实际中应用和部署LDAP,本文讨论了LDAP应用部署的详细过程,并简要介绍了三种LDAP编程模型LDAPCAPI、ADSI、JNDI。文章的后面是LDAP应用方案实例。
本书详细介绍了当今领先的应用程序服务器WebLogic Server。从安装与工作负载管理到部署J2EE服务与集成应用程序,涉及了运行和维护WebLogic Server的专业知识,包括许多工作的详细步骤,如管理控制台、性能调整与查错...
本资源详细介绍了weblogic的管理,如数据源、jndi等常用的功能。是管理员参考书籍
在Tomcat配置数据源有多种方法,这里主要详细介绍通过JNDI来配置数据源.在实际项目中经常用到.
该教程包含jdbc数据库连接的方方面面,非常详细,也包含大量实例,是非常好的学习资料和参考资料教你,本教程说明了怎样使用 JDBC 连接到数据库。虽然这个主题看起来乏味,但事实上它对于新手和老手来说都是一块绊脚...
本书详细介绍了J2EE框架的重要组成部分——EJB及其相关技术。全书以剖析EJB 2.0的技术核心以及开发与部署的过程为中心,共分3大部分20章,包括无状态会话Bean、有状态会话Bean、CMP实体Bean、EJB QL语言、集成RMI-...
本章导读 面向对象的开发过程中,对系统的功能进行详细分析,划分成若干模块,分别由各个对象协作完成的。 如果将系统功能按前后台来划分,前台即客户端,主要实现UI部分,负责和用户交互;后台即服务器端,负责...
详细介绍Spring2.5核心技术。包括控制反转容器,面向切面编程 对DA0层集成技术进行了详细阐述。包括DA0抽象支持。JDBC集成,事务集成,单元和集成测试。Hibernate集成,Java持久化API集成 深入讲解Java EE服务...
详细介绍Spring2.5核心技术。包括控制反转容器,面向切面编程 对DA0层集成技术进行了详细阐述。包括DA0抽象支持。JDBC集成,事务集成,单元和集成测试。Hibernate集成,Java持久化API集成 深入讲解Java EE服务...