@Romain could u send the link to the jira (s)? Thanks On Mar 1, 2015 5:34 PM, "Lars-Fredrik Smedberg" <[email protected]> wrote:
> @Romain Yes... we use Provider when we know there is one implementation > and we like to lazy initialize a dep bean inside an application scoped bean > method.... guess we could use Instance and destroy until it gets fixed in > owb. . > > We have cases for instance where thr factory that injects instance is > application scoped but in that case the bean implementations are scoped and > not dependent. > On Mar 1, 2015 5:13 PM, "Romain Manni-Bucau" <[email protected]> > wrote: > >> Yes and no. In owb it does ATM - opened a jira linked to it - but >> actually provider can be a single instance with lazy eval where Instance is >> by design multiple instances. >> Le 1 mars 2015 16:32, "Lars-Fredrik Smedberg" <[email protected]> a >> écrit : >> >>> Shouldn't Provider faces the same issue as Instance? >>> On Mar 1, 2015 10:44 AM, "Romain Manni-Bucau" <[email protected]> >>> wrote: >>> >>>> 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 >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>
