[cdi-dev] Some more thoughts on async events

Jozef Hartinger jharting at redhat.com
Wed Mar 25 05:55:25 EDT 2015


On 03/25/2015 08:55 AM, Romain Manni-Bucau wrote:
> Hi guys,
>
> thinking to it I think double activation whatever it is would be a 
> failure. As you said Antoine keep the user eyes. Do you want to 
> activate it twice? I udnerstand the concern but really think - 
> whatever technical reason behind - that as a user this is an API failure.
>
Agreed.
> However I wonder if we just didn't overlooked the issue and can't just 
> say that async is not yet used so we can consider fired payloads will 
> be different (let say to be immutable for instance) so there is surely 
> no conflict in most cases (ie observers can be supposed supporting it 
> in all cases). If not we can detect it and fail.
We cannot really detect upfront if a legacy observer is going to fail 
when executed in a thread other than the event-sending one. Mark gave 
examples of the scenarios we cannot detect, e.g:
- legacy observer depends on a state of a CDI context that is not 
propagated to the thread that executes the observer
- legacy observer depends on transactional state
- legacy observer uses a ThreadLocal
>
> Most of the time observer chain was compared to filter chain but 
> actually filter chain is closer to interceptor chain but not observer 
> one. In other words if we want to do something - hopefully we'll not 
> since it would break most of usages IMO - we should validate all 
> interceptors of all observers. Why is it different. Cause interceptors 
> are synchonous wrapping inheriting from a context when observers are 
> by design "unknown" from the sender getting their data from a message. 
> The fact the sender doesn't care about observers (but just their 
> effects on its enclosing method - execution duration) makes this 
> double activation a pain whereever it is.
>
>
>
>
> 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>
>
> 2015-03-25 7:13 GMT+01:00 Antoine Sabot-Durand 
> <antoine at sabot-durand.net <mailto:antoine at sabot-durand.net>>:
>
>
>     > Le 24 mars 2015 à 23:16, Mark Struberg <struberg at yahoo.de
>     <mailto:struberg at yahoo.de>> a écrit :
>     >
>     >
>     >
>     >> Am 24.03.2015 um 20:59 schrieb José Paumard
>     <jose.paumard at gmail.com <mailto:jose.paumard at gmail.com>>:
>     >>
>     >> Having to add this opt-in element on all our legacy observers
>     will be very tedious, so we need to come with a better pattern here.
>     >
>     >
>     > I don’t get you. The opt-in is EXACTLY what is needed for legacy
>     observers. Or do you like to change the behaviour of all the 10000
>     observers out there in HUGE projects? This is way too critical to
>     change it implicitly.
>     > I sadly still have seen way too much projects with barely a test
>     coverage. And those projects will likely blow up if we switch all
>     Observers to async by default…
>     >
>     > Also note that often you cannot even re-compile libs which use
>     observers. So you just cannot just add anything.
>     >
>
>     I think we can think about a way to ease the life of the 90 % user
>     that will want to use async event in their project and will find
>     quite boring to activate it at both ends. We could figure
>     something that add to the proposed feature not, a new feature. If
>     a user know that the majority of observers in his project support
>     async, wouldn’t it be nice to have a way to tell it once and
>     deactivate the few that don’t support it ? That’s what I
>     understand from José proposal.
>
>     To make short : have async deactivated by default and having two
>     way to activate it : on each observer or once in the current
>     archive. And when it’s activate for all observer in the archive
>     give a way to deactivate it on observer basis.
>
>
>     >
>     >> We could add some information in the beans.xml, that would
>     affect all the observers of the bean archive.
>     >
>     > NO WAY!
>
>     Mark, we are on a community ML. People are here to make proposal
>     and brainstorm ideas. So please let people express their ideas and
>     give YOUR disagreement in a polite and non-agressive way. Your
>     objection content will probably be more read.
>
>     > This BDA stuff is already considered a.) legacy
>
>     Says who? Where it’s written in the spec that BDA are legacy? All
>     the bean discovery mechanism is based on BDA. The notion won’t go
>     anywhere soon. It should be better defined in the spec since it’s
>     part of basic mechanism. What about alternatives activation by
>     config (no recompilation) and class filtering for bean discovery?
>     Legacy as well?
>     You cannot explain that observers cannot be async by default with
>     the good example of an application having jar (BDA) compiled with
>     different CDI version and when someone start thinking about a
>     solution based on configuration in BDA explain him that it’s legacy.
>
>     > and there was a good reason why @Priority for Alternatives,
>     Interceptors and Decorators got introduced to get rid of it
>
>     Yes because it was limitative to have them activated for only one
>     BDA and don’t have a way to activate them for the whole application.
>
>
>     > - and b.) badly specced (section 5 and 12 have a different
>     definition of BDA).
>
>     Yes, but since when a concept needing clarification has to be
>     declared legacy?
>
>     >
>     > What we really need btw need some new method on the
>     ProcessObserverMethod to switch async on/off.
>
>     And how will you know that your observer is not part of a BDA
>     compiled in CDI 1.x?
>
>
>     The question is: will it be useful to allow user to activate by
>     configuration (beans.xml or config annotation / class)
>     asyncSupported by default for all their observer they design in
>     their CDI 2.0 application? Anybody having the end user interest in
>     mind will try to examine this question and only answer “no” if it
>     brings more complexity for end user.
>
>     Because we’re not writing this spec for us but for end users.
>
>
>     Antoine
>
>     _______________________________________________
>     cdi-dev mailing list
>     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.
>
>
>
>
> _______________________________________________
> 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/20150325/bc9380b8/attachment-0001.html 


More information about the cdi-dev mailing list