Martin,

I understand this is getting a bit off topic so we could as well drop it.

I understand that the threads and session will eventually be garbage
collected (go to /dev/null as you said). But this is not necessarily bad,
is it? In my case these threads are updating an application-wide cache. So
it is acceptable that they update the cache even if the session has been
unbound, and when they are done they may as well be gc'ed.

Am I missing something?
Thanks
Marios


On Sun, Nov 24, 2013 at 1:13 PM, Martin Grigorov <mgrigo...@apache.org>wrote:

> Hi,
>
>
> On Sat, Nov 23, 2013 at 2:11 PM, Marios Skounakis <msc...@gmail.com>
> wrote:
>
> > Bas,
> >
> > Thanks for your answer. I understand what you're saying and you're right.
> > If I were designing the application now I'd do one of your suggestions.
> >
> > But unfortunately we've written most of the code and these threads now
> > depend on spring session beans. Right now B is pretty much the only
> viable
> > option. And we may go ahead and implement it (or maybe the polling
> > alternative).
> >
> > I'd like to repeat my question though, if only to gain some deeper
> > understanding of what's going on under the hood. Is there any danger if
> we
> > leave things as they are and we don't implement neither A nor B? What is
> > going to happen to the session? Will it still be invalidated, maybe
> causing
> > exceptions to the threads, or will it be kept around until the threads
> > finish? And once they all finish, will it be released or not?
> >
>
> What happens is that you will keep a reference to a plain object that is
> not managed by anything anymore.
> I.e. your case is a normal memory leak.
> Whatever you store in such session will go to /dev/null.
>
> I think you should consult with Servlet API -
>
> http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionListener.html
> .
> This listener will inform you when a new session is bound and when one is
> destroyed. Your threads should work only with the currently active/live
> sessions.
>
>
> >
> > Cheers
> > Marios
> >
> >
> > On Sat, Nov 23, 2013 at 1:26 PM, Bas Gooren <b...@iswd.nl> wrote:
> >
> > > Hi,
> > >
> > > I guess it depends on the lifecycle of those threads how I would handle
> > > this.
> > > Suppose the session is invalidated and destroyed, what should happen to
> > > the threads? Do they continue (A) or do they need to stop (B)?
> > >
> > > A) In this case I would not depend on the session at all, if possible.
> > > Simply copy the OAuth token to a private variable in your threads.
> > >
> > > B) Instead of the threads "polling" to see if the session is still
> there,
> > > I'd turn things around. Keep track of sessions-and-their-threads
> > somewhere.
> > > Register a session invalidation listener, and when the session is
> > > invalidated, you can run some code to neatly stop and clean up your
> > threads.
> > >
> > > Met vriendelijke groet,
> > > Kind regards,
> > >
> > > Bas Gooren
> > >
> > > schreef Marios Skounakis op 22-11-2013 23:45:
> > >
> > >  Hi all,
> > >>
> > >> This is maybe a Spring question but as my app is a wicket app and I
> use
> > >> this list regularly and everyone is very helpful I thought I'd ask
> here
> > >> first.
> > >>
> > >> I have a RequestCycleListener which during onBeginRequest()
> > conditionally
> > >> spawns some background threads and runs them using an Executor. These
> > >> threads need access to an oauth token which is stored in the session.
> > So I
> > >> create my threads in the RequestCycleListener, give them a reference
> to
> > >> the
> > >> wicket session and run them in the background thread. The threads also
> > >> have
> > >> a reference to Spring's session (via spring's
> > >> RequestContextHolder.getRequestAttributes()/setRequestAttributes()).
> > >> Actually the dependence on spring session is much harder to alleviate
> as
> > >> they often need to access session scoped beans.
> > >>
> > >> I'm wondering what exactly happens if I try to invalidate the session
> > >> (e.g.
> > >> when the user logs out) while such a background thread is running. Is
> > >> there
> > >> a possibility for harmful side-effects?
> > >>
> > >> Should I consider adding code to my threads to periodically check that
> > the
> > >> session is still valid? After all they do have a reference to the
> > session
> > >> object, so this sounds feasible.
> > >>
> > >> If it matters at all, I'm using Tomcat.
> > >>
> > >> Thanks in advance,
> > >> Marios
> > >>
> > >>
> > >
> >
>

Reply via email to