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 2012/04/08 18:54:59 UTC

svn commit: r1311042 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb: core/interceptor/InterceptorStack.java util/proxy/DynamicProxyImplFactory.java

Author: rmannibucau
Date: Sun Apr  8 16:54:59 2012
New Revision: 1311042

URL: http://svn.apache.org/viewvc?rev=1311042&view=rev
Log:
fixing the instance given for a callback on a proxy of a dynamic impl bean

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java?rev=1311042&r1=1311041&r2=1311042&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java Sun Apr  8 16:54:59 2012
@@ -19,6 +19,7 @@ package org.apache.openejb.core.intercep
 import static org.apache.openejb.util.Join.join;
 
 import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -32,6 +33,7 @@ import org.apache.openejb.core.ThreadCon
 import org.apache.openejb.util.Classes;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.proxy.DynamicProxyImplFactory;
 
 /**
  * @version $Rev$ $Date$
@@ -65,7 +67,13 @@ public class InterceptorStack {
 
             Set<Method> methods = interceptorData.getMethods(operation);
             for (Method method : methods) {
-                Interceptor interceptor = new Interceptor(interceptorInstance, method);
+                final Interceptor interceptor;
+                Object handler = DynamicProxyImplFactory.realHandler(interceptorInstance);
+                if (handler != null && method.getDeclaringClass().equals(handler.getClass())) { // dynamic impl
+                    interceptor = new Interceptor(handler, method);
+                } else {
+                    interceptor = new Interceptor(interceptorInstance, method);
+                }
                 interceptors.add(interceptor);
             }
         }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java?rev=1311042&r1=1311041&r2=1311042&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java Sun Apr  8 16:54:59 2012
@@ -62,6 +62,16 @@ public class DynamicProxyImplFactory {
         }
     }
 
+    public static Object realHandler(final Object proxy) {
+        if (proxy != null && java.lang.reflect.Proxy.isProxyClass(proxy.getClass())) {
+            final Object handler = java.lang.reflect.Proxy.getInvocationHandler(proxy);
+            if (handler instanceof Handler) {
+                return ((Handler) handler).realHandler();
+            }
+        }
+        return null;
+    }
+
     private static class Handler implements InvocationHandler {
         private java.lang.reflect.InvocationHandler handler;
 
@@ -73,6 +83,10 @@ public class DynamicProxyImplFactory {
             return this;
         }
 
+        public java.lang.reflect.InvocationHandler realHandler() {
+            return handler;
+        }
+
         @Override
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
             return handler.invoke(proxy, method, args);