Author: struberg
Date: Sat Jun 17 10:10:54 2017
New Revision: 1799008
URL: http://svn.apache.org/viewvc?rev=1799008&view=rev
Log:
OWB-1188 fix error handling for async events
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java
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=1799008&r1=1799007&r2=1799008&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
Sat Jun 17 10:10:54 2017
@@ -46,6 +46,7 @@ import java.util.concurrent.Executor;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.NotificationOptions;
@@ -792,7 +793,6 @@ public final class NotificationManager
return future;
}
- //X TODO review
private CompletableFuture invokeObserverMethodAsync(Object event,
EventMetadataImpl metadata,
ObserverMethod<? super Object>
observer,
@@ -893,7 +893,7 @@ public final class NotificationManager
{
private final T event;
private final AtomicInteger counter;
- private CompletionException error;
+ private AtomicReference<CompletionException> error = new
AtomicReference<>();
private CDICompletionFuture(final T event, final int total)
{
@@ -905,17 +905,17 @@ public final class NotificationManager
{
if (t != null)
{
- if (error == null)
+ if (error.get() == null)
{
- error = new CompletionException(null);
+ error.compareAndSet(null, new CompletionException(null));
}
- error.addSuppressed(t);
+ error.get().addSuppressed(t);
}
if (counter.decrementAndGet() == 0)
{
- if (error != null)
+ if (error.get() != null)
{
- completeExceptionally(error);
+ completeExceptionally(error.get());
}
else
{
Modified:
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=1799008&r1=1799007&r2=1799008&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/async/ObserversAsyncTest.java
Sat Jun 17 10:10:54 2017
@@ -62,10 +62,7 @@ public class ObserversAsyncTest extends
long start = System.nanoTime();
getBeanManager().getEvent().fireAsync(event)
- .handle((e, t) ->
- {
- return queue.offer(t);
- });
+ .handle((e, t) -> queue.offer(t));
Throwable t = queue.poll(20, TimeUnit.SECONDS);