Tomcat4的数据库连接池配置

本文主要介Tomcat4.0.6Tomcat4.1.18两个版本下数据库连接池的配置,及程序对连接池的JNDI找,并提供相应测试。最后指出配置及程中的常见问题及解决方法。

一、Tomcat

TomcatApache Jakarta的子目之一,是Sun公司推荐的JSPServlet容器。一款秀的用服器,Tomcat提供了数据库连接池、SSLProxy多通用件功能,其中接池是4.0以上版本的新增功能,用非常广泛。

二、Tomcat4接池

Tomcat4开发可分两个段,4.0.6是第一段最推荐的release版本,内置的数据库连接池Tyrex 0.9.7.0Tyrexexolab.org开发,相信息可以参http://www.exolab.org/。之后,Tomcat开发者在4.0.x的基Tomcat行了重构,重构后的release版本推荐4.1.18这时内置的接池改DBCPDBCP也是由Jakarta Commons的一个子目。

接下来,将分4.0.64.1.18例介绍这种连接池Oracle8.1.7的配置。

三、Tomcat4.0.6Tyrex配置

方便起,将接池置于ROOT下,JNDI设为jdbc/OracleDB,数据IP192.168.0.50SIDoradb,操作系Win2000jdk1.3.1,配置步骤如下。

第一:配置server.xml

server.xml文件中找到

<!-- Tomcat Root Context -->

<!--

   <Context path="" docBase="ROOT" debug="0"/>

-->

将其改

<!-- Tomcat Root Context -->

        <Context path="" docBase="ROOT" debug="0">

           <Resource name="jdbc/OracleDB" auth="Container" 

          type="javax.sql.DataSource"/>

            <ResourceParams name="jdbc/OracleDB">

             <parameter>

               <name>user</name>

               <value>holen</value>

             </parameter>

             <parameter>

               <name>password</name>

               <value>holen</value>

             </parameter>

             <parameter>

               <name>driverClassName</name>

               <value>oracle.jdbc.driver.OracleDriver</value>

             </parameter>

             <parameter>

               <name>driverName</name>

               <value>jdbc:oracle:thin:@192.168.0.50:1521:oradb</value>

             </parameter>

            </ResourceParams>

          </Context>

明:将ROOTContext从注中移出来,并定Resource,如下:

<Resource name="jdbc/OracleDB" auth="Container" 

          type="javax.sql.DataSource"/>

Resource(即接池的DataSource象),有3个属性nameauthtypenameJNDI的名称定,程序通JNDI才能找到此象,里取名jdbc/OracleDBauth接池管理属性,里取Container,申明容器管理;type象的型,里取javax.sql.DataSource,申明数据库连接池,Tyrex不但可以用作数据库连接池,的功能,有趣的朋友可以打Tyrexjar包看看或访问http://www.exolab.org/,在里就不多了。

在接下来的<ResourceParams>域内容里包含四个参数userpassworddriverClassNamedriverName,依次数据的用名、密JDBC驱动和数据地址。

名、密为访问数据的,里均取holen

driverClassName即数据JDBC驱动名称,如Oracle8.1.7JDBC驱动包名叫classes.jar,一般位于Oracle安装目下的ora81\jdbc\lib下,初始展名ZIP,需要手工把classes.zip改名classes.jar,并放到common/lib下。里取oracle.jdbc.driver.OracleDriver,此classes.jar提供。

 <parameter>

       <name>driverClassName</name>

       <value>oracle.jdbc.driver.OracleDriver</value>

</parameter>

于其他数据,如MySql,其driverClassName一般org.gjt.mm.mysql.Driver

最后一个参数即driverName,即数据的地址(准确点说应该url4.1.18就改叫url了)

<parameter>

       <name>driverName</name>

       <value>jdbc:oracle:thin:@192.168.0.50:1521:oradb</value>

</parameter>

里填写里的是Oracle访问地址,若是MySqlDB2SqlServer或其他数据填写相的地址。

第二:将OracleJDBC驱动classes12.jarTomcat安装目common/lib下,其他数据也一把其相JDBC驱动包置于common/lib,如MySqlJDBC驱动mm.mysql-2.0.14.jar

至此,配置完成,测试将在后面

四、Tomcat4.1.18DBCP配置

配置方法与4.0.6稍有不同,以下是配置步骤

第一:配置server.xml

server.xml文件中找到

<!-- Tomcat Root Context -->

<!--

   <Context path="" docBase="ROOT" debug="0"/>

-->

将其改

<!-- Tomcat Root Context -->       

          <Context path="" docBase="ROOT" debug="0">

          <Resource name="jdbc/OracleDB" auth="Container"

          type="javax.sql.DataSource"/>

          <ResourceParams name="jdbc/OracleDB">

            <parameter>

          <name>factory</name>

          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

            </parameter>

            <parameter>

          <name>driverClassName</name>

          <value>oracle.jdbc.driver.OracleDriver</value>

            </parameter>

            <parameter>

          <name>url</name>

          <value>jdbc:oracle:thin:@192.168.0.50:1521:oradb</value>

            </parameter>

            <parameter>

          <name>username</name>

          <value>holen</value>

            </parameter>

            <parameter>

          <name>password</name>

          <value>holen</value>

            </parameter>

            <parameter>

          <name>maxActive</name>

          <value>20</value>

            </parameter>

            <parameter>

          <name>maxIdle</name>

          <value>10</value>

            </parameter>

            <parameter>

          <name>maxWait</name>

          <value>-1</value>

            </parameter>

          </ResourceParams>

          </Context>

明:从配置文件可以看出,DBCP的配置与Tyrex似,但功能更加丰富。相同就不多,重点述不同的地方。

factory参数:

<parameter>

       <name>factory</name>

       <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

</parameter>

即基础对象工厂,里取org.apache.commons.dbcp.BasicDataSourceFactory,即DBCP的工厂,也可以用的。

明一点是,4.1.18里主推DBCP接池,但仍然可以使用Tyrex为连接池,而且此Tyrex已从0.9.7.0到了1.0,支持JTA/JCA象等,象的取仍然是通JNDI,具体的配置方法可以参Tomcat文档。

url参数:

<parameter>

       <name>url</name>

<value>jdbc:oracle:thin:@192.168.0.50:1521:oradb</value>

url是数据库访问地址,在前提已提到。

接下来有三个参数,均为连接数相,如下:

<parameter>

       <name>maxActive</name>

       <value>20</value>

</parameter>

<parameter>

       <name>maxIdle</name>

       <value>10</value>

</parameter>

<parameter>

<name>maxWait</name>

      <value>-1</value>

</parameter>

maxActive是最大激活接数,里取20个,表示同最多有20个与数据接。

maxIdle是最大空闲连接数,里取10个,表示即使没有,依然可以保持10接,而不被清除,随时处于待命状象的状,有趣的朋友可以看看EJB方面的料。

maxWait是最大等待秒数,里取-1,表示无限等待,直到超时为止,也可以取9000,即表示9秒后超

maxActivemaxIdle的一点建于企业级应用,其两者的一般比接近,或者相同,关键是要分析用的大小。

第二:配置web.xml

webapps/ROOT/WEB-INFweb.xml,加入如下内容:

<resource-ref>

        <description>Oracle Datasource example</description>

        <res-ref-name>jdbc/OracleDB</res-ref-name>

        <res-type>javax.sql.DataSource</res-type>

        <res-auth>Container</res-auth>

</resource-ref>

明:此可以省略,即不配置web.xml也可以使用接池,但正式时还是建加上。

第三:将OracleJDBC驱动classes12.jarTomcat安装目common/lib下。

至此,配置完成,测试将在后面

五、测试

下面写一个JSP文件testdb.jsp,并将testdb.jsp置于webapps/ROOT下,测试一下配置是否正确,此测试对以上两个版本均适合。

数据如下:

Create table test(id varchar2(12),name varchar2(30))

testdb.jsp内容如下:

<%@ page contentType="text/html;charset=GBK"%>

<%@ page import= "java.sql.* "%>

<%@ page import= "javax.naming.* "%>

<%

       try{

          Context initCtx = new InitialContext();

          Context ctx = (Context) initCtx.lookup("java:comp/env");

        //接池

          Object obj = (Object) ctx.lookup("jdbc/OracleDB");

        //转换

          javax.sql.DataSource ds = (javax.sql.DataSource)obj;

          Connection conn = ds.getConnection();

          Statement stmt = conn.createStatement();

          String strSql = " insert into test(id,name) values('00001','holen') ";

          stmt.executeUpdate(strSql);

          strSql = " select id,name from test ";

          ResultSet rs = stmt.executeQuery(strSql);

            if(rs.next()){

          out.println(rs.getString(1));

          out.println(rs.getString(2));

          }

       }catch(Exception ex){

          ex.printStackTrace();

        throw new SQLException("cannot

          get Connection pool.");

       }

%>

<hr>

明:先通JNDI找到jdbc/OracleDB象,里是分两完成的,也可以一完成,如

Object obj = (Object) ctx.lookup("java:comp/env /jdbc/OracleDB");

然后将得到的转换DataSource型,而得到接,得到接后就可以行相的数据操作了。

数据库进行了两操作,第一是插入一条记录,第二是从数据中取出记录,并示第一条记录的内容。

,在地址http://localhost:8080/testdb.jsp,若一切正常,将“00001 holen”

六、总结

以上配置了Tomcat4.0.6Tomcat4.1.18的内置接池,Tomcat4其他版本的配置方法与之似,用方法也一接池配置主要就是修改server.xmlweb.xml

需要明一点的是,Tomcat4.1.18有一个管理界面,通此操作界面可以配置接池及其他功能,不过这种方式配置的接池不可用(测试时发现程序运行很慢,原因是JNDI能找到,但不能建立接),是管理工具的一个BUG,已Tomcat BUG列表,更详细的情况可以参tomcat-user件列表。

七、参考

你可能感兴趣的:(tomcat)