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 <[email protected]>
Authored: Tue Feb 21 09:10:39 2017 +0100
Committer: rmannibucau <[email protected]>
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)) {

Reply via email to