Attempt to make this more robust
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/1dea4fb4 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/1dea4fb4 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/1dea4fb4 Branch: refs/heads/master Commit: 1dea4fb49c4f8a8ef5085993f87db86f2611cec2 Parents: 540dd8f Author: Jonathan Gallimore <[email protected]> Authored: Wed Oct 10 23:13:12 2018 +0100 Committer: Jonathan Gallimore <[email protected]> Committed: Wed Oct 10 23:13:12 2018 +0100 ---------------------------------------------------------------------- .../resource/AutoConnectionTrackerTest.java | 27 +++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/1dea4fb4/container/openejb-core/src/test/java/org/apache/openejb/resource/AutoConnectionTrackerTest.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/test/java/org/apache/openejb/resource/AutoConnectionTrackerTest.java b/container/openejb-core/src/test/java/org/apache/openejb/resource/AutoConnectionTrackerTest.java index 6c2e455..598a4bc 100644 --- a/container/openejb-core/src/test/java/org/apache/openejb/resource/AutoConnectionTrackerTest.java +++ b/container/openejb-core/src/test/java/org/apache/openejb/resource/AutoConnectionTrackerTest.java @@ -18,6 +18,8 @@ package org.apache.openejb.resource; import junit.framework.TestCase; +import org.apache.geronimo.connector.outbound.AbstractConnectionManager; +import org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor; import org.apache.geronimo.connector.outbound.GenericConnectionManager; import org.apache.geronimo.connector.outbound.connectionmanagerconfig.PoolingSupport; import org.apache.openejb.assembler.classic.Assembler; @@ -30,6 +32,7 @@ import org.apache.openejb.assembler.classic.SecurityServiceInfo; import org.apache.openejb.assembler.classic.TransactionServiceInfo; import org.apache.openejb.config.ConfigurationFactory; import org.apache.openejb.config.EjbModule; +import org.apache.openejb.core.ConnectorReference; import org.apache.openejb.jee.EjbJar; import org.apache.openejb.jee.StatelessBean; import org.apache.openejb.loader.SystemInstance; @@ -61,6 +64,7 @@ import javax.security.auth.Subject; import javax.transaction.xa.XAResource; import java.io.PrintWriter; import java.lang.SecurityException; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -186,20 +190,37 @@ public class AutoConnectionTrackerTest extends TestCase { { logCapture.clear(); bean.leakyTxMethod(); - System.gc(); - cf.getConnection().close(); + + final AutoConnectionTracker tracker = getAutoConnectionTracker((FakeConnectionFactoryImpl) cf); + tracker.setEnvironment(null, null); assertEquals(1, logCapture.find("Transaction complete, but connection still has handles associated").size()); + assertEquals(1, logCapture.find("Detected abandoned connection").size()); } { logCapture.clear(); bean.leakyNonTxMethod(); System.gc(); - cf.getConnection().close(); + + final AutoConnectionTracker tracker = getAutoConnectionTracker((FakeConnectionFactoryImpl) cf); + tracker.setEnvironment(null, null); assertEquals(1, logCapture.find("Detected abandoned connection").size()); } } + private AutoConnectionTracker getAutoConnectionTracker(final FakeConnectionFactoryImpl cf) throws Exception { + final Field field = AbstractConnectionManager.class.getDeclaredField("interceptors"); + field.setAccessible(true); + final Object o = field.get(cf.connectionManager); + final Field stackField = o.getClass().getDeclaredField("stack"); + stackField.setAccessible(true); + final ConnectionTrackingInterceptor cti = (ConnectionTrackingInterceptor) stackField.get(o); + final Field connectionTrackerField = ConnectionTrackingInterceptor.class.getDeclaredField("connectionTracker"); + connectionTrackerField.setAccessible(true); + AutoConnectionTracker tracker = (AutoConnectionTracker) connectionTrackerField.get(cti); + return tracker; + } + private int getConnectionCount(FakeConnectionFactoryImpl cf) { final PoolingSupport pooling = ((GenericConnectionManager) cf.connectionManager).getPooling(); return pooling.getConnectionCount();
