@Romain so basically to avoid memory leeks instace.../provider...get ()
should not be called multiple times for the same injected instance/provider
in an @ApplicationScoped bean / @Singleton EJB....

....thanks for the source code pointers...will have a look at them when im
not on the phone :-)
On Feb 27, 2015 7:37 PM, "Romain Manni-Bucau" <[email protected]> wrote:

> Yes, look create(Bean) in
> http://svn.apache.org/repos/asf/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
> and
> http://svn.apache.org/repos/asf/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
>  destroyDependent
>
> point is even string can be destroyed with some logic (think to producers
> @Disposes)
>
>
> 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:32 GMT+01:00 Lars-Fredrik Smedberg <[email protected]>:
>
>> @Romain that is okay i guess as long as the produced value is not request
>> (perhaps on a per user basis) dependent... in that case i would like to
>> create it in the scope of the method called on the applicationscoped bean...
>>
>> So I guess if I have this scenario I would need to either
>>
>> 1) do as u suggest by storing the value in the @postconstruct if it
>> possible (see above)
>>
>> 2) make the dependent object scoped
>>
>> 3) set another scope on the @ApplicationScoped  or @Singleton
>>
>> Out of curiosity... when the value is for example a String or Locale
>> which is not subclassable...is owb holding on to the value somehow and
>> prevent them from being gc ed?
>>
>> ...or maybe i got it all wrong. ...
>> On Feb 27, 2015 7:26 PM, "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
>>>>>>>>
>>>>>>>>
>>>>>
>>>
>

Reply via email to