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();
+ }
+ }
}