连接池显示数据库中的INACTIVE连接

时间:2011-09-08 06:34:09

标签: java hashtable datasource connection-pooling

我在struts应用程序中使用与 SharedPoolDataSource 的连接池。应用程序用户通过用户界面动态传递Connection参数。我正在创建 DriverAdapterCPDS 的对象,并将其分配给 SharedPoolDataSource obj道具。

SharedPoolDataSource tds = new SharedPoolDataSource();
            tds.setConnectionPoolDataSource(cpds);
            tds.setMaxActive(5);
            tds.setMaxIdle(2);
            tds.setMaxWait(50);
            tds.setTestOnBorrow(true);
            tds.setValidationQuery(validationQuery);

我将它存储在DBUtil类的哈希表中,公司名称为key。像这个应用程序用户分配了与每个公司相关的大量数据库详细信息。

dbUtil.DSht.put(comp, tds);

从另一个程序(Swing App)用户发送公司名称。因此,我需要获取与公司相对应的数据源对象,并在该数据库上执行分配给用户的查询。并将结果作为对象返回。

所以我写了这样的函数

public static Connection getClientConnection(String comp){
    Connection con = null;
    try{
        if(!dbUtil.DSht.contains(comp)){
            loadClientDataSource(comp);
        }
        DataSource ds = (DataSource)dbUtil.DSht.get(comp);            
        Idle:"+bds.getNumIdle());
        con = ds.getConnection();
    }catch(Exception e){
        e.printStackTrace();
        throw new DBUtilException("Unable to get the client connection object. Cause: "+e.getMessage());
    }        
    return con;
}

关闭数据库连接

public static void closeConnection(Connection con){
    try{
        if(con != null)
            con.close();
    }catch(Exception e){
        e.printStackTrace();
    }        
}

我在finally块

中调用了 closeConnection 函数
try{
        con = DBUtil.getClientConnection(comp);
        pstmt = con.prepareStatement(sqlQuery);            
        pstmt.executeQuery();
    }catch(SQLException sqle) {
        sqle.printStackTrace();
        throw new QueryException("Unable to add query. Cause: "+sqle.getMessage());
    }finally{
        DBUtil.closeStatement(pstmt);
        DBUtil.closeConnection(con);
    }

使用连接池是否有任何问题。使用此应用程序数据库后显示与我的计算机关联的大量 INACTIVE 连接。即使在关闭连接后,它也会显示出来。我只为数据库设置了2个MAXIDLE连接。问题是什么。为什么它显示了很多 INACTIVE 连接。如果我们将数据源放在哈希表中,是否有任何问题。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

不要担心,在INACTIVE状态下进行会话并不是一个异常现象。查看http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:914029001168