[cdi-dev] Async events. We need ideas to improve CDI-499

Antoine Sabot-Durand antoine at sabot-durand.net
Tue Feb 10 05:51:08 EST 2015


Jozef,

One question. So today we have an async behaviour with transactional observer. What about event payload modification in these observer ?

Antoine Sabot-Durand


> Le 10 févr. 2015 à 11:40, Jozef Hartinger <jharting at redhat.com> a écrit :
> 
> The way transactional observers are defined is that the observer method 
> is not called right away within the fire() call but instead is scheduled 
> to be executed in the corresponding transaction phase (e.g. using JTA's 
> Synchronization). This allows the fire() call to exit without waiting 
> for the observer to complete. Therefore, the transactional observer 
> notification is asynchronous. This has been the case since CDI 1.0 and 
> OWB should implement it that way too!
> 
>> On 02/10/2015 10:53 AM, Mark Struberg wrote:
>> purely technically: How do you manage to not spawn a new thread if you don't like to wait for the task to complete?
>> 
>> Wonder how that would work...
>> 
>> LieGrue,
>> strub
>> 
>> 
>> 
>> 
>>>> On Tuesday, 10 February 2015, 10:50, Jozef Hartinger <jharting at redhat.com> wrote:
>>>> Async is not about a parallel thread. It is about fire() not waiting
>>> until an observer finishes. Transactional observers are async already.
>>> No need to make things more complicated by involving a "parallel
>>> thread".
>>> 
>>> 
>>>> On 02/10/2015 10:42 AM, Mark Struberg wrote:
>>>>  No they are not async in the sense that they get executed in a parallel
>>> thread. That simply won't work. Think about
>>> TransactionPhase.BEFORE_COMPLETION.
>>>>  There is a huge difference between 'it will get called on the same
>>> thread but I have no control _when_' and 'it will get called on a
>>> totally new thread'-
>>>>  For the TransactionPhase it is the first case imo.
>>>> 
>>>>  LieGrue,
>>>>  strub
>>>> 
>>>> 
>>>> 
>>>> 
>>>>>  On Tuesday, 10 February 2015, 10:30, Jozef Hartinger
>>> <jharting at redhat.com> wrote:
>>>>>>  T ransactional observers are by definition async so they should
>>> behave
>>>>>  the same no matter if fired with fire() or fireAsync().
>>>>> 
>>>>> 
>>>>>>  On 02/10/2015 09:13 AM, Mark Struberg wrote:
>>>>>>    Oh one more thing I found which is most probably broken or
>>> totally changes
>>>>>  the behaviour
>>>>>>    8.) All observers with transactionPhase != IN_PROGRESS
>>>>>> 
>>>>>>    LieGrue,
>>>>>>    strub
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>>    On Tuesday, 10 February 2015, 8:58, Mark Struberg
>>>>>  <struberg at yahoo.de> wrote:
>>>>>>>>    Hi José!
>>>>>>>    Backward compatibility is perfectly fine with both
>>> approaches. People
>>>>>  can use
>>>>>>>    BeanManager#fire() instead of the newly proposed
>>>>>  BeanManager#fireAsync().
>>>>>>>    My point is that many people will simply not be able to use
>>> fireAsync()
>>>>>  because
>>>>>>>    as a framework developer you really need to code defensive.
>>> Without an
>>>>>  explicit
>>>>>>>    opt-in on observer side fireAsync() can basically only be
>>> used in
>>>>>  situations
>>>>>>>    where you _exactly_ know all your observers...
>>>>>>> 
>>>>>>>    An No @Async annotation would also be nice as it could not
>>> only be
>>>>>  used at
>>>>>>>    @Observes but also for @Event
>>>>>>> 
>>>>>>>    @Inject
>>>>>>>    @Async
>>>>>>> 
>>>>>>>    @Event
>>>>>>> 
>>>>>>>    private Event<UserLoggedIn> userLoggedInEventSource;
>>>>>>> 
>>>>>>> 
>>>>>>>    The benefit of an own @Async annotation over extending e.g.
>>> the @Event
>>>>>>>    annotation is that it would be perfectly backward compatible.
>>> This code
>>>>>  would
>>>>>>>    also run on CDI-1.0 .. 1.2 containers (as all annotations
>>> which are not
>>>>>>>    available on the classpath will simply be ignored by the JVM.
>>>>>>> 
>>>>>>>    LieGrue,
>>>>>>>    strub
>>>>>>> 
>>>>>>    _______________________________________________
>>>>>>    cdi-dev mailing list
>>>>>>   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.
>>>>> 
> 
> _______________________________________________
> cdi-dev mailing list
> 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.



More information about the cdi-dev mailing list