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