现在的位置: 首页 > 综合 > 正文

Tomcat4+jdk+db2连接池实现

2013年10月05日 ⁄ 综合 ⁄ 共 4867字 ⁄ 字号 评论关闭

 1 配置数据源

如果我们要部署的是个WEB应用程序,我们将该应用程序放在TOMCAT_HOME/webapps目录下,有两种方式可以引用我们所配置的JNDI数据源。

A:可以在TOMCAT_HOME/conf/Catalina/localhost下新建XXX.xml文件,XXX为所发布的WEB应用的名字,如我所发布的WEB应用是JndiTest,.xml文件命名为JndiTest.xml在该文件内加:

如我所发布的WEB应用是test,.xml文件命名为test.xml在该文件内加:

<?xml version='1.0' encoding='utf-8'?>
<Context path="/test" docBase="E:/Java/tomcat/webapps/test" debug="0"
                 reloadable="true" crossContext="true">                  
        <Environment name="maxExemptions" type="java.lang.Integer"
                      value="15"/>
        <Parameter name="context.param.name" value="context.param.value"
                     override="false"/> 

  <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"/>
        <ResourceParams name="jdbc/mydb">
 <parameter>
  <name>factory</name>
  <!-- <value>com.ibm.db2.jcc.DB2SimpleDataSource</value>-->
   <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
 
 </parameter>
 <parameter>
  <name>driverClassName</name>
  <value>COM.ibm.db2.jdbc.net.DB2Driver</value>
 </parameter>
 <parameter>
  <name>url</name>
  <value>jdbc:db2://localhost:6789/alisi</value>
 </parameter>
 <parameter>
  <name>username</name>
  <value>hain</value>
 </parameter>
 <parameter>
  <name>password</name>
  <value>bi2003</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>
其中E:/Java/tomcat/webapps/test为你所发布应用程序的目录,这样就可以进行测试了。
这样做就是每个WEB应用程序都须创建一个象test.xml这样的文件。

B 为了避免每个WEB应用程序都创建XXX.xml文件,我们可以修改TOMCAT_HOME/conf下的server.xml文件,修改如下:

在之间加入:
<Context path="/test" docBase="E:/Java/tomcat/webapps/test" debug="0"
                 reloadable="true" crossContext="true">                  
        <Environment name="maxExemptions" type="java.lang.Integer"
                      value="15"/>
        <Parameter name="context.param.name" value="context.param.value"
                     override="false"/> 

  <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"/>
        <ResourceParams name="jdbc/mydb">
 <parameter>
  <name>factory</name>
  <!-- <value>com.ibm.db2.jcc.DB2SimpleDataSource</value>-->
   <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
 
 </parameter>
 <parameter>
  <name>driverClassName</name>
<!--<value>COM.ibm.db2.jdbc.app.DB2Driver</value>-->
<value>COM.ibm.db2.jdbc.net.DB2Driver</value>
 </parameter>
 <parameter>
  <name>url</name>
<!--<value>jdbc:db2:TEXT</value>-->
<value>jdbc:db2://localhost:6789/alisi</value>
 </parameter>
 <parameter>
  <name>username</name>
  <value>ha</value>
 </parameter>
 <parameter>
  <name>password</name>
  <value>2005</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>
2 注意要在每个WEB应用程序的web.xml文件中都加入(不是必须的)
<resource-ref>
 <description>db2 Datasource example</description> <res-ref-name>jdbc/mydb</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>
3 测试代码

编写index.jsp文件:

<%@ page contentType="text/html;charset=GBK"%>
<%@ page import= "java.sql.* "%>
<%@ page import= "javax.naming.* "%>
<%@ page import= "javax.sql.* "%>
Hi,
<%
 try{
 Context initCtx = new InitialContext();
 Context ctx = (Context) initCtx.lookup("java:comp/env"); //获取连接池对象
 Object obj = (Object) ctx.lookup("jdbc/mydb"); //类型转换
 javax.sql.DataSource ds = (javax.sql.DataSource)obj;
 Connection conn = ds.getConnection();
 Statement stmt = conn.createStatement();

 String strSql = "Select * from tb_AREA_TABLE";
 ResultSet rs = stmt.executeQuery(strSql);
 while(rs.next()){ out.println(rs.getString(1));
 out.println(rs.getString(2));
}
}
catch(Exception ex)
{ System.out.println("ERRRR:"+ex);
}%>

在IE里面输入http://127.0.0.1:8080/test/如果能显示出数据则配置成功

4 配置说明:
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"/>

Resource项(即连接池的DataSource对象),有3个属性name、auth、type,name项是JNDI的名称定义,程序通过JNDI才能找到此对象,这里取名jdbc/mydb;auth项即连接池管理权属性,这里取值Container,申明为容器管理;type项即对象的类型,这里取值javax.sql.DataSource,申明为数据库连接池
在接下来的<ResourceParams>域内容里包含四个参数user、password、driverClassName、driverName,依次为数据库的用户名、密码、JDBC驱动和数据库地址。
用户名、密码是为访问数据库准备的,取连接数据库的用户名和密码。
driverClassName即数据库的JDBC驱动名称,JDBC驱动包名叫db2java.zip,一般位于DB2安装目录下的IBM/SQLLIB/java目录下,初始扩展名为ZIP,并放到common/lib下。这里又2种取值COM.ibm.db2.jdbc.net.DB2Driver和COM.ibm.db2.jdbc.app.DB2Driver
接下来是即url,即数据库的地址
jdbc:db2://localhost:6789/masa_239和jdbc:db2:TEXT

在这里填写里的是db2的访问地址

接下来有三个参数,均为连接数相关,如下:
<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秒后超时。
关于maxActive与maxIdle的一点建议,对于企业级应用,其两者的值一般比较接近,或者相同,关键是要分析应用的大小。

抱歉!评论已关闭.