[cdi-dev] async: back to completion future?

Martin Kouba mkouba at redhat.com
Mon Mar 7 04:57:13 EST 2016


Dne 7.3.2016 v 09:45 Romain Manni-Bucau napsal(a):
> 2016-03-07 9:07 GMT+01:00 Martin Kouba <mkouba at redhat.com
> <mailto:mkouba at redhat.com>>:
>
>
>     Dne 7.3.2016 v 09:03 Romain Manni-Bucau napsal(a):
>
>
>         Le 7 mars 2016 08:35, "Martin Kouba" <mkouba at redhat.com
>         <mailto:mkouba at redhat.com>
>         <mailto:mkouba at redhat.com <mailto:mkouba at redhat.com>>> a écrit :
>           >
>           > Dne 6.3.2016 v 15:39 Romain Manni-Bucau napsal(a):
>           >
>           >> Hi guys,
>           >>
>           >> as a user having a ComlpetionStage makes me loose some JDK
>         utilities,
>           >> can we move back to CompletionFuture?
>           >>
>           >> It would allow for instance:
>           >>
>           >> // doesn't work with CompletionStage
>           >> CompletionFuture.allOf(event1.fireAsync(...),
>         event2.fireAsync(...))
>           >>        .then(...)
>           >
>           >
>           > Well, this should work if the underlying CompletionStage impl
>         supports toCompletableFuture(), i.e. in Weld 3:
>           >
>
>         Yes but it is not natural to convert it IMO = we can do better
>
>           >
>         CompletableFuture.allOf(event1.fireAsync(...).toCompletableFuture(),
>         event2.fireAsync(...).toCompletableFuture())
>           >
>           > AFAIK the default async execution facility of
>         CompletableFuture is
>         ForkJoinPool.commonPool() which is not a good fit for Java EE.
>         Using the
>         CompletionStage interface allows us to wrap the async calls
>         without the
>         specified executor (e.g.
>         CompletionStage.thenApplyAsync(Function<? super
>         T, ? extends U>)) and supply a default one provided by the impl.
>           >
>
>         Should use the pool in which the evznt is fired then "then step" is
>         synchronous is my sample so all is decided at fire time
>
>
>     I don't talk about your particular example - I understand that it's
>     not using async exec (although the "then()" method does not exist).
>
>
> was supposed to represent the different flavours (thenRun, thenCompose,
> ...) ;).
>
> That said I agree on the state switching the pool is better but with
> these 2 notes:
>
> - could be better to hide these poorly designed methods then -> don't
> use CompletionXXX but a CDI API with a bridge to CompletionX to let the
> user go back on SE tools

Yep, this is one of the possible solutions. On the other hand, I don't 
think it's poorly designed. CompletionStage defines the "default 
asynchronous execution facility" and CDI spec states that the 
CompletionStage returned by fireAsync methods is container-specific. The 
impl may choose to clarify this "default asynchronous execution 
facility", i.e. there's place for innovation...

> - we still don't have a *standard* config for the pool(s) underlying CDI
> features so it sounds as poor as SE solution IMO (at least a
> core/max/ttl config in beans.xml)

I don't think this should be standardized...

>
>
>           >
>           >>
>           >> Romain Manni-Bucau
>           >> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>           >> <http://rmannibucau.wordpress.com> | Github
>           >> <https://github.com/rmannibucau> | LinkedIn
>           >> <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>           >> <http://www.tomitribe.com>
>           >>
>           >>
>           >>
>           >> _______________________________________________
>           >> cdi-dev mailing list
>           >> cdi-dev at lists.jboss.org <mailto:cdi-dev at lists.jboss.org>
>         <mailto:cdi-dev at lists.jboss.org <mailto:cdi-dev at lists.jboss.org>>
>           >> https://lists.jboss.org/mailman/listinfo/cdi-dev
>           >>
>           >> Note that for all code provided on this list, the provider
>         licenses
>         the code under the Apache License, Version 2
>         (http://www.apache.org/licenses/LICENSE-2.0.html). For all other
>         ideas
>         provided on this list, the provider waives all patent and other
>         intellectual property rights inherent in such information.
>           >>
>           >
>           > --
>           > Martin Kouba
>           > Software Engineer
>           > Red Hat, Czech Republic
>
>
>     --
>     Martin Kouba
>     Software Engineer
>     Red Hat, Czech Republic
>
>

-- 
Martin Kouba
Software Engineer
Red Hat, Czech Republic


More information about the cdi-dev mailing list