You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2013/01/15 14:16:57 UTC

svn commit: r1433391 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java

Author: struberg
Date: Tue Jan 15 13:16:57 2013
New Revision: 1433391

URL: http://svn.apache.org/viewvc?rev=1433391&view=rev
Log:
OWB-344 add NormalScoping proxy to the game

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1433391&r1=1433390&r2=1433391&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java Tue Jan 15 13:16:57 2013
@@ -115,7 +115,7 @@ public class InterceptorResolutionServic
         Set<Interceptor<?>> allUsedCdiInterceptors = new HashSet<Interceptor<?>>();
         Map<Method, MethodInterceptorInfo> businessMethodInterceptorInfos = new HashMap<Method, MethodInterceptorInfo>();
 
-        List<AnnotatedMethod> nonInterceptedMethods = new ArrayList<AnnotatedMethod>();
+        List<Method> nonInterceptedMethods = new ArrayList<Method>();
 
         // iterate over all methods and build up the interceptor/decorator stack
         for (AnnotatedMethod annotatedMethod : interceptableAnnotatedMethods)
@@ -131,7 +131,7 @@ public class InterceptorResolutionServic
 
             if (methodInterceptorInfo.isEmpty())
             {
-                nonInterceptedMethods.add(annotatedMethod);
+                nonInterceptedMethods.add(annotatedMethod.getJavaMember());
                 continue;
             }
 
@@ -357,7 +357,7 @@ public class InterceptorResolutionServic
         public BeanInterceptorInfo(List<Decorator<?>> decorators,
                                    Set<Interceptor<?>> interceptors,
                                    Map<Method, MethodInterceptorInfo> businessMethodsInfo,
-                                   List<AnnotatedMethod> nonInterceptedMethods)
+                                   List<Method> nonInterceptedMethods)
         {
             this.decorators = decorators;
             this.interceptors = interceptors;
@@ -386,7 +386,7 @@ public class InterceptorResolutionServic
         /**
          * all non-intercepted methods
          */
-        private List<AnnotatedMethod> nonInterceptedMethods = Collections.EMPTY_LIST;
+        private List<Method> nonInterceptedMethods = Collections.EMPTY_LIST;
 
         public List<Decorator<?>> getDecorators()
         {
@@ -403,7 +403,7 @@ public class InterceptorResolutionServic
             return businessMethodsInfo;
         }
 
-        public List<AnnotatedMethod> getNonInterceptedMethods()
+        public List<Method> getNonInterceptedMethods()
         {
             return nonInterceptedMethods;
         }

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java?rev=1433391&r1=1433390&r2=1433391&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java Tue Jan 15 13:16:57 2013
@@ -5,6 +5,7 @@ import javax.enterprise.inject.spi.Annot
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InterceptionType;
 import javax.enterprise.inject.spi.Interceptor;
+import javax.inject.Provider;
 import java.lang.reflect.Method;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -20,12 +21,15 @@ import org.apache.webbeans.newtests.Abst
 import org.apache.webbeans.newtests.interceptors.factory.beans.ClassMultiInterceptedClass;
 import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
 import org.apache.webbeans.proxy.InterceptorHandler;
+import org.apache.webbeans.proxy.NormalScopeProxyFactory;
+import org.apache.webbeans.proxy.ProxyGenerationException;
 import org.apache.webbeans.test.component.intercept.webbeans.ActionInterceptor;
 import org.apache.webbeans.test.component.intercept.webbeans.SecureInterceptor;
 import org.apache.webbeans.test.component.intercept.webbeans.TransactionalInterceptor;
 import org.apache.webbeans.test.component.intercept.webbeans.bindings.Action;
 import org.apache.webbeans.test.component.intercept.webbeans.bindings.Secure;
 import org.apache.webbeans.test.component.intercept.webbeans.bindings.Transactional;
+import org.apache.webbeans.util.ClassUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -111,7 +115,7 @@ public class InterceptorProxyChainTest e
         InterceptorDecoratorProxyFactory pf = new InterceptorDecoratorProxyFactory();
 
         // we take a fresh URLClassLoader to not blur the test classpath with synthetic classes.
-        ClassLoader classLoader = new URLClassLoader(new URL[0]);
+        ClassLoader classLoader = this.getClass().getClassLoader(); // new URLClassLoader(new URL[0]);
 
         Method[] businessMethods = methodInterceptors.keySet().toArray(new Method[methodInterceptors.size()]);
         Method[] nonInterceptedMethods = interceptorInfo.getNonInterceptedMethods().toArray(new Method[interceptorInfo.getNonInterceptedMethods().size()]);
@@ -130,11 +134,28 @@ public class InterceptorProxyChainTest e
         // for testing with the old proxies
         //X proxyInstance = getInstance(ClassMultiInterceptedClass.class);
 
-        //X performBenchmarkOn(proxyInstance);
+        //X this is for creating the NormalScoping Proxy which is now separate
+        proxyInstance = createNormalScopingProxy(classLoader, ClassMultiInterceptedClass.class, proxyInstance);
+
+        performBenchmarkOn(proxyInstance);
 
         shutDownContainer();
     }
 
+    private <T> T createNormalScopingProxy(ClassLoader classLoader, Class<T> clazz, T instance) throws ProxyGenerationException
+    {
+        NormalScopeProxyFactory pf = new NormalScopeProxyFactory();
+
+        List<Method> methods = ClassUtil.getNonPrivateMethods(clazz);
+
+        Method[] nonInterceptedMethods = methods.toArray(new Method[methods.size()]);
+
+        Class<T> proxyClass = pf.createProxyClass(classLoader, clazz, nonInterceptedMethods);
+        Assert.assertNotNull(proxyClass);
+
+        return pf.createProxyInstance(proxyClass, new TestRequestScopedInstanceProvider(instance));
+    }
+
     private void performBenchmarkOn(ClassMultiInterceptedClass proxyInstance)
     {
 
@@ -159,5 +180,23 @@ public class InterceptorProxyChainTest e
         }
     }
 
+    /**
+     * Test Provider for emulating a RequestScopedProxy
+     * @param <T>
+     */
+    public static class TestRequestScopedInstanceProvider<T> implements Provider<T>
+    {
+        private ThreadLocal<T> instance = new ThreadLocal<T>();
+
+        public TestRequestScopedInstanceProvider(T instance)
+        {
+            this.instance.set(instance);
+        }
 
+        @Override
+        public T get()
+        {
+            return instance.get();
+        }
+    }
 }