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

解决方案 »

  1.   

    数据库是oracle9i,maxActive设为100,最大maxIdle为30
      

  2.   

    错误信息都不贴上来,就给个”会报dbconn的异常“如何下手分析嘛。
      

  3.   

    用连接池吗?我建议你用Proxool,这个连接池用起来很方便,特简单
      

  4.   

    根本没有错误信息,调试的时候会出现这样一种信息。而且我调试的时候,跟踪到public static void  init(BasicDataSource ds){
    dbconn = new DatabaseConnection(ds);
    }
    并不会跟踪到DatabaseConnection的构造函数中去,这行执行完了,dbconn还是null
      

  5.   

    Source not found for StandardWrapper.loadServlet() line: 1066 
    表示跟踪调试时,调试器找不到StandardWrapper的源代码
    不是什么错误,不要跟踪到loadServlet就行了
    或者下载tomcat的源代码,再设置一下就可以跟踪到StandardWrapper()里了
      

  6.   

    但是dbconn = new DatabaseConnection(ds);执行完了,dbconn不应该是null啊,而且应该跟进到构造函数中,而现在是没有。奇怪
      

  7.   

    没有会的吗:但是dbconn = new DatabaseConnection(ds);执行完了,dbconn不应该是null啊,而且应该跟进到构造函数中,而现在是没有。奇怪
      

  8.   

    不会跟进去的,建议你看一下DatabaseConnection源码,看是怎么处理的。
      

  9.   

    因为DatabaseConnection不是你写的,是别人写好了你用的,所以你跟不进去,呵呵