X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsupport%2Fpersistence%2FAbstractDatabase.java;h=6eaba50b880f9a218e35ed54a0a3d22aea8168e4;hb=185601ca79008d99e5c2293bc3686fc501720484;hp=2e8f8d8335e0070530bd9c042f8e699181429a97;hpb=db8c34ba627d0342d911283793352804bb353c64;p=utils diff --git a/test/enterprise/src/main/java/org/wamblee/support/persistence/AbstractDatabase.java b/test/enterprise/src/main/java/org/wamblee/support/persistence/AbstractDatabase.java index 2e8f8d83..6eaba50b 100644 --- a/test/enterprise/src/main/java/org/wamblee/support/persistence/AbstractDatabase.java +++ b/test/enterprise/src/main/java/org/wamblee/support/persistence/AbstractDatabase.java @@ -20,6 +20,8 @@ import java.util.logging.Logger; import javax.sql.DataSource; +import junit.framework.Assert; + import org.apache.commons.dbcp.ConnectionFactory; import org.apache.commons.dbcp.DriverManagerConnectionFactory; import org.apache.commons.dbcp.PoolableConnectionFactory; @@ -28,6 +30,12 @@ import org.apache.commons.pool.impl.GenericObjectPool; public abstract class AbstractDatabase implements Database { + /** + * Set this system property to a non-null value to ignore connection leaks + * when {@link #stop()} is called. + */ + private static final String IGNORE_CONNECTION_LEAK_PROPERTY = "org.wamblee.database.ignoreconnectionleaks"; + private static final Logger LOGGER = Logger .getLogger(AbstractDatabase.class.getName()); @@ -64,6 +72,11 @@ public abstract class AbstractDatabase implements Database { itsDataSource = new PoolingDataSource(connectionPool); } + @Override + public int getActiveConnections() { + return connectionPool.getNumActive(); + } + private static void ingoredVariable(PoolableConnectionFactory aFactory) { // Empty } @@ -85,6 +98,16 @@ public abstract class AbstractDatabase implements Database { } started = false; try { + if (connectionPool.getNumActive() > 0) { + String msg = "JDBC connection pool still has " + + connectionPool.getNumActive() + + " active connection(s), this is a potential resource leak in the code\n"; + // backdoor to ignore connection leaks. Use this system property only if you + // can safely ignore the connection leaks. + if (System.getProperty(IGNORE_CONNECTION_LEAK_PROPERTY) == null) { + Assert.fail(msg); + } + } connectionPool.close(); connectionPool.close(); } catch (Exception e) {