Author: struberg
Date: Thu Jun 1 10:04:43 2017
New Revision: 1797175
URL: http://svn.apache.org/viewvc?rev=1797175&view=rev
Log:
OWB-1189 add first ugly hack for async events
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java
(with props)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/EventTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/exception/EventExceptionTest.java
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
Thu Jun 1 10:04:43 2017
@@ -95,7 +95,7 @@ public class ObserverMethodsBuilder<T>
checkObserverMethodConditions(bean, observesParameter);
//Looking for ObserverMethod
- ObserverMethod<?> definedObserver =
webBeansContext.getBeanManagerImpl().getNotificationManager().
+ ObserverMethod<?> definedObserver =
webBeansContext.getNotificationManager().
getObservableMethodForAnnotatedMethod(annotatedMethod,
observesParameter, bean);
if (definedObserver != null)
{
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=1797175&r1=1797174&r2=1797175&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
Thu Jun 1 10:04:43 2017
@@ -323,7 +323,7 @@ public class BeansDeployer
validateDecoratorDecoratedTypes();
validateDecoratorGenericTypes();
-
webBeansContext.getBeanManagerImpl().getNotificationManager().clearCaches();
+ webBeansContext.getNotificationManager().clearCaches();
// fire event
fireAfterDeploymentValidationEvent();
@@ -863,7 +863,7 @@ public class BeansDeployer
logger.fine("Validation of the observer methods' injection points has
started.");
//Validate Observers
-
validateObservers(webBeansContext.getBeanManagerImpl().getNotificationManager().getObserverMethods());
+
validateObservers(webBeansContext.getNotificationManager().getObserverMethods());
logger.info(OWBLogConst.INFO_0003);
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
Thu Jun 1 10:04:43 2017
@@ -37,6 +37,7 @@ import org.apache.webbeans.context.creat
import org.apache.webbeans.conversation.ConversationManager;
import org.apache.webbeans.decorator.DecoratorsManager;
import org.apache.webbeans.deployment.StereoTypeManager;
+import org.apache.webbeans.event.NotificationManager;
import org.apache.webbeans.exception.WebBeansException;
import org.apache.webbeans.inject.AlternativesManager;
import org.apache.webbeans.inject.impl.InjectionPointFactory;
@@ -104,6 +105,7 @@ public class WebBeansContext
private final ConversationManager conversationManager;
private ConversationService conversationService = null;
private final ApplicationBoundaryService applicationBoundaryService;
+ private final NotificationManager notificationManager = new
NotificationManager(this);
public WebBeansContext()
@@ -177,6 +179,7 @@ public class WebBeansContext
managerMap.put(SerializableBeanVault.class, serializableBeanVault);
managerMap.put(StereoTypeManager.class, stereoTypeManager);
managerMap.put(InterceptorResolutionService.class,
interceptorResolutionService);
+ managerMap.put(NotificationManager.class, notificationManager);
}
@@ -373,6 +376,11 @@ public class WebBeansContext
return beanArchiveService;
}
+ public NotificationManager getNotificationManager()
+ {
+ return notificationManager;
+ }
+
public ConversationService getConversationService()
{
if (conversationService == null)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
Thu Jun 1 10:04:43 2017
@@ -23,6 +23,7 @@ import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
@@ -58,6 +59,7 @@ import javax.naming.Reference;
import javax.naming.Referenceable;
import javax.naming.StringRefAddr;
+import org.apache.webbeans.annotation.AnyLiteral;
import org.apache.webbeans.annotation.DefaultLiteral;
import org.apache.webbeans.component.AbstractOwbBean;
import org.apache.webbeans.component.AbstractProducerBean;
@@ -83,8 +85,8 @@ import org.apache.webbeans.context.Custo
import org.apache.webbeans.context.CustomPassivatingContextImpl;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.decorator.DecoratorComparator;
+import org.apache.webbeans.event.EventImpl;
import org.apache.webbeans.event.EventMetadataImpl;
-import org.apache.webbeans.event.NotificationManager;
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.exception.DuplicateDefinitionException;
@@ -146,9 +148,6 @@ public class BeanManagerImpl implements
/**Normal scoped cache proxies*/
private Map<Contextual<?>, Object> cacheProxies = new
ConcurrentHashMap<Contextual<?>, Object>();
- /**Event notification manager instance*/
- private NotificationManager notificationManager = null;
-
/**Injection resolver instance*/
private InjectionResolver injectionResolver = null;
@@ -233,7 +232,6 @@ public class BeanManagerImpl implements
{
this.webBeansContext = webBeansContext;
injectionResolver = new InjectionResolver(webBeansContext);
- notificationManager = new NotificationManager(webBeansContext);
annotatedElementFactory = webBeansContext.getAnnotatedElementFactory();
}
@@ -262,16 +260,6 @@ public class BeanManagerImpl implements
}
/**
- * Return manager notification manager.
- *
- * @return notification manager
- */
- public NotificationManager getNotificationManager()
- {
- return notificationManager;
- }
-
- /**
* Gets injection resolver.
*
* @return injection resolver
@@ -464,11 +452,10 @@ public class BeanManagerImpl implements
fireEvent(event, false, bindings);
}
- //X TODO OWB-1182 CDI 2.0
@Override
public Event<Object> getEvent()
{
- throw new UnsupportedOperationException("CDI 2.0 not yet imlemented");
+ return new EventImpl<>(new EventMetadataImpl(null, Object.class, null,
new Annotation[]{AnyLiteral.INSTANCE}, webBeansContext), webBeansContext);
}
public void fireEvent(Object event, boolean containerEvent, Annotation...
bindings)
@@ -486,7 +473,7 @@ public class BeanManagerImpl implements
*/
public void fireContextLifecyleEvent(Object payload, Annotation
lifecycleQualifier)
{
- if
(notificationManager.hasContextLifecycleObserver(lifecycleQualifier))
+ if
(webBeansContext.getNotificationManager().hasContextLifecycleObserver(lifecycleQualifier))
{
fireEvent(payload, lifecycleQualifier);
}
@@ -504,7 +491,7 @@ public class BeanManagerImpl implements
public void fireEvent(Object event, EventMetadataImpl metadata, boolean
isLifecycleEvent)
{
- notificationManager.fireEvent(event, metadata, isLifecycleEvent);
+ webBeansContext.getNotificationManager().fireEvent(event, metadata,
isLifecycleEvent, null);
}
public Set<Bean<?>> getComponents()
@@ -1283,11 +1270,10 @@ public class BeanManagerImpl implements
public <T> Set<ObserverMethod<? super T>> resolveObserverMethods(T event,
EventMetadataImpl metadata)
{
LinkedList<ObserverMethod<? super Object>> observerMethods
- = new LinkedList<>(notificationManager.resolveObservers(event,
metadata, false));
+ = new
LinkedList<>(webBeansContext.getNotificationManager().resolveObservers(event,
metadata, false));
// new in CDI-2.0: sort observers
- Collections.sort(observerMethods,
- (ObserverMethod o1, ObserverMethod o2) ->
Integer.compare(o1.getPriority(), o2.getPriority()));
+ Collections.sort(observerMethods,
Comparator.comparingInt(ObserverMethod::getPriority));
return new LinkedHashSet<>(observerMethods);
}
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=1797175&r1=1797174&r2=1797175&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
Thu Jun 1 10:04:43 2017
@@ -83,18 +83,23 @@ public class EventImpl<T> implements Eve
webBeansContext.getBeanManagerImpl().fireEvent(event,
metadata.select(eventType), false);
}
- //X TODO OWB-1182 CDI 2.0
@Override
- public <U extends T> CompletionStage<U> fireAsync(U u)
+ public <U extends T> CompletionStage<U> fireAsync(U event)
{
- throw new UnsupportedOperationException("CDI 2.0 not yet imlemented");
+ Type eventType = event.getClass();
+ webBeansContext.getWebBeansUtil().validEventType(eventType.getClass(),
metadata.getType());
+ return webBeansContext.getNotificationManager().fireEvent(event,
metadata.select(eventType), false,
+
webBeansContext.getNotificationManager().getDefaultNotificationOptions());
}
//X TODO OWB-1182 CDI 2.0
@Override
- public <U extends T> CompletionStage<U> fireAsync(U u, NotificationOptions
notificationOptions)
+ public <U extends T> CompletionStage<U> fireAsync(U event,
NotificationOptions notificationOptions)
{
- throw new UnsupportedOperationException("CDI 2.0 not yet imlemented");
+ Type eventType = event.getClass();
+ webBeansContext.getWebBeansUtil().validEventType(eventType.getClass(),
metadata.getType());
+ return webBeansContext.getNotificationManager().fireEvent(event,
metadata.select(eventType), false,
+ notificationOptions);
}
/**
@@ -103,7 +108,6 @@ public class EventImpl<T> implements Eve
@Override
public Event<T> select(Annotation... bindings)
{
-
return new EventImpl<T>(metadata.select(bindings), webBeansContext);
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
Thu Jun 1 10:04:43 2017
@@ -26,15 +26,22 @@ import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
+import java.util.Comparator;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.NotificationOptions;
import javax.enterprise.event.ObserverException;
import javax.enterprise.event.TransactionPhase;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
@@ -87,21 +94,23 @@ public final class NotificationManager
private final Map<Type, Set<ObserverMethod<?>>> observers = new
ConcurrentHashMap<Type, Set<ObserverMethod<?>>>();
private final WebBeansContext webBeansContext;
+ private final NotificationOptions defaultNotificationOptions;
+
/**
* Contains information whether certain Initialized and Destroyed events
have observer methods.
*/
private final ConcurrentMap<Annotation, Boolean>
hasContextLifecycleEventObservers
- = new ConcurrentHashMap<Annotation, Boolean>();
+ = new ConcurrentHashMap<>();
/**
* List of ObserverMethods cached by their raw types.
*/
private final ConcurrentHashMap<Class<?>, Set<ObserverMethod<?>>>
observersByRawType
- = new ConcurrentHashMap<Class<?>, Set<ObserverMethod<?>>>();
+ = new ConcurrentHashMap<>();
- public static final Set<Class> CONTAINER_EVENT_CLASSES = new
HashSet<Class>(
+ public static final Set<Class> CONTAINER_EVENT_CLASSES = new HashSet<>(
Arrays.asList(new Class[]{
AfterBeanDiscovery.class,
AfterDeploymentValidation.class,
@@ -126,6 +135,15 @@ public final class NotificationManager
public NotificationManager(WebBeansContext webBeansContext)
{
this.webBeansContext = webBeansContext;
+ this.defaultNotificationOptions =
NotificationOptions.ofExecutor(getDefaultExecutor());
+ }
+
+ //X TODO move to some SPI and implement properly!
+ private ExecutorService getDefaultExecutor()
+ {
+ // this is just for the start!
+ //X must get implemented properly with configuration etc
+ return Executors.newFixedThreadPool(5);
}
/**
@@ -628,8 +646,19 @@ public final class NotificationManager
return matching;
}
- public void fireEvent(Object event, EventMetadataImpl metadata, boolean
isLifecycleEvent)
+ public NotificationOptions getDefaultNotificationOptions()
+ {
+ return defaultNotificationOptions;
+ }
+
+ /**
+ * Fire the given event
+ * @param notificationOptions if {@code null} then this is a synchronous
event. Otherwise fireAsync
+ */
+ public <T> CompletionStage<T> fireEvent(Object event, EventMetadataImpl
metadata, boolean isLifecycleEvent, NotificationOptions notificationOptions)
{
+ final boolean async = notificationOptions != null;
+
if (!isLifecycleEvent &&
webBeansContext.getWebBeansUtil().isContainerEventType(event))
{
throw new IllegalArgumentException("Firing container events is
forbidden");
@@ -637,10 +666,21 @@ public final class NotificationManager
LinkedList<ObserverMethod<? super Object>> observerMethods = new
LinkedList<>(resolveObservers(event, metadata, isLifecycleEvent));
+ // filter for all async or all synchronous observermethods
+ // oldschool and not Streams, because of performance and avoiding tons
of temporary objects
+ Iterator<ObserverMethod<? super Object>> observerMethodIterator =
observerMethods.iterator();
+ while (observerMethodIterator.hasNext())
+ {
+ if (async != observerMethodIterator.next().isAsync())
+ {
+ observerMethodIterator.remove();
+ }
+ }
+
// new in CDI-2.0: sort observers
- Collections.sort(observerMethods,
- (ObserverMethod o1, ObserverMethod o2) ->
Integer.compare(o1.getPriority(), o2.getPriority()));
+
observerMethods.sort(Comparator.comparingInt(ObserverMethod::getPriority));
+ List<CompletableFuture<Void>> completableFutures = async ? new
ArrayList<>() : null;
for (ObserverMethod<? super Object> observer : observerMethods)
{
@@ -656,6 +696,11 @@ public final class NotificationManager
if(phase != null &&
!phase.equals(TransactionPhase.IN_PROGRESS))
{
+ if (async)
+ {
+ throw new WebBeansConfigurationException("Async
Observer Methods can only use TransactionPhase.IN_PROGRESS!");
+ }
+
TransactionService transactionService =
webBeansContext.getService(TransactionService.class);
if(transactionService != null)
{
@@ -663,25 +708,18 @@ public final class NotificationManager
}
else
{
- if (observer instanceof OwbObserverMethod)
- {
- ((OwbObserverMethod<? super
Object>)observer).notify(event, metadata);
- }
- else
- {
- observer.notify(event);
- }
+ invokeObserverMethod(event, metadata, observer);
}
}
else
{
- if (observer instanceof OwbObserverMethod)
+ if (async)
{
- ((OwbObserverMethod<? super
Object>)observer).notify(event, metadata);
+
completableFutures.add(invokeObserverMethodAsync(event, metadata, observer,
notificationOptions));
}
else
{
- observer.notify(event);
+ invokeObserverMethod(event, metadata, observer);
}
}
}
@@ -726,6 +764,53 @@ public final class NotificationManager
throw new WebBeansException(e);
}
}
+
+ return complete(completableFutures, (T) event);
+ }
+
+ private <T> CompletableFuture<T> complete(List<CompletableFuture<Void>>
completableFutures, T event)
+ {
+ if (completableFutures == null)
+ {
+ return null;
+ }
+ return CompletableFuture.allOf(completableFutures.toArray(new
CompletableFuture[completableFutures.size()]))
+ .thenApply(v -> event);
+ }
+
+ //X TODO review
+ private CompletableFuture invokeObserverMethodAsync(Object event,
+ EventMetadataImpl metadata,
+ ObserverMethod<? super Object>
observer,
+ NotificationOptions
notificationOptions)
+ {
+ return CompletableFuture.runAsync(() -> runAsync(event, metadata,
observer), notificationOptions.getExecutor());
+ }
+
+ private void runAsync(Object event, EventMetadataImpl metadata,
ObserverMethod<? super Object> observer)
+ {
+ //X TODO set up threads, requestcontext etc
+ webBeansContext.getContextsService().startContext(RequestScoped.class,
null);
+ try
+ {
+ invokeObserverMethod(event, metadata, observer);
+ }
+ finally
+ {
+
webBeansContext.getContextsService().endContext(RequestScoped.class, null);
+ }
+ }
+
+ private void invokeObserverMethod(Object event, EventMetadataImpl
metadata, ObserverMethod<? super Object> observer)
+ {
+ if (observer instanceof OwbObserverMethod)
+ {
+ ((OwbObserverMethod<? super Object>)observer).notify(event,
metadata);
+ }
+ else
+ {
+ observer.notify(event);
+ }
}
/**
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
Thu Jun 1 10:04:43 2017
@@ -227,7 +227,7 @@ public class AfterBeanDiscoveryImpl impl
{
beanManager.fireEvent(event, true,
AnnotationUtil.EMPTY_ANNOTATION_ARRAY);
ObserverMethod newObserverMethod = event.getObserverMethod();
-
beanManager.getNotificationManager().addObserver(newObserverMethod);
+
webBeansContext.getNotificationManager().addObserver(newObserverMethod);
}
}
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java?rev=1797175&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java
Thu Jun 1 10:04:43 2017
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.test.events.async;
+
+import javax.annotation.Priority;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.Observes;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class ObserversAsyncTest
+{
+
+
+ public static class VisitorCollectorEvent
+ {
+ private List<String> visitors = Collections.synchronizedList(new
ArrayList<>());
+
+ public void visiting(String visitor)
+ {
+ visitors.add(visitor);
+ }
+
+ public List<String> getVisitors()
+ {
+ return visitors;
+ }
+ }
+
+ @RequestScoped
+ public class Observer1
+ {
+ public void visit(@Observes @Priority(1) VisitorCollectorEvent
visitorCollector)
+ {
+ sleep(10L);
+ visitorCollector.visiting(getClass().getSimpleName());
+ }
+ }
+
+ private void sleep(long time)
+ {
+ try
+ {
+ Thread.sleep(time);
+ }
+ catch (InterruptedException e)
+ {
+ // ignore
+ }
+ }
+}
Propchange:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/EventTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/EventTest.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/EventTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/EventTest.java
Thu Jun 1 10:04:43 2017
@@ -25,10 +25,8 @@ import javax.enterprise.util.AnnotationL
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.test.AbstractUnitTest;
import org.apache.webbeans.test.annotation.binding.Binding1;
-import org.apache.webbeans.test.event.ITypeArgumentEventInterface;
import org.apache.webbeans.test.event.LoggedInEvent;
import org.apache.webbeans.test.event.LoggedInObserver;
-import org.apache.webbeans.test.event.TypeArgumentBaseEvent;
import org.apache.webbeans.test.event.TypeArgumentEvent;
import org.apache.webbeans.test.event.TypeArgumentInterfaceObserver;
import org.apache.webbeans.test.event.TypeArgumentObserver;
@@ -48,7 +46,7 @@ public class EventTest extends AbstractU
};
LoggedInObserver observer = new
LoggedInObserver(ArrayUtil.asSet(anns));
-
WebBeansContext.getInstance().getBeanManagerImpl().getNotificationManager().addObserver(observer);
+
WebBeansContext.getInstance().getNotificationManager().addObserver(observer);
getBeanManager().fireEvent(new LoggedInEvent(), anns);
@@ -66,7 +64,7 @@ public class EventTest extends AbstractU
TypeArgumentObserver observer = new
TypeArgumentObserver(ArrayUtil.asSet(anns));
-
WebBeansContext.getInstance().getBeanManagerImpl().getNotificationManager().addObserver(observer);
+
WebBeansContext.getInstance().getNotificationManager().addObserver(observer);
getBeanManager().fireEvent(new TypeArgumentEvent(), anns);
@@ -83,7 +81,7 @@ public class EventTest extends AbstractU
};
TypeArgumentInterfaceObserver observer = new
TypeArgumentInterfaceObserver(ArrayUtil.asSet(anns));
-
WebBeansContext.getInstance().getBeanManagerImpl().getNotificationManager().addObserver(observer);
+
WebBeansContext.getInstance().getNotificationManager().addObserver(observer);
getBeanManager().fireEvent(new TypeArgumentEvent(), anns);
Assert.assertEquals("ok", observer.getResult());
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/exception/EventExceptionTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/exception/EventExceptionTest.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/exception/EventExceptionTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/exception/EventExceptionTest.java
Thu Jun 1 10:04:43 2017
@@ -95,7 +95,7 @@ public class EventExceptionTest extends
};
LoggedInObserver observer = new
LoggedInObserver(ArrayUtil.asSet(anns));
-
WebBeansContext.getInstance().getBeanManagerImpl().getNotificationManager().addObserver(observer);
+
WebBeansContext.getInstance().getNotificationManager().addObserver(observer);
getBeanManager().fireEvent(new LoggedInEvent(), anns);
@@ -121,7 +121,7 @@ public class EventExceptionTest extends
};
LoggedInObserver observer = new
LoggedInObserver(ArrayUtil.asSet(anns));
-
WebBeansContext.getInstance().getBeanManagerImpl().getNotificationManager().addObserver(observer);
+
WebBeansContext.getInstance().getNotificationManager().addObserver(observer);
Assert.fail("IllegalArgumentException expected");
}
catch (IllegalArgumentException e)
Modified:
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
(original)
+++
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
Thu Jun 1 10:04:43 2017
@@ -779,7 +779,7 @@ public class WebContextsService extends
{
if (fireRequestLifecycleEvents == null)
{
- NotificationManager notificationManager =
webBeansContext.getBeanManagerImpl().getNotificationManager();
+ NotificationManager notificationManager =
webBeansContext.getNotificationManager();
fireRequestLifecycleEvents
=
notificationManager.hasContextLifecycleObserver(InitializedLiteral.INSTANCE_REQUEST_SCOPED)
||
notificationManager.hasContextLifecycleObserver(DestroyedLiteral.INSTANCE_REQUEST_SCOPED);
Modified:
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java?rev=1797175&r1=1797174&r2=1797175&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
(original)
+++
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
Thu Jun 1 10:04:43 2017
@@ -134,7 +134,7 @@ public final class WebContainerLifecycle
}
// fire @Initialized(ApplicationScoped.class) if any observer for it
exists
- if (webBeansContext.getBeanManagerImpl().getNotificationManager().
+ if (webBeansContext.getNotificationManager().
hasContextLifecycleObserver(InitializedLiteral.INSTANCE_APPLICATION_SCOPED))
{
// we need to temporarily start the ReqeustContext