Session handling is a pretty complex topic. I assume that a HttpSessionListener#sessionDestroyed() is only be called if a) a session times out b) the server shuts down and no session persistence is available
would that be an option? LieGrue, strub --- On Thu, 1/14/10, Jakob Korherr <[email protected]> wrote: > From: Jakob Korherr <[email protected]> > Subject: Re: [core] Introduce ManagedBeanRegistry > To: "MyFaces Development" <[email protected]> > Date: Thursday, January 14, 2010, 2:20 PM > Hi, > > I just answered to your comment in the JIRA: > > So you're saying it would be better not to destroy all > session beans on > a container shutdown, because they are maybe serialized? > Then what > about a config parameter to turn this feature on or off? > > > > > > And what about view and request beans? > > Regards, > Jakob > > 2010/1/14 Bernhard Huemer <[email protected]> > > 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 <[email protected] > <mailto:[email protected]>> > > > > > 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 <[email protected] > > <mailto:[email protected]>>: > > > 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 > > > > > > > > > > > > > >
