JDBC以及Tomcat连接池

 

 

 

JDBC连接数据库

JDBC基础

JDBC是用来与数据库进行交互的一个通用接口,它是通过数据库端的CLICall Level Interface)连接到处理SQL语句的引擎来与数据库进行交互的,其运行时的流程可以用下图来表示:

JDBC-ODBC JDBC_Network_Protocol DBC连接池

Pool Manager的作用是创建数据库连接池,管理Web应用程序在逻辑上跟数据库的物理连接的配置,并处理异常,如超时等。Pool Manager一般可以从这些地方获得:

2 应用服务器,如Tomcat6

2 第三方软件

2 JDBC驱动提供商

 

TomcatJDBC的演变

Tomcat6提供对JDBC3的全面支持以前对JDBC2JDBC1的兼容。Tomcat6中新的JDBC特性主要有以下这几个方面:

2 应用服务器管理的数据库连接池。Tomcat6使用Jakarta Commons Database Connection PoolingDBCP)来实现应用服务器管理的数据库连接池。

2 使用JNDI-API来查找在一个应用服务器中的数据源。Tomcat6 emulate JNDI for Web applications running under it.这种获得data source的方式是可移植的,并且是易于配置的。它使得对数据库驱动的选择和数据库系统的选择可以推迟到部署时才做(因为不同的数据源仅是配置文件有些区别而已)。

2 消除不同的数据库连接器之间的差异。通过JDBClookup功能,Tomcat6解耦了对数据源的连接,这也是向JCA Connector-based结构迁移的第一步。

 

Tomcat6中的JNDI Emulation和数据库连接池

Tomcat6使得在其中运行的Web应用程序具有以下这些功能:

2 使用标准的JNDI lookup获取数据库连接

2 提供了数据库连接池功能

JNDILookup

图中这两步分别为:

1. Web应用程序获得一个JNDIInitialContext,然后通过name来对这个data sourceJNDI data source)进行lookup操作。

2. Tomcat根据配置文件(context.xml, server.xml,web.xml)来决定使用什么样的JDBC driver来连接data source,从而应答JNDI lookup请求。Tomcat也可以使用使用数据库连接池来pool the connections made;从Tomcat获得的数据库连接为逻辑上的数据库连接。

 

尽管没有使用真正的JNDI兼容的目录服务,但Tomcat模仿了JNDI的功能。这样那些使用JNDI的应用程序还能照常在Tomcat中运行。

 

推荐配置:JNDI资源

在很长的时期内,使用这种方式的Web应用程序都能保证与其他程序的兼容性。

下面是使用JNDI连接JDBC data source所必须做的配置工作:

  •  找到context.xml,在相应Web程序<Context>标签内嵌入一个<Resource>标签;或者在server.xml文件中的<DefaultContext>中的<Host>标签下添加这个<Resource>标签。
  •  在web.xml中定义与第一步中的<Resource>标签对应的的<resource-ref>标签。
  •  在程序代码中使用lookup获得JDBC data source

Resource标签

一个resource标签是用来表示一个JNDI data source, 这个JNDI data source表示一个JDBC data source,下面是在server.xml中的一段示例代码:

 

Resource标签中的每个属性的含义在下表中表示:


 

  • name=”jdbc/WroxTC6″ 创建一个可以从Context(程序的逻辑名)访问的JNDI data source。 java:comp/env是所有的Tomcat下的Context的前缀(完整路径 java:comp/env/jdbc/WroxTC6)。Web应用程序可以使用这个Context来lookup the data source。

  • auth=”Container” auth属性是用来指定是由Tomcat代替应用程序执行验证任务(auth=”Container”) 或者由应用程序自身进行验证(auth=”Application”


  • type=”javax.sql.DataSource” type属性用来指定lookup返回的数据类型为”javax.sql.DataSource”,它同 时也表明Tomcat容器将代替应用程序执行登录数据库的身份验证任务。

  • maxActive 在连接池中active connection的最大数目,0代表无数。


  • maxIdle 在连接池中空闲连接数目的上限,一旦达到这个限制,Tomcat将开始清理这些 连接。-1代表无限。


  • maxWait Tomcat Manager等待数据库响应的最长时间限制,一旦超过了这个限制, Manager将返回一个异常。-1表示可以永远等待。


  • username=“Test” 数据库账户用户名


  • password=“Test” 数据库账户密码


  • driverClassName=”” 数据库驱动,Tomcat/DBCP根据这个属性来加载相应的驱动


  • url=”” JDBC url


DBCP–Jakarta Commons Pooling Support

Tomcat6使用data source工厂来创建一个JDBC data source并将其返回给Web应用程序。Tomcat6使用DBCP来实现data source工厂以及数据库连接池。

 

JNDI资源配置实战

这次操作的目的是依靠Tomcat6对JNDI资源的支持,使用JDBC4驱动,来配置一个DBCP data source。

  • 创建一个数据库,并创建一个表格。
  • 创建一个只读用户(只对某张表有select权限)。
  • 向默认Context中加入JDBC JNDI Resource
  1. 在context.xml中加入<Resource>标签。这一步的目的是使应用程序可以访问JNDI data source。

 

    2. 向web.xml中加入<resource-ref>标签。<resource-ref>标签使得Web应用程序可以通过JNDI API获得jdbc/wroxTC6 context。

 

   3. 使用JNDI来lookup一个data source,并增加一个出错时显示的页面。

 

错误页面:

 

 

来源:jubincn

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2009年7月4日
下一篇 2009年7月4日

相关推荐