У меня странная проблема. У меня есть служебный класс, который содержит соединение и имеет функцию, которая готовит операторы. Затем операторы выполняются, закрываются, и все работает нормально.
Однако, когда я попытался добавить пул соединений с помощью ComboPooledDataSource, мои потоки закрылись. Я отладил его и вижу, что некоторые запросы выполняются успешно, но вдруг все закрывается, и только потоки c3p0 продолжают работать. Никаких исключений не выдается.
Я попытался установить для пула одно соединение, чтобы максимально точно имитировать рабочий код, но это также не удается. Если я устанавливаю элемент подключения для подключения из пула, все работает нормально, но если я пытаюсь использовать напрямую из пула, я получаю поведение, описанное выше.
Вот пример кода:
class DBUtilityClass
{
private java.sql.Connection connection;
private ComboPooledDataSource connectionPool;
public void DBUtilityClass()
{
connect();
}
private void connect()
{
connectionPool = new ComboPooledDataSource();
connectionPool.setDriverClass( "org.postgresql.Driver" ); //loads the jdbc driver
connectionPool.setJdbcUrl(urlString.toString());
connectionPool.setUser(user);
connectionPool.setPassword(password);
connectionPool.setAutoCommitOnClose(true);
connectionPool.setInitialPoolSize(1);
connectionPool.setMinPoolSize(1);
connectionPool.setAcquireIncrement(1);
connectionPool.setMaxPoolSize(1);
}
//Version 1 - this works if I set the connection in the constructor
//or if I connect the connection manually without using the pool
public Connection getConnection()
{
connection.setAutoCommit(true);
return connection;
}
//Version 2 - This fails
public Connection getConnection()
{
Connection temp = connectionPool.getConnection();
temp.setAutoCommit(true);
return temp;
}
public PreparedStatement getPreparedStatement(String sql)
{
Connection temp = getConnection();
return temp.prepareStatement(sql);
}
}