With cdi 1.1 coming we should forbig it IMO Le 23 mars 2013 10:11, "Arne Limburg" <[email protected]> a écrit :
> The current status is definitely wrong: > In AfterBeanDiscovery Jens' extension looks up a UT bean via getBeans() > which initializes our cache, that then "knows" that there is no UT and will > never return a UT-Bean afterwards, even if the extension adds a UT-Bean. > So either we have to invalidate that cache on addBean(…) or we have to > forbid calling getBeans(…) until after the AfterBeanDiscovery event is > completely processed (after that no bean can be added anyway). > > WDYT? > > Cheers, > Arne > > > Von: Romain Manni-Bucau <[email protected]> > Antworten an: "[email protected]" <[email protected] > > > Datum: Samstag, 23. März 2013 10:00 > An: "[email protected]" <[email protected]> > Betreff: Re: Calling BeanManager#getBeans within an extension / caching > during OWB startup > > If we "fix" it it will be a regression then. Just change your extension > to add a ut with a qualifier and delegate or not to a cdi bean, no? > Le 23 mars 2013 08:34, "Jens Schumann" <[email protected]> a > écrit : > >> OK Marc, >> >> Looking forward to 1.1;). >> >> Nevertheless I think it's quite confusing that addBean does NOT invalidate >> OWB caches even though direct BeanManager interaction will not be possible >> in the future. >> >> Jens >> >> Am 23.03.13 06:57 schrieb "Mark Struberg" unter <[email protected]>: >> >> >Hi Jens! >> > >> >Yes, this will be fixed in CDI-1.1. >> > >> >The reason is that you would most probably introduce an implicit random >> >generator. getBeans() during extension booting depends on the order of >> >the class scanning, on the order of the eventing (some container do all >> >the events after each other, owb takes one scanned AnnotatedType and does >> >almost all events for that bean in one go). >> > >> >LieGrue, >> >strub >> > >> > >> > >> > >> > >> > >> > >> >>________________________________ >> >> From: John D. Ament <[email protected]> >> >>To: [email protected] >> >>Sent: Friday, March 22, 2013 11:53 PM >> >>Subject: Re: Calling BeanManager#getBeans within an extension / caching >> >>during OWB startup >> >> >> >> >> >>Jens, >> >> >> >> >> >>For your first bullet, I believe this is reflected in the CDI 1.1 spec >> >>now (what you can and cannot inject into an extension). >> >> >> >> >> >>John >> >> >> >> >> >> >> >>On Fri, Mar 22, 2013 at 6:41 PM, Jens Schumann >> >><[email protected]> wrote: >> >> >> >>Hi all! >> >>> >> >>> >> >>>I tried to upgrade an old project from OWB 1.1.3 to 1.1.7 which >> >>>obviously failed (since I would not send this e-mail otherwise;). It >> >>>turned out that I had an extension that checks during >> >>>AfterBeanDiscovery whether a certain bean exists or not. If the bean >> >>>(UserTransaction) does not exists the extension registers a new bean of >> >>>this type. >> >>> >> >>> >> >>>With 1.1.3 it worked perfectly, everything above 1.1.4 failed with an >> >>>missing UserTransaction dependency in the validate phase. My debugger >> >>>showed a valid UserTransaction bean in my BeanManager instance, however >> >>>InjectionResolver#checkInjectionPoints could not resolve my dependency. >> >>>My extension basically did the following: >> >>> >> >>> >> >>> public void addLinkToResource(@Observes AfterBeanDiscovery event, >> >>>BeanManager bm) { >> >>> Set<Bean<?>> set = bm.getBeans(UserTransaction.class); >> >>> if (set.size() == 0) { >> >>> // register new UserTransaction >> >>> event.addBean(Š) >> >>> } >> >>> } >> >>> >> >>> >> >>>From what I understood the above code enforces an empty set of >> >>>resolvedComponents in InjectionResolver#implResolveByType, since my >> >>>getBeans() call will register an empty set for the cached >> >>>UserTransaction BeanCacheKey. Event.addBean() does not update the cache >> >>>though. >> >>> >> >>> >> >>>While talking to Arne today it seems that >> >>> * we definitely should prohibit a call to getBeans() within an >> >>>extension a CDI spec topic I know. I switched to ProcessBean, >> >>>ProcessProducerMethod, ProcessProducerField for UserTransaction >> >>>detection and everything works with 1.1.7. >> >>> * You guys should check wether addBean should clear cached values >> >>>within OWB in order to avoid the issue above. >> >>>I you think this is a bug in OWB I can create a JIRA ticket.Jens >> >>> >> >>> >> >> >> >> >> >> >> >>
