Repository: wicket Updated Branches: refs/heads/5688-IPageManager-clear [created] b8382271e
WICKET-5688 Restore the functionality an IPageManager to be able to clean all data/pages for the current session Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b8382271 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b8382271 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b8382271 Branch: refs/heads/5688-IPageManager-clear Commit: b8382271ed8bcf57157a4b10c02f6a4948e4a35a Parents: 35d7b62 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Aug 28 14:17:52 2014 +0300 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Aug 28 14:17:52 2014 +0300 ---------------------------------------------------------------------- .../java/org/apache/wicket/Application.java | 2 -- .../main/java/org/apache/wicket/Session.java | 2 +- .../org/apache/wicket/mock/MockPageManager.java | 2 +- .../org/apache/wicket/page/IPageManager.java | 7 ++-- .../wicket/page/PageManagerDecorator.java | 4 +-- .../apache/wicket/page/PageStoreManager.java | 34 ++++++++++++-------- .../ListenerInterfaceRequestHandlerTest.java | 2 +- 7 files changed, 27 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/b8382271/wicket-core/src/main/java/org/apache/wicket/Application.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java b/wicket-core/src/main/java/org/apache/wicket/Application.java index 4c61bb5..999316d 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Application.java +++ b/wicket-core/src/main/java/org/apache/wicket/Application.java @@ -466,8 +466,6 @@ public abstract class Application implements UnboundListener, IEventSink @Override public void sessionUnbound(final String sessionId) { - internalGetPageManager().sessionExpired(sessionId); - getSessionListeners().onUnbound(sessionId); } http://git-wip-us.apache.org/repos/asf/wicket/blob/b8382271/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 4b55b73..5a768f3 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Session.java +++ b/wicket-core/src/main/java/org/apache/wicket/Session.java @@ -287,7 +287,7 @@ public abstract class Session implements IClusterable, IEventSink { if (isTemporary() == false) { - getPageManager().sessionExpired(getId()); + getPageManager().clear(); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/b8382271/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java b/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java index 19804fc..797d48f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java +++ b/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java @@ -64,7 +64,7 @@ public class MockPageManager implements IPageManager } @Override - public void sessionExpired(String sessionId) + public void clear() { pages.clear(); } http://git-wip-us.apache.org/repos/asf/wicket/blob/b8382271/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java index b7817f9..dc94bec 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java @@ -73,12 +73,9 @@ public interface IPageManager public void newSessionCreated(); /** - * Invoked when the session has been expired. - * - * @param sessionId - * the id of the expired session + * Clears all data for the current session. */ - public void sessionExpired(String sessionId); + public void clear(); /** * Destroy the page manager. http://git-wip-us.apache.org/repos/asf/wicket/blob/b8382271/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java b/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java index af6d3fb..b3ccb2c 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java @@ -75,9 +75,9 @@ public class PageManagerDecorator implements IPageManager } @Override - public void sessionExpired(String sessionId) + public void clear() { - delegate.sessionExpired(sessionId); + delegate.clear(); } @Override http://git-wip-us.apache.org/repos/asf/wicket/blob/b8382271/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 0e8425f..9585669 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 @@ -39,7 +39,9 @@ public class PageStoreManager extends AbstractPageManager * A cache that holds all registered page managers. <br/> * applicationName -> page manager */ - private static final ConcurrentMap<String, PageStoreManager> managers = new ConcurrentHashMap<String, PageStoreManager>(); + private static final ConcurrentMap<String, PageStoreManager> MANAGERS = new ConcurrentHashMap<>(); + + private static final String ATTRIBUTE_NAME = "wicket:persistentPageManagerData"; private final IPageStore pageStore; @@ -60,12 +62,12 @@ public class PageStoreManager extends AbstractPageManager this.applicationName = applicationName; this.pageStore = pageStore; - if (managers.containsKey(applicationName)) + if (MANAGERS.containsKey(applicationName)) { throw new IllegalStateException("Manager for application with key '" + applicationName + "' already exists."); } - managers.put(applicationName, this); + MANAGERS.put(applicationName, this); } /** @@ -109,7 +111,7 @@ public class PageStoreManager extends AbstractPageManager */ private IPageStore getPageStore() { - PageStoreManager manager = managers.get(applicationName); + PageStoreManager manager = MANAGERS.get(applicationName); if (manager == null) { @@ -316,6 +318,11 @@ public class PageStoreManager extends AbstractPageManager } } + private String getAttributeName() + { + return ATTRIBUTE_NAME + " - " + applicationName; + } + /** * {@link RequestAdapter} for {@link PageStoreManager} * @@ -323,13 +330,6 @@ public class PageStoreManager extends AbstractPageManager */ protected class PersistentRequestAdapter extends RequestAdapter { - private static final String ATTRIBUTE_NAME = "wicket:persistentPageManagerData"; - - private String getAttributeName() - { - return ATTRIBUTE_NAME + " - " + applicationName; - } - /** * Construct. * @@ -419,15 +419,21 @@ public class PageStoreManager extends AbstractPageManager } @Override - public void sessionExpired(String sessionId) + public void clear() { - // nothing to do, the SessionEntry will listen for it to become unbound by itself + RequestAdapter requestAdapter = getRequestAdapter(); + String sessionEntryAttributeName = getAttributeName(); + Serializable sessionEntry = requestAdapter.getSessionAttribute(sessionEntryAttributeName); + if (sessionEntry instanceof SessionEntry) + { + ((SessionEntry)sessionEntry).valueUnbound(null); + } } @Override public void destroy() { - managers.remove(applicationName); + MANAGERS.remove(applicationName); pageStore.destroy(); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/b8382271/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java index cc03296..5e9e727 100644 --- a/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java @@ -85,7 +85,7 @@ public class ListenerInterfaceRequestHandlerTest extends WicketTestCase Url urlToAjaxLink = tester.urlFor(page.link); Session session = tester.getSession(); - session.getPageManager().sessionExpired(session.getId()); + session.clear(); // fire a request to the ajax link on the expired page executeAjaxUrlWithLastBaseUrl(urlToAjaxLink);
