Updated Branches: refs/heads/wicket-6.x 05d0bae3d -> 3d6fc1e56
WICKET-5164 use HttpSessionBindingListener to be able to pass the initial sessionId to the PageStore on expiry of the session Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3d6fc1e5 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3d6fc1e5 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3d6fc1e5 Branch: refs/heads/wicket-6.x Commit: 3d6fc1e56f17c8b7832e760a4f07b0eaeca4aa0a Parents: 05d0bae Author: svenmeier <[email protected]> Authored: Tue Jul 9 13:10:35 2013 +0200 Committer: svenmeier <[email protected]> Committed: Tue Jul 9 13:10:35 2013 +0200 ---------------------------------------------------------------------- .../apache/wicket/page/PageStoreManager.java | 25 ++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/3d6fc1e5/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java b/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java index cce5fed..f0fcc09 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java @@ -25,6 +25,9 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import javax.servlet.http.HttpSessionBindingEvent; +import javax.servlet.http.HttpSessionBindingListener; + import org.apache.wicket.pageStore.IPageStore; /** @@ -71,12 +74,18 @@ public class PageStoreManager extends AbstractPageManager * * @author Matej Knopp */ - private static class SessionEntry implements Serializable + private static class SessionEntry implements Serializable, HttpSessionBindingListener { private static final long serialVersionUID = 1L; private final String applicationName; + /** + * The id handed to the {@link IPageStore} to identify the session. + * <p> + * Note: If the container changes a session's id, this field remains unchanged on its + * initial value. + */ private final String sessionId; private transient List<IManageablePage> sessionCache; @@ -281,6 +290,18 @@ public class PageStoreManager extends AbstractPageManager afterReadObject.add(page); } } + + @Override + public void valueBound(HttpSessionBindingEvent event) + { + } + + @Override + public void valueUnbound(HttpSessionBindingEvent event) + { + // WICKET-5164 use the original sessionId + getPageStore().unbind(this.sessionId); + } } /** @@ -411,7 +432,7 @@ public class PageStoreManager extends AbstractPageManager @Override public void sessionExpired(String sessionId) { - pageStore.unbind(sessionId); + // nothing to do, the SessionEntry will listen for it to become unbound by itself } /**
