openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <rmannibu...@gmail.com>
Subject Re: Memleak using Instance<> with dependent
Date Sun, 01 Mar 2015 09:41:39 GMT
Owb 1.5

I dont think it is in provider api
Le 1 mars 2015 03:13, "Lars-Fredrik Smedberg" <itsmeden@gmail.com> a écrit :

> @Romain btw destroy should work on Provider also right?
> On Mar 1, 2015 2:56 AM, "Lars-Fredrik Smedberg" <itsmeden@gmail.com>
> 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" <rmannibucau@gmail.com>
>> 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" <itsmeden@gmail.com> 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" <rmannibucau@gmail.com>
>>>> 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" <itsmeden@gmail.com>
>>>>> 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" <rmannibucau@gmail.com>
>>>>>> 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 <karl.kilden@gmail.com>:
>>>>>>>
>>>>>>>> Got it, thanks all!
>>>>>>>>
>>>>>>>> On 27 February 2015 at 19:54, John D. Ament <johndament@apache.org>
>>>>>>>> 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 <karl.kilden@gmail.com>
>>>>>>>>> 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
<
>>>>>>>>>> rmannibucau@gmail.com> 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 <karl.kilden@gmail.com>:
>>>>>>>>>>>
>>>>>>>>>>>> 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
<
>>>>>>>>>>>> rmannibucau@gmail.com> 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
<
>>>>>>>>>>>>> john.d.ament@gmail.com>:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> 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 <
>>>>>>>>>>>>>> karl.kilden@gmail.com> 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 <
>>>>>>>>>>>>>>> rmannibucau@gmail.com> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> If dependent it will be kept
in enclosing bean.
>>>>>>>>>>>>>>>>  Le 27 févr. 2015 19:00,
"Lars-Fredrik Smedberg" <
>>>>>>>>>>>>>>>> itsmeden@gmail.com> 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" <
>>>>>>>>>>>>>>>>> rmannibucau@gmail.com>
wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Yes.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Will be destoyed
with the bean where it is injected IIRC
>>>>>>>>>>>>>>>>>> so the app here.
>>>>>>>>>>>>>>>>>> Le 27 févr. 2015
16:59, <karl.kilden@gmail.com> 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
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>

Mime
View raw message