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 22:49:09 UTC
svn commit: r1433681 - in /openwebbeans/trunk:
webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbean...
Author: struberg
Date: Tue Jan 15 21:49:08 2013
New Revision: 1433681
URL: http://svn.apache.org/viewvc?rev=1433681&view=rev
Log:
OWB-344 make InjectionTarget#produce create a proxy
Modified:
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptorBeanPleaseRemove.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/AbstractLifeCycle.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducerRemove.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyGenerationException.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java
openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java
Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java Tue Jan 15 21:49:08 2013
@@ -489,7 +489,7 @@ public class OpenWebBeansEjbInterceptor
delegateHandler = new DelegateHandler(this.contextual, ejbContext);
final Object delegate =
- webBeansContext.getProxyFactory().createDecoratorDelegate(injectionTarget, delegateHandler);
+ webBeansContext.getProxyFactoryRemove().createDecoratorDelegate(injectionTarget, delegateHandler);
// Gets component decorator stack
decorators = WebBeansDecoratorConfig.getDecoratorStack(injectionTarget, instance, delegate,
(CreationalContextImpl<?>)this.cc);
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java Tue Jan 15 21:49:08 2013
@@ -217,18 +217,18 @@ public abstract class BuildInOwbBean<T>
return actualInstance;
}
- T proxy = (T) webBeansContext.getProxyFactory().createBuildInBeanProxyRemove(this);
+ T proxy = (T) webBeansContext.getProxyFactoryRemove().createBuildInBeanProxyRemove(this);
if (handlerClassName.equals(PROXY_HANDLER_VALUE_DEFAULT))
{
final MethodHandler handler = new BuildInBeanMethodHandler(this, actualInstance);
- webBeansContext.getProxyFactory().setHandler(proxy, handler);
+ webBeansContext.getProxyFactoryRemove().setHandler(proxy, handler);
return proxy;
}
else if (handlerContructor != null)
{
try
{
- webBeansContext.getProxyFactory().setHandler(proxy,
+ webBeansContext.getProxyFactoryRemove().setHandler(proxy,
(MethodHandler) (handlerContructor.newInstance(this, actualInstance)));
return proxy;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java Tue Jan 15 21:49:08 2013
@@ -130,7 +130,7 @@ public abstract class InjectionTargetBea
//For dependent instance checks
if(getScope() == Dependent.class && !(this instanceof EnterpriseBeanMarker))
{
- final ProxyFactory proxyFactory = getWebBeansContext().getProxyFactory();
+ final ProxyFactory proxyFactory = getWebBeansContext().getProxyFactoryRemove();
T result = (T) proxyFactory.createDependentScopedBeanProxyRemove(this, instance, creationalContext);
//Means that Dependent Bean has interceptor/decorator
if(proxyFactory.isProxyInstanceRemove(result))
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java Tue Jan 15 21:49:08 2013
@@ -63,8 +63,8 @@ public class ResourceBean<X, T extends A
return instance;
}
- X proxyInstance = (X) getWebBeansContext().getProxyFactory().getResourceBeanProxyClass(this).newInstance();
- webBeansContext.getProxyFactory().setHandler(proxyInstance, new ResourceProxyHandler(this,instance));
+ X proxyInstance = (X) getWebBeansContext().getProxyFactoryRemove().getResourceBeanProxyClass(this).newInstance();
+ webBeansContext.getProxyFactoryRemove().setHandler(proxyInstance, new ResourceProxyHandler(this,instance));
return proxyInstance;
}
catch (Exception e)
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java Tue Jan 15 21:49:08 2013
@@ -65,6 +65,8 @@ import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
+import static org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptorInfo;
+
/**
* Abstract implementation of {@link AbstractBeanBuilder}.
*
@@ -675,14 +677,17 @@ public abstract class AbstractInjectionT
}
}
- protected InjectionTarget<T> buildInjectionTarget(AnnotatedType<T> annotatedType,
+ protected InjectionTarget<T> buildInjectionTarget(Set<Type> types,
+ Set<Annotation> qualifiers,
+ AnnotatedType<T> annotatedType,
Set<InjectionPoint> points,
WebBeansContext webBeansContext,
List<AnnotatedMethod<?>> postConstructMethods,
List<AnnotatedMethod<?>> preDestroyMethods)
{
- //X TODO set interceptor information
- return new InjectionTargetImpl<T>(annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods);
+ InjectionTargetImpl<T> injectionTarget = new InjectionTargetImpl<T>(annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods);
+
+ return injectionTarget;
}
protected abstract I createBean(Set<Type> types,
@@ -709,7 +714,7 @@ public abstract class AbstractInjectionT
//X TODO hack to set the InjectionTarget
InjectionTarget<T> injectionTarget
- = buildInjectionTarget(bean.getAnnotatedType(), bean.getInjectionPoints(), webBeansContext, getPostConstructMethods(), getPreDestroyMethods());
+ = buildInjectionTarget(types, qualifiers, bean.getAnnotatedType(), bean.getInjectionPoints(), webBeansContext, getPostConstructMethods(), getPreDestroyMethods());
bean.setInjectionTarget(injectionTarget);
return bean;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java Tue Jan 15 21:49:08 2013
@@ -19,9 +19,13 @@
package org.apache.webbeans.component.creation;
import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.annotation.PostConstruct;
@@ -30,6 +34,8 @@ import javax.enterprise.inject.spi.Annot
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.component.ManagedBean;
import org.apache.webbeans.component.WebBeansType;
@@ -39,7 +45,10 @@ import org.apache.webbeans.decorator.Dec
import org.apache.webbeans.decorator.WebBeansDecoratorConfig;
import org.apache.webbeans.exception.inject.DeploymentException;
import org.apache.webbeans.inject.impl.InjectionPointFactory;
+import org.apache.webbeans.intercept.InterceptorResolutionService;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
+import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
import org.apache.webbeans.portable.AbstractDecoratorInjectionTarget;
import org.apache.webbeans.util.WebBeansUtil;
@@ -134,6 +143,65 @@ public class ManagedBeanBuilder<T, M ext
return webBeansContext.getInterceptorUtil().getLifecycleMethods(getAnnotated(), PreDestroy.class, false);
}
+ @Override
+ protected InjectionTarget<T> buildInjectionTarget(Set<Type> types, Set<Annotation> qualifiers, AnnotatedType<T> annotatedType, Set<InjectionPoint> points, WebBeansContext webBeansContext, List<AnnotatedMethod<?>> postConstructMethods, List<AnnotatedMethod<?>> preDestroyMethods)
+ {
+ InjectionTargetImpl<T> injectionTarget = (InjectionTargetImpl<T>) super.buildInjectionTarget(types, qualifiers, annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods); //To change body of overridden methods use File | Settings | File Templates.
+ InterceptorResolutionService.BeanInterceptorInfo interceptorInfo = webBeansContext.getInterceptorResolutionService().calculateInterceptorInfo(types, qualifiers, annotatedType);
+
+ Map<Method, List<Interceptor<?>>> methodInterceptors = new HashMap<Method, List<Interceptor<?>>>();
+ List<Method> nonBusinessMethods = new ArrayList<Method>();
+ for (Map.Entry<Method, InterceptorResolutionService.BusinessMethodInterceptorInfo> miEntry : interceptorInfo.getBusinessMethodsInfo().entrySet())
+ {
+ Method interceptedMethod = miEntry.getKey();
+ InterceptorResolutionService.BusinessMethodInterceptorInfo mii = miEntry.getValue();
+ List<Interceptor<?>> activeInterceptors = new ArrayList<Interceptor<?>>();
+
+ if (mii.getEjbInterceptors() != null)
+ {
+ for (Interceptor<?> i : mii.getEjbInterceptors())
+ {
+ activeInterceptors.add(i);
+ }
+ }
+ if (mii.getCdiInterceptors() != null)
+ {
+ for (Interceptor<?> i : mii.getCdiInterceptors())
+ {
+ activeInterceptors.add(i);
+ }
+ }
+ if (activeInterceptors.size() > 0)
+ {
+ methodInterceptors.put(interceptedMethod, activeInterceptors);
+ }
+
+ // empty InterceptionType -> AROUND_INVOKE
+ if (!mii.getInterceptionTypes().isEmpty())
+ {
+ nonBusinessMethods.add(interceptedMethod);
+ }
+ }
+
+ if (methodInterceptors.size() > 0)
+ {
+ // we only need to create a proxy class for intercepted or decorated Beans
+ InterceptorDecoratorProxyFactory pf = webBeansContext.getInterceptorDecoratorProxyFactory();
+
+ // we take a fresh URLClassLoader to not blur the test classpath with synthetic classes.
+ ClassLoader classLoader = this.getClass().getClassLoader();
+
+ Method[] businessMethods = methodInterceptors.keySet().toArray(new Method[methodInterceptors.size()]);
+ Method[] nonInterceptedMethods = interceptorInfo.getNonInterceptedMethods().toArray(new Method[interceptorInfo.getNonInterceptedMethods().size()]);
+
+ Class<? extends T> proxyClass = pf.createProxyClass(classLoader, getBeanType(), businessMethods, nonInterceptedMethods);
+
+ injectionTarget.setInterceptorInfo(interceptorInfo, proxyClass, methodInterceptors);
+ }
+
+ return injectionTarget;
+ }
+
/**
* @deprecated replaced via the various {@link InterceptorBeanBuilder}s
*/
@@ -233,6 +301,7 @@ public class ManagedBeanBuilder<T, M ext
}
//X TODO move proxy instance creation into JavassistProxyFactory!
+
bean.setInjectionTarget(new AbstractDecoratorInjectionTarget<T>(bean));
return bean;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java Tue Jan 15 21:49:08 2013
@@ -44,6 +44,7 @@ import org.apache.webbeans.intercept.ejb
import org.apache.webbeans.plugins.PluginLoader;
import org.apache.webbeans.portable.AnnotatedElementFactory;
import org.apache.webbeans.portable.events.ExtensionLoader;
+import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
import org.apache.webbeans.proxy.ProxyFactory;
import org.apache.webbeans.proxy.javassist.OpenWebBeansClassLoaderProvider;
import org.apache.webbeans.service.DefaultLoaderService;
@@ -64,7 +65,7 @@ import org.apache.webbeans.util.WebBeans
public class WebBeansContext
{
//X TODO REMOVE, only used while implementing the new Interceptor handling
- public static final boolean TODO_USING_NEW_INTERCEPTORS = false;
+ public static final boolean TODO_USING_NEW_INTERCEPTORS = true;
private final Map<Class<?>, Object> managerMap = new HashMap<Class<?>, Object>();
@@ -82,7 +83,8 @@ public class WebBeansContext
private final ExtensionLoader extensionLoader = new ExtensionLoader(this);
private final InterceptorsManager interceptorsManager = new InterceptorsManager(this);
private final WebBeansInterceptorConfig webBeansInterceptorConfig = new WebBeansInterceptorConfig(this);
- private final ProxyFactory proxyFactory;
+ private final ProxyFactory proxyFactoryRemove;
+ private final InterceptorDecoratorProxyFactory interceptorDecoratorProxyFactory = new InterceptorDecoratorProxyFactory();
private final OpenWebBeansConfiguration openWebBeansConfiguration;
private final PluginLoader pluginLoader = new PluginLoader();
private final SerializableBeanVault serializableBeanVault = new SerializableBeanVault();
@@ -138,9 +140,9 @@ public class WebBeansContext
loaderService = getService(LoaderService.class);
securityService = getService(SecurityService.class);
- proxyFactory = serviceMap.containsKey(ProxyFactory.class)
+ proxyFactoryRemove = serviceMap.containsKey(ProxyFactory.class)
? (ProxyFactory) serviceMap.get(ProxyFactory.class)
- : new ProxyFactory();
+ : new ProxyFactory(this);
OpenWebBeansClassLoaderProvider.initProxyFactoryClassLoaderProvider();
// Allow the WebBeansContext itself to be looked up
@@ -155,7 +157,8 @@ public class WebBeansContext
managerMap.put(DecoratorsManager.class, decoratorsManager);
managerMap.put(ExtensionLoader.class, extensionLoader);
managerMap.put(InterceptorsManager.class, interceptorsManager);
- managerMap.put(ProxyFactory.class, proxyFactory);
+ managerMap.put(ProxyFactory.class, proxyFactoryRemove);
+ managerMap.put(InterceptorDecoratorProxyFactory.class, interceptorDecoratorProxyFactory);
managerMap.put(OpenWebBeansConfiguration.class, openWebBeansConfiguration);
managerMap.put(PluginLoader.class, pluginLoader);
managerMap.put(SerializableBeanVault.class, serializableBeanVault);
@@ -328,9 +331,14 @@ public class WebBeansContext
return extensionLoader;
}
- public ProxyFactory getProxyFactory()
+ public ProxyFactory getProxyFactoryRemove()
{
- return proxyFactory;
+ return proxyFactoryRemove;
+ }
+
+ public InterceptorDecoratorProxyFactory getInterceptorDecoratorProxyFactory()
+ {
+ return interceptorDecoratorProxyFactory;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Tue Jan 15 21:49:08 2013
@@ -706,7 +706,7 @@ public class BeanManagerImpl implements
if (instance == null)
{
//Create Managed Bean Proxy
- instance = webBeansContext.getProxyFactory().createNormalScopedBeanProxyRemove((AbstractOwbBean<?>) bean, creationalContext);
+ instance = webBeansContext.getProxyFactoryRemove().createNormalScopedBeanProxyRemove((AbstractOwbBean<?>) bean, creationalContext);
//Cached instance
cacheProxies.put(bean, instance);
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java Tue Jan 15 21:49:08 2013
@@ -412,7 +412,7 @@ public class WebBeansDecorator<T> extend
WebBeansContext webBeansContext = wrappedBean.getWebBeansContext();
Context context = webBeansContext.getBeanManagerImpl().getContext(getScope());
Object actualInstance = context.get((Bean<Object>) wrappedBean, (CreationalContext<Object>)creationalContext);
- T proxy = (T) webBeansContext.getProxyFactory().createDependentScopedBeanProxyRemove(wrappedBean, actualInstance, creationalContext);
+ T proxy = (T) webBeansContext.getProxyFactoryRemove().createDependentScopedBeanProxyRemove(wrappedBean, actualInstance, creationalContext);
return proxy;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java Tue Jan 15 21:49:08 2013
@@ -44,6 +44,16 @@ public class DefaultInterceptorHandler<T
this.interceptors = interceptors;
}
+ public Map<Interceptor<?>, ?> getInstances()
+ {
+ return instances;
+ }
+
+ public Map<Method, List<Interceptor<?>>> getInterceptors()
+ {
+ return interceptors;
+ }
+
public Object invoke(Method method, Object[] parameters)
{
try
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java Tue Jan 15 21:49:08 2013
@@ -348,7 +348,7 @@ public abstract class InterceptorHandler
if (decoratorDelegateHandler == null)
{
final DelegateHandler newDelegateHandler = new DelegateHandler(bean);
- final ProxyFactory proxyFactory = webBeansContext.getProxyFactory();
+ final ProxyFactory proxyFactory = webBeansContext.getProxyFactoryRemove();
final Object delegate = proxyFactory.createDecoratorDelegate(bean, newDelegateHandler);
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=1433681&r1=1433680&r2=1433681&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 21:49:08 2013
@@ -23,7 +23,6 @@ import javax.annotation.PreDestroy;
import javax.enterprise.inject.spi.Annotated;
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.Decorator;
import javax.enterprise.inject.spi.InterceptionType;
@@ -86,9 +85,10 @@ public class InterceptorResolutionServic
}
- public <T> BeanInterceptorInfo calculateInterceptorInfo(Bean<T> bean, AnnotatedType<T> annotatedType)
+ public <T> BeanInterceptorInfo calculateInterceptorInfo(Set<Type> beanTypes, Set<Annotation> qualifiers, AnnotatedType<T> annotatedType)
{
- Asserts.assertNotNull(bean, "Bean must not be null!");
+ Asserts.assertNotNull(beanTypes, "beanTypes must not be null!");
+ Asserts.assertNotNull(qualifiers, "qualifiers must not be null!");
Asserts.assertNotNull(annotatedType, "AnnotatedType must not be null!");
List<AnnotatedMethod> interceptableAnnotatedMethods = getInterceptableBusinessMethods(annotatedType);
@@ -106,7 +106,7 @@ public class InterceptorResolutionServic
collectEjbInterceptors(classLevelEjbInterceptors, annotatedType);
// pick up the decorators
- List<Decorator<?>> decorators = beanManager.resolveDecorators(bean.getTypes(), AnnotationUtil.asArray(bean.getQualifiers()));
+ List<Decorator<?>> decorators = beanManager.resolveDecorators(beanTypes, AnnotationUtil.asArray(qualifiers));
if (decorators.size() == 0)
{
decorators = null; // less to store
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptorBeanPleaseRemove.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptorBeanPleaseRemove.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptorBeanPleaseRemove.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptorBeanPleaseRemove.java Tue Jan 15 21:49:08 2013
@@ -291,7 +291,7 @@ public class WebBeansInterceptorBeanPlea
{
Context context = webBeansContext.getBeanManagerImpl().getContext(getScope());
Object actualInstance = context.get((Bean<Object>) delegateBean, (CreationalContext<Object>)creationalContext);
- T proxy = (T) webBeansContext.getProxyFactory().createDependentScopedBeanProxyRemove(delegateBean, actualInstance, creationalContext);
+ T proxy = (T) webBeansContext.getProxyFactoryRemove().createDependentScopedBeanProxyRemove(delegateBean, actualInstance, creationalContext);
return proxy;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/AbstractLifeCycle.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/AbstractLifeCycle.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/AbstractLifeCycle.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/AbstractLifeCycle.java Tue Jan 15 21:49:08 2013
@@ -169,7 +169,7 @@ public abstract class AbstractLifeCycle
injectionResolver.clearCaches();
//Delte proxies
- webBeansContext.getProxyFactory().clear();
+ webBeansContext.getProxyFactoryRemove().clear();
//Delete AnnotateTypeCache
webBeansContext.getAnnotatedElementFactory().clear();
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java Tue Jan 15 21:49:08 2013
@@ -41,7 +41,7 @@ public class AbstractDecoratorInjectionT
{
super(bean.getAnnotatedType(), bean.getInjectionPoints(), bean.getWebBeansContext(),
Collections.<AnnotatedMethod<?>>emptyList(), Collections.<AnnotatedMethod<?>>emptyList());
- proxyFactory = bean.getWebBeansContext().getProxyFactory();
+ proxyFactory = bean.getWebBeansContext().getProxyFactoryRemove();
Class<T> clazz = (Class<T>) proxyFactory.createAbstractDecoratorProxyClass(bean);
constructor = bean.getWebBeansContext().getWebBeansUtil().defineConstructor(clazz);
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java Tue Jan 15 21:49:08 2013
@@ -42,7 +42,7 @@ public class ExtensionProducer<T> extend
@Override
public T produce(CreationalContext<T> creationalContext)
{
- ExtensionLoader loader = context.getExtensionLoader();
+ ExtensionLoader loader = webBeansContext.getExtensionLoader();
return loader.getBeanInstance((Bean<T>)((CreationalContextImpl<T>) creationalContext).getBean());
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java Tue Jan 15 21:49:08 2013
@@ -24,8 +24,11 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.enterprise.context.spi.CreationalContext;
@@ -44,12 +47,17 @@ import javax.enterprise.inject.spi.Inter
import javax.inject.Inject;
import javax.interceptor.InvocationContext;
+import org.apache.webbeans.component.SelfInterceptorBean;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.inject.InjectableConstructor;
import org.apache.webbeans.inject.InjectableField;
import org.apache.webbeans.inject.InjectableMethod;
+import org.apache.webbeans.intercept.DefaultInterceptorHandler;
import org.apache.webbeans.intercept.LifecycleInterceptorInvocationContext;
+import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
+import org.apache.webbeans.proxy.InterceptorHandler;
+import org.apache.webbeans.proxy.OwbInterceptorProxy;
import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.ExceptionUtil;
@@ -61,7 +69,7 @@ public class InjectionTargetImpl<T> exte
private AnnotatedType<T> type;
private AnnotatedConstructor<T> constructor;
- protected final WebBeansContext context;
+ protected final WebBeansContext webBeansContext;
/**
* If the InjectionTarget has a @PostConstruct method, <code>null</code> if not.
@@ -84,6 +92,23 @@ public class InjectionTargetImpl<T> exte
*/
private BeanInterceptorInfo interceptorInfo = null;
+ /**
+ * Defines the interceptor/decorator stack for the InjectionTargetBean.
+ * In case this is already defined, we get the ProxyClass for the Bean
+ * or <code>null</code> if this Bean doesn't need any proxy.
+ * This logic is handled inside the Bean and not in the BeanBuilder as
+ * this can also be created lazily
+ *
+ * the Proxy Class or <code>null</code> if this Bean is not intercepted nor decorated.
+ */
+ private Class<? extends T> proxyClass;
+
+ /**
+ * List of all Interceptors per Method.
+ */
+ private Map<Method, List<Interceptor<?>>> methodInterceptors = null;
+
+
public InjectionTargetImpl(AnnotatedType<T> annotatedType, Set<InjectionPoint> points, WebBeansContext webBeansContext,
List<AnnotatedMethod<?>> postConstructMethods, List<AnnotatedMethod<?>> preDestroyMethods)
{
@@ -91,14 +116,16 @@ public class InjectionTargetImpl<T> exte
Asserts.assertNotNull(annotatedType);
Asserts.assertNotNull(webBeansContext);
type = annotatedType;
- context = webBeansContext;
+ this.webBeansContext = webBeansContext;
this.postConstructMethods = postConstructMethods;
this.preDestroyMethods = preDestroyMethods;
}
- public void setInterceptorInfo(BeanInterceptorInfo interceptorInfo)
+ public void setInterceptorInfo(BeanInterceptorInfo interceptorInfo, Class<? extends T> proxyClass, Map<Method, List<Interceptor<?>>> methodInterceptors)
{
this.interceptorInfo = interceptorInfo;
+ this.proxyClass = proxyClass;
+ this.methodInterceptors = methodInterceptors;
}
@Override
@@ -109,8 +136,27 @@ public class InjectionTargetImpl<T> exte
if (interceptorInfo != null)
{
// apply interceptorInfo
- Set<Interceptor<?>> interceptors = interceptorInfo.getInterceptors();
+ InterceptorDecoratorProxyFactory pf = webBeansContext.getInterceptorDecoratorProxyFactory();
+ Map<Interceptor<?>,Object> interceptorInstances = new HashMap<Interceptor<?>, Object>();
+ for (Interceptor interceptorBean : interceptorInfo.getInterceptors())
+ {
+ Object interceptorInstance;
+ if (interceptorBean instanceof SelfInterceptorBean)
+ {
+ interceptorInstance = instance;
+ }
+ else
+ {
+ interceptorInstance = interceptorBean.create(creationalContext);
+ }
+ interceptorInstances.put(interceptorBean, interceptorInstance);
+ }
+
+ InterceptorHandler interceptorHandler = new DefaultInterceptorHandler<T>(instance, methodInterceptors, interceptorInstances);
+
+ T proxyInstance = pf.createProxyInstance(proxyClass, instance, interceptorHandler);
+ instance = proxyInstance;
}
return instance;
@@ -191,12 +237,31 @@ public class InjectionTargetImpl<T> exte
@Override
public void postConstruct(T instance)
{
- if (postConstructMethods == null /*X TODO && postConstructInterceptors == null */)
+ if (postConstructMethods == null)
{
return;
}
- InvocationContext ic = new LifecycleInterceptorInvocationContext<T>(instance, InterceptionType.POST_CONSTRUCT, null, null, postConstructMethods);
+
+ Map<Interceptor<?>, ?> interceptorInstances = null;
+ List<Interceptor<?>> postConstructInterceptors = null;
+
+ if (interceptorInfo != null && instance instanceof OwbInterceptorProxy)
+ {
+ InterceptorDecoratorProxyFactory pf = webBeansContext.getInterceptorDecoratorProxyFactory();
+ InterceptorHandler ih = pf.getInterceptorHandler((OwbInterceptorProxy) instance);
+ if (ih instanceof DefaultInterceptorHandler)
+ {
+ DefaultInterceptorHandler dih = (DefaultInterceptorHandler) ih;
+ interceptorInstances = dih.getInstances();
+ }
+
+ // we are cheating a bit right now. We could also calculate the real ones upfront
+ postConstructInterceptors = new ArrayList<Interceptor<?>>(interceptorInfo.getInterceptors());
+ }
+
+ InvocationContext ic = new LifecycleInterceptorInvocationContext<T>(instance, InterceptionType.POST_CONSTRUCT, postConstructInterceptors,
+ interceptorInstances, postConstructMethods);
try
{
ic.proceed();
@@ -254,14 +319,14 @@ public class InjectionTargetImpl<T> exte
}
else
{
- this.constructor = new AnnotatedConstructorImpl<T>(context, getDefaultConstructor(), type);
+ this.constructor = new AnnotatedConstructorImpl<T>(webBeansContext, getDefaultConstructor(), type);
}
return this.constructor;
}
private Constructor<T> getDefaultConstructor()
{
- return context.getWebBeansUtil().getNoArgConstructor(type.getJavaClass());
+ return webBeansContext.getWebBeansUtil().getNoArgConstructor(type.getJavaClass());
}
private boolean isProducerMethod(InjectionPoint injectionPoint)
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducerRemove.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducerRemove.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducerRemove.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducerRemove.java Tue Jan 15 21:49:08 2013
@@ -97,7 +97,7 @@ public class InjectionTargetProducerRemo
//injection will be occured on Proxy instances that are
//not correct. Injection must be on actual dependent
//instance,so not necessary to inject on proxy
- final ProxyFactory proxyFactory = this.bean.getWebBeansContext().getProxyFactory();
+ final ProxyFactory proxyFactory = this.bean.getWebBeansContext().getProxyFactoryRemove();
if(bean.getScope() == Dependent.class && proxyFactory.isProxyInstanceRemove(instance))
{
return;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java Tue Jan 15 21:49:08 2013
@@ -24,6 +24,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import org.apache.webbeans.util.ExceptionUtil;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
@@ -103,8 +104,27 @@ public class InterceptorDecoratorProxyFa
}
catch (Exception e)
{
- throw new RuntimeException(e);
+ ExceptionUtil.throwAsRuntimeException(e);
}
+ return null;
+ }
+
+ /**
+ * @return the internal instance which gets proxied.
+ */
+ public InterceptorHandler getInterceptorHandler(OwbInterceptorProxy proxyInstance)
+ {
+ try
+ {
+ Field internalInstanceField = proxyInstance.getClass().getDeclaredField(FIELD_INTERCEPTOR_HANDLER);
+ internalInstanceField.setAccessible(true);
+ return (InterceptorHandler) internalInstanceField.get(proxyInstance);
+ }
+ catch (Exception e)
+ {
+ ExceptionUtil.throwAsRuntimeException(e);
+ }
+ return null;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyFactory.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyFactory.java Tue Jan 15 21:49:08 2013
@@ -39,6 +39,7 @@ import org.apache.webbeans.component.Inj
import org.apache.webbeans.component.OwbBean;
import org.apache.webbeans.component.ResourceBean;
import org.apache.webbeans.config.OpenWebBeansConfiguration;
+import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.decorator.DelegateHandler;
import org.apache.webbeans.decorator.WebBeansDecorator;
@@ -52,30 +53,32 @@ import org.apache.webbeans.proxy.javassi
import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
+
+
/**
* TODO remove old proxy handling. Only InterceptorDecoratorProxyFactory and NormalScopeProxyFactory shall remain.
*/
public final class ProxyFactory
{
- private ConcurrentMap<OwbBean<?>, Class<?>> buildInBeanProxyClasses = new ConcurrentHashMap<OwbBean<?>, Class<?>>();
- private ConcurrentMap<OwbBean<?>, Class<?>> normalScopedBeanProxyClasses = new ConcurrentHashMap<OwbBean<?>, Class<?>>();
- private ConcurrentMap<OwbBean<?>, Class<?>> dependentScopedBeanProxyClasses = new ConcurrentHashMap<OwbBean<?>, Class<?>>();
- private ConcurrentMap<OwbBean<?>, Class<?>> interceptorProxyClasses = new ConcurrentHashMap<OwbBean<?>, Class<?>>();
- private ConcurrentMap<ResourceBean<?, ?>, Class<?>> resourceBeanProxyClasses = new ConcurrentHashMap<ResourceBean<?,?>, Class<?>>();
+ private final WebBeansContext webBeansContext;
+
+ private ConcurrentMap<OwbBean<?>, Class<?>> buildInBeanProxyClassesRemove = new ConcurrentHashMap<OwbBean<?>, Class<?>>();
+ private ConcurrentMap<OwbBean<?>, Class<?>> normalScopedBeanProxyClassesRemove = new ConcurrentHashMap<OwbBean<?>, Class<?>>();
+ private ConcurrentMap<OwbBean<?>, Class<?>> dependentScopedBeanProxyClassesRemove = new ConcurrentHashMap<OwbBean<?>, Class<?>>();
+ private ConcurrentMap<OwbBean<?>, Class<?>> interceptorProxyClassesRemove = new ConcurrentHashMap<OwbBean<?>, Class<?>>();
+ private ConcurrentMap<ResourceBean<?, ?>, Class<?>> resourceBeanProxyClassesRemove = new ConcurrentHashMap<ResourceBean<?,?>, Class<?>>();
// second level map is indexed on local interface
private ConcurrentMap<OwbBean<?>, ConcurrentMap<Class<?>, Class<?>>> ejbProxyClasses = new ConcurrentHashMap<OwbBean<?>, ConcurrentMap<Class<?>, Class<?>>>();
- private Factory factory;
+ private Factory factoryRemove = new JavassistFactory();
+ private final InterceptorDecoratorProxyFactory interceptorDecoratorProxyFactory;
- public ProxyFactory()
- {
- this(new JavassistFactory());
- }
- public ProxyFactory(Factory factory)
+ public ProxyFactory(WebBeansContext webBeansContext)
{
- this.factory = factory;
+ this.webBeansContext = webBeansContext;
+ this.interceptorDecoratorProxyFactory = new InterceptorDecoratorProxyFactory();
}
/**
@@ -87,20 +90,20 @@ public final class ProxyFactory
public void setHandler(Object proxy, MethodHandler handler)
{
- factory.setHandler(proxy, handler);
+ factoryRemove.setHandler(proxy, handler);
}
private Map<OwbBean<?>, Class<?>> getInterceptorProxyClasses()
{
- return interceptorProxyClasses;
+ return interceptorProxyClassesRemove;
}
public void clear()
{
- normalScopedBeanProxyClasses.clear();
- dependentScopedBeanProxyClasses.clear();
- interceptorProxyClasses.clear();
+ normalScopedBeanProxyClassesRemove.clear();
+ dependentScopedBeanProxyClassesRemove.clear();
+ interceptorProxyClassesRemove.clear();
ejbProxyClasses.clear();
}
/**
@@ -159,7 +162,7 @@ public final class ProxyFactory
interfaces = new Class<?>[list.size()];
interfaces = list.toArray(interfaces);
- proxyClass = factory.getProxyClass(superClazz, interfaces);
+ proxyClass = factoryRemove.getProxyClass(superClazz, interfaces);
typeToProxyClassMap.putIfAbsent(iface, proxyClass);
// don't care if we were beaten in updating the iface->proxyclass map
@@ -192,12 +195,12 @@ public final class ProxyFactory
{
try
{
- Class<?> proxyClass = resourceBeanProxyClasses.get(resourceBean);
+ Class<?> proxyClass = resourceBeanProxyClassesRemove.get(resourceBean);
if (proxyClass == null)
{
proxyClass = createProxyClassRemove(resourceBean);
- Class<?> oldClazz = resourceBeanProxyClasses.putIfAbsent(resourceBean, proxyClass);
+ Class<?> oldClazz = resourceBeanProxyClassesRemove.putIfAbsent(resourceBean, proxyClass);
if (oldClazz != null)
{
return oldClazz;
@@ -222,11 +225,11 @@ public final class ProxyFactory
Object result = null;
try
{
- Class<?> proxyClass = normalScopedBeanProxyClasses.get(bean);
+ Class<?> proxyClass = normalScopedBeanProxyClassesRemove.get(bean);
if (proxyClass == null)
{
proxyClass = createProxyClassRemove(bean);
- normalScopedBeanProxyClasses.putIfAbsent(bean, proxyClass);
+ normalScopedBeanProxyClassesRemove.putIfAbsent(bean, proxyClass);
}
@@ -254,7 +257,7 @@ public final class ProxyFactory
private Object createProxyRemove(Class<?> proxyClass)
throws InstantiationException, IllegalAccessException
{
- return factory.createProxy(proxyClass);
+ return factoryRemove.createProxy(proxyClass);
}
/**
@@ -346,11 +349,11 @@ public final class ProxyFactory
Object result = null;
try
{
- Class<?> proxyClass = buildInBeanProxyClasses.get(bean);
+ Class<?> proxyClass = buildInBeanProxyClassesRemove.get(bean);
if (proxyClass == null)
{
proxyClass = createProxyClassRemove(bean);
- buildInBeanProxyClasses.putIfAbsent(bean, proxyClass);
+ buildInBeanProxyClassesRemove.putIfAbsent(bean, proxyClass);
}
result = createProxyRemove(proxyClass);
}
@@ -427,11 +430,11 @@ public final class ProxyFactory
try
{
- Class<?> proxyClass = dependentScopedBeanProxyClasses.get(bean);
+ Class<?> proxyClass = dependentScopedBeanProxyClassesRemove.get(bean);
if (proxyClass == null)
{
proxyClass = createProxyClassRemove(bean);
- dependentScopedBeanProxyClasses.putIfAbsent(bean, proxyClass);
+ dependentScopedBeanProxyClassesRemove.putIfAbsent(bean, proxyClass);
}
Object result = createProxyRemove(proxyClass);
@@ -456,7 +459,7 @@ public final class ProxyFactory
private Class<?> createProxyClassRemove(OwbBean<?> bean)
{
final ProxyInfoRemove info = getProxyInfo(bean);
- return factory.getProxyClass(info.getSuperClass(), info.getInterfaces());
+ return factoryRemove.getProxyClass(info.getSuperClass(), info.getInterfaces());
}
public Class<?> createAbstractDecoratorProxyClass(OwbBean<?> bean)
@@ -469,13 +472,13 @@ public final class ProxyFactory
*/
public boolean isProxyInstanceRemove(Object o)
{
- return factory.isProxyInstance(o);
+ return factoryRemove.isProxyInstance(o);
}
public Object createProxy(MethodHandler handler, Class<?>[] interfaces)
throws IllegalAccessException, InstantiationException
{
- return factory.createProxy(handler, interfaces);
+ return factoryRemove.createProxy(handler, interfaces);
}
/**
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyGenerationException.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyGenerationException.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyGenerationException.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ProxyGenerationException.java Tue Jan 15 21:49:08 2013
@@ -19,7 +19,7 @@
package org.apache.webbeans.proxy;
public class ProxyGenerationException
- extends Exception
+ extends RuntimeException
{
public ProxyGenerationException()
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Tue Jan 15 21:49:08 2013
@@ -2462,7 +2462,7 @@ public final class WebBeansUtil
ManagedBean<T> bean = defineManagedBean(type);
//X TODO move proxy instance creation into JavassistProxyFactory!
- Class clazz = webBeansContext.getProxyFactory().createAbstractDecoratorProxyClass(bean);
+ Class clazz = webBeansContext.getProxyFactoryRemove().createAbstractDecoratorProxyClass(bean);
bean.setConstructor(defineConstructor(clazz));
bean.setIsAbstractDecorator(true);
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=1433681&r1=1433680&r2=1433681&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 21:49:08 2013
@@ -56,7 +56,7 @@ public class InterceptorProxyChainTest e
AnnotatedType<ClassMultiInterceptedClass> annotatedType = getBeanManager().createAnnotatedType(ClassMultiInterceptedClass.class);
Bean<ClassMultiInterceptedClass> bean = (Bean<ClassMultiInterceptedClass>) getBeanManager().resolve(getBeanManager().getBeans(ClassMultiInterceptedClass.class));
- InterceptorResolutionService.BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean, annotatedType);
+ InterceptorResolutionService.BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(), annotatedType);
Assert.assertNotNull(interceptorInfo);
@@ -64,13 +64,8 @@ public class InterceptorProxyChainTest e
ClassMultiInterceptedClass internalInstance = new ClassMultiInterceptedClass();
CreationalContext<ClassMultiInterceptedClass> cc = getBeanManager().createCreationalContext(bean);
- Map<Interceptor<?>,Object> interceptorInstances = new HashMap<Interceptor<?>, Object>();
- for (Interceptor interceptorBean : interceptorInfo.getInterceptors())
- {
- Object interceptorInstance = interceptorBean.create(cc);
- interceptorInstances.put(interceptorBean, interceptorInstance);
- }
-
+ // step 1.
+ // calculate the interceptor-method info
Map<Method, List<Interceptor<?>>> methodInterceptors = new HashMap<Method, List<Interceptor<?>>>();
List<Method> nonBusinessMethods = new ArrayList<Method>();
for (Map.Entry<Method, InterceptorResolutionService.BusinessMethodInterceptorInfo> miEntry : interceptorInfo.getBusinessMethodsInfo().entrySet())
@@ -104,9 +99,8 @@ public class InterceptorProxyChainTest e
}
}
- InterceptorHandler interceptorHandler
- = new DefaultInterceptorHandler<ClassMultiInterceptedClass>(internalInstance, methodInterceptors, interceptorInstances);
-
+ // step 2.
+ // creating the Proxy Class itself
InterceptorDecoratorProxyFactory pf = new InterceptorDecoratorProxyFactory();
// we take a fresh URLClassLoader to not blur the test classpath with synthetic classes.
@@ -118,6 +112,18 @@ public class InterceptorProxyChainTest e
Class<? extends ClassMultiInterceptedClass> proxyClass = pf.createProxyClass(classLoader, ClassMultiInterceptedClass.class, businessMethods, nonInterceptedMethods);
Assert.assertNotNull(proxyClass);
+
+ // step 3.
+ // creating the InterceptorHandler for each intercepted instance later at runtime
+ Map<Interceptor<?>,Object> interceptorInstances = new HashMap<Interceptor<?>, Object>();
+ for (Interceptor interceptorBean : interceptorInfo.getInterceptors())
+ {
+ Object interceptorInstance = interceptorBean.create(cc);
+ interceptorInstances.put(interceptorBean, interceptorInstance);
+ }
+ InterceptorHandler interceptorHandler
+ = new DefaultInterceptorHandler<ClassMultiInterceptedClass>(internalInstance, methodInterceptors, interceptorInstances);
+
ClassMultiInterceptedClass proxyInstance = pf.createProxyInstance(proxyClass, internalInstance, interceptorHandler);
Assert.assertNotNull(proxyInstance);
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java Tue Jan 15 21:49:08 2013
@@ -76,7 +76,7 @@ public class InterceptorResolutionServic
AnnotatedType<ClassInterceptedClass> annotatedType = getBeanManager().createAnnotatedType(ClassInterceptedClass.class);
Bean<ClassInterceptedClass> bean = (Bean<ClassInterceptedClass>) getBeanManager().resolve(getBeanManager().getBeans(ClassInterceptedClass.class));
- BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean, annotatedType);
+ BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(), annotatedType);
Assert.assertNotNull(interceptorInfo);
Assert.assertNotNull(interceptorInfo.getInterceptors());
@@ -122,7 +122,7 @@ public class InterceptorResolutionServic
AnnotatedType<ClassMultiInterceptedClass> annotatedType = getBeanManager().createAnnotatedType(ClassMultiInterceptedClass.class);
Bean<ClassMultiInterceptedClass> bean = (Bean<ClassMultiInterceptedClass>) getBeanManager().resolve(getBeanManager().getBeans(ClassMultiInterceptedClass.class));
- BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean, annotatedType);
+ BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(), annotatedType);
Assert.assertNotNull(interceptorInfo);
Assert.assertNotNull(interceptorInfo.getInterceptors());
@@ -166,7 +166,7 @@ public class InterceptorResolutionServic
AnnotatedType<MethodInterceptedClass> annotatedType = getBeanManager().createAnnotatedType(MethodInterceptedClass.class);
Bean<MethodInterceptedClass> bean = (Bean<MethodInterceptedClass>) getBeanManager().resolve(getBeanManager().getBeans(MethodInterceptedClass.class));
- BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean, annotatedType);
+ BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(), annotatedType);
Assert.assertNotNull(interceptorInfo);
Assert.assertNotNull(interceptorInfo.getInterceptors());
@@ -213,7 +213,7 @@ public class InterceptorResolutionServic
Bean<DecoratedClass> bean = (Bean<DecoratedClass>) getBeanManager().resolve(
getBeanManager().getBeans(DecoratedClass.class, new AnnotationLiteral<Binding1>() {}));
- BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean, annotatedType);
+ BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(), annotatedType);
Assert.assertNotNull(interceptorInfo);
Assert.assertNotNull(interceptorInfo.getBusinessMethodsInfo());
@@ -241,7 +241,7 @@ public class InterceptorResolutionServic
AnnotatedType<InterceptedComponent> annotatedType = getBeanManager().createAnnotatedType(InterceptedComponent.class);
Bean<InterceptedComponent> bean = (Bean<InterceptedComponent>) getBeanManager().resolve(getBeanManager().getBeans(InterceptedComponent.class));
- BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean, annotatedType);
+ BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(), annotatedType);
Assert.assertNotNull(interceptorInfo);
Assert.assertNotNull(interceptorInfo.getBusinessMethodsInfo());
Assert.assertEquals(2, interceptorInfo.getBusinessMethodsInfo().size());
Modified: openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java?rev=1433681&r1=1433680&r2=1433681&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java (original)
+++ openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java Tue Jan 15 21:49:08 2013
@@ -171,7 +171,7 @@ public final class JmsUtil
final Class<?>[] interfaces = {Closable.class, Serializable.class, intf};
- return WebBeansContext.getInstance().getProxyFactory().createProxy(handler, interfaces);
+ return WebBeansContext.getInstance().getProxyFactoryRemove().createProxy(handler, interfaces);
}
catch (Exception e)
@@ -180,4 +180,4 @@ public final class JmsUtil
}
}
-}
\ No newline at end of file
+}