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


Reply via email to