myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bernhard Huemer <bernhard.hue...@gmail.com>
Subject Re: [core] Introduce ManagedBeanRegistry
Date Thu, 14 Jan 2010 13:16:33 GMT
Hey,

sorry, I haven't noticed this thread, so I've already commented on the 
according JIRA issue 
(https://issues.apache.org/jira/browse/MYFACES-2485). Basically I've 
already mentioned it there, but I think the reason why only the 
"contextDestroyed"-callbacks are invoked is that Tomcat, by default, 
serializes and preserves sessions once it shuts down.

However, I'm pretty much sure that implementing such a registry 
introduces more issues than it resolves (assuming that you consider this 
to be an issue at all - which I wouldn't do). As Jan-Kees has already 
pointed out, you can't just invalidate sessions once a container shuts 
down in a clustered environment. I think it would break the whole idea 
of a clustered environment.

regards,
Bernhard

Jakob Korherr wrote on 01/13/2010 09:17 PM (GMT):
> Hi,
> 
> MyFaces is already using all available Listeners 
> (HttpSessionAttributeListener, HttpSessionListener, 
> ServletContextListener, ServletContextAttributeListener, 
> ServletRequestListener, ServletRequestAttributeListener) to invoke 
> @PreDestroy on the Managed Beans and this happens via a pass-through 
> from StartupServletContextListener, so you don't have to configure two 
> listeners in web.xml (or tld).
> 
> The problem is, as you thought, that those listeners (e.g. 
> HttpSessionListener) are not invoked on a container shutdown/restart. 
> Only contextDestroyed from ServletContextListener is invoked (tested 
> today on Apache Tomcat 6).
> 
> I will not change anything of the existing behavior, I just want to make 
> sure that all still existing ManagedBeans get their @PreDestroy method 
> called in contextDestroyed. But I would not get a reference to them, if 
> I do not register them in a ManagedBeanRegistry.
> 
> Regards,
> Jakob
> 
> 2010/1/13 Jan-Kees van Andel <jankeesvanandel@gmail.com 
> <mailto:jankeesvanandel@gmail.com>>
> 
>     Hey,
> 
>     How about an HttpSessionListener? I'm not sure if
>     HttpSessionListener.contextDestroyed is invoked on shutdownthough.
>     Probably not...
> 
>     I'm afraid the only option is custom bookkeeping, maybe using an
>     HttpSessionListener/ServletContextListener to publish events to the
>     Registry.
>     I see some issues with this approach:
>     1 Configuration becomes more difficult for the application developer,
>     because these two Listeners become required configuration.
>     2 Managing objects yourself may be tricky business. An option could be
>     to use WeakReference/WeakHashMap for this so you don't accidentally
>     keep your objects alive.
>     3 What to do with regards to session replication on a clustered
>     environment? I'm not sure this will become an issue, but it wouldn't
>     surprise me if it will.
> 
>     Regards,
>     Jan-Kees
> 
> 
>     2010/1/13 Jakob Korherr <jakob.korherr@gmail.com
>     <mailto:jakob.korherr@gmail.com>>:
>      > Hi guys,
>      >
>      > To ensure the execution of the ManagedBean's @PreDestroy methods on a
>      > container shutdown/restart, I would like to introduce a
>     ManagedBeanRegistry,
>      > in which all active ManagedBeans from all scopes are referenced.
>      >
>      > The problem is the following: At the moment on a container
>     shutdown or
>      > restart, only contextDestroyed is invoked (tested in tomcat 6),
>     thus only
>      > the @PreDestroy methods of all ApplicationScoped ManagedBeans will be
>      > invoked, but not those of any existing ManagedBeans in session,
>     request,
>      > view (and maybe also custom) scope, because they can not be
>     referenced in
>      > contextDestroyed().
>      >
>      > Any opinions on that?
>      >
>      > Thanks in advance!
>      >
>      > Regards,
>      > Jakob
>      >
> 
> 


Mime
View raw message