diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/util/ResettableBasicDataSource.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/util/ResettableBasicDataSource.java index f3d1b84b76..d1d8d56a60 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/util/ResettableBasicDataSource.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/util/ResettableBasicDataSource.java @@ -22,13 +22,19 @@ import java.sql.SQLException; +import org.apache.commons.dbcp.AbandonedConfig; import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp.ConnectionFactory; +import org.apache.commons.dbcp.PoolableConnectionFactory; +import org.apache.commons.dbcp.SQLNestedException; +import org.apache.commons.pool.KeyedObjectPoolFactory; /** * A subclass of {@link BasicDataSource} which allows for a data source to be * closed (all underlying connections are closed) and then allows new * connections to be created. */ +@SuppressWarnings("deprecation") public class ResettableBasicDataSource extends BasicDataSource { public ResettableBasicDataSource() { @@ -47,5 +53,33 @@ public synchronized void close() { } } + + @Override + protected void createPoolableConnectionFactory(ConnectionFactory driverConnectionFactory, + KeyedObjectPoolFactory statementPoolFactory, AbandonedConfig configuration) throws SQLException { + PoolableConnectionFactory connectionFactory = null; + try { + connectionFactory = + new PoolableConnectionFactory(driverConnectionFactory, + connectionPool, + statementPoolFactory, + validationQuery, + validationQueryTimeout, + connectionInitSqls, + defaultReadOnly, + defaultAutoCommit, + defaultTransactionIsolation, + defaultCatalog, + configuration); + validateConnectionFactory(connectionFactory); + } catch (Exception e) { + try { + connectionPool.close(); + } catch (Exception e1) { + } + throw new SQLNestedException("Cannot create PoolableConnectionFactory (" + e.getMessage() + ")", e); + } + } + }