You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openwebbeans.apache.org by Romain Manni-Bucau <rm...@gmail.com> on 2014/01/21 08:50:23 UTC
Fwd: svn commit: r1559930 - in /openwebbeans/trunk/webbeans-impl: ./
src/main/java/org/apache/webbeans/component/ src/main/java/org/apache/webbeans/config/
src/main/java/org/apache/webbeans/container/ src/main/java/org/apache/webbeans/intercept/
src/main/ja...
Hi Arne,
can you say 2 words to share what it fixes? I ask because it impacts
OpenEJB/TomEE and will prevent drop and replace owb operations (we are
using defineBeanInterceptorStack)
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau
---------- Forwarded message ----------
From: <ar...@apache.org>
Date: 2014/1/21
Subject: svn commit: r1559930 - in /openwebbeans/trunk/webbeans-impl:
./ src/main/java/org/apache/webbeans/component/
src/main/java/org/apache/webbeans/config/
src/main/java/org/apache/webbeans/container/
src/main/java/org/apache/webbeans/intercept/ src/main/ja...
To: commits@openwebbeans.apache.org
Author: arne
Date: Tue Jan 21 07:46:55 2014
New Revision: 1559930
URL: http://svn.apache.org/r1559930
Log:
OWB-897: Moved proxy-creation to AbstractProducer
Removed:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/extension/InjectionTargetBeanOWB897Test.java
Modified:
openwebbeans/trunk/webbeans-impl/pom.xml
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewManagedBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DecoratorHandler.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorInvocationContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanManagerProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanMetadataProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventProducer.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/InjectionPointProducer.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/InstanceProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/MetadataProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessInjectionTargetImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
Modified: openwebbeans/trunk/webbeans-impl/pom.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/pom.xml?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/pom.xml (original)
+++ openwebbeans/trunk/webbeans-impl/pom.xml Tue Jan 21 07:46:55 2014
@@ -44,6 +44,7 @@
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-asm4-shaded</artifactId>
+ <version>3.15</version>
</dependency>
<dependency>
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=1559930&r1=1559929&r2=1559930&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 21 07:46:55 2014
@@ -18,14 +18,6 @@
*/
package org.apache.webbeans.component;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-
import javax.enterprise.inject.spi.AnnotatedType;
import org.apache.webbeans.component.spi.BeanAttributes;
@@ -34,16 +26,8 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.container.InjectionTargetFactoryImpl;
import javax.enterprise.inject.spi.InjectionTarget;
-import javax.enterprise.inject.spi.InterceptionType;
-import javax.enterprise.inject.spi.Interceptor;
-import javax.interceptor.AroundInvoke;
-
-import org.apache.webbeans.intercept.InterceptorResolutionService;
-import org.apache.webbeans.portable.InjectionTargetImpl;
-import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
-import org.apache.webbeans.util.Asserts;
-import org.apache.webbeans.util.CDI11s;
+import org.apache.webbeans.util.Asserts;
/**
* Abstract class for injection target beans.
@@ -102,117 +86,4 @@ public class InjectionTargetBean<T> exte
{
return annotatedType;
}
-
- /**
- *
- * Configure bean instance interceptor stack.
- *
- * This method gets invoked in the ValidateBean phase and will fill all the
- * interceptor information into the given InjectionTargetBean
- *
- */
- public <T> void defineBeanInterceptorStack()
- {
- if (this instanceof InterceptedMarker && getInjectionTarget()
instanceof InjectionTargetImpl)
- {
- InjectionTargetImpl<T> injectionTarget =
(InjectionTargetImpl<T>) getInjectionTarget();
- InterceptorResolutionService.BeanInterceptorInfo
interceptorInfo = webBeansContext.getInterceptorResolutionService().
- calculateInterceptorInfo(getTypes(),
getQualifiers(), getAnnotatedType());
-
- Map<Method, List<Interceptor<?>>> methodInterceptors =
new HashMap<Method, List<Interceptor<?>>>();
- 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)
- {
- Collections.addAll(activeInterceptors,
mii.getEjbInterceptors());
- }
- if (mii.getCdiInterceptors() != null)
- {
- Collections.addAll(activeInterceptors,
mii.getCdiInterceptors());
- }
- if (interceptorInfo.getSelfInterceptorBean() != null)
- {
- if
(interceptedMethod.getAnnotation(AroundInvoke.class) == null) // this
check is a dirty hack for now to prevent infinite loops
- {
- // add self-interception as last interceptor
in the chain.
-
activeInterceptors.add(interceptorInfo.getSelfInterceptorBean());
- }
- }
-
- if (activeInterceptors.size() > 0)
- {
- methodInterceptors.put(interceptedMethod,
activeInterceptors);
- }
- else if (mii.getMethodDecorators() != null)
- {
- methodInterceptors.put(interceptedMethod,
Collections.EMPTY_LIST);
- }
- }
-
- List<Interceptor<?>> postConstructInterceptors
- =
getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
interceptorInfo.getCdiInterceptors(),
InterceptionType.POST_CONSTRUCT);
-
- List<Interceptor<?>> preDestroyInterceptors
- =
getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
interceptorInfo.getCdiInterceptors(), InterceptionType.PRE_DESTROY);
-
- final List<Interceptor<?>> aroundConstruct;
- if (CDI11s.AROUND_CONSTRUCT != null)
- {
- aroundConstruct =
getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
interceptorInfo.getCdiInterceptors(), CDI11s.AROUND_CONSTRUCT);
- }
- else
- {
- aroundConstruct = new ArrayList<Interceptor<?>>();
- }
-
- Class<? extends T> proxyClass = null;
- if (methodInterceptors.size() > 0 ||
postConstructInterceptors.size() > 0 || preDestroyInterceptors.size()
> 0)
- {
- // we only need to create a proxy class for
intercepted or decorated Beans
- InterceptorDecoratorProxyFactory pf =
webBeansContext.getInterceptorDecoratorProxyFactory();
-
- ClassLoader classLoader = getBeanClass().getClassLoader();
-
- Method[] businessMethods =
methodInterceptors.keySet().toArray(new
Method[methodInterceptors.size()]);
- Method[] nonInterceptedMethods =
interceptorInfo.getNonInterceptedMethods().toArray(new
Method[interceptorInfo.getNonInterceptedMethods().size()]);
-
- proxyClass = (Class<? extends T>)
pf.createProxyClass(this, classLoader, getReturnType(),
businessMethods, nonInterceptedMethods);
-
- // now we collect the post-construct and pre-destroy
interceptors
-
- }
-
- injectionTarget.setInterceptorInfo(interceptorInfo,
proxyClass, methodInterceptors, postConstructInterceptors,
preDestroyInterceptors, aroundConstruct, getId());
- }
-
- }
-
-
- private List<Interceptor<?>>
getLifecycleInterceptors(LinkedHashSet<Interceptor<?>>
ejbInterceptors, List<Interceptor<?>> cdiInterceptors,
InterceptionType interceptionType)
- {
- List<Interceptor<?>> lifecycleInterceptors = new
ArrayList<Interceptor<?>>();
-
- for (Interceptor<?> ejbInterceptor : ejbInterceptors)
- {
- if (ejbInterceptor.intercepts(interceptionType))
- {
- lifecycleInterceptors.add(ejbInterceptor);
- }
- }
- for (Interceptor<?> cdiInterceptor : cdiInterceptors)
- {
- if (cdiInterceptor.intercepts(interceptionType))
- {
- lifecycleInterceptors.add(cdiInterceptor);
- }
- }
-
- return lifecycleInterceptors;
- }
-
-
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewManagedBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewManagedBean.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewManagedBean.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewManagedBean.java
Tue Jan 21 07:46:55 2014
@@ -24,6 +24,7 @@ import javax.enterprise.inject.spi.Annot
import javax.enterprise.inject.spi.InjectionPoint;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.AbstractProducer;
/**
* Component definition with {@link javax.enterprise.inject.New}
binding annotation.
@@ -44,7 +45,11 @@ public class NewManagedBean<T> extends M
Set<InjectionPoint> injectionPoints)
{
super(webBeansContext, webBeansType, annotatedType,
beanAttributes, beanClass);
- defineBeanInterceptorStack();
+ if (getProducer() instanceof AbstractProducer)
+ {
+ AbstractProducer<T> producer = (AbstractProducer<T>)getProducer();
+ producer.defineInterceptorStack(this, annotatedType,
webBeansContext);
+ }
}
/**
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
Tue Jan 21 07:46:55 2014
@@ -25,7 +25,6 @@ import org.apache.webbeans.component.Cdi
import org.apache.webbeans.component.DecoratorBean;
import org.apache.webbeans.component.EnterpriseBeanMarker;
import org.apache.webbeans.component.InjectionTargetBean;
-import org.apache.webbeans.component.InterceptedMarker;
import org.apache.webbeans.component.ManagedBean;
import org.apache.webbeans.component.OwbBean;
import org.apache.webbeans.component.ProducerFieldBean;
@@ -50,6 +49,7 @@ import org.apache.webbeans.exception.inj
import org.apache.webbeans.exception.inject.DeploymentException;
import org.apache.webbeans.exception.inject.InconsistentSpecializationException;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
+import org.apache.webbeans.portable.AbstractProducer;
import org.apache.webbeans.portable.AnnotatedElementFactory;
import org.apache.webbeans.portable.events.ProcessAnnotatedTypeImpl;
import org.apache.webbeans.portable.events.ProcessBeanImpl;
@@ -82,6 +82,7 @@ import javax.enterprise.inject.spi.Annot
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.Decorator;
import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Interceptor;
import javax.enterprise.inject.spi.ObserverMethod;
import javax.enterprise.inject.spi.ProcessAnnotatedType;
import java.io.IOException;
@@ -427,7 +428,7 @@ public class BeansDeployer
*
* @param beans deployed beans
*/
- private void validate(Set<Bean<?>> beans)
+ private <T> void validate(Set<Bean<?>> beans)
{
BeanManagerImpl manager = webBeansContext.getBeanManagerImpl();
@@ -448,10 +449,23 @@ public class BeansDeployer
beanNames.push(beanName);
}
-
- if (bean instanceof InjectionTargetBean && bean
instanceof InterceptedMarker)
+ if (bean instanceof OwbBean && !(bean instanceof
Interceptor) && !(bean instanceof Decorator))
{
- ((InjectionTargetBean<Object>)
bean).defineBeanInterceptorStack();
+ OwbBean<T> owbBean = (OwbBean<T>)bean;
+ if (owbBean.getProducer() instanceof AbstractProducer)
+ {
+ AbstractProducer<T> producer =
(AbstractProducer<T>)owbBean.getProducer();
+ AnnotatedType<T> annotatedType;
+ if (owbBean instanceof InjectionTargetBean)
+ {
+ annotatedType =
((InjectionTargetBean<T>)owbBean).getAnnotatedType();
+ }
+ else
+ {
+ annotatedType =
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(owbBean.getReturnType());
+ }
+ producer.defineInterceptorStack(owbBean,
annotatedType, webBeansContext);
+ }
}
//Check passivation scope
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java
Tue Jan 21 07:46:55 2014
@@ -58,7 +58,7 @@ public class InjectionTargetFactoryImpl<
{
final InjectionTargetImpl<T> injectionTarget
= new InjectionTargetImpl<T>(annotatedType,
createInjectionPoints(bean), webBeansContext,
getPostConstructMethods(), getPreDestroyMethods());
- return
webBeansContext.getWebBeansUtil().fireProcessInjectionTargetEvent(injectionTarget,
annotatedType).getCompleteInjectionTarget();
+ return
webBeansContext.getWebBeansUtil().fireProcessInjectionTargetEvent(injectionTarget,
annotatedType).getInjectionTarget();
}
protected Set<InjectionPoint> createInjectionPoints(Bean<T> bean)
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DecoratorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DecoratorHandler.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DecoratorHandler.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DecoratorHandler.java
Tue Jan 21 07:46:55 2014
@@ -22,7 +22,7 @@ import org.apache.webbeans.component.Owb
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptorInfo;
import org.apache.webbeans.intercept.InterceptorResolutionService.BusinessMethodInterceptorInfo;
-import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.portable.AbstractProducer;
import org.apache.webbeans.proxy.InterceptorHandler;
import org.apache.webbeans.util.ExceptionUtil;
import org.apache.webbeans.util.WebBeansUtil;
@@ -188,12 +188,12 @@ public class DecoratorHandler implements
passivationId = in.readUTF();
final Bean<?> bean =
beanManager.getPassivationCapableBean(passivationId);
- if (OwbBean.class.isInstance(bean))
+ if (bean instanceof OwbBean)
{
- final Producer injectionTarget =
OwbBean.class.cast(bean).getProducer();
- if (InjectionTargetImpl.class.isInstance(injectionTarget))
+ final Producer<?> producer = ((OwbBean<?>)bean).getProducer();
+ if (producer instanceof AbstractProducer)
{
- interceptorInfo =
InjectionTargetImpl.class.cast(injectionTarget).getInterceptorInfo();
+ interceptorInfo =
((AbstractProducer<?>)producer).getInterceptorInfo();
}
else
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorInvocationContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorInvocationContext.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorInvocationContext.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorInvocationContext.java
Tue Jan 21 07:46:55 2014
@@ -63,12 +63,7 @@ public class InterceptorInvocationContex
}
else
{
- return realProceed();
+ return super.proceed();
}
}
-
- protected Object realProceed() throws Exception
- {
- return super.proceed();
- }
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractProducer.java
Tue Jan 21 07:46:55 2014
@@ -18,16 +18,45 @@
*/
package org.apache.webbeans.portable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
+import javax.decorator.Delegate;
+import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Decorator;
import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Interceptor;
+import javax.enterprise.inject.spi.PassivationCapable;
import javax.enterprise.inject.spi.Producer;
+import javax.interceptor.AroundInvoke;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
+import org.apache.webbeans.intercept.DecoratorHandler;
+import org.apache.webbeans.intercept.DefaultInterceptorHandler;
+import org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptorInfo;
+import org.apache.webbeans.intercept.InterceptorResolutionService.BusinessMethodInterceptorInfo;
+import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
+import org.apache.webbeans.proxy.InterceptorHandler;
+import org.apache.webbeans.proxy.OwbInterceptorProxy;
public abstract class AbstractProducer<T> implements Producer<T>
{
private Set<InjectionPoint> injectionPoints;
+ private Class<? extends T> proxyClass;
+ private String passivationId;
+ private BeanInterceptorInfo interceptorInfo;
+ private InterceptorDecoratorProxyFactory proxyFactory;
+ private Map<Method, List<Interceptor<?>>> methodInterceptors;
public AbstractProducer()
{
@@ -39,6 +68,78 @@ public abstract class AbstractProducer<T
// this shares the InjectionPoints with the owning component for now
injectionPoints = points;
}
+
+ /**
+ *
+ * Configure bean instance interceptor stack.
+ *
+ * This method gets invoked in the ValidateBean phase and will fill all the
+ * interceptor information into the given InjectionTargetBean
+ *
+ */
+ public void defineInterceptorStack(Bean<T> bean, AnnotatedType<T>
annotatedType, WebBeansContext webBeansContext)
+ {
+ interceptorInfo = webBeansContext.getInterceptorResolutionService().
+ calculateInterceptorInfo(bean.getTypes(),
bean.getQualifiers(), annotatedType);
+ proxyFactory = webBeansContext.getInterceptorDecoratorProxyFactory();
+ if (bean instanceof PassivationCapable)
+ {
+ PassivationCapable passivationCapable = (PassivationCapable)bean;
+ passivationId = passivationCapable.getId();
+ }
+
+ methodInterceptors = new HashMap<Method, List<Interceptor<?>>>();
+ for (Map.Entry<Method, BusinessMethodInterceptorInfo> miEntry
: interceptorInfo.getBusinessMethodsInfo().entrySet())
+ {
+ Method interceptedMethod = miEntry.getKey();
+ BusinessMethodInterceptorInfo mii = miEntry.getValue();
+ List<Interceptor<?>> activeInterceptors = new
ArrayList<Interceptor<?>>();
+
+ if (mii.getEjbInterceptors() != null)
+ {
+ Collections.addAll(activeInterceptors,
mii.getEjbInterceptors());
+ }
+ if (mii.getCdiInterceptors() != null)
+ {
+ Collections.addAll(activeInterceptors,
mii.getCdiInterceptors());
+ }
+ if (interceptorInfo.getSelfInterceptorBean() != null)
+ {
+ if
(interceptedMethod.getAnnotation(AroundInvoke.class) == null) // this
check is a dirty hack for now to prevent infinite loops
+ {
+ // add self-interception as last interceptor in the chain.
+
activeInterceptors.add(interceptorInfo.getSelfInterceptorBean());
+ }
+ }
+
+ if (activeInterceptors.size() > 0)
+ {
+ methodInterceptors.put(interceptedMethod, activeInterceptors);
+ }
+ else if (mii.getMethodDecorators() != null)
+ {
+ methodInterceptors.put(interceptedMethod,
Collections.EMPTY_LIST);
+ }
+ }
+
+ defineLifecycleInterceptors(bean, annotatedType, webBeansContext);
+
+ if (needsProxy())
+ {
+ // we only need to create a proxy class for intercepted
or decorated Beans
+ InterceptorDecoratorProxyFactory pf =
webBeansContext.getInterceptorDecoratorProxyFactory();
+
+ ClassLoader classLoader =
annotatedType.getJavaClass().getClassLoader();
+
+ Method[] businessMethods =
methodInterceptors.keySet().toArray(new
Method[methodInterceptors.size()]);
+ Method[] nonInterceptedMethods =
interceptorInfo.getNonInterceptedMethods().toArray(new
Method[interceptorInfo.getNonInterceptedMethods().size()]);
+
+ proxyClass = (Class<? extends T>)
pf.createProxyClass(bean, classLoader, annotatedType.getJavaClass(),
businessMethods, nonInterceptedMethods);
+
+ // now we collect the post-construct and pre-destroy interceptors
+
+ }
+ }
@Override
public Set<InjectionPoint> getInjectionPoints()
@@ -46,8 +147,121 @@ public abstract class AbstractProducer<T
return injectionPoints;
}
+ public BeanInterceptorInfo getInterceptorInfo()
+ {
+ return interceptorInfo;
+ }
+
+ @Override
+ public T produce(CreationalContext<T> creationalContext)
+ {
+ final CreationalContextImpl<T> creationalContextImpl =
(CreationalContextImpl<T>) creationalContext;
+
+ final Map<Interceptor<?>,Object> interceptorInstances = new
HashMap<Interceptor<?>, Object>();
+ final Contextual<T> oldContextual =
creationalContextImpl.getContextual();
+
+ if (interceptorInfo != null)
+ {
+ // apply interceptorInfo
+
+ // create EJB-style interceptors
+ for (final Interceptor interceptorBean :
interceptorInfo.getEjbInterceptors())
+ {
+ creationalContextImpl.putContextual(interceptorBean);
+ interceptorInstances.put(interceptorBean,
interceptorBean.create(creationalContext));
+ }
+
+ // create CDI-style interceptors
+ for (final Interceptor interceptorBean :
interceptorInfo.getCdiInterceptors())
+ {
+ creationalContextImpl.putContextual(interceptorBean);
+ interceptorInstances.put(interceptorBean,
interceptorBean.create(creationalContext));
+ }
+ }
+
+ T instance = produce(interceptorInstances, creationalContextImpl);
+
+ if (interceptorInfo != null)
+ {
+ // register the bean itself for self-interception
+ if (interceptorInfo.getSelfInterceptorBean() != null)
+ {
+
interceptorInstances.put(interceptorInfo.getSelfInterceptorBean(),
instance);
+ }
+
+ T delegate = instance;
+ if (interceptorInfo.getDecorators() != null &&
!isDelegateInjection(creationalContextImpl))
+ {
+ List<Decorator<?>> decorators =
interceptorInfo.getDecorators();
+ Map<Decorator<?>, Object> instances = new
HashMap<Decorator<?>, Object>();
+ for (int i = decorators.size(); i > 0; i--)
+ {
+ Decorator decorator = decorators.get(i - 1);
+ creationalContextImpl.putContextual(decorator);
+ creationalContextImpl.putDelegate(delegate);
+ Object decoratorInstance =
decorator.create((CreationalContext) creationalContext);
+ instances.put(decorator, decoratorInstance);
+ delegate =
proxyFactory.createProxyInstance(proxyClass, instance, new
DecoratorHandler(interceptorInfo, instances, i - 1, instance,
passivationId));
+ }
+ }
+ InterceptorHandler interceptorHandler = new
DefaultInterceptorHandler<T>(instance, delegate, methodInterceptors,
interceptorInstances, passivationId);
+
+ T proxyInstance =
proxyFactory.createProxyInstance(proxyClass, instance,
interceptorHandler);
+ instance = proxyInstance;
+ creationalContextImpl.putContextual(oldContextual);
+ }
+
+ return instance;
+ }
+
@Override
public void dispose(T instance)
{
}
+
+ protected abstract T produce(Map<Interceptor<?>, ?>
interceptorInstances, CreationalContextImpl<T> creationalContext);
+
+ protected InterceptorDecoratorProxyFactory getProxyFactory()
+ {
+ return proxyFactory;
+ }
+
+ protected Map<Method, List<Interceptor<?>>> getMethodInterceptors()
+ {
+ return methodInterceptors;
+ }
+
+ protected boolean needsProxy()
+ {
+ return methodInterceptors.size() != 0;
+ }
+
+ protected boolean isDelegateInjection(final CreationalContextImpl<?> cc)
+ {
+ final InjectionPoint ip = cc.getInjectionPoint();
+ if (ip == null)
+ {
+ return false;
+ }
+ return ip.getAnnotated().isAnnotationPresent(Delegate.class);
+ }
+
+ /**
+ * Helper method to unwrap the internal proxy instance.
+ * Returns the instance directly if this is not a proxied instance.
+ */
+ protected T unwrapProxyInstance(T probableProxyInstance)
+ {
+ if (proxyFactory != null && probableProxyInstance instanceof
OwbInterceptorProxy)
+ {
+ return proxyFactory.unwrapInstance(probableProxyInstance);
+ }
+
+ return probableProxyInstance;
+ }
+
+ protected void defineLifecycleInterceptors(Bean<T> bean,
AnnotatedType<T> annotatedType, WebBeansContext webBeansContext)
+ {
+
+ }
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanManagerProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanManagerProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanManagerProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanManagerProducer.java
Tue Jan 21 07:46:55 2014
@@ -18,11 +18,14 @@
*/
package org.apache.webbeans.portable;
-import javax.enterprise.context.spi.CreationalContext;
+import java.util.Map;
+
import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.container.InjectableBeanManager;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
public class BeanManagerProducer extends AbstractProducer<BeanManager>
{
@@ -36,7 +39,7 @@ public class BeanManagerProducer extends
}
@Override
- public BeanManager produce(CreationalContext<BeanManager>
creationalContext)
+ protected BeanManager produce(Map<Interceptor<?>, ?>
interceptors, CreationalContextImpl<BeanManager> creationalContext)
{
if (manager == null)
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanMetadataProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanMetadataProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanMetadataProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanMetadataProducer.java
Tue Jan 21 07:46:55 2014
@@ -18,8 +18,10 @@
*/
package org.apache.webbeans.portable;
+import java.util.Map;
+
import javax.enterprise.context.spi.Contextual;
-import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.context.creational.CreationalContextImpl;
@@ -27,7 +29,7 @@ public class BeanMetadataProducer<T> ext
{
@Override
- public Contextual<T> produce(CreationalContext<Contextual<T>>
creationalContext)
+ protected Contextual<T> produce(Map<Interceptor<?>, ?>
interceptors, CreationalContextImpl<Contextual<T>> creationalContext)
{
if (!(creationalContext instanceof CreationalContextImpl))
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventProducer.java
Tue Jan 21 07:46:55 2014
@@ -21,10 +21,11 @@ package org.apache.webbeans.portable;
import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.util.Map;
-import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Event;
import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.context.creational.CreationalContextImpl;
@@ -45,7 +46,7 @@ public class EventProducer<T> extends Ab
* {@inheritDoc}
*/
@Override
- public Event<T> produce(CreationalContext<Event<T>> creationalContext)
+ protected Event<T> produce(Map<Interceptor<?>, ?> interceptors,
CreationalContextImpl<Event<T>> creationalContext)
{
Event<T> instance = null;
InjectionPoint injectionPoint = null;
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=1559930&r1=1559929&r2=1559930&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 21 07:46:55 2014
@@ -18,9 +18,11 @@
*/
package org.apache.webbeans.portable;
-import javax.enterprise.context.spi.CreationalContext;
+import java.util.Map;
+
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.context.creational.CreationalContextImpl;
@@ -39,7 +41,7 @@ public class ExtensionProducer<R> extend
}
@Override
- public R produce(CreationalContext<R> creationalContext)
+ protected R produce(Map<Interceptor<?>, ?> interceptors,
CreationalContextImpl<R> creationalContext)
{
ExtensionLoader loader = webBeansContext.getExtensionLoader();
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java
Tue Jan 21 07:46:55 2014
@@ -18,8 +18,10 @@
*/
package org.apache.webbeans.portable;
-import javax.enterprise.context.spi.CreationalContext;
+import java.util.Map;
+
import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.util.ClassUtil;
@@ -31,7 +33,7 @@ public class InjectionPointProducer exte
* {@inheritDoc}
*/
@Override
- public InjectionPoint produce(CreationalContext<InjectionPoint>
creationalContext)
+ protected InjectionPoint produce(Map<Interceptor<?>, ?>
interceptors, CreationalContextImpl<InjectionPoint> creationalContext)
{
if (!(creationalContext instanceof CreationalContextImpl))
{
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=1559930&r1=1559929&r2=1559930&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 21 07:46:55 2014
@@ -26,7 +26,6 @@ import org.apache.webbeans.exception.Web
import org.apache.webbeans.inject.InjectableConstructor;
import org.apache.webbeans.inject.InjectableField;
import org.apache.webbeans.inject.InjectableMethod;
-import org.apache.webbeans.intercept.DecoratorHandler;
import org.apache.webbeans.intercept.DefaultInterceptorHandler;
import org.apache.webbeans.intercept.InterceptorInvocationContext;
import org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptorInfo;
@@ -40,8 +39,6 @@ import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.CDI11s;
import org.apache.webbeans.util.ExceptionUtil;
-import javax.decorator.Delegate;
-import javax.enterprise.context.spi.Contextual;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Disposes;
@@ -50,7 +47,7 @@ import javax.enterprise.inject.spi.Annot
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedParameter;
import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Decorator;
+import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.InjectionTarget;
import javax.enterprise.inject.spi.InterceptionType;
@@ -64,8 +61,9 @@ import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.text.MessageFormat;
-import java.util.HashMap;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -108,37 +106,6 @@ public class InjectionTargetImpl<T> exte
private List<Interceptor<?>> aroundConstructInterceptors;
- /**
- * static information about Interceptors and Decorators of that bean
- */
- private BeanInterceptorInfo interceptorInfo = null;
-
- /**
- * The passivationId of the bean this InjectionTarget serves.
- * We need this to restore the interceptor proxy on de-serialisation.
- * Only needed for Beans which are {@link
javax.enterprise.inject.spi.PassivationCapable}.
- */
- private String beanPassivationId = 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;
- private InjectionTarget<T> delegate = null;
- private final boolean noProxy; // Mark this injection target
usable as a delegate ni a custom InjectionTarget
-
-
public InjectionTargetImpl(AnnotatedType<T> annotatedType,
Set<InjectionPoint> points, WebBeansContext webBeansContext,
List<AnnotatedMethod<?>>
postConstructMethods, List<AnnotatedMethod<?>> preDestroyMethods)
{
@@ -149,104 +116,40 @@ public class InjectionTargetImpl<T> exte
this.webBeansContext = webBeansContext;
this.postConstructMethods = postConstructMethods;
this.preDestroyMethods = preDestroyMethods;
- noProxy = false;
}
-
- public InjectionTargetImpl(final InjectionTargetImpl<T> delegate)
+
+ @Override
+ protected void defineLifecycleInterceptors(Bean<T> bean,
AnnotatedType<T> annotatedType, WebBeansContext webBeansContext)
{
- super(delegate.getInjectionPoints());
- noProxy = true;
- annotatedType = delegate.annotatedType;
- webBeansContext = delegate.webBeansContext;
- postConstructMethods = delegate.postConstructMethods;
- preDestroyMethods = delegate.preDestroyMethods;
- }
+ BeanInterceptorInfo interceptorInfo = getInterceptorInfo();
+
+ postConstructInterceptors
+ = getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
interceptorInfo.getCdiInterceptors(),
InterceptionType.POST_CONSTRUCT);
- public BeanInterceptorInfo getInterceptorInfo()
- {
- return interceptorInfo;
- }
+ preDestroyInterceptors
+ = getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
interceptorInfo.getCdiInterceptors(), InterceptionType.PRE_DESTROY);
- public void setInterceptorInfo(BeanInterceptorInfo
interceptorInfo, Class<? extends T> proxyClass, Map<Method,
List<Interceptor<?>>> methodInterceptors,
- List<Interceptor<?>>
postConstructInterceptors, List<Interceptor<?>>
preDestroyInterceptors, List<Interceptor<?>> aroundConstruct,
- String beanPassivationId)
- {
- this.interceptorInfo = interceptorInfo;
- this.proxyClass = proxyClass;
- this.methodInterceptors = methodInterceptors;
- this.postConstructInterceptors = postConstructInterceptors;
- this.preDestroyInterceptors = preDestroyInterceptors;
- aroundConstructInterceptors = aroundConstruct;
- this.beanPassivationId = beanPassivationId;
- }
-
- /**
- * Helper method to unwrap the internal proxy instance.
- * Returns the instance directly if this is not a proxied instance.
- */
- protected T unwrapProxyInstance(T probableProxyInstance)
- {
- if (probableProxyInstance instanceof OwbInterceptorProxy)
+ if (CDI11s.AROUND_CONSTRUCT != null)
{
- return
webBeansContext.getInterceptorDecoratorProxyFactory().unwrapInstance(probableProxyInstance);
+ aroundConstructInterceptors =
getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
interceptorInfo.getCdiInterceptors(), CDI11s.AROUND_CONSTRUCT);
+ }
+ else
+ {
+ aroundConstructInterceptors = new ArrayList<Interceptor<?>>();
}
-
- return probableProxyInstance;
}
@Override
- public T produce(CreationalContext<T> creationalContext)
+ public T produce(Map<Interceptor<?>, ?> interceptorInstances,
CreationalContextImpl<T> creationalContext)
{
- final CreationalContextImpl<T> creationalContextImpl =
(CreationalContextImpl<T>) creationalContext;
- if (noProxy)
- {
- return newInstance(creationalContextImpl);
- }
-
- final Map<Interceptor<?>,Object> interceptorInstances = new
HashMap<Interceptor<?>, Object>();
- final Contextual<T> oldContextual =
creationalContextImpl.getContextual();
- final boolean hasAroundConstruct =
aroundConstructInterceptors != null &&
!aroundConstructInterceptors.isEmpty();
-
- if (proxyClass != null || hasAroundConstruct)
- {
- // apply interceptorInfo
-
- // create EJB-style interceptors
- for (final Interceptor interceptorBean :
interceptorInfo.getEjbInterceptors())
- {
- creationalContextImpl.putContextual(interceptorBean);
- interceptorInstances.put(interceptorBean,
interceptorBean.create(creationalContext));
- }
-
- // create CDI-style interceptors
- for (final Interceptor interceptorBean :
interceptorInfo.getCdiInterceptors())
- {
- creationalContextImpl.putContextual(interceptorBean);
- interceptorInstances.put(interceptorBean,
interceptorBean.create(creationalContext));
- }
- }
-
- T instance;
- if (hasAroundConstruct)
+ if (hasAroundConstruct())
{
try
{
final Constructor<T> cons = getConstructor().getJavaMember();
- final InjectableConstructor<T> injectableConstructor
= new InjectableConstructor<T>(cons, this, creationalContextImpl);
- new InterceptorInvocationContext<T>(null,
CDI11s.AROUND_CONSTRUCT, aroundConstructInterceptors,
interceptorInstances,
- cons,
injectableConstructor.createParameters())
- {
- @Override
- protected Object realProceed() throws Exception
- {
- if (delegate != null)
- {
- return delegate.produce(creationalContextImpl);
- }
- return injectableConstructor.doInjection();
- }
- }.proceed();
- instance = injectableConstructor.getInstance();
+ final InjectableConstructor<T> injectableConstructor
= new InjectableConstructor<T>(cons, this, creationalContext);
+ return (T)new InterceptorInvocationContext<T>(null,
CDI11s.AROUND_CONSTRUCT, aroundConstructInterceptors,
interceptorInstances,
+ cons,
injectableConstructor.createParameters()).proceed();
}
catch (final Exception e) // CDI 1.0
{
@@ -255,99 +158,32 @@ public class InjectionTargetImpl<T> exte
}
else
{
- if (delegate != null)
- {
- instance = delegate.produce(creationalContextImpl);
- }
- else
- {
- instance = newInstance(creationalContextImpl);
- }
+ return newInstance(creationalContext);
}
-
- if (proxyClass != null)
- {
- InterceptorDecoratorProxyFactory pf =
webBeansContext.getInterceptorDecoratorProxyFactory();
-
- // register the bean itself for self-interception
- if (interceptorInfo.getSelfInterceptorBean() != null)
- {
-
interceptorInstances.put(interceptorInfo.getSelfInterceptorBean(),
instance);
- }
-
- T delegate = instance;
- if (interceptorInfo.getDecorators() != null &&
!isDelegateInjection(creationalContext))
- {
- List<Decorator<?>> decorators =
interceptorInfo.getDecorators();
- Map<Decorator<?>, Object> instances = new
HashMap<Decorator<?>, Object>();
- for (int i = decorators.size(); i > 0; i--)
- {
- Decorator decorator = decorators.get(i - 1);
- creationalContextImpl.putContextual(decorator);
- creationalContextImpl.putDelegate(delegate);
- Object decoratorInstance =
decorator.create((CreationalContext) creationalContext);
- instances.put(decorator, decoratorInstance);
- delegate = pf.createProxyInstance(proxyClass,
instance, new DecoratorHandler(interceptorInfo, instances, i - 1,
instance, beanPassivationId));
- }
- }
- InterceptorHandler interceptorHandler = new
DefaultInterceptorHandler<T>(instance, delegate, methodInterceptors,
interceptorInstances, beanPassivationId);
-
- T proxyInstance = pf.createProxyInstance(proxyClass,
instance, interceptorHandler);
- instance = proxyInstance;
- creationalContextImpl.putContextual(oldContextual);
- }
-
- return instance;
}
- protected boolean isDelegateInjection(final CreationalContext<?> cc)
+ @Override
+ protected boolean needsProxy()
{
- if (CreationalContextImpl.class.isInstance(cc))
- {
- final InjectionPoint ip =
CreationalContextImpl.class.cast(cc).getInjectionPoint();
- if (ip == null)
- {
- return false;
- }
-
- final Member member = ip.getMember();
- if (member != null
- && Field.class.isInstance(member) &&
Field.class.cast(member).getAnnotation(Delegate.class) != null)
- {
- return true;
- }
- }
- return false;
+ return super.needsProxy() || postConstructInterceptors.size()
!= 0 || preDestroyInterceptors.size() != 0;
}
- protected T newInstance(CreationalContextImpl<T> creationalContext)
+ protected boolean hasAroundConstruct()
{
- return new
InjectableConstructor<T>(getConstructor().getJavaMember(), this,
creationalContext).doInjection();
+ return aroundConstructInterceptors != null &&
!aroundConstructInterceptors.isEmpty();
}
-
- @Override
- public void dispose(T instance)
+
+ protected T newInstance(CreationalContextImpl<T> creationalContext)
{
- if (delegate != null)
- {
- delegate.dispose(instance);
- }
+ return new
InjectableConstructor<T>(getConstructor().getJavaMember(), this,
creationalContext).doInjection();
}
@Override
public void inject(T instance, CreationalContext<T> context)
{
- if (delegate == null)
- {
- inject(instance.getClass(),
unwrapProxyInstance(instance), (CreationalContextImpl<T>) context);
- }
- else
- {
- delegate.inject(instance, context);
- }
+ inject(instance.getClass(), unwrapProxyInstance(instance),
(CreationalContextImpl<T>) context);
}
-
private void inject(Class<?> type, final T instance,
CreationalContextImpl<T> context)
{
if (type == null || type.equals(Object.class))
@@ -440,19 +276,12 @@ public class InjectionTargetImpl<T> exte
@Override
public void postConstruct(final T instance)
{
- if (delegate != null)
- {
- delegate.postConstruct(instance);
- return; // TODO: sure?
- }
-
Map<Interceptor<?>, ?> interceptorInstances = null;
T internalInstance = instance;
- if (interceptorInfo != null && instance instanceof OwbInterceptorProxy)
+ if (getInterceptorInfo() != null && instance instanceof
OwbInterceptorProxy)
{
- InterceptorDecoratorProxyFactory pf =
webBeansContext.getInterceptorDecoratorProxyFactory();
- InterceptorHandler ih =
pf.getInterceptorHandler((OwbInterceptorProxy) instance);
+ InterceptorHandler ih =
getProxyFactory().getInterceptorHandler((OwbInterceptorProxy)
instance);
if (ih instanceof DefaultInterceptorHandler)
{
DefaultInterceptorHandler dih = (DefaultInterceptorHandler) ih;
@@ -480,16 +309,10 @@ public class InjectionTargetImpl<T> exte
@Override
public void preDestroy(T instance)
{
- if (delegate != null)
- {
- delegate.preDestroy(instance);
- return; // TODO: sure?
- }
-
Map<Interceptor<?>, ?> interceptorInstances = null;
T internalInstance = instance;
- if (interceptorInfo != null && instance instanceof OwbInterceptorProxy)
+ if (getInterceptorInfo() != null && instance instanceof
OwbInterceptorProxy)
{
InterceptorDecoratorProxyFactory pf =
webBeansContext.getInterceptorDecoratorProxyFactory();
InterceptorHandler ih =
pf.getInterceptorHandler((OwbInterceptorProxy) instance);
@@ -599,13 +422,25 @@ public class InjectionTargetImpl<T> exte
return false;
}
- public void setDelegate(final InjectionTarget<T> delegate)
+ private List<Interceptor<?>>
getLifecycleInterceptors(LinkedHashSet<Interceptor<?>>
ejbInterceptors, List<Interceptor<?>> cdiInterceptors,
InterceptionType interceptionType)
{
- this.delegate = delegate;
- }
+ List<Interceptor<?>> lifecycleInterceptors = new
ArrayList<Interceptor<?>>();
- public InjectionTarget<T> simpleInstance()
- {
- return new InjectionTargetImpl<T>(this);
+ for (Interceptor<?> ejbInterceptor : ejbInterceptors)
+ {
+ if (ejbInterceptor.intercepts(interceptionType))
+ {
+ lifecycleInterceptors.add(ejbInterceptor);
+ }
+ }
+ for (Interceptor<?> cdiInterceptor : cdiInterceptors)
+ {
+ if (cdiInterceptor.intercepts(interceptionType))
+ {
+ lifecycleInterceptors.add(cdiInterceptor);
+ }
+ }
+
+ return lifecycleInterceptors;
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InstanceProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InstanceProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InstanceProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InstanceProducer.java
Tue Jan 21 07:46:55 2014
@@ -21,11 +21,12 @@ package org.apache.webbeans.portable;
import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.util.Map;
import java.util.Set;
-import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.component.InstanceBean;
import org.apache.webbeans.config.WebBeansContext;
@@ -46,12 +47,12 @@ public class InstanceProducer<T> extends
}
@Override
- public Instance<T> produce(CreationalContext<Instance<T>>
creationalContext)
+ protected Instance<T> produce(Map<Interceptor<?>, ?>
interceptors, CreationalContextImpl<Instance<T>> creationalContext)
{
+ CreationalContextImpl<Instance<T>> creationalContextImpl = null;
try
{
InjectionPoint injectionPoint = null;
- CreationalContextImpl<Instance<T>> creationalContextImpl = null;
if (creationalContext instanceof CreationalContextImpl)
{
creationalContextImpl =
(CreationalContextImpl<Instance<T>>)creationalContext;
@@ -77,15 +78,13 @@ public class InstanceProducer<T> extends
type = returnType;
}
- Instance<T> instance = new InstanceImpl<T>(type,
injectionPoint, webBeansContext, creationalContextImpl,
qualifiers.toArray(new Annotation[qualifiers.size()]));
-
- return instance;
+ return new InstanceImpl<T>(type, injectionPoint,
webBeansContext, creationalContextImpl, qualifiers.toArray(new
Annotation[qualifiers.size()]));
}
finally
{
- if (creationalContext instanceof CreationalContextImpl)
+ if (creationalContextImpl != null)
{
-
((CreationalContextImpl<Instance<T>>)creationalContext).removeInjectionPoint();
+ creationalContextImpl.removeInjectionPoint();
}
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/MetadataProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/MetadataProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/MetadataProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/MetadataProducer.java
Tue Jan 21 07:46:55 2014
@@ -18,8 +18,10 @@
*/
package org.apache.webbeans.portable;
+import java.util.Map;
+
import javax.enterprise.context.spi.Contextual;
-import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.context.creational.CreationalContextImpl;
@@ -27,7 +29,7 @@ public class MetadataProducer<T> extends
{
@Override
- public Contextual<T> produce(CreationalContext<Contextual<T>>
creationalContext)
+ protected Contextual<T> produce(Map<Interceptor<?>, ?>
interceptors, CreationalContextImpl<Contextual<T>> creationalContext)
{
if (!(creationalContext instanceof CreationalContextImpl))
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java
Tue Jan 21 07:46:55 2014
@@ -21,15 +21,18 @@ package org.apache.webbeans.portable;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Collections;
+import java.util.Map;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.AnnotatedField;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.component.AbstractOwbBean;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.exception.WebBeansException;
import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.WebBeansUtil;
@@ -53,7 +56,7 @@ public class ProducerFieldProducer<T, P>
}
@Override
- public T produce(CreationalContext<T> creationalContext)
+ protected T produce(Map<Interceptor<?>, ?> interceptors,
CreationalContextImpl<T> creationalContext)
{
T instance = null;
P parentInstance = null;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
Tue Jan 21 07:46:55 2014
@@ -20,12 +20,14 @@ package org.apache.webbeans.portable;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.Map;
import java.util.Set;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Interceptor;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.context.creational.CreationalContextImpl;
@@ -89,7 +91,7 @@ public class ProducerMethodProducer<T, P
}
@Override
- public T produce(CreationalContext<T> creationalContext)
+ protected T produce(Map<Interceptor<?>, ?> interceptors,
CreationalContextImpl<T> creationalContext)
{
P parentInstance = null;
CreationalContext<P> parentCreationalContext = null;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducer.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducer.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducer.java
Tue Jan 21 07:46:55 2014
@@ -18,10 +18,13 @@
*/
package org.apache.webbeans.portable;
-import javax.enterprise.context.spi.CreationalContext;
+import java.util.Map;
+
+import javax.enterprise.inject.spi.Interceptor;
import javax.inject.Provider;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.proxy.NormalScopeProxyFactory;
import org.apache.webbeans.util.WebBeansUtil;
@@ -43,7 +46,7 @@ public class ProviderBasedProducer<T> ex
}
@Override
- public T produce(CreationalContext<T> creationalContext)
+ protected T produce(Map<Interceptor<?>, ?> interceptors,
CreationalContextImpl<T> creationalContext)
{
if (proxyInstance == null)
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessInjectionTargetImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessInjectionTargetImpl.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessInjectionTargetImpl.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessInjectionTargetImpl.java
Tue Jan 21 07:46:55 2014
@@ -18,13 +18,12 @@
*/
package org.apache.webbeans.portable.events;
-import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.portable.InjectionTargetImpl;
-
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.InjectionTarget;
import javax.enterprise.inject.spi.ProcessInjectionTarget;
+import org.apache.webbeans.config.WebBeansContext;
+
/**
* Implementation of the {@link ProcessInjectionTarget}.
*
@@ -38,8 +37,8 @@ public class ProcessInjectionTargetImpl<
private final AnnotatedType<X> annotatedType;
/**Injection target that is used by container to inject dependencies*/
- private InjectionTargetImpl<X> injectionTarget = null;
-
+ private InjectionTarget<X> injectionTarget = null;
+
/**Injection target is set or not*/
private boolean set = false;
@@ -48,22 +47,20 @@ public class ProcessInjectionTargetImpl<
*
* @param injectionTarget injection target
*/
- public ProcessInjectionTargetImpl(InjectionTargetImpl<X>
injectionTarget, AnnotatedType<X> annotatedType)
+ public ProcessInjectionTargetImpl(InjectionTarget<X>
injectionTarget, AnnotatedType<X> annotatedType)
{
this.injectionTarget = injectionTarget;
this.annotatedType = annotatedType;
}
-
+
/**
* {@inheritDoc}
*/
- @Override
public void addDefinitionError(Throwable t)
{
WebBeansContext.getInstance().getBeanManagerImpl().getErrorStack().pushError(t);
}
- @Override
public AnnotatedType<X> getAnnotatedType()
{
return annotatedType;
@@ -72,24 +69,17 @@ public class ProcessInjectionTargetImpl<
/**
* {@inheritDoc}
*/
- @Override
public InjectionTarget<X> getInjectionTarget()
{
- return injectionTarget.simpleInstance();
- }
-
- public InjectionTarget<X> getCompleteInjectionTarget()
- {
return injectionTarget;
}
/**
* {@inheritDoc}
*/
- @Override
public void setInjectionTarget(InjectionTarget<X> injectionTarget)
{
- this.injectionTarget.setDelegate(injectionTarget); // wrap it
to keep interceptors info
+ this.injectionTarget = injectionTarget;
set = true;
}
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=1559930&r1=1559929&r2=1559930&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 21 07:46:55 2014
@@ -58,6 +58,7 @@ import org.apache.webbeans.exception.inj
import org.apache.webbeans.exception.inject.InconsistentSpecializationException;
import org.apache.webbeans.inject.AlternativesManager;
import org.apache.webbeans.plugins.PluginLoader;
+import org.apache.webbeans.portable.AbstractProducer;
import org.apache.webbeans.portable.InjectionTargetImpl;
import org.apache.webbeans.portable.ProducerMethodProducer;
import org.apache.webbeans.portable.events.discovery.ErrorStack;
@@ -1551,9 +1552,10 @@ public final class WebBeansUtil
new ProducerFieldBeansBuilder(managedBean.getWebBeansContext(),
managedBean.getAnnotatedType()).defineProducerFields(managedBean);
new ObserverMethodsBuilder<T,
InjectionTargetBean<T>>(webBeansContext,
managedBean.getAnnotatedType()).defineObserverMethods(managedBean);
- if (managedBean instanceof InjectionTargetBean)
+ if (managedBean.getProducer() instanceof AbstractProducer)
{
- ((InjectionTargetBean) managedBean).defineBeanInterceptorStack();
+ AbstractProducer<T> producer =
(AbstractProducer<T>)managedBean.getProducer();
+ producer.defineInterceptorStack(managedBean,
managedBean.getAnnotatedType(), webBeansContext);
}
return managedBean;
@@ -1657,9 +1659,10 @@ public final class WebBeansUtil
new ProducerFieldBeansBuilder(managedBean.getWebBeansContext(),
managedBean.getAnnotatedType()).defineProducerFields(managedBean);
new ObserverMethodsBuilder<T,
InjectionTargetBean<T>>(webBeansContext,
managedBean.getAnnotatedType()).defineObserverMethods(managedBean);
- if (managedBean instanceof InjectionTargetBean)
+ if (managedBean.getProducer() instanceof AbstractProducer)
{
- ((InjectionTargetBean) managedBean).defineBeanInterceptorStack();
+ AbstractProducer<T> producer =
(AbstractProducer<T>)managedBean.getProducer();
+ producer.defineInterceptorStack(managedBean,
managedBean.getAnnotatedType(), webBeansContext);
}
return managedBean;
}
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java?rev=1559930&r1=1559929&r2=1559930&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
Tue Jan 21 07:46:55 2014
@@ -57,6 +57,7 @@ import org.apache.webbeans.deployment.St
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
import org.apache.webbeans.newtests.AbstractUnitTest;
+import org.apache.webbeans.portable.AbstractProducer;
import org.apache.webbeans.portable.events.generics.GProcessAnnotatedType;
import org.apache.webbeans.test.component.decorator.broken.DelegateAttributeIsnotInterface;
import org.apache.webbeans.test.component.decorator.broken.DelegateAttributeMustImplementAllDecoratedTypes;
@@ -281,9 +282,10 @@ public abstract class TestContext implem
bean = define(clazz, WebBeansType.MANAGED,
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(clazz));
if (bean != null)
{
- if (bean instanceof InjectionTargetBean)
+ if (bean.getProducer() instanceof AbstractProducer)
{
- ((InjectionTargetBean) bean).defineBeanInterceptorStack();
+ AbstractProducer<T> producer =
(AbstractProducer<T>)bean.getProducer();
+ producer.defineInterceptorStack(bean,
bean.getAnnotatedType(), webBeansContext);
}
getComponents().add((AbstractOwbBean<?>) bean);
Re: svn commit: r1559930 - in /openwebbeans/trunk/webbeans-impl: ./
src/main/java/org/apache/webbeans/component/
src/main/java/org/apache/webbeans/config/
src/main/java/org/apache/webbeans/container/
src/main/java/org/apache/webbeans/intercept/ src/ma...
Posted by Arne Limburg <ar...@openknowledge.de>.
Of course I can ;)
Had a short discussion with Mark on that topic in december.
Should we move to irc for that?
Cheers,
Arne
Am 21.01.14 08:50 schrieb "Romain Manni-Bucau" unter
<rm...@gmail.com>:
>Hi Arne,
>
>can you say 2 words to share what it fixes? I ask because it impacts
>OpenEJB/TomEE and will prevent drop and replace owb operations (we are
>using defineBeanInterceptorStack)
>
>Romain Manni-Bucau
>Twitter: @rmannibucau
>Blog: http://rmannibucau.wordpress.com/
>LinkedIn: http://fr.linkedin.com/in/rmannibucau
>Github: https://github.com/rmannibucau
>
>
>
>
>---------- Forwarded message ----------
>From: <ar...@apache.org>
>Date: 2014/1/21
>Subject: svn commit: r1559930 - in /openwebbeans/trunk/webbeans-impl:
>./ src/main/java/org/apache/webbeans/component/
>src/main/java/org/apache/webbeans/config/
>src/main/java/org/apache/webbeans/container/
>src/main/java/org/apache/webbeans/intercept/ src/main/ja...
>To: commits@openwebbeans.apache.org
>
>
>Author: arne
>Date: Tue Jan 21 07:46:55 2014
>New Revision: 1559930
>
>URL: http://svn.apache.org/r1559930
>Log:
>OWB-897: Moved proxy-creation to AbstractProducer
>
>Removed:
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/interceptors/extension/InjectionTargetBeanOWB897Test.java
>Modified:
> openwebbeans/trunk/webbeans-impl/pom.xml
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/InjectionTargetBean.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/NewManagedBean.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>BeansDeployer.java
>
>openwebbeans/trunk/webbens-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionTargetFactoryImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/interce
>pt/DecoratorHandler.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/interce
>pt/InterceptorInvocationContext.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/BeanManagerProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/BeanMetadataProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/EventProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ExtensionProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InjectionPointProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InjectionTargetImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InstanceProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/MetadataProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProducerFieldProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProducerMethodProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProviderBasedProducer.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/events/ProcessInjectionTargetImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/Te
>stContext.java
>
>Modified: openwebbeans/trunk/webbeans-impl/pom.xml
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/pom.xml?rev=
>1559930&r1=1559929&r2=1559930&view=diff
>==========================================================================
>====
>--- openwebbeans/trunk/webbeans-impl/pom.xml (original)
>+++ openwebbeans/trunk/webbeans-impl/pom.xml Tue Jan 21 07:46:55 2014
>@@ -44,6 +44,7 @@
> <dependency>
> <groupId>org.apache.xbean</groupId>
> <artifactId>xbean-asm4-shaded</artifactId>
>+ <version>3.15</version>
> </dependency>
>
> <dependency>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/InjectionTargetBean.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/InjectionTargetBean.java?rev=1559930&r1=15
>59929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/InjectionTargetBean.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/InjectionTargetBean.java
>Tue Jan 21 07:46:55 2014
>@@ -18,14 +18,6 @@
> */
> package org.apache.webbeans.component;
>
>-import java.lang.reflect.Mthod;
>-import java.util.ArrayList;
>-import java.util.Collections;
>-import java.util.HashMap;
>-import java.util.LinkedHashSet;
>-import java.util.List;
>-import java.util.Map;
>-
> import javax.enterprise.inject.spi.AnnotatedType;
>
> import org.apache.webbeans.component.spi.BeanAttributes;
>@@ -34,16 +26,8 @@ import org.apache.webbeans.config.WebBea
> import org.apache.webbeans.container.InjectionTargetFactoryImpl;
>
> import javax.enterprise.inject.spi.InjectionTarget;
>-import javax.enterprise.inject.spi.InterceptionType;
>-import javax.enterprise.inject.spi.Interceptor;
>-import javax.interceptor.AroundInvoke;
>-
>-import org.apache.webbeans.intercept.InterceptorResolutionService;
>-import org.apache.webbeans.portable.InjectionTargetImpl;
>-import org.apache.webbeans.proxy.InterceptorDecoratorProxyFacory;
>-import org.apache.webbeans.util.Asserts;
>-import org.apache.webbeans.util.CDI11s;
>
>+import org.apache.webbeans.util.Asserts;
>
> /**
> * Abstract class for injection target beans.
>@@ -102,117 +86,4 @@ public class InjectionTargetBean<T> exte
> {
> return annotatedType;
> }
>-
>- /**
>- *
>- * Configure bean instance interceptor stack.
>- *
>- * This method gets invoked in the ValidateBean phase and will fill
>all the
>- * interceptor information into the given InjectionTargetBean
>- *
>- */
>- public <T> void defineBeanInterceptorStack()
>- {
>- if (this instanceof InterceptedMarker && getInjectionTarget()
>instanceof InjectionTargetImpl)
>- {
>- InjectionTargetImpl<T> injectionTarget =
>(InjectionTargetImpl<T>) getInjectionTarget();
>- InterceptorResolutionService.BeanInterceptorInfo
>interceptorInfo = webBeansContext.getInterceptorResolutionService().
>- calculateInterceptorInfo(getTypes(),
>getQualifiers(), getAnnotatedType());
>-
>- Map<Method, List<Interceptor<?>>> methodInterceptors =
>new HashMap<Method, List<Interceptor<?>>>();
>- 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)
>- {
>- Collections.addAll(activeInterceptors,
>mii.getEjbInterceptors());
>- }
>- if (mii.getCdiInterceptors() != null)
>- {
>- Collections.addAll(activeInterceptors,
>mii.getCdiInterceptors());
>- }
>- if (interceptorInfo.getSelfInterceptorBean() != null)
>- {
>- if
>(interceptedMethod.getAnnotation(AroundInvoke.class) == null) // this
>check is a dirty hack for now to prevent infinite loops
>- {
>- // add self-interception as last interceptor
>in the chain.
>-
>activeInterceptors.add(interceptorInfo.getSelfInterceptorBean());
>- }
>- }
>-
>- if (activeInterceptors.size() > 0)
>- {
>- methodInterceptors.put(interceptedMethod,
>activeInterceptors);
>- }
>- else if (mii.getMethodDecorators() != null)
>- {
>- methodInterceptors.put(interceptedMethod,
>Collections.EMPTY_LIST);
>- }
>- }
>-
>- List<Interceptor<?>> postConstructInterceptors
>- =
>getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
>interceptorInfo.getCdiInterceptors(),
>InterceptionType.POST_CONSTRUCT);
>-
>- List<Interceptor<?>> preDestroyInterceptors
>- =
>getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
>interceptorInfo.getCdiInterceptors(), InterceptionType.PRE_DESTROY);
>-
>- final List<Interceptor<?>> aroundConstruct;
>- if (CDI11s.AROUND_CONSTRUCT != null)
>- {
>- aroundConstruct =
>getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
>interceptorInfo.getCdiInterceptors(), CDI11s.AROUND_CONSTRUCT);
>- }
>- else
>- {
>- aroundConstruct = new ArrayList<Interceptor<?>>();
>- }
>-
>- Class<? extends T> proxyClass = null;
>- if (methodInterceptors.size() > 0 ||
>postConstructInterceptors.size() > 0 || preDestroyInterceptors.size()
>> 0)
>- {
>- // we only need to create a proxy class for
>intercepted or decorated Beans
>- InterceptorDecoratorProxyFactory pf =
>webBeansContext.getInterceptorDecoratorProxyFactory();
>-
>- ClassLoader classLoader =
>getBeanClass().getClassLoader();
>-
>- Method[] businessMethods =
>methodInterceptors.keySet().toArray(new
>Method[methodInterceptors.size()]);
>- Method[] nonInterceptedMethods =
>interceptorInfo.getNonInterceptedMethods().toArray(new
>Method[interceptorInfo.getNonInterceptedMethods().size()]);
>-
>- proxyClass = (Class<? extends T>)
>pf.createProxyClass(this, classLoader, getReturnType(),
>businessMethods, nonInterceptedMethods);
>-
>- // now we collect the post-construct and pre-destroy
>interceptors
>-
>- }
>-
>- injectionTarget.setInterceptorInfo(interceptorInfo,
>proxyClass, methodInterceptors, postConstructInterceptors,
>preDestroyInterceptors, aroundConstruct, getId());
>- }
>-
>- }
>-
>-
>- private List<Interceptor<?>>
>getLifecycleInterceptors(LinkedHashSet<Interceptor<?>>
>ejbInterceptors, List<Interceptor<?>> cdiInterceptors,
>InterceptionType interceptionType)
>- {
>- List<Interceptor<?>> lifecycleInterceptors = new
>ArrayList<Interceptor<?>>();
>-
>- for (Interceptor<?> ejbInterceptor : ejbInterceptors)
>- {
>- if (ejbInterceptor.intercepts(interceptionType))
>- {
>- lifecycleInterceptors.add(ejbInterceptor);
>- }
>- }
>- for (Interceptor<?> cdiInterceptor : cdiInterceptors)
>- {
>- if (cdiInterceptor.intercepts(interceptionType))
>- {
>- lifecycleInterceptors.add(cdiInterceptor);
>- }
>- }
>-
>- return lifecycleInterceptors;
>- }
>-
>-
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/NewManagedBean.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/NewManagedBean.java?rev=1559930&r1=1559929
>&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/NewManagedBean.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/NewManagedBean.java
>Tue Jan 21 07:46:55 2014
>@@ -24,6 +24,7 @@ import javax.enterprise.inject.spi.Annot
> import javax.enterprise.inject.spi.InjectionPoint;
>
> import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.portable.AbstractProducer;
>
> /**
> * Component definition with {@link javax.enterprise.inject.New}
>binding annotation.
>@@ -44,7 +45,11 @@ public class NewManagedBean<T> extends M
> Set<InjectionPoint> injectionPoints)
> {
> super(webBeansContext, webBeansType, annotatedType,
>beanAttributes, beanClass);
>- defineBeanInterceptorStack();
>+ if (getProducer() instanceof AbstractProducer)
>+ {
>+ AbstractProducer<T> producer =
>(AbstractProducer<T>)getProducer();
>+ producer.defineInterceptorStack(this, annotatedType,
>webBeansContext);
>+ }
> }
>
> /**
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>BeansDeployer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/config/BeansDeployer.java?rev=1559930&r1=1559929&r2=
>1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>BeansDeployer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>BeansDeployer.java
>Tue Jan 21 07:46:55 2014
>@@ -25,7 +25,6 @@ import org.apache.webbeans.component.Cdi
> import org.apache.webbeans.component.DecoratorBean;
> import org.apache.webbeans.component.EnterpriseBeanMarker;
> import org.apache.webbeans.component.InjectionTargetBean;
>-import org.apache.webbeans.component.InterceptedMarker;
> import org.apache.webbeans.component.ManagedBean;
> import org.apache.webbeans.component.OwbBean;
> import org.apache.webbeans.component.ProducerFieldBean;
>@@ -50,6 +49,7 @@ import org.apache.webbeans.exception.inj
> import org.apache.webbeans.exception.inject.DeploymentException;
> import
>org.apache.webbeans.exception.inject.InconsistentSpecializationException;
> import org.apache.webbeans.logger.WebBeansLoggerFacade;
>+import org.apache.webbeans.portable.AbstractProducer;
> import org.apache.webbeans.portable.AnnotatedElementFactory;
> import org.apache.webbeans.portable.events.ProcessAnnotatedTypeImpl;
> import org.apache.webbeans.portable.events.ProcessBeanImpl;
>@@ -82,6 +82,7 @@ import javax.enterprise.inject.spi.Annot
> import javax.enterprise.inject.spi.Bean;
> import javax.enterprise.inject.spi.Decorator;
> import javax.enterprise.inject.spi.InjectionPoint;
>+import javax.enterprise.inject.spi.Interceptor;
> import javax.enterprise.inject.spi.ObserverMethod;
> import javax.enterprise.inject.spi.ProcessAnnotatedType;
> import java.io.IOException;
>@@ -427,7 +428,7 @@ public class BeansDeployer
> *
> * @param beans deployed beans
> */
>- private void validate(Set<Bean<?>> beans)
>+ private <T> void validate(Set<Bean<?>> beans)
> {
> BeanManagerImpl manager = webBeansContext.getBeanManagerImpl();
>
>@@ -448,10 +449,23 @@ public class BeansDeployer
> beanNames.push(beanName);
> }
>
>-
>- if (bean instanceof InjectionTargetBean && bean
>instanceof InterceptedMarker)
>+ if (bean instanceof OwbBean && !(bean instanceof
>Interceptor) && !(bean instanceof Decorator))
> {
>- ((InjectionTargetBean<Object>)
>bean).defineBeanInterceptorStack();
>+ OwbBean<T> owbBean = (OwbBean<T>)bean;
>+ if (owbBean.getProducer() instanceof
>AbstractProducer)
>+ {
>+ AbstractProducer<T> producer =
>(AbstractProducer<T>)owbBean.getProducer();
>+ AnnotatedType<T> annotatedType;
>+ if (owbBean instanceof InjectionTargetBean)
>+ {
>+ annotatedType =
>((InjectionTargetBean<T>)owbBean).getAnnotatedType();
>+ }
>+ else
>+ {
>+ annotatedType =
>webBeansContext.getAnnotatedElementFactory().newAnnotatedType(owbBean.getR
>eturnType());
>+ }
>+ producer.defineInterceptorStack(owbBean,
>annotatedType, webBeansContext);
>+ }
> }
>
> //Check passivation scope
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionTargetFactoryImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/container/InjectionTargetFactoryImpl.java?rev=155993
>0&r1=1559929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionTargetFactoryImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionTargetFactoryImpl.java
>Tue Jan 21 07:46:55 2014
>@@ -58,7 +58,7 @@ public class InjectionTargetFactoryImpl<
> {
> final InjectionTargetImpl<T> injectionTarget
> = new InjectionTargetImpl<T>(annotatedType,
>createInjectionPoints(bean), webBeansContext,
>getPostConstructMethods(), getPreDestroyMethods());
>- return
>webBeansContext.getWebBeansUtil().fireProcessInjectionTargetEvent(injectio
>nTarget,
>annotatedType).getCompleteInjectionTarget();
>+ return
>webBeansContext.getWebBeansUtil().fireProcessInjectionTargetEvent(injectio
>nTarget,
>annotatedType).getInjectionTarget();
> }
>
> protected Set<InjectionPoint> createInjectionPoints(Bean<T> bean)
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/interce
>pt/DecoratorHandler.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/intercept/DecoratorHandler.java?rev=1559930&r1=15599
>29&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/interce
>pt/DecoratorHandler.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/interce
>pt/DecoratorHandler.java
>Tue Jan 21 07:46:55 2014
>@@ -22,7 +22,7 @@ import org.apache.webbeans.component.Owb
> import org.apache.webbeans.config.WebBeansContext;
> import
>org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptor
>Info;
> import
>org.apache.webbeans.intercept.InterceptorResolutionService.BusinessMethodI
>nterceptorInfo;
>-import org.apache.webbeans.portable.InjectionTargetImpl;
>+import org.apache.webbeans.portable.AbstractProducer;
> import org.apache.webbeans.proxy.InterceptorHandler;
> import org.apache.webbeans.util.ExceptionUtil;
> import org.apache.webbeans.util.WebBeansUtil;
>@@ -188,12 +188,12 @@ public class DecoratorHandler implements
>
> passivationId = in.readUTF();
> final Bean<?> bean =
>beanManager.getPassivationCapableBean(passivationId);
>- if (OwbBean.class.isInstance(bean))
>+ if (bean instanceof OwbBean)
> {
>- final Producer injectionTarget =
>OwbBean.class.cast(bean).getProducer();
>- if (InjectionTargetImpl.class.isInstance(injectionTarget))
>+ final Producer<?> producer =
>((OwbBean<?>)bean).getProducer();
>+ if (producer instanceof AbstractProducer)
> {
>- interceptorInfo =
>InjectionTargetImpl.class.cast(injectionTarget).getInterceptorInfo();
>+ interceptorInfo =
>((AbstractProducer<?>)producer).getInterceptorInfo();
> }
> else
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/interce
>pt/InterceptorInvocationContext.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/intercept/InterceptorInvocationContext.java?rev=1559
>930&r1=1559929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/interce
>pt/InterceptorInvocationContext.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/interce
>pt/InterceptorInvocationContext.java
>Tue Jan 21 07:46:55 2014
>@@ -63,12 +63,7 @@ public class InterceptorInvocationContex
> }
> else
> {
>- return realProceed();
>+ return super.proceed();
> }
> }
>-
>- protected Object realProceed() throws Exception
>- {
>- return super.proceed();
>- }
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AbstractProducer.java?rev=1559930&r1=155992
>9&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -18,16 +18,45 @@
> */
> package org.apache.webbeans.portable;
>
>+import java.lang.reflect.Method;
>+import java.util.ArrayList;
> import java.util.Collections;
>+import java.util.HashMap;
>+import java.util.List;
>+import java.util.Map;
> import java.util.Set;
>
>+import javax.decorator.Delegate;
>+import javax.enterprise.context.spi.Contextual;
>+import javax.enterprise.context.spi.CreationalContext;
>+import javax.enterprise.inject.spi.AnnotatedType;
>+import javax.enterprise.inject.spi.Bean;
>+import javax.enterprise.inject.spi.Decorator;
> import javax.enterprise.inject.spi.InjectionPoint;
>+import javax.enterprise.inject.spi.Interceptor;
>+import javax.enterprise.inject.spi.PassivationCapable;
> import javax.enterprise.inject.spi.Producer;
>+import javax.interceptor.AroundInvoke;
>+
>+import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.context.creational.CreationalContextImpl;
>+import org.apache.webbeans.intercept.DecoratorHandler;
>+import org.apache.webbeans.intercept.DefaultInterceptorHandler;
>+import
>org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptor
>Info;
>+import
>org.apache.webbeans.intercept.InterceptorResolutionService.BusinessMethodI
>nterceptorInfo;
>+import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
>+import org.apache.webbeans.proxy.InterceptorHandler;
>+import org.apache.webbeans.proxy.OwbInterceptorProxy;
>
> public abstract class AbstractProducer<T> implements Producer<T>
> {
>
> private Set<InjectionPoint> injectionPoints;
>+ private Class<? extends T> proxyClass;
>+ private String passivationId;
>+ private BeanInterceptorInfo interceptorInfo;
>+ private InterceptorDecoratorProxyFactory proxyFactory;
>+ private Map<Method, List<Interceptor<?>>> methodInterceptors;
>
> public AbstractProducer()
> {
>@@ -39,6 +68,78 @@ public abstract class AbstractProducer<T
> // this shares the InjectionPoints with the owning component for
>now
> injectionPoints = points;
> }
>+
>+ /**
>+ *
>+ * Configure bean instance interceptor stack.
>+ *
>+ * This method gets invoked in the ValidateBean phase and will fill
>all the
>+ * interceptor information into the given InjectionTargetBean
>+ *
>+ */
>+ public void defineInterceptorStack(Bean<T> bean, AnnotatedType<T>
>annotatedType, WebBeansContext webBeansContext)
>+ {
>+ interceptorInfo =
>webBeansContext.getInterceptorResolutionService().
>+ calculateInterceptorInfo(bean.getTypes(),
>bean.getQualifiers(), annotatedType);
>+ proxyFactory =
>webBeansContext.getInterceptorDecoratorProxyFactory();
>+ if (bean instanceof PassivationCapable)
>+ {
>+ PassivationCapable passivationCapable =
>(PassivationCapable)bean;
>+ passivationId = passivationCapable.getId();
>+ }
>+
>+ methodInterceptors = new HashMap<Method, List<Interceptor<?>>>();
>+ for (Map.Entry<Method, BusinessMethodInterceptorInfo> miEntry
>: interceptorInfo.getBusinessMethodsInfo().entrySet())
>+ {
>+ Method interceptedMethod = miEntry.getKey();
>+ BusinessMethodInterceptorInfo mii = miEntry.getValue();
>+ List<Interceptor<?>> activeInterceptors = new
>ArrayList<Interceptor<?>>();
>+
>+ if (mii.getEjbInterceptors() != null)
>+ {
>+ Collections.addAll(activeInterceptors,
>mii.getEjbInterceptors());
>+ }
>+ if (mii.getCdiInterceptors() != null)
>+ {
>+ Collections.addAll(activeInterceptors,
>mii.getCdiInterceptors());
>+ }
>+ if (interceptorInfo.getSelfInterceptorBean() != null)
>+ {
>+ if
>(interceptedMethod.getAnnotation(AroundInvoke.class) == null) // this
>check is a dirty hack for now to prevent infinite loops
>+ {
>+ // add self-interception as last interceptor in the
>chain.
>+
>activeInterceptors.add(interceptorInfo.getSelfInterceptorBean());
>+ }
>+ }
>+
>+ if (activeInterceptors.size() > 0)
>+ {
>+ methodInterceptors.put(interceptedMethod,
>activeInterceptors);
>+ }
>+ else if (mii.getMethodDecorators() != null)
>+ {
>+ methodInterceptors.put(interceptedMethod,
>Collections.EMPTY_LIST);
>+ }
>+ }
>+
>+ defineLifecycleInterceptors(bean, annotatedType,
>webBeansContext);
>+
>+ if (needsProxy())
>+ {
>+ // we only need to create a proxy class for intercepted
>or decorated Beans
>+ InterceptorDecoratorProxyFactory pf =
>webBeansContext.getInterceptorDecoratorProxyFactory();
>+
>+ ClassLoader classLoader =
>annotatedType.getJavaClass().getClassLoader();
>+
>+ Method[] businessMethods =
>methodInterceptors.keySet().toArray(new
>Method[methodInterceptors.size()]);
>+ Method[] nonInterceptedMethods =
>interceptorInfo.getNonInterceptedMethods().toArray(new
>Method[interceptorInfo.getNonInterceptedMethods().size()]);
>+
>+ proxyClass = (Class<? extends T>)
>pf.createProxyClass(bean, classLoader, annotatedType.getJavaClass(),
>businessMethods, nonInterceptedMethods);
>+
>+ // now we collect the post-construct and pre-destroy
>interceptors
>+
>+ }
>+ }
>
> @Override
> public Set<InjectionPoint> getInjectionPoints()
>@@ -46,8 +147,121 @@ public abstract class AbstractProducer<T
> return injectionPoints;
> }
>
>+ public BeanInterceptorInfo getInterceptorInfo()
>+ {
>+ return interceptorInfo;
>+ }
>+
>+ @Override
>+ public T produce(CreationalContext<T> creationalContext)
>+ {
>+ final CreationalContextImpl<T> creationalContextImpl =
>(CreationalContextImpl<T>) creationalContext;
>+
>+ final Map<Interceptor<?>,Object> interceptorInstances = new
>HashMap<Interceptor<?>, Object>();
>+ final Contextual<T> oldContextual =
>creationalContextImpl.getContextual();
>+
>+ if (interceptorInfo != null)
>+ {
>+ // apply interceptorInfo
>+
>+ // create EJB-style interceptors
>+ for (final Interceptor interceptorBean :
>interceptorInfo.getEjbInterceptors())
>+ {
>+ creationalContextImpl.putContextual(interceptorBean);
>+ interceptorInstances.put(interceptorBean,
>interceptorBean.create(creationalContext));
>+ }
>+
>+ // create CDI-style interceptors
>+ for (final Interceptor interceptorBean :
>interceptorInfo.getCdiInterceptors())
>+ {
>+ creationalContextImpl.putContextual(interceptorBean);
>+ interceptorInstances.put(interceptorBean,
>interceptorBean.create(creationalContext));
>+ }
>+ }
>+
>+ T instance = produce(interceptorInstances,
>creationalContextImpl);
>+
>+ if (interceptorInfo != null)
>+ {
>+ // register the bean itself for self-interception
>+ if (interceptorInfo.getSelfInterceptorBean() != null)
>+ {
>+
>interceptorInstances.put(interceptorInfo.getSelfInterceptorBean(),
>instance);
>+ }
>+
>+ T delegate = instance;
>+ if (interceptorInfo.getDecorators() != null &&
>!isDelegateInjection(creationalContextImpl))
>+ {
>+ List<Decorator<?>> decorators =
>interceptorInfo.getDecorators();
>+ Map<Decorator<?>, Object> instances = new
>HashMap<Decorator<?>, Object>();
>+ for (int i = decorators.size(); i > 0; i--)
>+ {
>+ Decorator decorator = decorators.get(i - 1);
>+ creationalContextImpl.putContextual(decorator);
>+ creationalContextImpl.putDelegate(delegate);
>+ Object decoratorInstance =
>decorator.create((CreationalContext) creationalContext);
>+ instances.put(decorator, decoratorInstance);
>+ delegate =
>proxyFactory.createProxyInstance(proxyClass, instance, new
>DecoratorHandler(interceptorInfo, instances, i - 1, instance,
>passivationId));
>+ }
>+ }
>+ InterceptorHandler interceptorHandler = new
>DefaultInterceptorHandler<T>(instance, delegate, methodInterceptors,
>interceptorInstances, passivationId);
>+
>+ T proxyInstance =
>proxyFactory.createProxyInstance(proxyClass, instance,
>interceptorHandler);
>+ instance = proxyInstance;
>+ creationalContextImpl.putContextual(oldContextual);
>+ }
>+
>+ return instance;
>+ }
>+
> @Override
> public void dispose(T instance)
> {
> }
>+
>+ protected abstract T produce(Map<Interceptor<?>, ?>
>interceptorInstances, CreationalContextImpl<T> creationalContext);
>+
>+ protected InterceptorDecoratorProxyFactory getProxyFactory()
>+ {
>+ return proxyFactory;
>+ }
>+
>+ protected Map<Method, List<Interceptor<?>>> getMethodInterceptors()
>+ {
>+ return methodInterceptors;
>+ }
>+
>+ protected boolean needsProxy()
>+ {
>+ return methodInterceptors.size() != 0;
>+ }
>+
>+ protected boolean isDelegateInjection(final CreationalContextImpl<?>
>cc)
>+ {
>+ final InjectionPoint ip = cc.getInjectionPoint();
>+ if (ip == null)
>+ {
>+ return false;
>+ }
>+ return ip.getAnnotated().isAnnotationPresent(Delegate.class);
>+ }
>+
>+ /**
>+ * Helper method to unwrap the internal proxy instance.
>+ * Returns the instance directly if this is not a proxied instance.
>+ */
>+ protected T unwrapProxyInstance(T probableProxyInstance)
>+ {
>+ if (proxyFactory != null && probableProxyInstance instanceof
>OwbInterceptorProxy)
>+ {
>+ return proxyFactory.unwrapInstance(probableProxyInstance);
>+ }
>+
>+ return probableProxyInstance;
>+ }
>+
>+ protected void defineLifecycleInterceptors(Bean<T> bean,
>AnnotatedType<T> annotatedType, WebBeansContext webBeansContext)
>+ {
>+
>+ }
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/BeanManagerProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/BeanManagerProducer.java?rev=1559930&r1=155
>9929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/BeanManagerProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/BeanManagerProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -18,11 +18,14 @@
> */
> package org.apache.webbeans.portable;
>
>-import javax.enterprise.context.spi.CreationalContext;
>+import java.util.Map;
>+
> import javax.enterprise.inject.spi.BeanManager;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.config.WebBeansContext;
> import org.apache.webbeans.container.InjectableBeanManager;
>+import org.apache.webbeans.context.creational.CreationalContextImpl;
>
> public class BeanManagerProducer extends AbstractProducer<BeanManager>
> {
>@@ -36,7 +39,7 @@ public class BeanManagerProducer extends
> }
>
> @Override
>- public BeanManager produce(CreationalContext<BeanManager>
>creationalContext)
>+ protected BeanManager produce(Map<Interceptor<?>, ?>
>interceptors, CreationalContextImpl<BeanManager> creationalContext)
> {
> if (manager == null)
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/BeanMetadataProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/BeanMetadataProducer.java?rev=1559930&r1=15
>59929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/BeanMetadataProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/BeanMetadataProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -18,8 +18,10 @@
> */
> package org.apache.webbeans.portable;
>
>+import java.util.Map;
>+
> import javax.enterprise.context.spi.Contextual;
>-import javax.enterprise.context.spi.CreationalContext;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.context.creational.CreationalContextImpl;
>
>@@ -27,7 +29,7 @@ public class BeanMetadataProducer<T> ext
> {
>
> @Override
>- public Contextual<T> produce(CreationalContext<Contextual<T>>
>creationalContext)
>+ protected Contextual<T> produce(Map<Interceptor<?>, ?>
>interceptors, CreationalContextImpl<Contextual<T>> creationalContext)
> {
> if (!(creationalContext instanceof CreationalContextImpl))
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/EventProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/EventProducer.java?rev=1559930&r1=1559929&r
>2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/EventProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/EventProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -21,10 +21,11 @@ package org.apache.webbeans.portable;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.ParameterizedType;
> import java.lang.reflect.Type;
>+import java.util.Map;
>
>-import javax.enterprise.context.spi.CreationalContext;
> import javax.enterprise.event.Event;
> import javax.enterprise.inject.spi.InjectionPoint;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.config.WebBeansContext;
> import org.apache.webbeans.context.creational.CreationalContextImpl;
>@@ -45,7 +46,7 @@ public class EventProducer<T> extends Ab
> * {@inheritDoc}
> */
> @Override
>- public Event<T> produce(CreationalContext<Event<T>>
>creationalContext)
>+ protected Event<T> produce(Map<Interceptor<?>, ?> interceptors,
>CreationalContextImpl<Event<T>> creationalContext)
> {
> Event<T> instance = null;
> InjectionPoint injectionPoint = null;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ExtensionProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/ExtensionProducer.java?rev=1559930&r1=15599
>29&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ExtensionProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ExtensionProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -18,9 +18,11 @@
> */
> package org.apache.webbeans.portable;
>
>-import javax.enterprise.context.spi.CreationalContext;
>+import java.util.Map;
>+
> import javax.enterprise.inject.spi.AnnotatedType;
> import javax.enterprise.inject.spi.Bean;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.config.WebBeansContext;
> import org.apache.webbeans.context.creational.CreationalContextImpl;
>@@ -39,7 +41,7 @@ public class ExtensionProducer<R> extend
> }
>
> @Override
>- public R produce(CreationalContext<R> creationalContext)
>+ protected R produce(Map<Interceptor<?>, ?> interceptors,
>CreationalContextImpl<R> creationalContext)
> {
> ExtensionLoader loader = webBeansContext.getExtensionLoader();
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InjectionPointProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/InjectionPointProducer.java?rev=1559930&r1=
>1559929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InjectionPointProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InjectionPointProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -18,8 +18,10 @@
> */
> package org.apache.webbeans.portable;
>
>-import javax.enterprise.context.spi.CreationalContext;
>+import java.util.Map;
>+
> import javax.enterprise.inject.spi.InjectionPoint;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.context.creational.CreationalContextImpl;
> import org.apache.webbeans.util.ClassUtil;
>@@ -31,7 +33,7 @@ public class InjectionPointProducer exte
> * {@inheritDoc}
> */
> @Override
>- public InjectionPoint produce(CreationalContext<InjectionPoint>
>creationalContext)
>+ protected InjectionPoint produce(Map<Interceptor<?>, ?>
>interceptors, CreationalContextImpl<InjectionPoint> creationalContext)
> {
> if (!(creationalContext instanceof CreationalContextImpl))
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InjectionTargetImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/InjectionTargetImpl.java?rev=1559930&r1=155
>9929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InjectionTargetImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InjectionTargetImpl.java
>Tue Jan 21 07:46:55 2014
>@@ -26,7 +26,6 @@ import org.apache.webbeans.exception.Web
> import org.apache.webbeans.inject.InjectableConstructor;
> import org.apache.webbeans.inject.InjectableField;
> import org.apache.webbeans.inject.InjectableMethod;
>-import org.apache.webbeans.intercept.DecoratorHandler;
> import org.apache.webbeans.intercept.DefaultInterceptorHandler;
> import org.apache.webbeans.intercept.InterceptorInvocationContext;
> import
>org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptor
>Info;
>@@ -40,8 +39,6 @@ import org.apache.webbeans.util.Asserts;
> import org.apache.webbeans.util.CDI11s;
> import org.apache.webbeans.util.ExceptionUtil;
>
>-import javax.decorator.Delegate;
>-import javax.enterprise.context.spi.Contextual;
> import javax.enterprise.context.spi.CreationalContext;
> import javax.enterprise.event.Observes;
> import javax.enterprise.inject.Disposes;
>@@ -50,7 +47,7 @@ import javax.enterprise.inject.spi.Annot
> import javax.enterprise.inject.spi.AnnotatedMethod;
> import javax.enterprise.inject.spi.AnnotatedParameter;
> import javax.enterprise.inject.spi.AnnotatedType;
>-import javax.enterprise.inject.spi.Decorator;
>+import javax.enterprise.inject.spi.Bean;
> import javax.enterprise.inject.spi.InjectionPoint;
> import javax.enterprise.inject.spi.InjectionTarget;
> import javax.enterprise.inject.spi.InterceptionType;
>@@ -64,8 +61,9 @@ import java.lang.reflect.Field;
> import java.lang.reflect.Member;
> import java.lang.reflect.Method;
> import java.text.MessageFormat;
>-import java.util.HashMap;
>+import java.util.ArrayList;
> import java.util.HashSet;
>+import java.util.LinkedHashSet;
> import java.util.List;
> import java.util.Map;
> import java.util.Set;
>@@ -108,37 +106,6 @@ public class InjectionTargetImpl<T> exte
>
> private List<Interceptor<?>> aroundConstructInterceptors;
>
>- /**
>- * static information about Interceptors and Decorators of that bean
>- */
>- private BeanInterceptorInfo interceptorInfo = null;
>-
>- /**
>- * The passivationId of the bean this InjectionTarget serves.
>- * We need this to restore the interceptor proxy on de-serialisation.
>- * Only needed for Beans which are {@link
>javax.enterprise.inject.spi.PassivationCapable}.
>- */
>- private String beanPassivationId = 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;
>- private InjectionTarget<T> delegate = null;
>- private final boolean noProxy; // Mark this injection target
>usable as a delegate ni a custom InjectionTarget
>-
>-
> public InjectionTargetImpl(AnnotatedType<T> annotatedType,
>Set<InjectionPoint> points, WebBeansContext webBeansContext,
> List<AnnotatedMethod<?>>
>postConstructMethods, List<AnnotatedMethod<?>> preDestroyMethods)
> {
>@@ -149,104 +116,40 @@ public class InjectionTargetImpl<T> exte
> this.webBeansContext = webBeansContext;
> this.postConstructMethods = postConstructMethods;
> this.preDestroyMethods = preDestroyMethods;
>- noProxy = false;
> }
>-
>- public InjectionTargetImpl(final InjectionTargetImpl<T> delegate)
>+
>+ @Override
>+ protected void defineLifecycleInterceptors(Bean<T> bean,
>AnnotatedType<T> annotatedType, WebBeansContext webBeansContext)
> {
>- super(delegate.getInjectionPoints());
>- noProxy = true;
>- annotatedType = delegate.annotatedType;
>- webBeansContext = delegate.webBeansContext;
>- postConstructMethods = delegate.postConstructMethods;
>- preDestroyMethods = delegate.preDestroyMethods;
>- }
>+ BeanInterceptorInfo interceptorInfo = getInterceptorInfo();
>+
>+ postConstructInterceptors
>+ =
>getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
>interceptorInfo.getCdiInterceptors(),
>InterceptionType.POST_CONSTRUCT);
>
>- public BeanInterceptorInfo getInterceptorInfo()
>- {
>- return interceptorInfo;
>- }
>+ preDestroyInterceptors
>+ =
>getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
>interceptorInfo.getCdiInterceptors(), InterceptionType.PRE_DESTROY);
>
>- public void setInterceptorInfo(BeanInterceptorInfo
>interceptorInfo, Class<? extends T> proxyClass, Map<Method,
>List<Interceptor<?>>> methodInterceptors,
>- List<Interceptor<?>>
>postConstructInterceptors, List<Interceptor<?>>
>preDestroyInterceptors, List<Interceptor<?>> aroundConstruct,
>- String beanPassivationId)
>- {
>- this.interceptorInfo = interceptorInfo;
>- this.proxyClass = proxyClass;
>- this.methodInterceptors = methodInterceptors;
>- this.postConstructInterceptors = postConstructInterceptors;
>- this.preDestroyInterceptors = preDestroyInterceptors;
>- aroundConstructInterceptors = aroundConstruct;
>- this.beanPassivationId = beanPassivationId;
>- }
>-
>- /**
>- * Helper method to unwrap the internal proxy instance.
>- * Returns the instance directly if this is not a proxied instance.
>- */
>- protected T unwrapProxyInstance(T probableProxyInstance)
>- {
>- if (probableProxyInstance instanceof OwbInterceptorProxy)
>+ if (CDI11s.AROUND_CONSTRUCT != null)
> {
>- return
>webBeansContext.getInterceptorDecoratorProxyFactory().unwrapInstance(proba
>bleProxyInstance);
>+ aroundConstructInterceptors =
>getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
>interceptorInfo.getCdiInterceptors(), CDI11s.AROUND_CONSTRUCT);
>+ }
>+ else
>+ {
>+ aroundConstructInterceptors = new
>ArrayList<Interceptor<?>>();
> }
>-
>- return probableProxyInstance;
> }
>
> @Override
>- public T produce(CreationalContext<T> creationalContext)
>+ public T produce(Map<Interceptor<?>, ?> interceptorInstances,
>CreationalContextImpl<T> creationalContext)
> {
>- final CreationalContextImpl<T> creationalContextImpl =
>(CreationalContextImpl<T>) creationalContext;
>- if (noProxy)
>- {
>- return newInstance(creationalContextImpl);
>- }
>-
>- final Map<Interceptor<?>,Object> interceptorInstances = new
>HashMap<Interceptor<?>, Object>();
>- final Contextual<T> oldContextual =
>creationalContextImpl.getContextual();
>- final boolean hasAroundConstruct =
>aroundConstructInterceptors != null &&
>!aroundConstructInterceptors.isEmpty();
>-
>- if (proxyClass != null || hasAroundConstruct)
>- {
>- // apply interceptorInfo
>-
>- // create EJB-style interceptors
>- for (final Interceptor interceptorBean :
>interceptorInfo.getEjbInterceptors())
>- {
>- creationalContextImpl.putContextual(interceptorBean);
>- interceptorInstances.put(interceptorBean,
>interceptorBean.create(creationalContext));
>- }
>-
>- // create CDI-style interceptors
>- for (final Interceptor interceptorBean :
>interceptorInfo.getCdiInterceptors())
>- {
>- creationalContextImpl.putContextual(interceptorBean);
>- interceptorInstances.put(interceptorBean,
>interceptorBean.create(creationalContext));
>- }
>- }
>-
>- T instance;
>- if (hasAroundConstruct)
>+ if (hasAroundConstruct())
> {
> try
> {
> final Constructor<T> cons =
>getConstructor().getJavaMember();
>- final InjectableConstructor<T> injectableConstructor
>= new InjectableConstructor<T>(cons, this, creationalContextImpl);
>- new InterceptorInvocationContext<T>(null,
>CDI11s.AROUND_CONSTRUCT, aroundConstructInterceptors,
>interceptorInstances,
>- cons,
>injectableConstructor.createParameters())
>- {
>- @Override
>- protected Object realProceed() throws Exception
>- {
>- if (delegate != null)
>- {
>- return
>delegate.produce(creationalContextImpl);
>- }
>- return injectableConstructor.doInjection();
>- }
>- }.proceed();
>- instance = injectableConstructor.getInstance();
>+ final InjectableConstructor<T> injectableConstructor
>= new InjectableConstructor<T>(cons, this, creationalContext);
>+ return (T)new InterceptorInvocationContext<T>(null,
>CDI11s.AROUND_CONSTRUCT, aroundConstructInterceptors,
>interceptorInstances,
>+ cons,
>injectableConstructor.createParameters()).proceed();
> }
> catch (final Exception e) // CDI 1.0
> {
>@@ -255,99 +158,32 @@ public class InjectionTargetImpl<T> exte
> }
> else
> {
>- if (delegate != null)
>- {
>- instance = delegate.produce(creationalContextImpl);
>- }
>- else
>- {
>- instance = newInstance(creationalContextImpl);
>- }
>+ return newInstance(creationalContext);
> }
>-
>- if (proxyClass != null)
>- {
>- InterceptorDecoratorProxyFactory pf =
>webBeansContext.getInterceptorDecoratorProxyFactory();
>-
>- // register the bean itself for self-interception
>- if (interceptorInfo.getSelfInterceptorBean() != null)
>- {
>-
>interceptorInstances.put(interceptorInfo.getSelfInterceptorBean(),
>instance);
>- }
>-
>- T delegate = instance;
>- if (interceptorInfo.getDecorators() != null &&
>!isDelegateInjection(creationalContext))
>- {
>- List<Decorator<?>> decorators =
>interceptorInfo.getDecorators();
>- Map<Decorator<?>, Object> instances = new
>HashMap<Decorator<?>, Object>();
>- for (int i = decorators.size(); i > 0; i--)
>- {
>- Decorator decorator = decorators.get(i - 1);
>- creationalContextImpl.putContextual(decorator);
>- creationalContextImpl.putDelegate(delegate);
>- Object decoratorInstance =
>decorator.create((CreationalContext) creationalContext);
>- instances.put(decorator, decoratorInstance);
>- delegate = pf.createProxyInstance(proxyClass,
>instance, new DecoratorHandler(interceptorInfo, instances, i - 1,
>instance, beanPassivationId));
>- }
>- }
>- InterceptorHandler interceptorHandler = new
>DefaultInterceptorHandler<T>(instance, delegate, methodInterceptors,
>interceptorInstances, beanPassivationId);
>-
>- T proxyInstance = pf.createProxyInstance(proxyClass,
>instance, interceptorHandler);
>- instance = proxyInstance;
>- creationalContextImpl.putContextual(oldContextual);
>- }
>-
>- return instance;
> }
>
>- protected boolean isDelegateInjection(final CreationalContext<?> cc)
>+ @Override
>+ protected boolean needsProxy()
> {
>- if (CreationalContextImpl.class.isInstance(cc))
>- {
>- final InjectionPoint ip =
>CreationalContextImpl.class.cast(cc).getInjectionPoint();
>- if (ip == null)
>- {
>- return false;
>- }
>-
>- final Member member = ip.getMember();
>- if (member != null
>- && Field.class.isInstance(member) &&
>Field.class.cast(member).getAnnotation(Delegate.class) != null)
>- {
>- return true;
>- }
>- }
>- return false;
>+ return super.needsProxy() || postConstructInterceptors.size()
>!= 0 || preDestroyInterceptors.size() != 0;
> }
>
>- protected T newInstance(CreationalContextImpl<T> creationalContext)
>+ protected boolean hasAroundConstruct()
> {
>- return new
>InjectableConstructor<T>(getConstructor().getJavaMember(), this,
>creationalContext).doInjection();
>+ return aroundConstructInterceptors != null &&
>!aroundConstructInterceptors.isEmpty();
> }
>-
>- @Override
>- public void dispose(T instance)
>+
>+ protected T newInstance(CreationalContextImpl<T> creationalContext)
> {
>- if (delegate != null)
>- {
>- delegate.dispose(instance);
>- }
>+ return new
>InjectableConstructor<T>(getConstructor().getJavaMember(), this,
>creationalContext).doInjection();
> }
>
> @Override
> public void inject(T instance, CreationalContext<T> context)
> {
>- if (delegate == null)
>- {
>- inject(instance.getClass(),
>unwrapProxyInstance(instance), (CreationalContextImpl<T>) context);
>- }
>- else
>- {
>- delegate.inject(instance, context);
>- }
>+ inject(instance.getClass(), unwrapProxyInstance(instance),
>(CreationalContextImpl<T>) context);
> }
>
>-
> private void inject(Class<?> type, final T instance,
>CreationalContextImpl<T> context)
> {
> if (type == null || type.equals(Object.class))
>@@ -440,19 +276,12 @@ public class InjectionTargetImpl<T> exte
> @Override
> public void postConstruct(final T instance)
> {
>- if (delegate != null)
>- {
>- delegate.postConstruct(instance);
>- return; // TODO: sure?
>- }
>-
> Map<Interceptor<?>, ?> interceptorInstances = null;
> T internalInstance = instance;
>
>- if (interceptorInfo != null && instance instanceof
>OwbInterceptorProxy)
>+ if (getInterceptorInfo() != null && instance instanceof
>OwbInterceptorProxy)
> {
>- InterceptorDecoratorProxyFactory pf =
>webBeansContext.getInterceptorDecoratorProxyFactory();
>- InterceptorHandler ih =
>pf.getInterceptorHandler((OwbInterceptorProxy) instance);
>+ InterceptorHandler ih =
>getProxyFactory().getInterceptorHandler((OwbInterceptorProxy)
>instance);
> if (ih instanceof DefaultInterceptorHandler)
> {
> DefaultInterceptorHandler dih =
>(DefaultInterceptorHandler) ih;
>@@ -480,16 +309,10 @@ public class InjectionTargetImpl<T> exte
> @Override
> public void preDestroy(T instance)
> {
>- if (delegate != null)
>- {
>- delegate.preDestroy(instance);
>- return; // TODO: sure?
>- }
>-
> Map<Interceptor<?>, ?> interceptorInstances = null;
> T internalInstance = instance;
>
>- if (interceptorInfo != null && instance instanceof
>OwbInterceptorProxy)
>+ if (getInterceptorInfo() != null && instance instanceof
>OwbInterceptorProxy)
> {
> InterceptorDecoratorProxyFactory pf =
>webBeansContext.getInterceptorDecoratorProxyFactory();
> InterceptorHandler ih =
>pf.getInterceptorHandler((OwbInterceptorProxy) instance);
>@@ -599,13 +422,25 @@ public class InjectionTargetImpl<T> exte
> return false;
> }
>
>- public void setDelegate(final InjectionTarget<T> delegate)
>+ private List<Interceptor<?>>
>getLifecycleInterceptors(LinkedHashSet<Interceptor<?>>
>ejbInterceptors, List<Interceptor<?>> cdiInterceptors,
>InterceptionType interceptionType)
> {
>- this.delegate = delegate;
>- }
>+ List<Interceptor<?>> lifecycleInterceptors = new
>ArrayList<Interceptor<?>>();
>
>- public InjectionTarget<T> simpleInstance()
>- {
>- return new InjectionTargetImpl<T>(this);
>+ for (Interceptor<?> ejbInterceptor : ejbInterceptors)
>+ {
>+ if (ejbInterceptor.intercepts(interceptionType))
>+ {
>+ lifecycleInterceptors.add(ejbInterceptor);
>+ }
>+ }
>+ for (Interceptor<?> cdiInterceptor : cdiInterceptors)
>+ {
>+ if (cdiInterceptor.intercepts(interceptionType))
>+ {
>+ lifecycleInterceptors.add(cdiInterceptor);
>+ }
>+ }
>+
>+ return lifecycleInterceptors;
> }
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InstanceProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/InstanceProducer.java?rev=1559930&r1=155992
>9&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InstanceProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/InstanceProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -21,11 +21,12 @@ package org.apache.webbeans.portable;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.ParameterizedType;
> import java.lang.reflect.Type;
>+import java.util.Map;
> import java.util.Set;
>
>-import javax.enterprise.context.spi.CreationalContext;
> import javax.enterprise.inject.Instance;
> import javax.enterprise.inject.spi.InjectionPoint;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.component.InstanceBean;
> import org.apache.webbeans.config.WebBeansContext;
>@@ -46,12 +47,12 @@ public class InstanceProducer<T> extends
> }
>
> @Override
>- public Instance<T> produce(CreationalContext<Instance<T>>
>creationalContext)
>+ protected Instance<T> produce(Map<Interceptor<?>, ?>
>interceptors, CreationalContextImpl<Instance<T>> creationalContext)
> {
>+ CreationalContextImpl<Instance<T>> creationalContextImpl = null;
> try
> {
> InjectionPoint injectionPoint = null;
>- CreationalContextImpl<Instance<T>> creationalContextImpl =
>null;
> if (creationalContext instanceof CreationalContextImpl)
> {
> creationalContextImpl =
>(CreationalContextImpl<Instance<T>>)creationalContext;
>@@ -77,15 +78,13 @@ public class InstanceProducer<T> extends
> type = returnType;
> }
>
>- Instance<T> instance = new InstanceImpl<T>(type,
>injectionPoint, webBeansContext, creationalContextImpl,
>qualifiers.toArray(new Annotation[qualifiers.size()]));
>-
>- return instance;
>+ return new InstanceImpl<T>(type, injectionPoint,
>webBeansContext, creationalContextImpl, qualifiers.toArray(new
>Annotation[qualifiers.size()]));
> }
> finally
> {
>- if (creationalContext instanceof CreationalContextImpl)
>+ if (creationalContextImpl != null)
> {
>-
>((CreationalContextImpl<Instance<T>>)creationalContext).removeInjectionPoi
>nt();
>+ creationalContextImpl.removeInjectionPoint();
> }
> }
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/MetadataProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/MetadataProducer.java?rev=1559930&r1=155992
>9&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/MetadataProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/MetadataProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -18,8 +18,10 @@
> */
> package org.apache.webbeans.portable;
>
>+import java.util.Map;
>+
> import javax.enterprise.context.spi.Contextual;
>-import javax.enterprise.context.spi.CreationalContext;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.context.creational.CreationalContextImpl;
>
>@@ -27,7 +29,7 @@ public class MetadataProducer<T> extends
> {
>
> @Override
>- public Contextual<T> produce(CreationalContext<Contextual<T>>
>creationalContext)
>+ protected Contextual<T> produce(Map<Interceptor<?>, ?>
>interceptors, CreationalContextImpl<Contextual<T>> creationalContext)
> {
> if (!(creationalContext instanceof CreationalContextImpl))
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProducerFieldProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/ProducerFieldProducer.java?rev=1559930&r1=1
>559929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProducerFieldProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProducerFieldProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -21,15 +21,18 @@ package org.apache.webbeans.portable;
> import java.lang.reflect.Field;
> import java.lang.reflect.Modifier;
> import java.util.Collections;
>+import java.util.Map;
>
> import javax.enterprise.context.Dependent;
> import javax.enterprise.context.spi.CreationalContext;
> import javax.enterprise.inject.spi.AnnotatedField;
> import javax.enterprise.inject.spi.Bean;
> import javax.enterprise.inject.spi.InjectionPoint;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.component.AbstractOwbBean;
> import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.context.creational.CreationalContextImpl;
> import org.apache.webbeans.exception.WebBeansException;
> import org.apache.webbeans.util.Asserts;
> import org.apache.webbeans.util.WebBeansUtil;
>@@ -53,7 +56,7 @@ public class ProducerFieldProducer<T, P>
> }
>
> @Override
>- public T produce(CreationalContext<T> creationalContext)
>+ protected T produce(Map<Interceptor<?>, ?> interceptors,
>CreationalContextImpl<T> creationalContext)
> {
> T instance = null;
> P parentInstance = null;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProducerMethodProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/ProducerMethodProducer.java?rev=1559930&r1=
>1559929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProducerMethodProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProducerMethodProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -20,12 +20,14 @@ package org.apache.webbeans.portable;
>
> import java.lang.reflect.Method;
> import java.lang.reflect.Modifier;
>+import java.util.Map;
> import java.util.Set;
>
> import javax.enterprise.context.spi.CreationalContext;
> import javax.enterprise.inject.spi.AnnotatedMethod;
> import javax.enterprise.inject.spi.Bean;
> import javax.enterprise.inject.spi.InjectionPoint;
>+import javax.enterprise.inject.spi.Interceptor;
>
> import org.apache.webbeans.config.WebBeansContext;
> import org.apache.webbeans.context.creational.CreationalContextImpl;
>@@ -89,7 +91,7 @@ public class ProducerMethodProducer<T, P
> }
>
> @Override
>- public T produce(CreationalContext<T> creationalContext)
>+ protected T produce(Map<Interceptor<?>, ?> interceptors,
>CreationalContextImpl<T> creationalContext)
> {
> P parentInstance = null;
> CreationalContext<P> parentCreationalContext = null;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProviderBasedProducer.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/ProviderBasedProducer.java?rev=1559930&r1=1
>559929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProviderBasedProducer.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/ProviderBasedProducer.java
>Tue Jan 21 07:46:55 2014
>@@ -18,10 +18,13 @@
> */
> package org.apache.webbeans.portable;
>
>-import javax.enterprise.context.spi.CreationalContext;
>+import java.util.Map;
>+
>+import javax.enterprise.inject.spi.Interceptor;
> import javax.inject.Provider;
>
> import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.context.creational.CreationalContextImpl;
> import org.apache.webbeans.proxy.NormalScopeProxyFactory;
> import org.apache.webbeans.util.WebBeansUtil;
>
>@@ -43,7 +46,7 @@ public class ProviderBasedProducer<T> ex
> }
>
> @Override
>- public T produce(CreationalContext<T> creationalContext)
>+ protected T produce(Map<Interceptor<?>, ?> interceptors,
>CreationalContextImpl<T> creationalContext)
> {
> if (proxyInstance == null)
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/events/ProcessInjectionTargetImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/events/ProcessInjectionTargetImpl.java?rev=
>1559930&r1=1559929&r2=1559930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/events/ProcessInjectionTargetImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/events/ProcessInjectionTargetImpl.java
>Tue Jan 21 07:46:55 2014
>@@ -18,13 +18,12 @@
> */
> package org.apache.webbeans.portable.events;
>
>-import org.apache.webbeans.config.WebBeansContext;
>-import org.apache.webbeans.portable.InjectionTargetImpl;
>-
> import javax.enterprise.inject.spi.AnnotatedType;
> import javax.enterprise.inject.spi.InjectionTarget;
> import javax.enterprise.inject.spi.ProcessInjectionTarget;
>
>+import org.apache.webbeans.config.WebBeansContext;
>+
> /**
> * Implementation of the {@link ProcessInjectionTarget}.
> *
>@@ -38,8 +37,8 @@ public class ProcessInjectionTargetImpl<
> private final AnnotatedType<X> annotatedType;
>
> /**Injection target that is used by container to inject
>dependencies*/
>- private InjectionTargetImpl<X> injectionTarget = null;
>-
>+ private InjectionTarget<X> injectionTarget = null;
>+
> /**Injection target is set or not*/
> private boolean set = false;
>
>@@ -48,22 +47,20 @@ public class ProcessInjectionTargetImpl<
> *
> * @param injectionTarget injection target
> */
>- public ProcessInjectionTargetImpl(InjectionTargetImpl<X>
>injectionTarget, AnnotatedType<X> annotatedType)
>+ public ProcessInjectionTargetImpl(InjectionTarget<X>
>injectionTarget, AnnotatedType<X> annotatedType)
> {
> this.injectionTarget = injectionTarget;
> this.annotatedType = annotatedType;
> }
>-
>+
> /**
> * {@inheritDoc}
> */
>- @Override
> public void addDefinitionError(Throwable t)
> {
>
>WebBeansContext.getInstance().getBeanManagerImpl().getErrorStack().pushErr
>or(t);
> }
>
>- @Override
> public AnnotatedType<X> getAnnotatedType()
> {
> return annotatedType;
>@@ -72,24 +69,17 @@ public class ProcessInjectionTargetImpl<
> /**
> * {@inheritDoc}
> */
>- @Override
> public InjectionTarget<X> getInjectionTarget()
> {
>- return injectionTarget.simpleInstance();
>- }
>-
>- public InjectionTarget<X> getCompleteInjectionTarget()
>- {
> return injectionTarget;
> }
>
> /**
> * {@inheritDoc}
> */
>- @Override
> public void setInjectionTarget(InjectionTarget<X> injectionTarget)
> {
>- this.injectionTarget.setDelegate(injectionTarget); // wrap it
>to keep interceptors info
>+ this.injectionTarget = injectionTarget;
> set = true;
> }
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/util/WebBeansUtil.java?rev=1559930&r1=1559929&r2=155
>9930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>Tue Jan 21 07:46:55 2014
>@@ -58,6 +58,7 @@ import org.apache.webbeans.exception.inj
> import
>org.apache.webbeans.exception.inject.InconsistentSpecializationException;
> import org.apache.webbeans.inject.AlternativesManager;
> import org.apache.webbeans.plugins.PluginLoader;
>+import org.apache.webbeans.portable.AbstractProducer;
> import org.apache.webbeans.portable.InjectionTargetImpl;
> import org.apache.webbeans.portable.ProducerMethodProducer;
> import org.apache.webbeans.portable.events.discovery.ErrorStack;
>@@ -1551,9 +1552,10 @@ public final class WebBeansUtil
> new ProducerFieldBeansBuilder(managedBean.getWebBeansContext(),
>managedBean.getAnnotatedType()).defineProducerFields(managedBean);
> new ObserverMethodsBuilder<T,
>InjectionTargetBean<T>>(webBeansContext,
>managedBean.getAnnotatedType()).defineObserverMethods(managedBean);
>
>- if (managedBean instanceof InjectionTargetBean)
>+ if (managedBean.getProducer() instanceof AbstractProducer)
> {
>- ((InjectionTargetBean)
>managedBean).defineBeanInterceptorStack();
>+ AbstractProducer<T> producer =
>(AbstractProducer<T>)managedBean.getProducer();
>+ producer.defineInterceptorStack(managedBean,
>managedBean.getAnnotatedType(), webBeansContext);
> }
>
> return managedBean;
>@@ -1657,9 +1659,10 @@ public final class WebBeansUtil
> new ProducerFieldBeansBuilder(managedBean.getWebBeansContext(),
>managedBean.getAnnotatedType()).defineProducerFields(managedBean);
> new ObserverMethodsBuilder<T,
>InjectionTargetBean<T>>(webBeansContext,
>managedBean.getAnnotatedType()).defineObserverMethods(managedBean);
>
>- if (managedBean instanceof InjectionTargetBean)
>+ if (managedBean.getProducer() instanceof AbstractProducer)
> {
>- ((InjectionTargetBean)
>managedBean).defineBeanInterceptorStack();
>+ AbstractProducer<T> producer =
>(AbstractProducer<T>)managedBean.getProducer();
>+ producer.defineInterceptorStack(managedBean,
>managedBean.getAnnotatedType(), webBeansContext);
> }
> return managedBean;
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/Te
>stContext.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/test/TestContext.java?rev=1559930&r1=1559929&r2=1559
>930&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/Te
>stContext.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/Te
>stContext.java
>Tue Jan 21 07:46:55 2014
>@@ -57,6 +57,7 @@ import org.apache.webbeans.deployment.St
> import org.apache.webbeans.exception.WebBeansConfigurationException;
> import org.apache.webbeans.logger.WebBeansLoggerFacade;
> import org.apache.webbeans.newtests.AbstractUnitTest;
>+import org.apache.webbeans.portable.AbstractProducer;
> import
>org.apache.webbeans.portable.events.generics.GProcessAnnotatedType;
> import
>org.apache.webbeans.test.component.decorator.broken.DelegateAttributeIsnot
>Interface;
> import
>org.apache.webbeans.test.component.decorator.broken.DelegateAttributeMustI
>mplementAllDecoratedTypes;
>@@ -281,9 +282,10 @@ public abstract class TestContext implem
> bean = define(clazz, WebBeansType.MANAGED,
>webBeansContext.getAnnotatedElementFactory().newAnnotatedType(clazz));
> if (bean != null)
> {
>- if (bean instanceof InjectionTargetBean)
>+ if (bean.getProducer() instanceof AbstractProducer)
> {
>- ((InjectionTargetBean)
>bean).defineBeanInterceptorStack();
>+ AbstractProducer<T> producer =
>(AbstractProducer<T>)bean.getProducer();
>+ producer.defineInterceptorStack(bean,
>bean.getAnnotatedType(), webBeansContext);
> }
>
> getComponents().add((AbstractOwbBean<?>) bean);