Пул соединений, показывающий НЕАКТИВНЫЕ соединения в базе данных - PullRequest
0 голосов
/ 08 сентября 2011

Я использую пул соединений с SharedPoolDataSource в приложении Struts.Пользователь приложения передает параметры соединения динамически через пользовательский интерфейс.Я создаю объект DriverAdapterCPDS и назначаю его SharedPoolDataSource obj props.

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

Я храню его в хеш-таблице класса DBUtil с именем компании в качестве ключа.Как и в этом приложении, пользователь назначает множество деталей базы данных, связанных с каждой компанией.

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();
    }        
}

Я звоню это Функция closeConnection в блоке finally

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);
    }

Существует ли проблема использования пула соединений.После использования этой базы данных приложения отображается множество НЕАКТИВНЫХ подключений, связанных с моим компьютером.Даже после закрытия соединения это выглядит так.Я установил только 2 MAXIDLE соединения для базы данных.В чем проблема.Почему это показывает, что большая часть НЕАКТИВНЫХ соединений.Есть ли проблема, если мы поместим источник данных в хеш-таблицу.

Пожалуйста, помогите мне.

1 Ответ

1 голос
/ 08 сентября 2011

Не беспокойтесь, сессия в неактивном состоянии не является аномалией.Чек http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:914029001168

...