You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2018/10/10 22:13:40 UTC

tomee git commit: Attempt to make this more robust

Repository: tomee
Updated Branches:
  refs/heads/tomee-7.0.x 540dd8f4c -> 1dea4fb49


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/tomee-7.0.x
Commit: 1dea4fb49c4f8a8ef5085993f87db86f2611cec2
Parents: 540dd8f
Author: Jonathan Gallimore <jo...@jrg.me.uk>
Authored: Wed Oct 10 23:13:12 2018 +0100
Committer: Jonathan Gallimore <jo...@jrg.me.uk>
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();