Repository: tomee Updated Branches: refs/heads/tomee-1.7.x a0e6ad472 -> 6f6df9158
TOMEE-1529 BaseEjbProxyHandler#equals was not optimized and could be very very slow when stacktrace was huge Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/6f6df915 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/6f6df915 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/6f6df915 Branch: refs/heads/tomee-1.7.x Commit: 6f6df9158da3be64cc2e07758efd8bb5cfbf533b Parents: a0e6ad4 Author: Romain Manni-Bucau <[email protected]> Authored: Fri Mar 20 14:13:34 2015 +0100 Committer: Romain Manni-Bucau <[email protected]> Committed: Fri Mar 20 14:13:34 2015 +0100 ---------------------------------------------------------------------- .../org/apache/openejb/core/ivm/BaseEjbProxyHandler.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/6f6df915/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java b/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java index a63352f..3bbae2e 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java @@ -50,6 +50,7 @@ import java.io.Serializable; import java.lang.ref.WeakReference; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.math.BigDecimal; import java.rmi.AccessException; import java.rmi.NoSuchObjectException; @@ -492,16 +493,19 @@ public abstract class BaseEjbProxyHandler implements InvocationHandler, Serializ if (obj == null) { return false; } + if (this == obj) { + return true; + } if (!BaseEjbProxyHandler.class.isInstance(obj)) { + if (!Proxy.isProxyClass(obj.getClass())) { + return false; + } try { obj = ProxyManager.getInvocationHandler(obj); } catch (final IllegalArgumentException e) { return false; } } - if (this == obj) { - return true; - } final BaseEjbProxyHandler other = (BaseEjbProxyHandler) obj; return equalHandler(other); }
