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)) {
