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
        }
 
        /**

Reply via email to