You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/05/23 09:27:49 UTC
svn commit: r1485597 -
/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
Author: rmannibucau
Date: Thu May 23 07:27:49 2013
New Revision: 1485597
URL: http://svn.apache.org/r1485597
Log:
cdi extension events shouldn't be propagated to parent extensions in an ear
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java?rev=1485597&r1=1485596&r2=1485597&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java Thu May 23 07:27:49 2013
@@ -22,6 +22,7 @@ import org.apache.webbeans.container.Bea
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.event.EventMetadata;
import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.WebBeansUtil;
import javax.el.ELResolver;
import javax.el.ExpressionFactory;
@@ -30,6 +31,7 @@ import javax.enterprise.context.spi.Cont
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.InjectionTarget;
import javax.enterprise.inject.spi.ObserverMethod;
@@ -51,23 +53,31 @@ public class WebappBeanManager extends B
@Override
public void fireEvent(final Object event, final EventMetadata metadata) {
- if (ClassUtil.isDefinitionContainsTypeVariables(event.getClass())) {
+ final Class<?> eventClass = event.getClass();
+ if(ClassUtil.isDefinitionContainsTypeVariables(ClassUtil.getClass(metadata.getType()))) {
throw new IllegalArgumentException("Event class : " + event.getClass().getName() + " can not be defined as generic type");
}
getNotificationManager().fireEvent(event, metadata);
- getParentBm().getNotificationManager().fireEvent(event, metadata);
+ if (isEvent(eventClass)) {
+ getParentBm().getNotificationManager().fireEvent(event, metadata);
+ }
}
@Override
public <T> Set<ObserverMethod<? super T>> resolveObserverMethods(T event, EventMetadata metadata) {
+ final Class<?> eventClass = event.getClass();
if(ClassUtil.isDefinitionContainsTypeVariables(ClassUtil.getClass(metadata.getType()))) {
- throw new IllegalArgumentException("Event type can not contain type variables. Event class is : " + event.getClass());
+ throw new IllegalArgumentException("Event type can not contain type variables. Event class is : " + eventClass);
}
final Set<ObserverMethod<? super T>> set = new HashSet<ObserverMethod<? super T>>();
set.addAll(getNotificationManager().resolveObservers(event, metadata));
- set.addAll(getParentBm().getNotificationManager().resolveObservers(event, metadata));
+
+ if (isEvent(eventClass)) {
+ set.addAll(getParentBm().getNotificationManager().resolveObservers(event, metadata));
+ } // else nothing since extensions are loaded by classloader so we already have it
+
return set;
}
@@ -262,4 +272,8 @@ public class WebappBeanManager extends B
public void beforeStop() {
// no-op
}
+
+ private static boolean isEvent(final Class<?> eventClass) {
+ return !WebBeansUtil.isDefaultExtensionBeanEventType(eventClass) && !WebBeansUtil.isExtensionEventType(eventClass);
+ }
}