Owb 1.5 I dont think it is in provider api Le 1 mars 2015 03:13, "Lars-Fredrik Smedberg" <[email protected]> a écrit :
> @Romain btw destroy should work on Provider also right? > On Mar 1, 2015 2:56 AM, "Lars-Fredrik Smedberg" <[email protected]> > wrote: > >> Thanks Romain for the explanation... I guess this will solve alot of the >> use-cases / cases we talked about. >> >> Do you know what version of OWB this is implemented in? >> On Feb 28, 2015 10:08 PM, "Romain Manni-Bucau" <[email protected]> >> wrote: >> >>> Well issue before was release was not bound to the created instance but >>> znclosing class. Cdi 1.1 fixed it and now created instances can have their >>> own lifecycle and be handled by themselves. A bit like what Unmanaged >>> allows. >>> >>> @Inject Instance<A> a; >>> >>> A inst = a.get(); >>> a.destroy(inst); >>> Le 28 févr. 2015 17:56, "Lars-Fredrik Smedberg" <[email protected]> a >>> écrit : >>> >>>> @Romain maybe I'm slow today (i am on vacation :-)) do u mind explain >>>> with an example? >>>> On Feb 28, 2015 5:44 PM, "Romain Manni-Bucau" <[email protected]> >>>> wrote: >>>> >>>>> 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 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>
