You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2017/02/21 08:10:47 UTC

tomee git commit: ensure ManagedConnection.equals works based on handlers too

Repository: tomee
Updated Branches:
  refs/heads/master e96f3e3f8 -> 4983a0d45


ensure ManagedConnection.equals works based on handlers too


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/4983a0d4
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/4983a0d4
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/4983a0d4

Branch: refs/heads/master
Commit: 4983a0d45c8c96398806b19dd973f9b3f81036b8
Parents: e96f3e3
Author: rmannibucau <rm...@apache.org>
Authored: Tue Feb 21 09:10:39 2017 +0100
Committer: rmannibucau <rm...@apache.org>
Committed: Tue Feb 21 09:10:39 2017 +0100

----------------------------------------------------------------------
 .../jdbc/managed/local/ManagedConnection.java   | 22 ++++++++++++--------
 1 file changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/4983a0d4/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java
----------------------------------------------------------------------
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 e1844b1..3d35b7d 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
@@ -78,7 +78,8 @@ public class ManagedConnection implements InvocationHandler {
             return hashCode();
         }
         if ("equals".equals(mtdName)) {
-            return args[0] == this || (delegate != null && delegate.equals(unwrapIfNeeded(args[0])));
+            InvocationHandler handler;
+            return args[0] == this || ((handler = unwrapHandler(args[0])) == this) || (delegate != null && delegate.equals(unwrapDelegate(args[0], handler)));
         }
 
         // allow to get delegate if needed by the underlying program
@@ -181,12 +182,15 @@ public class ManagedConnection implements InvocationHandler {
         }
     }
 
-    private Object unwrapIfNeeded(final Object arg) {
+    private InvocationHandler unwrapHandler(final Object arg) {
         if (arg == null || !Proxy.isProxyClass(arg.getClass())) {
-            return arg;
+            return null;
         }
-        final InvocationHandler handler = Proxy.getInvocationHandler(arg);
-        return ManagedConnection.class.isInstance(handler) ? ManagedConnection.class.cast(handler).delegate : arg;
+        return Proxy.getInvocationHandler(arg);
+    }
+
+    private Object unwrapDelegate(final Object arg, final InvocationHandler handler) {
+        return handler != null && ManagedConnection.class.isInstance(handler) ? ManagedConnection.class.cast(handler).delegate : arg;
     }
 
     protected Object newConnection() throws SQLException {
@@ -222,10 +226,10 @@ public class ManagedConnection implements InvocationHandler {
     private Object invokeUnderTransaction(final Method method, final Object[] args) throws Exception {
         final String mtdName = method.getName();
         if ("setAutoCommit".equals(mtdName)
-            || "commit".equals(mtdName)
-            || "rollback".equals(mtdName)
-            || "setSavepoint".equals(mtdName)
-            || "setReadOnly".equals(mtdName)) {
+                || "commit".equals(mtdName)
+                || "rollback".equals(mtdName)
+                || "setSavepoint".equals(mtdName)
+                || "setReadOnly".equals(mtdName)) {
             throw forbiddenCall(mtdName);
         }
         if ("close".equals(mtdName)) {