Author: rmannibucau
Date: Sun Jun 29 17:30:57 2014
New Revision: 1606541
URL: http://svn.apache.org/r1606541
Log:
fixing BeanAttributes usage for ManagedBean + filtering Decorator for Event<X>
by type
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DecoratorHandler.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/EventProducer.java
openwebbeans/trunk/webbeans-tck/testng-dev.xml
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=1606541&r1=1606540&r2=1606541&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
Sun Jun 29 17:30:57 2014
@@ -1251,6 +1251,13 @@ public class BeansDeployer
{
BeanAttributes<T> beanAttributes =
BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build();
+ final ProcessBeanAttributesImpl event =
fireProcessBeanAttributes(annotatedType, beanAttributes);
+ beanAttributes = updateBeanAttributesIfNeeded(beanAttributes,
event);
+ if (event.isVeto())
+ {
+ return;
+ }
+
ManagedBeanBuilder<T, ManagedBean<T>> managedBeanCreator = new
ManagedBeanBuilder<T, ManagedBean<T>>(webBeansContext, annotatedType,
beanAttributes);
if(WebBeansUtil.isDecorator(annotatedType))
@@ -1260,18 +1267,12 @@ public class BeansDeployer
logger.log(Level.FINE, "Found Managed Bean Decorator with
class name : [{0}]", annotatedType.getJavaClass().getName());
}
- final ProcessBeanAttributesImpl event =
fireProcessBeanAttributes(annotatedType, beanAttributes);
- if (!event.isVeto())
+ DecoratorBeanBuilder<T> dbb = new
DecoratorBeanBuilder<T>(webBeansContext, annotatedType, beanAttributes);
+ if (dbb.isDecoratorEnabled())
{
- beanAttributes =
updateBeanAttributesIfNeeded(beanAttributes, event);
-
- DecoratorBeanBuilder<T> dbb = new
DecoratorBeanBuilder<T>(webBeansContext, annotatedType, beanAttributes);
- if (dbb.isDecoratorEnabled())
- {
- dbb.defineDecoratorRules();
- DecoratorBean<T> decorator = dbb.getBean();
-
webBeansContext.getDecoratorsManager().addDecorator(decorator);
- }
+ dbb.defineDecoratorRules();
+ DecoratorBean<T> decorator = dbb.getBean();
+
webBeansContext.getDecoratorsManager().addDecorator(decorator);
}
}
else if(WebBeansUtil.isCdiInterceptor(annotatedType))
@@ -1281,122 +1282,110 @@ public class BeansDeployer
logger.log(Level.FINE, "Found Managed Bean Interceptor
with class name : [{0}]", annotatedType.getJavaClass().getName());
}
- final ProcessBeanAttributesImpl event =
fireProcessBeanAttributes(annotatedType, beanAttributes);
- if (!event.isVeto())
+ CdiInterceptorBeanBuilder<T> ibb = new
CdiInterceptorBeanBuilder<T>(webBeansContext, annotatedType, beanAttributes);
+ if (ibb.isInterceptorEnabled())
{
- beanAttributes =
updateBeanAttributesIfNeeded(beanAttributes, event);
-
- CdiInterceptorBeanBuilder<T> ibb = new
CdiInterceptorBeanBuilder<T>(webBeansContext, annotatedType, beanAttributes);
- if (ibb.isInterceptorEnabled())
- {
- ibb.defineCdiInterceptorRules();
- CdiInterceptorBean<T> interceptor = ibb.getBean();
-
webBeansContext.getInterceptorsManager().addCdiInterceptor(interceptor);
- }
+ ibb.defineCdiInterceptorRules();
+ CdiInterceptorBean<T> interceptor = ibb.getBean();
+
webBeansContext.getInterceptorsManager().addCdiInterceptor(interceptor);
}
}
else
{
- final ProcessBeanAttributesImpl event =
fireProcessBeanAttributes(annotatedType, beanAttributes);
- if (!event.isVeto())
- {
- beanAttributes =
updateBeanAttributesIfNeeded(beanAttributes, event);
+ InjectionTargetBean<T> bean = managedBeanCreator.getBean();
- InjectionTargetBean<T> bean = managedBeanCreator.getBean();
-
- if
(webBeansContext.getDecoratorsManager().containsCustomDecoratorClass(annotatedType.getJavaClass())
||
-
webBeansContext.getInterceptorsManager().containsCustomInterceptorClass(annotatedType.getJavaClass()))
- {
- return; //TODO discuss this case (it was ignored
before)
- }
+ if
(webBeansContext.getDecoratorsManager().containsCustomDecoratorClass(annotatedType.getJavaClass())
||
+
webBeansContext.getInterceptorsManager().containsCustomInterceptorClass(annotatedType.getJavaClass()))
+ {
+ return; //TODO discuss this case (it was ignored before)
+ }
- if (logger.isLoggable(Level.FINE))
- {
- logger.log(Level.FINE, "Found Managed Bean with class
name : [{0}]", annotatedType.getJavaClass().getName());
- }
+ if (logger.isLoggable(Level.FINE))
+ {
+ logger.log(Level.FINE, "Found Managed Bean with class name
: [{0}]", annotatedType.getJavaClass().getName());
+ }
- Set<ObserverMethod<?>> observerMethods = new
HashSet<ObserverMethod<?>>();
- if(bean.isEnabled())
- {
- observerMethods = new ObserverMethodsBuilder<T,
InjectionTargetBean<T>>(webBeansContext,
bean.getAnnotatedType()).defineObserverMethods(bean);
- }
- Set<ProducerMethodBean<?>> producerMethods = new
ProducerMethodBeansBuilder(bean.getWebBeansContext(),
bean.getAnnotatedType()).defineProducerMethods(bean);
- Set<ProducerFieldBean<?>> producerFields = new
ProducerFieldBeansBuilder(bean.getWebBeansContext(),
bean.getAnnotatedType()).defineProducerFields(bean);
+ Set<ObserverMethod<?>> observerMethods = new
HashSet<ObserverMethod<?>>();
+ if(bean.isEnabled())
+ {
+ observerMethods = new ObserverMethodsBuilder<T,
InjectionTargetBean<T>>(webBeansContext,
bean.getAnnotatedType()).defineObserverMethods(bean);
+ }
+ Set<ProducerMethodBean<?>> producerMethods = new
ProducerMethodBeansBuilder(bean.getWebBeansContext(),
bean.getAnnotatedType()).defineProducerMethods(bean);
+ Set<ProducerFieldBean<?>> producerFields = new
ProducerFieldBeansBuilder(bean.getWebBeansContext(),
bean.getAnnotatedType()).defineProducerFields(bean);
- ManagedBean<T> managedBean = (ManagedBean<T>)bean;
- Map<ProducerMethodBean<?>,AnnotatedMethod<?>>
annotatedMethods =
- new HashMap<ProducerMethodBean<?>,
AnnotatedMethod<?>>();
+ ManagedBean<T> managedBean = (ManagedBean<T>)bean;
+ Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods
=
+ new HashMap<ProducerMethodBean<?>,
AnnotatedMethod<?>>();
- for(ProducerMethodBean<?> producerMethod : producerMethods)
- {
- AnnotatedMethod<?> method =
webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(producerMethod.getCreatorMethod(),
annotatedType);
-
webBeansContext.getWebBeansUtil().inspectErrorStack("There are errors that are
added by ProcessProducer event observers for "
- + "ProducerMethods. Look at logs for further
details");
+ for(ProducerMethodBean<?> producerMethod : producerMethods)
+ {
+ AnnotatedMethod<?> method =
webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(producerMethod.getCreatorMethod(),
annotatedType);
+ webBeansContext.getWebBeansUtil().inspectErrorStack("There
are errors that are added by ProcessProducer event observers for "
+ + "ProducerMethods. Look at logs for further
details");
- annotatedMethods.put(producerMethod, method);
- }
+ annotatedMethods.put(producerMethod, method);
+ }
- Map<ProducerFieldBean<?>,AnnotatedField<?>>
annotatedFields =
- new HashMap<ProducerFieldBean<?>,
AnnotatedField<?>>();
+ Map<ProducerFieldBean<?>,AnnotatedField<?>> annotatedFields =
+ new HashMap<ProducerFieldBean<?>, AnnotatedField<?>>();
- for(ProducerFieldBean<?> producerField : producerFields)
- {
-
webBeansContext.getWebBeansUtil().inspectErrorStack("There are errors that are
added by ProcessProducer event observers for"
- + " ProducerFields. Look at logs for further
details");
+ for(ProducerFieldBean<?> producerField : producerFields)
+ {
+ webBeansContext.getWebBeansUtil().inspectErrorStack("There
are errors that are added by ProcessProducer event observers for"
+ + " ProducerFields. Look at logs for further
details");
- annotatedFields.put(producerField,
-
webBeansContext.getAnnotatedElementFactory().newAnnotatedField(
- producerField.getCreatorField(),
-
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(producerField.getBeanClass())));
- }
+ annotatedFields.put(producerField,
+
webBeansContext.getAnnotatedElementFactory().newAnnotatedField(
+ producerField.getCreatorField(),
+
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(producerField.getBeanClass())));
+ }
- Map<ObserverMethod<?>,AnnotatedMethod<?>>
observerMethodsMap =
- new HashMap<ObserverMethod<?>,
AnnotatedMethod<?>>();
+ Map<ObserverMethod<?>,AnnotatedMethod<?>> observerMethodsMap =
+ new HashMap<ObserverMethod<?>, AnnotatedMethod<?>>();
- for(ObserverMethod<?> observerMethod : observerMethods)
- {
- ObserverMethodImpl<?> impl =
(ObserverMethodImpl<?>)observerMethod;
- AnnotatedMethod<?> method = impl.getObserverMethod();
+ for(ObserverMethod<?> observerMethod : observerMethods)
+ {
+ ObserverMethodImpl<?> impl =
(ObserverMethodImpl<?>)observerMethod;
+ AnnotatedMethod<?> method = impl.getObserverMethod();
- observerMethodsMap.put(observerMethod, method);
- }
+ observerMethodsMap.put(observerMethod, method);
+ }
- BeanManagerImpl beanManager =
webBeansContext.getBeanManagerImpl();
+ BeanManagerImpl beanManager =
webBeansContext.getBeanManagerImpl();
- //Fires ProcessManagedBean
- ProcessBeanImpl<T> processBeanEvent = new
GProcessManagedBean(managedBean, annotatedType);
- beanManager.fireEvent(processBeanEvent);
- webBeansContext.getWebBeansUtil().inspectErrorStack("There
are errors that are added by ProcessManagedBean event observers for " +
- "managed beans. Look at logs for further details");
-
- //Fires ProcessProducerMethod
-
webBeansContext.getWebBeansUtil().fireProcessProducerMethodBeanEvent(annotatedMethods,
annotatedType);
- webBeansContext.getWebBeansUtil().inspectErrorStack("There
are errors that are added by ProcessProducerMethod event observers for " +
- "producer method beans. Look at logs for further
details");
-
- //Fires ProcessProducerField
-
webBeansContext.getWebBeansUtil().fireProcessProducerFieldBeanEvent(annotatedFields);
- webBeansContext.getWebBeansUtil().inspectErrorStack("There
are errors that are added by ProcessProducerField event observers for " +
- "producer field beans. Look at logs for further
details");
-
- //Fire ObservableMethods
-
webBeansContext.getWebBeansUtil().fireProcessObservableMethodBeanEvent(observerMethodsMap);
- webBeansContext.getWebBeansUtil().inspectErrorStack("There
are errors that are added by ProcessObserverMethod event observers for " +
- "observer methods. Look at logs for further
details");
+ //Fires ProcessManagedBean
+ ProcessBeanImpl<T> processBeanEvent = new
GProcessManagedBean(managedBean, annotatedType);
+ beanManager.fireEvent(processBeanEvent);
+ webBeansContext.getWebBeansUtil().inspectErrorStack("There are
errors that are added by ProcessManagedBean event observers for " +
+ "managed beans. Look at logs for further details");
+
+ //Fires ProcessProducerMethod
+
webBeansContext.getWebBeansUtil().fireProcessProducerMethodBeanEvent(annotatedMethods,
annotatedType);
+ webBeansContext.getWebBeansUtil().inspectErrorStack("There are
errors that are added by ProcessProducerMethod event observers for " +
+ "producer method beans. Look at logs for further
details");
+
+ //Fires ProcessProducerField
+
webBeansContext.getWebBeansUtil().fireProcessProducerFieldBeanEvent(annotatedFields);
+ webBeansContext.getWebBeansUtil().inspectErrorStack("There are
errors that are added by ProcessProducerField event observers for " +
+ "producer field beans. Look at logs for further
details");
+
+ //Fire ObservableMethods
+
webBeansContext.getWebBeansUtil().fireProcessObservableMethodBeanEvent(observerMethodsMap);
+ webBeansContext.getWebBeansUtil().inspectErrorStack("There are
errors that are added by ProcessObserverMethod event observers for " +
+ "observer methods. Look at logs for further details");
-
if(!webBeansContext.getWebBeansUtil().isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
+
if(!webBeansContext.getWebBeansUtil().isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
+ {
+ beanManager.addBean(bean);
+ for (ProducerMethodBean<?> producerMethod :
producerMethods)
+ {
+ // add them one after the other to enable
serialization handling et al
+ beanManager.addBean(producerMethod);
+ }
+ for (ProducerFieldBean<?> producerField : producerFields)
{
- beanManager.addBean(bean);
- for (ProducerMethodBean<?> producerMethod :
producerMethods)
- {
- // add them one after the other to enable
serialization handling et al
- beanManager.addBean(producerMethod);
- }
- for (ProducerFieldBean<?> producerField :
producerFields)
- {
- // add them one after the other to enable
serialization handling et al
- beanManager.addBean(producerField);
- }
+ // add them one after the other to enable
serialization handling et al
+ beanManager.addBean(producerField);
}
}
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java?rev=1606541&r1=1606540&r2=1606541&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
Sun Jun 29 17:30:57 2014
@@ -120,4 +120,9 @@ public class EventImpl<T> implements Eve
in.defaultReadObject();
webBeansContext = WebBeansContext.currentInstance();
}
+
+ public EventMetadataImpl getMetadata()
+ {
+ return metadata;
+ }
}
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=1606541&r1=1606540&r2=1606541&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
Sun Jun 29 17:30:57 2014
@@ -59,11 +59,11 @@ public class DecoratorHandler implements
private Object target;
private String passivationId;
- public DecoratorHandler(BeanInterceptorInfo interceptorInfo,
Map<Decorator<?>, ?> instances, int index, Object target, String passivationId)
+ public DecoratorHandler(BeanInterceptorInfo interceptorInfo,
List<Decorator<?>> decorators, Map<Decorator<?>, ?> instances, int index,
Object target, String passivationId)
{
this.interceptorInfo = interceptorInfo;
- decorators = interceptorInfo.getDecorators();
this.instances = instances;
+ this.decorators = decorators;
this.index = index;
this.target = target;
this.passivationId = passivationId;
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=1606541&r1=1606540&r2=1606541&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
Sun Jun 29 17:30:57 2014
@@ -51,12 +51,12 @@ import org.apache.webbeans.proxy.OwbInte
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;
+ protected Set<InjectionPoint> injectionPoints;
+ protected Class<? extends T> proxyClass;
+ protected String passivationId;
+ protected BeanInterceptorInfo interceptorInfo;
+ protected InterceptorDecoratorProxyFactory proxyFactory;
+ protected Map<Method, List<Interceptor<?>>> methodInterceptors;
public AbstractProducer()
{
@@ -198,7 +198,7 @@ public abstract class AbstractProducer<T
T delegate = instance;
if (interceptorInfo.getDecorators() != null &&
!isDelegateInjection(creationalContextImpl))
{
- List<Decorator<?>> decorators =
interceptorInfo.getDecorators();
+ List<Decorator<?>> decorators = filterDecorators(instance,
interceptorInfo.getDecorators());
Map<Decorator<?>, Object> instances = new
HashMap<Decorator<?>, Object>();
for (int i = decorators.size(); i > 0; i--)
{
@@ -207,7 +207,8 @@ public abstract class AbstractProducer<T
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));
+ delegate = proxyFactory.createProxyInstance(proxyClass,
instance,
+ new DecoratorHandler(interceptorInfo, decorators,
instances, i - 1, instance, passivationId));
}
}
InterceptorHandler interceptorHandler = new
DefaultInterceptorHandler<T>(instance, delegate, methodInterceptors,
interceptorInstances, passivationId);
@@ -220,6 +221,11 @@ public abstract class AbstractProducer<T
return instance;
}
+ protected List<Decorator<?>> filterDecorators(final T instance, final
List<Decorator<?>> decorators)
+ {
+ return decorators;
+ }
+
@Override
public void dispose(T instance)
{
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=1606541&r1=1606540&r2=1606541&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
Sun Jun 29 17:30:57 2014
@@ -21,9 +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.ArrayList;
+import java.util.List;
import java.util.Map;
import javax.enterprise.event.Event;
+import javax.enterprise.inject.spi.Decorator;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.Interceptor;
@@ -32,6 +35,7 @@ import org.apache.webbeans.context.creat
import org.apache.webbeans.event.EventImpl;
import org.apache.webbeans.event.EventMetadataImpl;
import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.util.GenericsUtil;
public class EventProducer<T> extends AbstractProducer<Event<T>>
{
@@ -42,7 +46,32 @@ public class EventProducer<T> extends Ab
{
this.webBeansContext = webBeansContext;
}
-
+
+ @Override
+ protected List<Decorator<?>> filterDecorators(final Event<T> instance,
final List<Decorator<?>> decorators)
+ {
+ if (!EventImpl.class.isInstance(instance)) // is this test useless?
+ {
+ return decorators;
+ }
+
+ final Type type =
EventImpl.class.cast(instance).getMetadata().getType();
+ final ArrayList<Decorator<?>> list = new
ArrayList<Decorator<?>>(decorators.size());
+ for (final Decorator<?> original : decorators)
+ {
+ final Type event = original.getDelegateType();
+ if (ParameterizedType.class.isInstance(event))
+ {
+ final ParameterizedType arg =
ParameterizedType.class.cast(event);
+ final Type[] actualTypeArguments =
arg.getActualTypeArguments();
+ if (actualTypeArguments.length > 0 &&
GenericsUtil.isAssignableFrom(false, actualTypeArguments[0], type))
+ {
+ list.add(original);
+ }
+ }
+ }
+ return list;
+ }
/**
* {@inheritDoc}
*/
Modified: openwebbeans/trunk/webbeans-tck/testng-dev.xml
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-tck/testng-dev.xml?rev=1606541&r1=1606540&r2=1606541&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-tck/testng-dev.xml (original)
+++ openwebbeans/trunk/webbeans-tck/testng-dev.xml Sun Jun 29 17:30:57 2014
@@ -19,7 +19,7 @@
<test name="JSR-346 TCK">
<classes>
<class
-
name="org.jboss.cdi.tck.tests.decorators.builtin.injectionpoint.BuiltinInjectionPointDecoratorTest"/>
+
name="org.jboss.cdi.tck.tests.decorators.definition.producer.DecoratorNotAppliedToResultOfProducerTest"/>
</classes>
<groups>
<run>