servlet;
package enquete.db;import java.sql.SQLException;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.sql.DataSource;
import enquete.db.DatabaseConnection;
import org.apache.commons.dbcp.BasicDataSource;public class ConnectionPoolServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
BasicDataSource ds = new BasicDataSource();;
ds.setDriverClassName(getInitParameter("driverClass"));
ds.setUsername(getInitParameter("username"));
ds.setPassword(getInitParameter("password"));
ds.setUrl(getInitParameter("url"));
ds.setMaxActive(Integer.parseInt(getInitParameter("maxActive")));
ds.setMaxIdle(Integer.parseInt(getInitParameter("maxIdle")));
ds.setMaxWait(Integer.parseInt(getInitParameter("maxWait")));
DatabaseConnection.init(ds);
} catch (Exception e) {
e.printStackTrace();
}
}
}连接池:
package enquete.db;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;import enquete.util.EnqueteException;
import enquete.util.EnqueteLogUtil;
import enquete.util.EnqueteMessages;
import enquete.util.EnquetePropUtil;
import enquete.util.EnqueteConst;
import enquete.util.EnqueteDBException;/**
* データベースコネクションクラス
*/
public class DatabaseConnection {
/** データソース コネクション */
private Connection conn = null;
private BasicDataSource ds;
/** Logger */
private EnqueteLogUtil enqueteLog = EnqueteLogUtil.getInstance();
private static DatabaseConnection dbconn;
/**
* 構造関数
*/
private DatabaseConnection(){
}
private DatabaseConnection(BasicDataSource ds){
this.ds = ds;
int i=2;
}
/**
* インスタンスを取得
*/
public static DatabaseConnection getDatabaseConnectionInstance() throws Exception {
if (dbconn == null){
//EnqueteLogUtil.getInstance().log("Connection pool failed to init!");
throw new EnqueteException(EnqueteMessages.CONNECTION_POOL_INIT_ERRCODE,
EnqueteMessages.CONNECTION_POOL_INIT_ERRMSG);
}
return dbconn;
}
/**
* コネクションの取得
*/
public Connection getConnInstance(){
enqueteLog.log("Start DatabaseConnection.getConnInstance"); if (conn == null) {
conn = getConnection(false);
}
enqueteLog.log("End DatabaseConnection.getConnInstance");
return conn;
}
/**
* コネクションの取得
*/
private Connection getConnection(boolean b_commit) {
enqueteLog.log("Start DatabaseConnection.getConnection");
try {
conn = ds.getConnection();
conn.setAutoCommit(b_commit);
enqueteLog.log("Connection successful!");
System.out.println("Connection successful!");
} catch (Exception ex){
ex.printStackTrace();
}
enqueteLog.log("End DatabaseConnection.getConnection");
return conn;
}
public static void init(BasicDataSource ds){
dbconn = new DatabaseConnection(ds);//跟踪到这行,就出现标题中的错误
}
}如果在程序中调用getDatabaseConnectionInstance方法时,就会报dbconn的异常,那个servlet中我已经在web.xml配置为load-on-startup为1了,这个错误确实很奇怪,我的tomcat是5.0.28
package enquete.db;import java.sql.SQLException;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.sql.DataSource;
import enquete.db.DatabaseConnection;
import org.apache.commons.dbcp.BasicDataSource;public class ConnectionPoolServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
BasicDataSource ds = new BasicDataSource();;
ds.setDriverClassName(getInitParameter("driverClass"));
ds.setUsername(getInitParameter("username"));
ds.setPassword(getInitParameter("password"));
ds.setUrl(getInitParameter("url"));
ds.setMaxActive(Integer.parseInt(getInitParameter("maxActive")));
ds.setMaxIdle(Integer.parseInt(getInitParameter("maxIdle")));
ds.setMaxWait(Integer.parseInt(getInitParameter("maxWait")));
DatabaseConnection.init(ds);
} catch (Exception e) {
e.printStackTrace();
}
}
}连接池:
package enquete.db;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;import enquete.util.EnqueteException;
import enquete.util.EnqueteLogUtil;
import enquete.util.EnqueteMessages;
import enquete.util.EnquetePropUtil;
import enquete.util.EnqueteConst;
import enquete.util.EnqueteDBException;/**
* データベースコネクションクラス
*/
public class DatabaseConnection {
/** データソース コネクション */
private Connection conn = null;
private BasicDataSource ds;
/** Logger */
private EnqueteLogUtil enqueteLog = EnqueteLogUtil.getInstance();
private static DatabaseConnection dbconn;
/**
* 構造関数
*/
private DatabaseConnection(){
}
private DatabaseConnection(BasicDataSource ds){
this.ds = ds;
int i=2;
}
/**
* インスタンスを取得
*/
public static DatabaseConnection getDatabaseConnectionInstance() throws Exception {
if (dbconn == null){
//EnqueteLogUtil.getInstance().log("Connection pool failed to init!");
throw new EnqueteException(EnqueteMessages.CONNECTION_POOL_INIT_ERRCODE,
EnqueteMessages.CONNECTION_POOL_INIT_ERRMSG);
}
return dbconn;
}
/**
* コネクションの取得
*/
public Connection getConnInstance(){
enqueteLog.log("Start DatabaseConnection.getConnInstance"); if (conn == null) {
conn = getConnection(false);
}
enqueteLog.log("End DatabaseConnection.getConnInstance");
return conn;
}
/**
* コネクションの取得
*/
private Connection getConnection(boolean b_commit) {
enqueteLog.log("Start DatabaseConnection.getConnection");
try {
conn = ds.getConnection();
conn.setAutoCommit(b_commit);
enqueteLog.log("Connection successful!");
System.out.println("Connection successful!");
} catch (Exception ex){
ex.printStackTrace();
}
enqueteLog.log("End DatabaseConnection.getConnection");
return conn;
}
public static void init(BasicDataSource ds){
dbconn = new DatabaseConnection(ds);//跟踪到这行,就出现标题中的错误
}
}如果在程序中调用getDatabaseConnectionInstance方法时,就会报dbconn的异常,那个servlet中我已经在web.xml配置为load-on-startup为1了,这个错误确实很奇怪,我的tomcat是5.0.28
dbconn = new DatabaseConnection(ds);
}
并不会跟踪到DatabaseConnection的构造函数中去,这行执行完了,dbconn还是null
表示跟踪调试时,调试器找不到StandardWrapper的源代码
不是什么错误,不要跟踪到loadServlet就行了
或者下载tomcat的源代码,再设置一下就可以跟踪到StandardWrapper()里了