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
> 
>      >
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 



Reply via email to