TOMCAT的项目,是不是必须自己写数据库连接池???TOMCAT能自己配置连接池,而不需要自己写连接池了吗?请哪位高手解答一下?

03-08-26 森林
TOMCAT的项目,是不是必须自己写数据库连接池???TOMCAT能自己配置连接池,而不需要自己写连接池了吗?请哪位高手解答一下

wlw
2003-08-29 11:34
不是,jakarta工程提供了一个已经写好的连接池DBCP,
请参考下面的http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html

森林
2003-08-30 09:22
但是,我配置好了。datasource找到了。。。但是CONNETION连接的时候就没连上。。我一头雾水,不知道该怎么办??哪位大虾直到一下??谢谢!!
server.xml 配置:
<!--<Context path="/DBTest" docBase="DBTest"
debug="5" reloadable="true" crossContext="true">
-->
<Context path="" docBase="ROOT" debug="0"/>

<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>

<Resource name="jdbc/MysqlDB"
auth="Container"
type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/MysqlDB">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>

<!-- Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>

<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>

<!-- Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>

<!-- MySQL dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>

<!-- Class name for mm.mysql JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>

<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/frc?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>

WEB-APP ROOT下WEB。XML配置:
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>Welcome to Tomcat</display-name>
<!-- <description>
Welcome to Tomcat
</description>
-->
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/MysqlDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

</web-app>
测试程序:
<%@ page contentType="text/html;charset=GBK"%>

<%@ page import="javax.naming.Context" %>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<%
try{
out.println("查询数据库"+"<br>");

Context initCtx = new InitialContext();

Context ctx = (Context) initCtx.lookup("java:comp/env");
//获取连接池对象

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

//类型转换

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

out.println("查询数据库1"+"<br>");
Connection conn = ds.getConnection();

out.println("查询数据库2"+"<br>");

Statement stmt = conn.createStatement();

out.println("查询数据库3"+"<br>");

//String strSql = "insert into city(ciytid,ciytname,orderno) values(7,'chongqing',7) ";

//stmt.executeUpdate(strSql);

String strSql = " select ciytid,ciytname from city ";
out.println("查询数据库4"+"<br>");
ResultSet rs = stmt.executeQuery(strSql);
out.println("查询数据库5"+"<br>");
while(rs.next()){

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


}
out.println("查询数据库6"+"<br>");
conn.close();

}catch(Exception ex){
//out.println("错误查询数据库2!!!!!"+"<br>");
ex.printStackTrace();
}
%>

只打印出来了
查询数据库
查询数据库1
错误查询数据库2!!!!!

应该是getconnection 那一步出错了??谁能告诉我错在那里??
我用的是TOMCAT4.1.24+MYSQL4.0.14在LINUX下面的配置!!!

森林
2003-08-30 09:23
但是,我配置好了。datasource找到了。。。但是CONNETION连接的时候就没连上。。我一头雾水,不知道该怎么办??哪位大虾直到一下??谢谢!!
server.xml 配置:
<!--<Context path="/DBTest" docBase="DBTest"
debug="5" reloadable="true" crossContext="true">
-->
<Context path="" docBase="ROOT" debug="0"/>

<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>

<Resource name="jdbc/MysqlDB"
auth="Container"
type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/MysqlDB">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>

<!-- Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>

<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>

<!-- Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>

<!-- MySQL dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>

<!-- Class name for mm.mysql JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>

<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/frc?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>

WEB-APP ROOT下WEB。XML配置:
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>Welcome to Tomcat</display-name>
<!-- <description>
Welcome to Tomcat
</description>
-->
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/MysqlDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

</web-app>
测试程序:
<%@ page contentType="text/html;charset=GBK"%>

<%@ page import="javax.naming.Context" %>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<%
try{
out.println("查询数据库"+"<br>");

Context initCtx = new InitialContext();

Context ctx = (Context) initCtx.lookup("java:comp/env");
//获取连接池对象

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

//类型转换

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

out.println("查询数据库1"+"<br>");
Connection conn = ds.getConnection();

out.println("查询数据库2"+"<br>");

Statement stmt = conn.createStatement();

out.println("查询数据库3"+"<br>");

//String strSql = "insert into city(ciytid,ciytname,orderno) values(7,'chongqing',7) ";

//stmt.executeUpdate(strSql);

String strSql = " select ciytid,ciytname from city ";
out.println("查询数据库4"+"<br>");
ResultSet rs = stmt.executeQuery(strSql);
out.println("查询数据库5"+"<br>");
while(rs.next()){

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


}
out.println("查询数据库6"+"<br>");
conn.close();

}catch(Exception ex){
//out.println("错误查询数据库2!!!!!"+"<br>");
ex.printStackTrace();
}
%>

只打印出来了
查询数据库
查询数据库1
错误查询数据库2!!!!!

应该是getconnection 那一步出错了??谁能告诉我错在那里??
我用的是TOMCAT4.1.24+MYSQL4.0.14在LINUX下面的配置!!!

iceant
2003-08-31 20:51
Tomcat 的文档里有DataSource 配置的教程。照着做就可以了,记着要用 java:comp/env/YOUR_DATASOURCE_NAME

j4v4
2003-09-05 09:45
自己写连接池,可以参考,jive源代码的连接池实现方法。

可以参考:

com.jivesoftware.forum.database.DefaultConnectionProvider