Я использую пул соединений с 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 соединения для базы данных.В чем проблема.Почему это показывает, что большая часть НЕАКТИВНЫХ соединений.Есть ли проблема, если мы поместим источник данных в хеш-таблицу.
Пожалуйста, помогите мне.