[cdi-dev] Are we always able to invoke @PreDestroy for @Dependent beans?

Pete Muir pmuir at redhat.com
Thu Mar 8 17:35:29 EST 2012


This is still an issue for Instance.get() :-(

On 8 Mar 2012, at 15:47, Jozef Hartinger wrote:

> I think you are wrong. The spec says:
> 
> "Any instance of the bean injected into method parameters of a disposer 
> method or observer method exists to service the
> method invocation only (except for observer methods of container 
> lifecycle events)."
> 
> So the instance should actually be destroyed immediately after the 
> observer method invocation finishes.
> 
> On 03/08/2012 01:47 PM, Mark Struberg wrote:
>> My answer sadly is no.
>> 
>> Dependent objects are stored in the CreationalContext which is held in the context which holds the outer NormalScoped contextual instance.
>> If the outer NormalScoped contextual instance gets desroyed, we also properly destroy all @Dependent beans in the CreationalContext.
>> 
>> So far so good, but now let's consider hte following scenario:
>> 
>> 
>> @ApplicationScoped
>> public class MyService {
>> 
>>   void doStats(@Observes RequestStatistics, UserHelper uh) {
>> 
>> 
>> UserHelper is @Dependent and a new instance will get created each time doStats() gets called.
>> 
>> What happens is that we don't know whether the UserHelper internally gets stored or just thrown away. In our sample most probably the later.
>> Each UserHelper will get stored in the CreationalContext of our single MyService instance. After 500.000 requests, our CreationalContext would contain 500.000 UserHelpers. Not smart, eh? This would just create a fat memory leak...
>> 
>> 
>> What we can do is to store only WeakReferences. E.g. via a WeakHashmap. This will automatically drop the entries if the instances in it get garbage collected. But in this case are not able to invoke @PreDestroy anymore I fear, because gone is gone ...
>> 
>> LieGrue,
>> strub
>> 
>> 
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
> _______________________________________________
> cdi-dev mailing list
> cdi-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/cdi-dev




More information about the cdi-dev mailing list