WICKET-4444 Add a callback to the Session which is called when the HttpSession is invalidated
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/afa176ee Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/afa176ee Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/afa176ee Branch: refs/heads/reference-guide Commit: afa176eea058cc596fe9f4dbfdf1cf0c40866c47 Parents: 953eceb Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Jan 28 10:15:57 2013 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Jan 28 10:15:57 2013 +0100 ---------------------------------------------------------------------- .../src/main/java/org/apache/wicket/Session.java | 14 ++++++++++++++ .../apache/wicket/session/HttpSessionStore.java | 12 ++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/afa176ee/wicket-core/src/main/java/org/apache/wicket/Session.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Session.java b/wicket-core/src/main/java/org/apache/wicket/Session.java index 3f2ba31..fa2b655 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Session.java +++ b/wicket-core/src/main/java/org/apache/wicket/Session.java @@ -868,6 +868,20 @@ public abstract class Session implements IClusterable, IEventSink { } + /** + * A callback method that is executed when the user session is invalidated + * either by explicit call to {@link org.apache.wicket.Session#invalidate()} + * or due to HttpSession expiration. + * + * <p>In case of session expiration this method is called in a non-worker thread, i.e. + * there are no thread locals exported for the Application, RequestCycle and Session. + * The Session is the current instance. The Application can be found by using + * {@link Application#get(String)}. There is no way to get a reference to a RequestCycle</p> + */ + public void onInvalidate() + { + } + private static final class PageAccessSynchronizerProvider extends LazyInitializer<PageAccessSynchronizer> { http://git-wip-us.apache.org/repos/asf/wicket/blob/afa176ee/wicket-core/src/main/java/org/apache/wicket/session/HttpSessionStore.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/session/HttpSessionStore.java b/wicket-core/src/main/java/org/apache/wicket/session/HttpSessionStore.java index ff7010c..976603b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/session/HttpSessionStore.java +++ b/wicket-core/src/main/java/org/apache/wicket/session/HttpSessionStore.java @@ -117,7 +117,7 @@ public class HttpSessionStore implements ISessionStore // register an unbinding listener for cleaning up String applicationKey = Application.get().getName(); httpSession.setAttribute("Wicket:SessionUnbindingListener-" + applicationKey, - new SessionBindingListener(applicationKey)); + new SessionBindingListener(applicationKey, newSession)); // register the session object itself setAttribute(request, Session.SESSION_ATTRIBUTE_NAME, newSession); @@ -417,14 +417,20 @@ public class HttpSessionStore implements ISessionStore private final String applicationKey; /** + * The Wicket Session associated with the expiring HttpSession + */ + private final Session wicketSession; + + /** * Construct. * * @param applicationKey * The unique key of the application within this web application */ - public SessionBindingListener(final String applicationKey) + public SessionBindingListener(final String applicationKey, final Session wicketSession) { this.applicationKey = applicationKey; + this.wicketSession = wicketSession; } /** @@ -445,6 +451,8 @@ public class HttpSessionStore implements ISessionStore log.debug("Session unbound: {}", sessionId); + wicketSession.onInvalidate(); + Application application = Application.get(applicationKey); if (application == null) {
