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 2019/07/04 20:59:08 UTC

[tomee] 01/06: TOMEE-2557 add debug logging for ManagedConnection

This is an automated email from the ASF dual-hosted git repository.

jgallimore pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git

commit 255e2842fe310e172aa7f314c9bab39b39221ae5
Author: Jonathan Gallimore <jo...@jrg.me.uk>
AuthorDate: Wed Jul 3 01:14:47 2019 +0100

    TOMEE-2557 add debug logging for ManagedConnection
---
 .../jdbc/managed/local/ManagedConnection.java      | 63 ++++++++++++++++++++--
 1 file changed, 59 insertions(+), 4 deletions(-)

diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java
index 45ef356..9445a30 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java
@@ -39,9 +39,13 @@ import java.lang.reflect.Proxy;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Wrapper;
+import java.util.Arrays;
 import java.util.Objects;
 
 public class ManagedConnection implements InvocationHandler {
+
+    private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB_RESOURCE_JDBC, ManagedConnection.class);
+
     private final TransactionManager transactionManager;
     private final Key key;
     private final TransactionSynchronizationRegistry registry;
@@ -50,6 +54,7 @@ public class ManagedConnection implements InvocationHandler {
     protected XAConnection xaConnection;
     private Transaction currentTransaction;
     private boolean closed;
+    private StackTraceElement[] createdAt;
 
     public ManagedConnection(final CommonDataSource ds,
                              final TransactionManager txMgr,
@@ -59,6 +64,10 @@ public class ManagedConnection implements InvocationHandler {
         registry = txRegistry;
         closed = false;
         key = new Key(ds, user, password);
+
+        if (LOGGER.isDebugEnabled()) {
+            createdAt = new Throwable().getStackTrace();
+        }
     }
 
     public XAResource getXAResource() throws SQLException {
@@ -151,11 +160,11 @@ public class ManagedConnection implements InvocationHandler {
                             setAutoCommit(false);
                         } catch (final SQLException xae) { // we are alreay in a transaction so this can't be called from a user perspective - some XA DataSource prevents it in their code
                             final String message = "Can't set auto commit to false cause the XA datasource doesn't support it, this is likely an issue";
-                            final Logger logger = Logger.getInstance(LogCategory.OPENEJB_RESOURCE_JDBC, ManagedConnection.class);
-                            if (logger.isDebugEnabled()) { // we don't want to print the exception by default
-                                logger.warning(message, xae);
+
+                            if (LOGGER.isDebugEnabled()) { // we don't want to print the exception by default
+                                LOGGER.warning(message, xae);
                             } else {
-                                logger.warning(message);
+                                LOGGER.warning(message);
                             }
                         }
                     }
@@ -206,6 +215,21 @@ public class ManagedConnection implements InvocationHandler {
             delegate = Connection.class.cast(connection);
             xaResource = new LocalXAResource(delegate);
         }
+
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("Created new " +
+                ((XAConnection.class.isInstance(connection)) ? "XAConnection" : "Connection") +
+                " xaConnection = " +
+                ((xaConnection == null) ? "null" : xaConnection.toString()) +
+                " delegate = " +
+                ((delegate == null) ? "null" : delegate.toString())
+            );
+        }
+
+        if (LOGGER.isDebugEnabled()) {
+            this.createdAt = new Throwable().getStackTrace();
+        }
+
         return connection;
     }
 
@@ -270,13 +294,30 @@ public class ManagedConnection implements InvocationHandler {
     }
 
     private void closeConnection(final boolean force) {
+
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("Closing connection " + this.toString() + ", force = " + force + ", closed = " + this.closed);
+            if (createdAt != null) {
+                LOGGER.debug("Connection created at: " + Arrays.toString(createdAt));
+            }
+
+            LOGGER.debug("Connection closed at: " + Arrays.toString(new Throwable().getStackTrace()));
+        }
+
         if (!force && closed) {
             return;
         }
         try {
             if (xaConnection != null) { // handles the underlying connection
+                if (LOGGER.isDebugEnabled()) {
+                    LOGGER.debug("Closing XAConnection " + xaConnection);
+                }
                 xaConnection.close();
             } else if (delegate != null && !delegate.isClosed()) {
+                if (LOGGER.isDebugEnabled()) {
+                    LOGGER.debug("Closing delegate " + delegate);
+                }
+
                 delegate.close();
             }
         } catch (final SQLException e) {
@@ -286,6 +327,20 @@ public class ManagedConnection implements InvocationHandler {
         }
     }
 
+    @Override
+    public String toString() {
+        return "ManagedConnection{" +
+                "transactionManager=" + transactionManager +
+                ", key=" + key +
+                ", registry=" + registry +
+                ", xaResource=" + xaResource +
+                ", delegate=" + delegate +
+                ", xaConnection=" + xaConnection +
+                ", currentTransaction=" + currentTransaction +
+                ", closed=" + closed +
+                '}';
+    }
+
     private static final class Key {
         private final CommonDataSource ds;
         private final String user;