以前用的Tomcat版本都是Tomcat 5.0.28,现在想用新的版本,把应用部署到Tomcat 5.5.20时,发现连接池建立不成功。这里先介绍Tomcat 5.5.20下的配置方法,我用来发布的Web应用有两个,分别是tms和cms。数据库分别以SQLServer 2000和Mysql5.0.26为例。(我喜欢用最新版本)
发布的web应用名为tms,数据库为SQLServer 2000,JDBC驱动为SQL Server 2000 Driver for JDBC SP3。(不是SP3也是可以的)。
1. 拷贝SQLServer2K JDBC驱动程序到:%TOMCAT_HOME%/common/lib目录下,分别为:msbase.jar,mssqlserver.jar,msutil.jar
如果数据库是mysql,则同样拷贝JDBC驱动到该目录下,我用的是:mysql-connector-java-5.0.3-bin.jar。
2. 发布web应用tms。修改%TOMCAT_HOME%/conf/server.xml,在<Host>与</Host>之间加入以下代码,
<Context path="/tms" docBase="D:/devhome/tmsproj/tms" debug="0" reloadable="true">
<Resource name="jdbc/TMSDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="20"
maxWait="5000"
username="sa"
password="sa"
maxActive="4"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb">
</Resource>
</Context>
#################### 若是mysql,则文件如下(web应用为cms)####################
<Context path="/cms" docBase="D:/devhome/cmsproj/cms" debug="0" reloadable="true">
<Resource name="jdbc/cmsdb"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="20"
maxWait="5000"
maxActive="10"
username="root"
password="root"
url="jdbc:mysql://localhost/cms?characterEncoding=GB2312">
</Resource>
</Context>
##############################################################################
3. 编辑WEB应用的web.xml文件,在<web-app>与</web-app>之间加入如下代码:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TMSDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
注意:其实这一步是可选的,也就是说,不需要设定web.xml中的resource-ref,在server.xml或者对应每个web应用程序各个单独包含<Context>元素的xml文件设定<Resource>就可以了。两者是等价的。
4.有些童子说,要在%TOMCAT_HOME%/conf/Catalina/localhost目录下增加一个以web应用名字命名的xml文件,比如本例中tms.xml,如下所示,其实是不需要的。(在Tomcat5.0.28中,在server.xml中配置后会自动生成这个文件,在 Tomcat5.5.20中没有)
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="D:/devhome/tmsproj/tms" path="/tms" reloadable="true">
<Resource name="jdbc/TMSDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
username="sa"
password="sa"
maxActive="4"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb">
</Resource>
</Context>
5.这里配置就完成了,在程序中可以测试一下。
String dsname = "java:comp/env/jdbc/cmsdb";
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(serviceName);
Connection conn = ds.getConnection();
// 利用连接执行DB操作......
6.最后再比较一下在数据源配置上Tomcat5.5与Tomcat5.0的差别。
下面是上面第2步所述Web应用tms在Tomcat5.0.28中的配置<Context>部分。
<Context path="/tms" docBase="D:/devhome/tmsproj/tms" debug="0" reloadable="true">
<Resource name="jdbc/TMSDB"
auth="Container"
type="javax.sql.DataSource" />
<ResourceParams name="jdbc/TMSDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>sa</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb</value>
</parameter>
</ResourceParams>
</Context>
上面针对tomcat5.0的jdbc数据源的ResourceParams其实不需要设定factory,直接使用默认的dbcp数据源。注意上面Resource元素和ResourceParams设定是独立的,不要以为ResourceParams是Resource的嵌套元素。
出现这些差别,究其原因是在Tomcat5.5中,有一些变化,取消掉了ResourceParams元素,所有的参数跟随着Resource,成为Resource元素的属性了。
6.另外,除了传统的在server.xml和单独每个web应用程序对应的context的xml文件中设定Resource元素,还多了一种方式。
那就是在web应用程序目录下创建一个META-INF目录,新建一个context.xml,写在里面。
注明:以上内容结合自己的实践过程中参考了网上很多资料,在此表示感谢。
发布的web应用名为tms,数据库为SQLServer 2000,JDBC驱动为SQL Server 2000 Driver for JDBC SP3。(不是SP3也是可以的)。
1. 拷贝SQLServer2K JDBC驱动程序到:%TOMCAT_HOME%/common/lib目录下,分别为:msbase.jar,mssqlserver.jar,msutil.jar
如果数据库是mysql,则同样拷贝JDBC驱动到该目录下,我用的是:mysql-connector-java-5.0.3-bin.jar。
2. 发布web应用tms。修改%TOMCAT_HOME%/conf/server.xml,在<Host>与</Host>之间加入以下代码,
<Context path="/tms" docBase="D:/devhome/tmsproj/tms" debug="0" reloadable="true">
<Resource name="jdbc/TMSDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="20"
maxWait="5000"
username="sa"
password="sa"
maxActive="4"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb">
</Resource>
</Context>
#################### 若是mysql,则文件如下(web应用为cms)####################
<Context path="/cms" docBase="D:/devhome/cmsproj/cms" debug="0" reloadable="true">
<Resource name="jdbc/cmsdb"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="20"
maxWait="5000"
maxActive="10"
username="root"
password="root"
url="jdbc:mysql://localhost/cms?characterEncoding=GB2312">
</Resource>
</Context>
##############################################################################
3. 编辑WEB应用的web.xml文件,在<web-app>与</web-app>之间加入如下代码:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TMSDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
注意:其实这一步是可选的,也就是说,不需要设定web.xml中的resource-ref,在server.xml或者对应每个web应用程序各个单独包含<Context>元素的xml文件设定<Resource>就可以了。两者是等价的。
4.有些童子说,要在%TOMCAT_HOME%/conf/Catalina/localhost目录下增加一个以web应用名字命名的xml文件,比如本例中tms.xml,如下所示,其实是不需要的。(在Tomcat5.0.28中,在server.xml中配置后会自动生成这个文件,在 Tomcat5.5.20中没有)
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="D:/devhome/tmsproj/tms" path="/tms" reloadable="true">
<Resource name="jdbc/TMSDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
username="sa"
password="sa"
maxActive="4"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb">
</Resource>
</Context>
5.这里配置就完成了,在程序中可以测试一下。
String dsname = "java:comp/env/jdbc/cmsdb";
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(serviceName);
Connection conn = ds.getConnection();
// 利用连接执行DB操作......
6.最后再比较一下在数据源配置上Tomcat5.5与Tomcat5.0的差别。
下面是上面第2步所述Web应用tms在Tomcat5.0.28中的配置<Context>部分。
<Context path="/tms" docBase="D:/devhome/tmsproj/tms" debug="0" reloadable="true">
<Resource name="jdbc/TMSDB"
auth="Container"
type="javax.sql.DataSource" />
<ResourceParams name="jdbc/TMSDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>sa</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb</value>
</parameter>
</ResourceParams>
</Context>
上面针对tomcat5.0的jdbc数据源的ResourceParams其实不需要设定factory,直接使用默认的dbcp数据源。注意上面Resource元素和ResourceParams设定是独立的,不要以为ResourceParams是Resource的嵌套元素。
出现这些差别,究其原因是在Tomcat5.5中,有一些变化,取消掉了ResourceParams元素,所有的参数跟随着Resource,成为Resource元素的属性了。
6.另外,除了传统的在server.xml和单独每个web应用程序对应的context的xml文件中设定Resource元素,还多了一种方式。
那就是在web应用程序目录下创建一个META-INF目录,新建一个context.xml,写在里面。
注明:以上内容结合自己的实践过程中参考了网上很多资料,在此表示感谢。