2016-03-07 11:17 GMT+01:00 Martin Kouba <mkouba@redhat.com>:


Dne 7.3.2016 v 11:10 Romain Manni-Bucau napsal(a):

2016-03-07 10:57 GMT+01:00 Martin Kouba <mkouba@redhat.com
<mailto:mkouba@redhat.com>>:

    Dne 7.3.2016 v 09:45 Romain Manni-Bucau napsal(a):

        2016-03-07 9:07 GMT+01:00 Martin Kouba <mkouba@redhat.com
        <mailto:mkouba@redhat.com>
        <mailto:mkouba@redhat.com <mailto:mkouba@redhat.com>>>:



             Dne 7.3.2016 v 09:03 Romain Manni-Bucau napsal(a):


                 Le 7 mars 2016 08:35, "Martin Kouba" <mkouba@redhat.com
        <mailto:mkouba@redhat.com>
                 <mailto:mkouba@redhat.com <mailto:mkouba@redhat.com>>
                 <mailto:mkouba@redhat.com <mailto:mkouba@redhat.com>
        <mailto:mkouba@redhat.com <mailto:mkouba@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...


Why? Typically if you take @Asynchronous (EJB spec) you have already
this issue and this is often avoided when portability matters for that
particular reason you don't know how you will behave. Or do you think
concurrency-utilities solves it?

No, it doesn't. I think it should remain impl-specific. You know how it will behave - it will be async. And if needed you could tune up the config, depending on the container. If you specify core/max/ttl the container will not be able to optimize.


"it will be async" <- then container is free to have a single thread (would make a js impl possible :)) which would totally break you app which is supposed to be scalable. Also if the config is container dependent you can just not be able to configure it - I know the container would be bad but you don't always choose it. In any case not having a config means the feature is not reliable and depending on the container specific features means you are aside the EE goals of reliability in the time IMHO.

Also the container opitmizations can have side effects so if not behaving as expected it needs to be spec-ed.

Threading model is something central when it starts to be used for a bit mroe than fire and forget once a day, ignoring it is killing before the birth the API you can add on top of it IMO.
 




                   >
                   >>
                   >> 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@lists.jboss.org
        <mailto:cdi-dev@lists.jboss.org> <mailto:cdi-dev@lists.jboss.org
        <mailto:cdi-dev@lists.jboss.org>>
                 <mailto:cdi-dev@lists.jboss.org
        <mailto:cdi-dev@lists.jboss.org> <mailto:cdi-dev@lists.jboss.org
        <mailto:cdi-dev@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



--
Martin Kouba
Software Engineer
Red Hat, Czech Republic