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