Author: rmannibucau
Date: Fri Jun 16 18:29:20 2017
New Revision: 1798973
URL: http://svn.apache.org/viewvc?rev=1798973&view=rev
Log:
better fireAsync impl
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/AbstractUnitTest.java
openwebbeans/trunk/webbeans-tck/testng-dev.xml
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=1798973&r1=1798972&r2=1798973&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
Fri Jun 16 18:29:20 2017
@@ -45,6 +45,7 @@ import java.util.concurrent.CopyOnWriteA
import java.util.concurrent.Executor;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.NotificationOptions;
@@ -782,21 +783,12 @@ public final class NotificationManager
{
return null;
}
- final CDICompletionFuture<T> future = new CDICompletionFuture<>(event);
- // propagate the exception to the future aggregator
(CDICompletionFuture)
- CompletableFuture[] futures = completableFutures.stream()
- .map(f -> f.exceptionally(e ->
- {
- future.addError(e);
- return null;
- })).toArray(CompletableFuture[]::new);
- // execute all futures and *once done* complete our future
- CompletableFuture.allOf(futures)
- .handle((e, t) ->
- {
- future.done();
- return null;
- });
+ final CDICompletionFuture<T> future = new CDICompletionFuture<>(event,
completableFutures.size());
+ completableFutures.forEach(f -> f.handle((t, e) ->
+ {
+ future.addResult(e);
+ return null;
+ }));
return future;
}
@@ -900,33 +892,37 @@ public final class NotificationManager
private static final class CDICompletionFuture<T> extends
CompletableFuture<T>
{
private final T event;
+ private final AtomicInteger counter;
private CompletionException error;
- private CDICompletionFuture(final T event)
+ private CDICompletionFuture(final T event, final int total)
{
this.event = event;
+ this.counter = new AtomicInteger(total);
}
- CDICompletionFuture<T> addError(final Throwable t)
- {
- if (error == null)
- {
- error = new CompletionException(null);
- }
- error.addSuppressed(t);
- return this;
- }
-
- void done()
+ CDICompletionFuture<T> addResult(final Throwable t)
{
- if (error != null)
+ if (t != null)
{
- completeExceptionally(error);
+ if (error == null)
+ {
+ error = new CompletionException(null);
+ }
+ error.addSuppressed(t);
}
- else
+ if (counter.decrementAndGet() == 0)
{
- complete(event);
+ if (error != null)
+ {
+ completeExceptionally(error);
+ }
+ else
+ {
+ complete(event);
+ }
}
+ return this;
}
}
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/AbstractUnitTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/AbstractUnitTest.java?rev=1798973&r1=1798972&r2=1798973&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/AbstractUnitTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/AbstractUnitTest.java
Fri Jun 16 18:29:20 2017
@@ -73,6 +73,11 @@ public abstract class AbstractUnitTest
shutDownContainer();
}
+ protected void startContainerInnerClasses()
+ {
+ startContainer(getClass().getClasses());
+ }
+
protected void startContainer(Class<?>... beanClasses)
{
startContainer(new ArrayList<Class<?>>(Arrays.asList(beanClasses)),
null);
Modified: openwebbeans/trunk/webbeans-tck/testng-dev.xml
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-tck/testng-dev.xml?rev=1798973&r1=1798972&r2=1798973&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-tck/testng-dev.xml (original)
+++ openwebbeans/trunk/webbeans-tck/testng-dev.xml Fri Jun 16 18:29:20 2017
@@ -18,7 +18,7 @@
<suite name="JSR-346-TCK" verbose="2" configfailurepolicy="continue">
<test name="JSR-346 TCK">
<classes>
- <class
name="org.jboss.cdi.tck.tests.interceptors.definition.conflictingenablement.InterceptorConflictingEnablementTest"
/>
+ <class
name="org.jboss.cdi.tck.tests.event.observer.async.handlingExceptions.MultipleExceptionsInObserversNotificationTest"
/>
<!--
<class
name="org.jboss.cdi.tck.tests.event.parameterized.ParameterizedEventTest" />