It call release on the instance creational context and each instance has a child creational context of the parent. Said otherwise it is as if the bean as a scope handled manually Le 28 févr. 2015 17:32, "Lars-Fredrik Smedberg" <[email protected]> a écrit :
> @Romain > > Can explain to me what difference it will make (what the fix does) > On Feb 28, 2015 3:49 PM, "Romain Manni-Bucau" <[email protected]> > wrote: > >> PS: to be complete CDI 1.x, x > 0 added destroy(X) in Instance API to fix >> it >> >> >> 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-02-28 11:20 GMT+01:00 Karl Kildén <[email protected]>: >> >>> Got it, thanks all! >>> >>> On 27 February 2015 at 19:54, John D. Ament <[email protected]> >>> wrote: >>> >>>> It's a good approach, I do something similar at times. However, you >>>> need to make sure the beans have scopes to avoid this memory leak. >>>> >>>> >>>> On Fri, Feb 27, 2015 at 1:47 PM Karl Kildén <[email protected]> >>>> wrote: >>>> >>>>> Hrmm not sure what you mean. This is not a framework it is business >>>>> logic and I really like to put validators in a list like this instead of >>>>> if >>>>> else if else if else if >>>>> >>>>> On 27 February 2015 at 19:37, Romain Manni-Bucau < >>>>> [email protected]> wrote: >>>>> >>>>>> Mark will surely say you that configuring anyThingCriterion will make >>>>>> your iterable size (if i can say it) = 1 even if you have 100 criterions >>>>>> ;) >>>>>> >>>>>> this is not a real spi >>>>>> >>>>>> >>>>>> 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> >>>>>> >>>>>> 2015-02-27 19:34 GMT+01:00 Karl Kildén <[email protected]>: >>>>>> >>>>>>> Hi John! >>>>>>> >>>>>>> Summary: we use it as iterable >>>>>>> >>>>>>> Long story for completeness: >>>>>>> >>>>>>> Basically we get a thing from our business partner (inputThing) and >>>>>>> map it to our representation of thing (ProcessedThing) >>>>>>> >>>>>>> Each ThingCriterion can veto the processedThing and then they used >>>>>>> inputThing to print a pretty error message. When the Thing is enhanced >>>>>>> (happens all the time) we implement new ThingCriterion and they get >>>>>>> picked >>>>>>> up automatically... >>>>>>> >>>>>>> >>>>>>> >>>>>>> @Inject >>>>>>> private Instance<ThingCriterion> thingCriteria; >>>>>>> >>>>>>> >>>>>>> public List<ValidationProblem> validateList(final ProcessedThing >>>>>>> thing, final InputThing inputThing) { >>>>>>> List<ValidationProblem> results = new ArrayList<>(); >>>>>>> for (final ThingCriterion criterion : thingCriteria) { >>>>>>> results.addAll(criterion.validate(thing, inputThing)); >>>>>>> } >>>>>>> return results; >>>>>>> } >>>>>>> >>>>>>> >>>>>>> Romain, >>>>>>> >>>>>>> Thanks for your help. Great suggestion will it have better perf then >>>>>>> just putting @ApplicationScoped on my ThingCriterion beans? Probably not >>>>>>> important just curious. >>>>>>> >>>>>>> cheers >>>>>>> >>>>>>> On 27 February 2015 at 19:25, Romain Manni-Bucau < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> When I used this pattern I always did (for perf reason but side >>>>>>>> effect is behavior is what you want): >>>>>>>> >>>>>>>> @PostConstruct >>>>>>>> private void resolve() { >>>>>>>> value = instance......get(); >>>>>>>> } >>>>>>>> >>>>>>>> then in the code don't use instance at all but value. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 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> >>>>>>>> >>>>>>>> 2015-02-27 19:15 GMT+01:00 John D. Ament <[email protected]>: >>>>>>>> >>>>>>>>> Are you calling get() on the Instance with each request (or >>>>>>>>> whatever0 that comes into this bean? >>>>>>>>> >>>>>>>>> On Fri, Feb 27, 2015 at 1:13 PM Karl Kildén <[email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> To explain myself further ALL I had on my heap was my >>>>>>>>>> Instance<MyInterface>... and gc released 0.5% memory :) >>>>>>>>>> >>>>>>>>>> I had 200 000 of them at least. They where supposed to be four >>>>>>>>>> singletons. My idea was inject into @ApplicationScoped and omit to >>>>>>>>>> give >>>>>>>>>> them scope because they will be @ApplicationScoped anyways... Seems >>>>>>>>>> every >>>>>>>>>> invocation of my @ApplicationScoped bean recreated all instances. >>>>>>>>>> >>>>>>>>>> What I had was unrecoverable mem leak. Now I could be doing >>>>>>>>>> something stupid or Instance<MyInterface> has a problem or something >>>>>>>>>> else... >>>>>>>>>> >>>>>>>>>> Cheers >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 27 February 2015 at 19:05, Romain Manni-Bucau < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> If dependent it will be kept in enclosing bean. >>>>>>>>>>> Le 27 févr. 2015 19:00, "Lars-Fredrik Smedberg" < >>>>>>>>>>> [email protected]> a écrit : >>>>>>>>>>> >>>>>>>>>>> So does this mean that there will be a memory leak in the case >>>>>>>>>>>> Karl described? >>>>>>>>>>>> >>>>>>>>>>>> I have used similar constructs before so im curios (@Inject >>>>>>>>>>>> @Provider <some dep scoped bean> in an @ApplicationScoped bean and >>>>>>>>>>>> called >>>>>>>>>>>> get () on the injected provider). >>>>>>>>>>>> >>>>>>>>>>>> I thought for a while that it might get garbage collected when >>>>>>>>>>>> the created bean is outof scope or maybe then there is no way for >>>>>>>>>>>> @PreDestroy to be called? >>>>>>>>>>>> >>>>>>>>>>>> Regards >>>>>>>>>>>> LF >>>>>>>>>>>> >>>>>>>>>>>> I thought that the created dep scoped bean would be >>>>>>>>>>>> On Feb 27, 2015 6:07 PM, "Romain Manni-Bucau" < >>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Yes. >>>>>>>>>>>>> >>>>>>>>>>>>> Will be destoyed with the bean where it is injected IIRC so >>>>>>>>>>>>> the app here. >>>>>>>>>>>>> Le 27 févr. 2015 16:59, <[email protected]> a écrit : >>>>>>>>>>>>> >>>>>>>>>>>>>> Hello! I have a bean with @ApplicationScoped. When I inject >>>>>>>>>>>>>> Instance<MyInterface> instance and my actual beans implementing >>>>>>>>>>>>>> MyInstance >>>>>>>>>>>>>> are dependentscoped they get recreated over and over and are not >>>>>>>>>>>>>> gc'd. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Expected behavior? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Cheers >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>> >>
