jndi详解剖析

上传人:今*** 文档编号:105908320 上传时间:2019-10-14 格式:DOCX 页数:25 大小:789.08KB
返回 下载 相关 举报
jndi详解剖析_第1页
第1页 / 共25页
jndi详解剖析_第2页
第2页 / 共25页
jndi详解剖析_第3页
第3页 / 共25页
jndi详解剖析_第4页
第4页 / 共25页
jndi详解剖析_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《jndi详解剖析》由会员分享,可在线阅读,更多相关《jndi详解剖析(25页珍藏版)》请在金锄头文库上搜索。

1、JNDI全面总结原理: 在DataSource中事先建立多个数据库连接,保存在数据库连接池中。当程序访问数据库时,只用从连接池中取空闲状态的数据库连接即可,访问结束,销毁资源,数据库连接重新回到连接池,这与每次去直接访问数据库相比,会节省大量时间和资源。 JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个 API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JN

2、DI支持这项技术。JNDI目前所支持的技术包括 LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。可以把它理解为一种将对象和名字捆绑的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。 在javax.naming的包包中提供Context接口,提供了两个很好用的方法: void bind( String name , Object object ) 将名称绑定到对象。所有中间上下文和目标上下文(由该名称

3、最终原子组件以外的其他所有组件指定)都必须已经存在。Object lookup( String name ) 检索指定的对象。如果 name为空,则返回此上下文的一个新实例(该实例表示与此上下文相同的命名上下文,但其环境可以独立地进行修改,而且可以并发访问)。运行机制:1、 首先程序代码获取初始化的 JNDI 环境并且调用 Context.lookup() 方法从 JNDI 服务提供者那里获一个 DataSource 对象2、 中间层 JNDI 服务提供者返回一个 DataSource 对象给当前的 Java 应用程序这个 DataSource 对象代表了中间层服务上现存的缓冲数据源3、 应用

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

5、ionPoolDataSource 接口将会被 用来产生一个新的 PooledConnection 对象并将它返回以便应用程序使用6。 中间层服务器调用 PooledConnection 对象的 getConnection() 方法以便返还一个 java.sql.Connection 对象给当前的 Java 应用程序7、 当中间层服务器调用 PooledConnection 对象的 getConnection() 方法时, JDBC 数据 库驱动程序将会创建一个 Connection 对象并且把它返回中间层服务器8、 中间层服务器将 Connection 对象返回给应用程序 Java 应用程序

6、,可以认为这个 Connection 对象是一个普通的 JDBC Connection 对象使用它可以和数据库建立。事 实上的连接与数据库引擎产生交互操作 。9、 当应用程序不需要使用 Connection 对象时,可以调用 Connection 接口的 close() 方 法。请注意这种情况下 close() 方法并没有关闭事实上的数据库连接,仅仅是释 放了被应用程序占用的数据库连接,并将它还给数据库连接缓冲池,数据库连接 缓冲池会自动将这个数据库连接交给请求队列中下一个的应用程序使用。现在,数据库的连接没有用到连接池几乎很少很少,每个项目组都可能有自己的数据库连接池组件,各容器提供商也提供

7、了各自的数据库连接池,下面介绍一下tomcat的数据库连接管理。tomcat6 数据源配置(server.xml方式和context.xml方式)在server.xml下配置你必需重启服务器才能生效,而context.xml配置保存后tomcat会自动加载无需重启在JNDI配配置数据源中需注意:项目下需要引入数据库驱动包,并且TOMCAT下也需要引入,不然会报错的1.context.xml方式Tomcat-6.0.26confcontext.xml文件当添加以下的配置信息:其中:name 表示指定的jndi名称auth 表示认证方式,一般为Containertype 表示数据源床型,使用标准的

8、javax.sql.DataSourcemaxActive 表示连接池当中最大的数据库连接maxIdle 表示最大的空闲连接数maxWait 当池的数据库连接已经被占用的时候,最大等待时间logAbandoned 表示被丢弃的数据库连接是否做记录,以便跟踪username 表示数据库用户名password 表示数据库用户的密码driverClassName 表示JDBC DRIVERurl 表示数据库URL地址注意,这里你配置的name值要和程序中使用的是一样的,比如按照这个例子,程序就应该是这样的Java代码String gENV = java:comp/env/;Context ctx =

9、 new InitialContext(); DataSource ds = (DataSource)ctx .lookup(gENV+jdbc/mysql); Connection conn = ds.getConnection();String gENV = java:comp/env/;Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(gENV+jdbc/db2); Connection conn = ds.getConnection();关于获取数据源的语法,大体有(javax.sql.

10、DataSource) ctx.lookup (java:comp/env/XXX)和(javax.sql.DataSource) ctx.lookup(XXX)两种写法,好多人以为这两种写法是相同的,以为都是通过JNDI来获取数据源。其实java:comp/env和 JNDI是不同的,java:comp/env 是环境命名上下文(environment naming context(ENC),是在EJB规范1.1以后引入的,引入这个是为了解决原来JNDI查找所引起的冲突问题,也是为了提高EJB或者J2EE应用的移植性。ENC是一个引用,引用是用于定位企业应用程序的外部资源的逻辑名。引用是在应

11、用程序部署描述符文件中定义的。在部署时,引用被绑定到目标可操作环境中资源的物理位置(JNDI名)。使用ENC是把对其它资源的JNDI查找的硬编码解脱出来,通过配置这个引用可以在不修改代码的情况下,将引用指向不同的EJB(JNDI)。 在J2EE中的引用常用的有:-JDBC 数据源引用在java:comp/env/jdbc 子上下文中声明-JMS 连接工厂在java:comp/env/jms 子上下文中声明-JavaMail 连接工厂在java:comp/env/mail 子上下文中声明-URL 连接工厂在 java:comp/env/url子上下文中声明2.在server.xml文件中配置数据源Tomcat-6.0.26confcontext.xml中的配置:在中添加如下配置 Resource name=jdbc/oracle type=javax.sql.DataSource auth=Container username=sljx password=sljx driverClassName=oracle.jdbc.driver.OracleDriver maxIdle=3000

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号