[cdi-dev] Update on Async event doc

Jozef Hartinger jharting at redhat.com
Tue Mar 17 02:27:33 EDT 2015


On 03/16/2015 05:19 PM, Antoine Sabot-Durand wrote:
>
>> Le 16 mars 2015 à 10:33, Jozef Hartinger <jharting at redhat.com 
>> <mailto:jharting at redhat.com>> a écrit :
>>
>>
>> On 03/12/2015 01:56 PM, Antoine Sabot-Durand wrote:
>>> Hi all,
>>>
>>> I compiled all the feedback and decision we took regarding async 
>>> events and updated the Google Doc : 
>>> https://docs.google.com/document/d/1Tm_fZWS6569YqCH9lGxuqBGzS9gfupic-vv1dyKCUxk/edit?usp=sharing
>>>
>>> The following point stays open. I’d like to close them (if possible) 
>>> during the next meeting on Tuesday
>>>
>>> 1) Async delivery mechanism (comment by Jozef)
>>> Should we write in the spec about how threads for events delivery 
>>> should be used? Personally I’d rather not: I think this should be 
>>> let to implementation, the specification should only describe the 
>>> expected behavior (concurrency or not). now I may have missed something.
>> We should not specify technical details assuming we clearly define 
>> what guarantees are/are not available regarding ordering, visibility, 
>> concurrency, effects of exceptions, CDI/security/transactional 
>> context propagation and perhaps others I missed.
>
> We’re saying the same : these will come from the specified behavior ;)
>
>>>
>>> 2) Exception Handling (comment by Jozef)
>>> I didn’t write anything about exception and we should decide what 
>>> happens if an exception occurs in an observer during async event 
>>> dispatch. I think that it shouldn’t impact other observers and that 
>>> we should stick to the way CompletionStage API works today.
>>
>> What does it mean? CompletionStage API allows you to handle (a 
>> single) Exception. Would those exceptions be swallowed or provided to 
>> the caller somehow?
>
> suggestion are welcome. How could we handle multiple exception at the 
> caller level ?
I don't know. How did you plan to handle those in your proposal?
>
>>>
>>> 3) Async event activation on both ends
>>> We all agree that we need to explicitly fire event asynchronously on 
>>> the producer side (fireAsync()). The discussion in 8.1 is about 
>>> adding a way to accept async call on the consumer (observer) side.
>>> a) As events are often triggered in other parts of the application 
>>> than the parts that consume them (most CDI framework lib fire events 
>>> foe end user code) preventing user to decide if an observer can be 
>>> called asynchronously could lead to issues and will prevent library 
>>> developper to use fireAsync() (in a defensive coding approach).
>>> b) On the other hand, when placed in the same application, it’ll be 
>>> very confusing for user to have to fireAsync() and enable async 
>>> observer to activate this new feature.
>>>
>>> I propose an opt-out approach. We add ‘asyncSupported' member to 
>>> ‘@Observes' annotation with ‘true’ as default value. So in case of 
>>> b) the end user won’t have to explicitly activate async on observer 
>>> and i case of a) user detecting issue coming from async treatment of 
>>> an event can explicitly declares one or more observer not compatible 
>>> with async resolution with @Observes(asyncSupported=False)
>>>
>>> 4) Support observer ordering with async events
>>> I think we should keep event ordering for synchronous event and 
>>> ignore this feature in async event. I don’t see obvious use case to 
>>> be async and ordered.
>> if an observer O1 defines priority P1 and a different observer O2 
>> defines P2 where P2 > P1 then it probably does that for a reason. 
>> Most likely because O2 depends on the state changes possibly 
>> performed by O1. I think this holds true no matter if the event is 
>> fired synchronously or asynchronously. Therefore, I think we should 
>> respect priority in both cases.
>>
>> In addition, the observer ordering concept will be simpler if we 
>> treat observers the same way in both sync and async.
>
> That’s why your input is precious, previous discussion brought us with 
> the opposite pov. Personally the simpler to implement is the right 
> choice...
No, I mean simpler to explain and for users to take in. Implementation 
complexity is way less important.
>
>>>
>>> 5) Context propagation
>>>  I understand that propagating contexts in async event would impact 
>>> easily context API. My only concern here is to be define async event 
>>> to keep this feature possible.
>>>
>>> If I forgot points please comment this mail and the doc so we can 
>>> take final decision during next meeting.
>>>
>>> Thank you
>>>
>>>
>>> Antoine
>>>
>>>
>>>
>>> _______________________________________________
>>> 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.
>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/cdi-dev/attachments/20150317/8cbf2627/attachment.html 


More information about the cdi-dev mailing list