JNDI技术总结.ppt

上传人(卖家):hwpkd79526 文档编号:5708120 上传时间:2023-05-04 格式:PPT 页数:44 大小:513.50KB
下载 相关 举报
JNDI技术总结.ppt_第1页
第1页 / 共44页
JNDI技术总结.ppt_第2页
第2页 / 共44页
JNDI技术总结.ppt_第3页
第3页 / 共44页
JNDI技术总结.ppt_第4页
第4页 / 共44页
JNDI技术总结.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、技术资料技术资料JNDIJNDI学习学习2 2目目 录录第一部分:什么是第一部分:什么是JNDIJNDI第二部分:为什么要用第二部分:为什么要用JNDIJNDI第三部分:怎么用第三部分:怎么用JNDI(JNDI(以及常用以及常用jndijndi类的介绍类的介绍)第四部分:在使用第四部分:在使用JNDIJNDI是要注意的事项是要注意的事项名词解释 Java命名和目录接口(the Java naming and directory interface,JNDI)是一组在Java应用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽

2、象层上。命名服务将名称和对象联系起来,使得读者可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。名词解释 命名服务:就像DNS一样,通过命名服务器提供服务,大部分的J2EE 服务器都含有命名服务器。例如:http:/202.108.22.5/目录服务:一种简化的RDBMS 系统,通过目录具有的属性保存一些简单的信息。目录服务通过目录服务器实现,比如微软ACTIVE DIRECTORY 等。名词解释 我的理解 用过名字来查找对象,你给我一个名字,我给你一个对象。跟我们去图书馆借书差不多,当然是以前的那种方式,我们说一书名,然后工作人员那着我们给他的书名在目录中查

3、找,在去书架上找书,在借给我们。将对象和名字捆绑的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。客户端客户端JNDI6JNDIJNDI可以访问的目录及服务:可以访问的目录及服务:DNS、XNam、Novell目录服务、目录服务、LDAP(Lightweight Directory Access Protocol 轻型目录访问协议轻型目录访问协议)、CORBA对对象服务、文件系统、象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、的注册表、RMI、DSML v1&v2、NIS。7 7JNDIJNDI原理原理将对象和名

4、字捆绑的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。JNDIJNDI架构架构JNDIJNDI架构的理解架构的理解 JNDI的架构与JDBC的架构非常类似.JNDI架构提供了一组标准命名系统的API。在应用程序中,我们实际上只使到用以上几个包的中类.具体调用类及通信过程对用户来说是透明的.JNDI API提供了访问不同JNDI服务的一个标准的统一的实现,其具体实现可由不同的 Service Provider来完成。中间层为命名管理层。其功能应该由JNDI SPI来完成。最下层为JNDI SPI API及其具体实现 它它包括了几个增强和下面的

5、命名/目录服务提供者:LDAP(Lightweight Directory Access Protocol)服务提供者 CORBA COS(Common Object Request Broker Architecture Common Object Services)命名服务提供者 RMI(Java Remote Method Invocation)注册服务提供者 DNS(Domain Name System)服务提供者.FSSP(File System Service Provider)文件系统服务提供者 其它服务提供者 JNDIJNDI架构的理解架构的理解 前面讲解的只是作为应用程序客户

6、端的架前面讲解的只是作为应用程序客户端的架构实现构实现,其服务端是由其服务端是由SPI对应的公司对应的公司/厂商厂商来实现的来实现的,我们只需将服务端的相关参数传我们只需将服务端的相关参数传给给JNDI API就可以了就可以了,具体调用过程由具体调用过程由SPI来完成来完成.12第二部分:为什么要用第二部分:为什么要用JNDIJNDI 为了为了实现共享实现共享,计算机网络的发展就是为了达到资源的共,计算机网络的发展就是为了达到资源的共享享 命名或目录服务使读者可以命名或目录服务使读者可以集中存储共有信息集中存储共有信息,这一点在,这一点在网络应用中是非常重要的,因为这使得这样的应用更协调网络应

7、用中是非常重要的,因为这使得这样的应用更协调、更容易管理。例如,可以将打印机设置存储在目录服务、更容易管理。例如,可以将打印机设置存储在目录服务中,以便被与打印机有关的应用使用。中,以便被与打印机有关的应用使用。jndijndi诞生的理由似乎很简单。随着诞生的理由似乎很简单。随着分布式应用的发展分布式应用的发展,远,远程访问对象访问成为常用的方法。虽然说通过程访问对象访问成为常用的方法。虽然说通过SocketSocket等编等编程手段仍然可实现远程通信,但按照模式的理论来说,仍程手段仍然可实现远程通信,但按照模式的理论来说,仍是有其局限性的。是有其局限性的。RMIRMI技术,技术,RMI-II

8、OPRMI-IIOP技术的产生,使远程技术的产生,使远程对象的查找成为了技术焦点。对象的查找成为了技术焦点。JNDIJNDI技术就应运而生。技术就应运而生。JNDIJNDI技术产生后,就可方便的查找远程或是本地对象。技术产生后,就可方便的查找远程或是本地对象。13用来解决什么问题用来解决什么问题1 1、数据共享、数据共享命名或目录服务使读者可以命名或目录服务使读者可以集中存储共有信息集中存储共有信息,这一点在网络应用中是,这一点在网络应用中是非常重要的,因为这使得这样的应用更协调、更容易管理。例如,可以将打非常重要的,因为这使得这样的应用更协调、更容易管理。例如,可以将打印机设置存储在目录服务

9、中,以便被与打印机有关的应用使用。印机设置存储在目录服务中,以便被与打印机有关的应用使用。2 2、分布式应用、分布式应用 jndijndi诞生的理由似乎很简单。随着诞生的理由似乎很简单。随着分布式应用的发展分布式应用的发展,远程访问对象,远程访问对象访问成为常用的方法。虽然说通过访问成为常用的方法。虽然说通过SocketSocket等编程手段仍然可实现远程通信,等编程手段仍然可实现远程通信,但按照模式的理论来说,仍是有其局限性的。但按照模式的理论来说,仍是有其局限性的。RMIRMI技术,技术,RMI-IIOPRMI-IIOP技术的产技术的产生,使远程对象的查找成为了技术焦点。生,使远程对象的查

10、找成为了技术焦点。JNDIJNDI技术就应运而生。技术就应运而生。JNDIJNDI技术产技术产生后生后可方便查找远程和本地对象。可方便查找远程和本地对象。3 3、解决紧耦合问题、解决紧耦合问题14如果不用如果不用JNDIJNDI我们怎么解决之前的问题我们怎么解决之前的问题1 1、没有、没有JNDIJNDI的做法的做法举个数据库连接的例子举个数据库连接的例子程序员开发时,知道要开发访问程序员开发时,知道要开发访问MySQLMySQL数据库的应用,于是将一个对数据库的应用,于是将一个对 MySQL JDBC MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的驱动程序类的引用进行了编

11、码,并通过使用适当的 JDBC JDBC URL URL 连接到数据库。连接到数据库。就像以下代码这样:就像以下代码这样:Connection conn=null;try Connection conn=null;try Class.forName(com.mysql.jdbc.Driver,Class.forName(com.mysql.jdbc.Driver,true,Thread.currentThread().getContextClassLoader();true,Thread.currentThread().getContextClassLoader();conn=DriverMa

12、nager.getConnection(jdbc:mysql:/MyDBServer?usconn=DriverManager.getConnection(jdbc:mysql:/MyDBServer?user=qingfeng&password=mingyue);/er=qingfeng&password=mingyue);/*使用使用connconn并进行并进行SQLSQL操作操作*/.conn.close();catch(Exception e)/.conn.close();catch(Exception e)e.printStackTrace();finally e.printStac

13、kTrace();finally if(conn!=null)try if(conn!=null)try conn.close();conn.close();catch(SQLException e)catch(SQLException e)这是传统的做法,也是以前非这是传统的做法,也是以前非JavaJava程序员程序员(如(如DelphiDelphi、VBVB等)常见的做法。这种做法一般等)常见的做法。这种做法一般在小规模的开发过程中不会产生问题,只要程序在小规模的开发过程中不会产生问题,只要程序员熟悉员熟悉JavaJava语言、了解语言、了解JDBCJDBC技术和技术和MySQLMySQL

14、,可以很,可以很快开发出相应的应用程序。快开发出相应的应用程序。优缺点优缺点 这样做的优点 简单 这样做的有的缺点 可扩展行差 数据库名称,用户名,密码可能随时改变,这时就的修改代码 数据库产品的修改 终端用户的增加 解决办法 程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。就这样JNDI诞生了。

15、JNDIJNDI的做法:的做法:概述 首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。具体步骤 在J2EE容器中配置JNDI参数,例如在jboss中的发布目录中的数据库XML文件中配置数据源 通过Lookup来获取数据源对象运行机制运行机制-1-11、首先程序代码获取初始化的 JNDI 环境并且调用 Context.lookup()方法从 JNDI 服务提供者那里获一个 DataSource 对象。2、中间层 JNDI 服务提供者返回一个 DataSource 对象给当前的

16、Java 应用程序这个 DataSource 对象代表了中间层服务上现存的缓冲数据源。3、应用程序调用 DataSource 对象的 getConnection()方法 运行机制运行机制4、当 DataSource 对象的 getConnection()方法被调用时,中间层服务器将查询数据库 连接缓冲池中有没有 PooledConnection 接口的实例对象。这个 PooledConnection 对象将被用于与数据库建立物理上的数据库连接5、如果在缓冲池中命中了一个 PooledCoonection 对象那么连接缓冲池将简单地更 新内部的缓冲连接队列并将该 PooledConnection

17、 对象返回。如果在缓冲池内没 有找到现成的 PooledConnection 对象,那么 ConnectionPoolDataSource 接口将会被 用来产生一个新的 PooledConnection 对象并将它返回以便应用程序使用运行机制运行机制6、中间层服务器调用 PooledConnection 对象的 getConnection()方法以便返还一个 java.sql.Connection 对象给当前的 Java 应用程序7、当中间层服务器调用 PooledConnection 对象的 getConnection()方法时,JDBC 数据 库驱动程序将会创建一个 Connection

18、对象并且把它返回中间层服务器运行机制运行机制8、中间层服务器将 Connection 对象返回给应用程序 Java 应用程序,可以认为这个 Connection 对象是一个普通的 JDBC Connection 对象使用它可以和数据库建立。事 实上的连接与数据库引擎产生交互操作 9、当应用程序不需要使用 Connection 对象时,可以调用 Connection 接口的 close()方 法。请注意这种情况下 close()方法并没有关闭事实上的数据库连接,仅仅是释 放了被应用程序占用的数据库连接,并将它还给数据库连接缓冲池,数据库连接 缓冲池会自动将这个数据库连接交给请求队列中下一个的应用

19、程序使用。24优点优点 包含大量命名和目录服务,可以使用相同API 调用访问任何命名或目录服务。可以同时连接多个命名和目录服务。允许把名称同JAVA 对象或资源关联起来,不必知道对象或资源的物理ID。使用通用接口访问不同种类的目录服务 使得开发人员能够集中使用和实现一种类型的命名或目录服务客户API 上 缺点缺点 配置很繁琐 调试很困难第三部分:怎么用第三部分:怎么用JNDIJNDI 在什么情况下使用JNDI 具体怎么使用 有哪几种使用方式在什么情况下使用在什么情况下使用JNDIJNDI 比较大型的软件开发中 比较重视后期的维护和升级的项目中 分布式系统中JNDIJNDI的包的包 Javax.

20、naming 主要用于命名操作,它包含了命名服务的类和接口,该包定义了Context接口和InitialContext类;Javax.naming.directory 主要用于目录操作,它定义了DirContext接口和InitialDir-Context类;Javax.naming.eventJNDIJNDI的包的包 Javax.naming.event 在命名目录服务器中请求事件通知;javax.naming.ldap 提供LDAP支持;javax.naming.spi 允许动态插入不同实现,为不同命名目录服务供应商的开发人员提供开发和实现的途径,以便应用程序通过JNDI可以访问相关服务。

21、常用常用JNDIJNDI操作操作-1-1 void bind(String sName,Object object),绑定:把名称同对象关联的过程。void rebind(String sName,Object object),重新绑定:用来把对象同一个已经存在的名称重新绑定。一般使用rebind()而不使用bind(),因为当有重名的时候rebind()不会出现异常,而bind()会报异常。常用常用JNDIJNDI操作操作-2-2 void unbind(String sName),释放:用来把对象从目录中释放出来。void lookup(String sName,Object object

22、),查找:返回目录中的一个对象。void rename(String sOldName,String sNewName),重命名:用来修改对象名称绑定的名称。常用常用JNDIJNDI操作操作-3-3 NamingEnumeration listBindings(String sName),清单:返回绑定在特定上下文中指定属性名对象的清单列表,它返回名字、类和对象本身,它用于那些需要对对象进行实际操作的应用。具体使用如下:得到初始目录环境的一个引用 Context cntxt=new InitialContext();返回绑定在特定上下文中指定属性名对象的清单列表 常用常用JNDIJNDI操作操

23、作-4-4NamingEnumeration 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();NamingEnumeration list(String sName)

24、与listBindings(String sName)相似,只是它只返回一系列名字/类映射,它主要是用于上下文浏览应用。JNDI操作步骤操作步骤 使用JNDI来访问命名服务或者目录服务,操作步骤如下:1、建立一个散列表(hashtable),它包含定义所希望使用的JNDI服务的属性,所希望连接的LDAP服务器IP地址以及工作的端口。2、将与认证成为用户登录有关的任何信息添加到散列表中 3、创建初始context对象。如果访问命名服务,则使用InitialContext类,如果访问目录服务,则要使用InitialDirContext类。4、使用刚才得到的context对象执行所需的操作(如添加新

25、的条目或者搜索条目)。5、完成操作后关闭context对象。JNDI实例实例 访问Jboss 服务器的例子代码:Properties props=new Properties();props.setProperty(java.naming.factory.initial,org.jnp.interfaces.NamingContextFactory);props.setProperty(java.naming.provider.url,localhost:1099);InitialContext=new InitialContext(props);HelloWorld helloworld=(

26、HelloWorld)ctx.lookup(HelloWorldBean/remote);访问Sun 应用服务器的例子代码:Properties props=new Properties();props.setProperty(java.naming.factory.initial,com.sun.enterprise.naming.SerialInitContextFactory);props.setProperty(java.naming.provider.url,localhost:3700);InitialContext=new InitialContext(props);HelloW

27、orld helloworld=(HelloWorld)ctx.lookup(com.foshanshop.ejb3.HelloWorld);访问Weblogic10 应用服务器的例子代码:Properties props=new Properties();props.setProperty(java.naming.factory.initial,weblogic.jndi.WLInitialContextFactory);props.setProperty(java.naming.provider.url,t3:/localhost:7001);InitialContext=new Init

28、ialContext(props);HelloWorld helloworld=(HelloWorld)ctx.lookup(HelloWorldBean#com.foshanshop.ejb3.HelloWorld);程序中的实现方式public enum ServerType JBOSS,WEBLOGIC,GLASSFISH;SuppressWarnings(unchecked)public String getJndiName(Class service,String mappingName)switch(this)case JBOSS:return mappingName+/remot

29、e;case WEBLOGIC:return mappingName+#+service.getName();case GLASSFISH:return service.getName();return mappingName+/remote;Jndi数据库实例JNDI连接数据库模型package DBUtil;import java.sql.Connection;import java.sql.Statement;import java.sql.ResultSet;import java.sql.SQLException;import javax.sql.DataSource;import

30、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);DataSourc

31、e 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();public ResultSet executeQuery(String sql)rs=null;try rs=stmt.exe

32、cuteQuery(sql);catch(SQLException se)System.out.println(Query error:+se.getMessage();return rs;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是要注意的事项是要注意的事项

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 待归类文档
版权提示 | 免责声明

1,本文(JNDI技术总结.ppt)为本站会员(hwpkd79526)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|