This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch WICKET-6563
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 2b33aaa34940548866b886dc6aaabda284281f41
Author: Sven Meier <[email protected]>
AuthorDate: Sun Dec 23 00:02:02 2018 +0100

    WICKET-6563 removed serialization from Disk/File store
    
    SerializingPageStore can always be used in the chain; pulled further
    code into AbstractPersistentPageStore
---
 .../apache/wicket/DefaultPageManagerProvider.java  |  13 +-
 .../pageStore/AbstractPersistentPageStore.java     |  75 ++++++++++-
 .../apache/wicket/pageStore/CryptingPageStore.java |   4 +-
 .../org/apache/wicket/pageStore/DiskPageStore.java | 139 ++++++---------------
 .../org/apache/wicket/pageStore/FilePageStore.java | 104 +++------------
 .../wicket/pageStore/IPersistentPageStore.java     |   8 +-
 .../apache/wicket/pageStore/InMemoryPageStore.java |  66 +++-------
 .../wicket/pageStore/InSessionPageStore.java       |  55 ++++----
 .../apache/wicket/pageStore/SerializedPage.java    |   5 +-
 .../pageStore/AbstractConcurrentPageStoreTest.java | 110 ++++------------
 .../wicket/pageStore/AbstractPageStoreTest.java    |  34 +++--
 .../pageStore/AsynchronousPageStoreTest.java       |  99 ++++++---------
 .../wicket/pageStore/InMemoryPageStoreTest.java    |   4 +-
 .../wicket/pageStore/InSessionPageStoreTest.java   |   6 +-
 .../diskstore/browser/PersistedPagesProvider.java  |   2 +-
 .../devutils/diskstore/browser/PersistedPanel.java |   2 +-
 .../diskstore/browser/SessionIdentifiersModel.java |   4 +-
 17 files changed, 264 insertions(+), 466 deletions(-)

diff --git 
a/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java 
b/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java
index 10bf511..749b8b1 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java
@@ -38,11 +38,12 @@ import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Bytes;
 
 /**
- * A provider of a {@link PageManager} with a default chain of page {@link 
IPageStore}s:
+ * A provider of a {@link PageManager} managing @link IManageablePage}s with a 
default chain of {@link IPageStore}s:
  * <ol>
  * <li>{@link RequestPageStore} caching pages until end of the request</li>
  * <li>{@link InSessionPageStore} keeping the last accessed page in the 
session</li>
  * <li>{@link AsynchronousPageStore} moving storage of pages to a worker 
thread (if enabled in {@link StoreSettings#isAsynchronous()})</li>
+ * <li>{@link SerializingPageStore} serializing all pages (so they are 
available for back-button)</li>
  * <li>{@link CryptingPageStore} encrypting all pages (if enabled in {@link 
StoreSettings#isEncrypted()})</li>
  * <li>{@link DiskPageStore} keeping all pages, configured according to {@link 
StoreSettings}</li>
  * </ol>
@@ -71,6 +72,7 @@ import org.apache.wicket.util.lang.Bytes;
  * <ul>
  * <li>{@link GroupingPageStore} groups pages with their own maximum page 
limit</li>
  * <li>{@link FilePageStore} as alternative to the trusted {@link 
DiskPageStore}</li>
+ * <li>other implementations from <a 
href="https://github.com/wicketstuff/core/tree/master/datastores-parent";>wicketstuff-datastores</a></li>
  * </ul>
  */
 public class DefaultPageManagerProvider implements IPageManagerProvider
@@ -168,10 +170,11 @@ public class DefaultPageManagerProvider implements 
IPageManagerProvider
                Bytes maxSizePerSession = storeSettings.getMaxSizePerSession();
                File fileStoreFolder = storeSettings.getFileStoreFolder();
 
+               IPageStore store = new DiskPageStore(application.getName(), 
fileStoreFolder, maxSizePerSession);
                if (storeSettings.isEncrypted()) {
-                       return new SerializingPageStore(new 
CryptingPageStore(new DiskPageStore(application.getName(), fileStoreFolder, 
maxSizePerSession)), getSerializer());
-               } else {
-                       return new DiskPageStore(application.getName(), 
fileStoreFolder, maxSizePerSession, getSerializer());
+                       store = new CryptingPageStore(store);
                }
+               
+               return new SerializingPageStore(store, getSerializer());        
        
        }
-}
+}
\ No newline at end of file
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPersistentPageStore.java
 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPersistentPageStore.java
index d11f7db..b7d6a3d 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPersistentPageStore.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPersistentPageStore.java
@@ -26,6 +26,7 @@ import javax.servlet.http.HttpSessionBindingEvent;
 import javax.servlet.http.HttpSessionBindingListener;
 
 import org.apache.wicket.Session;
+import org.apache.wicket.page.IManageablePage;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Bytes;
 import org.slf4j.Logger;
@@ -78,18 +79,70 @@ public abstract class AbstractPersistentPageStore 
implements IPersistentPageStor
                return true;
        }
 
+       @Override
+       public IManageablePage getPage(IPageContext context, int id)
+       {
+               String identifier = getSessionIdentifier(context, false);
+               if (identifier == null)
+               {
+                       return null;
+               }
+
+               return getPersistedPage(identifier, id);
+       }
+
+       protected abstract IManageablePage getPersistedPage(String identifier, 
int id);
+       
+       @Override
+       public void removePage(IPageContext context, IManageablePage page)
+       {
+               String identifier = getSessionIdentifier(context, false);
+               if (identifier == null)
+               {
+                       return;
+               }
+               
+               removePersistedPage(identifier, page);
+       }
+
+       protected abstract void removePersistedPage(String identifier, 
IManageablePage page);
+
+       @Override
+       public void removeAllPages(IPageContext context)
+       {
+               String identifier = getSessionIdentifier(context, false);
+               if (identifier == null)
+               {
+                       return;
+               }
+               
+               removeAllPersistedPages(identifier);
+       }
+
+       protected abstract void removeAllPersistedPages(String identifier);
+
+       @Override
+       public void addPage(IPageContext context, IManageablePage page)
+       {
+               String identifier = getSessionIdentifier(context, true);
+               
+               addPersistedPage(identifier, page);
+       }
+
+       protected abstract void addPersistedPage(String identifier, 
IManageablePage page);
+
        /**
         * Get the distinct and stable identifier for the given context.
         * 
         * @param context the context to identify
         * @param create should a new identifier be created if not there already
         */
-       protected String getSessionIdentifier(IPageContext context, boolean 
create)
+       private String getSessionIdentifier(IPageContext context, boolean 
create)
        {
                SessionAttribute attribute = context.getSessionAttribute(KEY);
                if (attribute == null && create)
                {
-                       attribute = new SessionAttribute(storeKey, 
context.getSessionId());
+                       attribute = new SessionAttribute(storeKey, 
createSessionIdentifier(context));
                        context.setSessionAttribute(KEY, attribute);
                }
                
@@ -100,6 +153,18 @@ public abstract class AbstractPersistentPageStore 
implements IPersistentPageStor
        }
 
        /**
+        * Create an identifier for the given context.
+        * <p>
+        * Default implementation uses {@link IPageContext#getSessionId()}.
+        * 
+        * @param context context
+        * @return identifier for the sseion
+        */
+       protected String createSessionIdentifier(IPageContext context) {
+               return context.getSessionId();
+       }
+
+       /**
         * Attribute held in session.
         */
        private static class SessionAttribute implements Serializable, 
HttpSessionBindingListener
@@ -136,7 +201,7 @@ public abstract class AbstractPersistentPageStore 
implements IPersistentPageStor
                        }
                        else
                        {
-                               store.removePersistent(identifier);
+                               store.removeAllPersistedPages(identifier);
                        }
                }
        }
@@ -153,13 +218,11 @@ public abstract class AbstractPersistentPageStore 
implements IPersistentPageStor
        }
 
        @Override
-       public String getContextIdentifier(IPageContext context)
+       public String getSessionIdentifier(IPageContext context)
        {
                return getSessionIdentifier(context, true);
        }
 
-       protected abstract void removePersistent(String identifier);
-
        protected static class PersistedPage implements IPersistedPage
        {
                private int pageId;
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/CryptingPageStore.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/CryptingPageStore.java
index 01dae3b..74d7819 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/CryptingPageStore.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/CryptingPageStore.java
@@ -23,7 +23,6 @@ import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.page.IManageablePage;
 import org.apache.wicket.pageStore.crypt.DefaultCrypter;
 import org.apache.wicket.pageStore.crypt.ICrypter;
-import org.apache.wicket.serialize.ISerializer;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -33,8 +32,7 @@ import org.apache.wicket.util.lang.Args;
  * achieve this with
  * <ul>
  * <li>a {@link SerializingPageStore} delegating to this store and</li>
- * <li>delegating to a store that does not deserialize its pages, e.g. a 
{@link DiskPageStore}
- * without {@link ISerializer}</li>.
+ * <li>delegating to a store that does not deserialize its pages, e.g. a 
{@link DiskPageStore}.</li>.
  * </ul>
  */
 public class CryptingPageStore extends DelegatingPageStore
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java
index 7b3e916..067e41f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java
@@ -47,13 +47,14 @@ import org.apache.wicket.util.file.Files;
 import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Bytes;
-import org.apache.wicket.util.lang.Classes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * A storage of pages on disk.
  * <p>
+ * All pages passed into this store are restricted to be {@link 
SerializedPage}s.
+ * <p>
  * Implementation note: {@link DiskPageStore} writes pages into a single file, 
appending new pages while overwriting the oldest pages.
  * Since Ajax requests do not change the id of a page, {@link DiskPageStore} 
offers an optimization to overwrite the most recently written
  * page, if it has the same id as a new page to write.<p>
@@ -71,8 +72,6 @@ public class DiskPageStore extends AbstractPersistentPageStore
         */
        private static final String INDEX_FILE_NAME = "DiskPageStoreIndex";
 
-       private final ISerializer serializer;
-
        private final Bytes maxSizePerSession;
 
        private final NestedFolders folders;
@@ -115,7 +114,6 @@ public class DiskPageStore extends 
AbstractPersistentPageStore
                
                this.folders = new NestedFolders(new File(fileStoreFolder, 
applicationName + "-filestore"));
                this.maxSizePerSession = Args.notNull(maxSizePerSession, 
"maxSizePerSession");
-               this.serializer = serializer; // optional
 
                this.diskDatas = new ConcurrentHashMap<>();
 
@@ -140,14 +138,13 @@ public class DiskPageStore extends 
AbstractPersistentPageStore
        }
 
        /**
-        * Versioning is supported if a serializer was provided to the 
constructor.
+        * Pages are already serialized.
         */
        @Override
-       public boolean supportsVersioning()
-       {
-               return serializer != null;
+       public boolean supportsVersioning() {
+               return true;
        }
-
+       
        @Override
        public void destroy()
        {
@@ -159,135 +156,79 @@ public class DiskPageStore extends 
AbstractPersistentPageStore
        }
 
        @Override
-       public boolean canBeAsynchronous(IPageContext context)
-       {
-               // session attribute must be added here *before* any 
asynchronous calls
-               // when session is no longer available
-               getSessionIdentifier(context, true);
-
-               return true;
-       }
-
-       @Override
-       public IManageablePage getPage(IPageContext context, int id)
+       protected IManageablePage getPersistedPage(String identifier, int id)
        {
-               IManageablePage page = null;
-
-               DiskData diskData = getDiskData(context, false);
+               DiskData diskData = getDiskData(identifier, false);
                if (diskData != null)
                {
                        byte[] data = diskData.loadPage(id);
                        if (data != null)
                        {
-                               if (serializer == null)
-                               {
-                                       page = new SerializedPage(id, 
"unknown", data);
-                               }
-                               else
-                               {
-                                       page = 
(IManageablePage)serializer.deserialize(data);
-                               }
-
                                if (log.isDebugEnabled())
                                {
-                                       log.debug("Returning page with id '{}' 
in session with id '{}'", id, context.getSessionId());
+                                       log.debug("Returning page with id '{}' 
in session with id '{}'", id, identifier);
                                }
+                               
+                               return new SerializedPage(id, "unknown", data);
                        }
                }
-
-               return page;
+               
+               return null;
        }
 
        @Override
-       public void removePage(IPageContext context, IManageablePage page)
+       protected void removePersistedPage(String identifier, IManageablePage 
page)
        {
-               DiskData diskData = getDiskData(context, false);
+               DiskData diskData = getDiskData(identifier, false);
                if (diskData != null)
                {
                        if (log.isDebugEnabled())
                        {
-                               log.debug("Removing page with id '{}' in 
session with id '{}'", page.getPageId(),
-                                       context.getSessionId());
+                               log.debug("Removing page with id '{}' in 
session with id '{}'", page.getPageId(), identifier);
                        }
+                       
                        diskData.removeData(page.getPageId());
                }
        }
 
        @Override
-       public void removeAllPages(IPageContext context)
+       protected void removeAllPersistedPages(String identifier)
        {
-               String identifier = getSessionIdentifier(context, false);
-               if (identifier != null)
-               {
-                       removePersistent(identifier);
+               DiskData diskData = getDiskData(identifier, false);
+               if (diskData != null) {
+                       synchronized (diskDatas)
+                       {
+                               diskDatas.remove(diskData.sessionIdentifier);
+                               diskData.unbind();
+                       }
                }
        }
 
        @Override
-       protected void removePersistent(String identifier)
+       protected void addPersistedPage(String identifier, IManageablePage page)
        {
-               DiskData diskData = getDiskData(identifier, false);
-
-               synchronized (diskDatas)
+               if (page instanceof SerializedPage == false)
                {
-                       diskDatas.remove(diskData.sessionIdentifier);
-                       diskData.unbind();
+                       throw new WicketRuntimeException("works with serialized 
pages only");
                }
-       }
+               SerializedPage serializedPage = (SerializedPage) page;
 
-       /**
-        * Supports {@link SerializedPage}s too - for this to work the 
delegating {@link IPageStore}
-        * must use the same {@link ISerializer} as this one.
-        */
-       @Override
-       public void addPage(IPageContext context, IManageablePage page)
-       {
-               DiskData diskData = getDiskData(context, true);
-               if (diskData != null)
-               {
-                       log.debug("Storing data for page with id '{}' in 
session with id '{}'",
-                               page.getPageId(), context.getSessionId());
+               DiskData diskData = getDiskData(identifier, true);
 
-                       byte[] data;
-                       String type;
-                       if (page instanceof SerializedPage)
-                       {
-                               data = ((SerializedPage)page).getData();
-                               type = ((SerializedPage)page).getPageType();
-                       }
-                       else
-                       {
-                               if (serializer == null)
-                               {
-                                       throw new WicketRuntimeException(
-                                               "DiskPageStore not configured 
for serialization");
-                               }
-                               data = serializer.serialize(page);
-                               type = Classes.name(page.getClass());
-                       }
+               log.debug("Storing data for page with id '{}' in session with 
id '{}'", serializedPage.getPageId(), identifier);
 
-                       diskData.savePage(page.getPageId(), type, data);
-               }
+               byte[] data = serializedPage.getData();
+               String type = serializedPage.getPageType();
+
+               diskData.savePage(serializedPage.getPageId(), type, data);
        }
 
        /**
+        * Get the data on disk for the given identifier.
         * 
-        * @param context
-        * @param create
-        * @return the session entry
+        * @param identifier identifier
+        * @return matching data
         */
-       protected DiskData getDiskData(final IPageContext context, final 
boolean create)
-       {
-               String identifier = getSessionIdentifier(context, create);
-
-               if (!create && identifier == null)
-               {
-                       return null;
-               }
-
-               return getDiskData(identifier, create);
-       }
-
        protected DiskData getDiskData(String sessionIdentifier, boolean create)
        {
                if (!create)
@@ -360,7 +301,7 @@ public class DiskPageStore extends 
AbstractPersistentPageStore
        }
 
        @Override
-       public Set<String> getContextIdentifiers()
+       public Set<String> getSessionIdentifiers()
        {
                return Collections.unmodifiableSet(diskDatas.keySet());
        }
@@ -372,7 +313,7 @@ public class DiskPageStore extends 
AbstractPersistentPageStore
         * @return a list of the last N page windows
         */
        @Override
-       public List<IPersistedPage> getPersistentPages(String sessionIdentifier)
+       public List<IPersistedPage> getPersistedPages(String sessionIdentifier)
        {
                List<IPersistedPage> pages = new ArrayList<>();
 
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/FilePageStore.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/FilePageStore.java
index 661e3bb..cb39dc5 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/FilePageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/FilePageStore.java
@@ -40,13 +40,14 @@ import org.apache.wicket.util.file.Files;
 import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Bytes;
-import org.apache.wicket.util.lang.Classes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * A storage of pages in files.
  * <p>
+ * All pages passed into this store are restricted to be {@link 
SerializedPage}s.
+ * <p>
  * While {@link DiskPageStore} uses a single file per session, this 
implementation stores each page
  * in its own file. This improves on a {@link DiskPageStore disadvantage of 
DiskPageStore} surfacing
  * with alternating Ajax requests from different browser tabs.  
@@ -59,8 +60,6 @@ public class FilePageStore extends AbstractPersistentPageStore
 
        private static final Logger log = 
LoggerFactory.getLogger(FilePageStore.class);
 
-       private final ISerializer serializer;
-
        private final Bytes maxSizePerSession;
 
        private final NestedFolders folders;
@@ -100,16 +99,15 @@ public class FilePageStore extends 
AbstractPersistentPageStore
                
                this.folders = new NestedFolders(new File(fileStoreFolder, 
applicationName + "-filestore"));
                this.maxSizePerSession = Args.notNull(maxSizePerSession, 
"maxSizePerSession");
-               this.serializer = serializer; // optional
        }
 
        /**
-        * Versioning is supported if a serializer was provided to the 
constructor.
+        * Pages are always serialized, so versioning is supported.
         */
        @Override
        public boolean supportsVersioning()
        {
-               return serializer != null;
+               return true;
        }
 
        private File getPageFile(String sessionId, int id, boolean create)
@@ -120,40 +118,13 @@ public class FilePageStore extends 
AbstractPersistentPageStore
        }
 
        @Override
-       public boolean canBeAsynchronous(IPageContext context)
-       {
-               // session attribute must be added here *before* any 
asynchronous calls
-               // when session is no longer available
-               getSessionIdentifier(context, true);
-
-               return true;
-       }
-
-       @Override
-       public IManageablePage getPage(IPageContext context, int id)
-       {
-               String identifier = getSessionIdentifier(context, false);
-               if (identifier == null)
-               {
-                       return null;
-               }
-
+       protected IManageablePage getPersistedPage(String identifier, int id) {
                byte[] data = readFile(identifier, id);
                if (data == null) {
                        return null;
                }
                
-               IManageablePage page;
-               if (serializer == null)
-               {
-                       page = new SerializedPage(id, "unknown", data);
-               }
-               else
-               {
-                       page = (IManageablePage)serializer.deserialize(data);
-               }
-
-               return page;
+               return new SerializedPage(id, "unknown", data);
        }
 
        private byte[] readFile(String identifier, int id)
@@ -190,14 +161,7 @@ public class FilePageStore extends 
AbstractPersistentPageStore
        }
 
        @Override
-       public void removePage(IPageContext context, IManageablePage page)
-       {
-               String identifier = getSessionIdentifier(context, false);
-               if (identifier == null)
-               {
-                       return;
-               }
-
+       protected void removePersistedPage(String identifier, IManageablePage 
page) {
                File file = getPageFile(identifier, page.getPageId(), false);
                if (file.exists())
                {
@@ -209,54 +173,22 @@ public class FilePageStore extends 
AbstractPersistentPageStore
        }
 
        @Override
-       public void removeAllPages(IPageContext context)
-       {
-               String identifier = getSessionIdentifier(context, false);
-               if (identifier == null)
-               {
-                       return;
-               }
-
-               removePersistent(identifier);
-       }
-
-       @Override
-       protected void removePersistent(String identifier)
-       {
+       protected void removeAllPersistedPages(String identifier) {
                folders.remove(identifier);
        }
 
-       /**
-        * Supports {@link SerializedPage}s too - for this to work the 
delegating {@link IPageStore}
-        * must use the same {@link ISerializer} as this one.
-        */
        @Override
-       public void addPage(IPageContext context, IManageablePage page)
-       {
-               String identifier = getSessionIdentifier(context, false);
-               if (identifier == null)
+       protected void addPersistedPage(String identifier, IManageablePage 
page) {
+               if (page instanceof SerializedPage == false)
                {
-                       return;
+                       throw new WicketRuntimeException("works with serialized 
pages only");
                }
+               SerializedPage serializedPage = (SerializedPage) page;
 
-               String type;
-               byte[] data;
-               if (page instanceof SerializedPage)
-               {
-                       type = ((SerializedPage)page).getPageType();
-                       data = ((SerializedPage)page).getData();
-               }
-               else
-               {
-                       if (serializer == null)
-                       {
-                               throw new WicketRuntimeException("FilePageStore 
not configured for serialization");
-                       }
-                       type = Classes.name(page.getClass());
-                       data = serializer.serialize(page);
-               }
+               String type = serializedPage.getPageType();
+               byte[] data = serializedPage.getData();
 
-               writeFile(identifier, page.getPageId(), type, data);
+               writeFile(identifier, serializedPage.getPageId(), type, data);
 
                checkMaxSize(identifier);
        }
@@ -321,7 +253,7 @@ public class FilePageStore extends 
AbstractPersistentPageStore
        }
 
        @Override
-       public Set<String> getContextIdentifiers()
+       public Set<String> getSessionIdentifiers()
        {
                Set<String> identifiers = new HashSet<>();
 
@@ -334,11 +266,11 @@ public class FilePageStore extends 
AbstractPersistentPageStore
        }
 
        @Override
-       public List<IPersistedPage> getPersistentPages(String identifier)
+       public List<IPersistedPage> getPersistedPages(String sessionIdentifier)
        {
                List<IPersistedPage> pages = new ArrayList<>();
 
-               File folder = folders.get(identifier, false);
+               File folder = folders.get(sessionIdentifier, false);
                if (folder.exists())
                {
                        File[] files = folder.listFiles();
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java
 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java
index ab0ed24..cd30340 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java
@@ -30,17 +30,17 @@ public interface IPersistentPageStore extends IPageStore
        /**
         * Get the identifier for pages stored for the given context.
         */
-       String getContextIdentifier(IPageContext context);
+       String getSessionIdentifier(IPageContext context);
 
        /**
         * Get the identifiers for all pages stored in all contexts.
         */
-       Set<String> getContextIdentifiers();
+       Set<String> getSessionIdentifiers();
 
        /**
-        * Get information about all persisted pages with the given context 
identifier.
+        * Get information about all persisted pages with the given session 
identifier.
         */
-       List<IPersistedPage> getPersistentPages(String contextIdentifier);
+       List<IPersistedPage> getPersistedPages(String sessionIdentifier);
 
        /**
         * Get total size of all pages stored in all contexts. 
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
index b5a17e7..31bbea0 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
@@ -65,38 +65,22 @@ public class InMemoryPageStore extends 
AbstractPersistentPageStore
                return false;
        }
        
-       /**
-        * 
-        * 
-        * @return <code>true</code> always
-        */
-       @Override
-       public boolean canBeAsynchronous(IPageContext context)
-       {
-               // session attribute must be added here *before* any 
asynchronous calls
-               // when session is no longer available
-               getSessionIdentifier(context, true);
-
-               return true;
-       }
-
        @Override
-       public IManageablePage getPage(IPageContext context, int id)
+       protected IManageablePage getPersistedPage(String identifier, int id)
        {
-               MemoryData data = getMemoryData(context, false);
-               if (data == null)
+               MemoryData data = getMemoryData(identifier, false);
+               if (data != null)
                {
-                       return null;
+                       return data.get(id);
                }
 
-               return data.get(id);
+               return null;
        }
 
        @Override
-       public void removePage(IPageContext context, final IManageablePage page)
+       protected void removePersistedPage(String identifier, IManageablePage 
page)
        {
-               MemoryData data = getMemoryData(context, false);
-
+               MemoryData data = getMemoryData(identifier, false);
                if (data != null)
                {
                        synchronized (data)
@@ -107,35 +91,27 @@ public class InMemoryPageStore extends 
AbstractPersistentPageStore
        }
 
        @Override
-       public void removeAllPages(IPageContext context)
+       protected void removeAllPersistedPages(String identifier)
        {
-               MemoryData data = getMemoryData(context, false);
-
-               if (data != null)
-               {
-                       synchronized (data)
-                       {
-                               data.removeAll();
-                       }
-               }
+               datas.remove(identifier);
        }
 
        @Override
-       public void addPage(IPageContext context, IManageablePage page)
+       protected void addPersistedPage(String identifier, IManageablePage page)
        {
-               MemoryData data = getMemoryData(context, true);
+               MemoryData data = getMemoryData(identifier, true);
 
                data.add(page, maxPages);
        }
 
        @Override
-       public Set<String> getContextIdentifiers()
+       public Set<String> getSessionIdentifiers()
        {
                return datas.keySet();
        }
 
        @Override
-       public List<IPersistedPage> getPersistentPages(String sessionIdentifier)
+       public List<IPersistedPage> getPersistedPages(String sessionIdentifier)
        {
                MemoryData data = datas.get(sessionIdentifier);
                if (data == null)
@@ -186,17 +162,11 @@ public class InMemoryPageStore extends 
AbstractPersistentPageStore
                }
        }
 
-       private MemoryData getMemoryData(IPageContext context, boolean create)
+       private MemoryData getMemoryData(String identifier, boolean create)
        {
-               String identifier = getSessionIdentifier(context, create);
-
                if (!create)
                {
-                       if (identifier == null) {
-                               return null;
-                       } else {
-                               return datas.get(identifier);
-                       }
+                       return datas.get(identifier);
                }
 
                MemoryData data = new MemoryData();
@@ -204,12 +174,6 @@ public class InMemoryPageStore extends 
AbstractPersistentPageStore
                return existing != null ? existing : data;
        }
 
-       @Override
-       protected void removePersistent(String identifier)
-       {
-               datas.remove(identifier);
-       }
-       
        /**
         * Data kept in memory.
         */
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
index 9ab8130..7662fb8 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
@@ -28,7 +28,6 @@ import javax.servlet.http.HttpSession;
 import org.apache.wicket.DefaultPageManagerProvider;
 import org.apache.wicket.MetaDataKey;
 import org.apache.wicket.Session;
-import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.page.IManageablePage;
 import org.apache.wicket.serialize.ISerializer;
 import org.apache.wicket.util.lang.Args;
@@ -53,7 +52,8 @@ public class InSessionPageStore extends DelegatingPageStore
        private int maxPages;
        
        /**
-        * Use this constructor, if sessions are never persisted by the 
container.
+        * Use this constructor if pages should not be persisted along with 
their session, e.g. because a delegated peristent page store
+        * keeps them anyway for backup. 
         * 
         * @param delegate
         *            store to delegate to
@@ -62,35 +62,24 @@ public class InSessionPageStore extends DelegatingPageStore
         */
        public InSessionPageStore(IPageStore delegate, int maxPages)
        {
-               this(delegate, maxPages,  new ISerializer()
-               {
-                       @Override
-                       public byte[] serialize(Object object)
-                       {
-                               throw new 
WicketRuntimeException("InSessionPageStore not configured for serialization");
-                       }
-                       
-                       @Override
-                       public Object deserialize(byte[] data)
-                       {
-                               throw new 
WicketRuntimeException("InSessionPageStore not configured for serialization");
-                       }
-               });
+               this(delegate, maxPages, null);
        }
        
        /**
+        * Use this constructor if pages should be serialized along with their 
session.
+        * 
         * @param delegate
         *            store to delegate to
         * @param maxPages
         *            maximum pages to keep in session
         * @param serializer
-        *            for serialization of pages if session gets persisted
+        *            optional serializer of pages in the session
         */
        public InSessionPageStore(IPageStore delegate, int maxPages, 
ISerializer serializer)
        {
                super(delegate);
 
-               this.serializer = Args.notNull(serializer, "serializer");
+               this.serializer = serializer;
 
                this.maxPages = maxPages;
        }
@@ -150,7 +139,7 @@ public class InSessionPageStore extends DelegatingPageStore
                        data = context.setSessionData(KEY, new SessionData());
                }
 
-               if (data != null) {
+               if (data != null && serializer != null) {
                        // data might be deserialized so initialize again
                        data.init(serializer);
                }
@@ -221,12 +210,8 @@ public class InSessionPageStore extends DelegatingPageStore
                                IManageablePage candidate = pages.get(p);
 
                                if (candidate.getPageId() == id) {
-                                       if (candidate instanceof SerializedPage)
+                                       if (candidate instanceof SerializedPage 
&& serializer != null)
                                        {
-                                               if (serializer == null)
-                                               {
-                                                       throw new 
IllegalStateException("SessionData#init() was not called");
-                                               }
                                                candidate = 
(IManageablePage)serializer.deserialize(((SerializedPage)candidate).getData());
                
                                                pages.set(p, candidate);
@@ -245,18 +230,22 @@ public class InSessionPageStore extends 
DelegatingPageStore
                 */
                private void writeObject(final ObjectOutputStream output) 
throws IOException
                {
-                       // serialize pages if not already
-                       for (int p = 0; p < pages.size(); p++)
-                       {
-                               IManageablePage page = pages.get(p);
-                               
-                               if ((page instanceof SerializedPage) == false)
+                       if (serializer == null) {
+                               pages.clear();
+                       } else {
+                               // serialize pages if not already
+                               for (int p = 0; p < pages.size(); p++)
                                {
-                                       if (serializer == null)
+                                       IManageablePage page = pages.get(p);
+                                       
+                                       if ((page instanceof SerializedPage) == 
false)
                                        {
-                                               throw new 
IllegalStateException("SessionData#init() was not called");
+                                               if (serializer == null)
+                                               {
+                                                       throw new 
IllegalStateException("SessionData#init() was not called");
+                                               }
+                                               pages.set(p,  new 
SerializedPage(page.getPageId(), Classes.name(page.getClass()), 
serializer.serialize(page)));
                                        }
-                                       pages.set(p,  new 
SerializedPage(page.getPageId(), Classes.name(page.getClass()), 
serializer.serialize(page)));
                                }
                        }
 
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java
index f9a08f9..eccabe6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java
@@ -31,9 +31,8 @@ import org.apache.wicket.util.lang.Args;
  * 
  * @see SerializingPageStore
  */
-public class SerializedPage implements IManageablePage
+public final class SerializedPage implements IManageablePage
 {
-
        private final int pageId;
        
        private final String pageType;
@@ -101,6 +100,6 @@ public class SerializedPage implements IManageablePage
        @Override
        public String toString()
        {
-               return "[SerializedPage id = " + pageId + "]";
+               return "[SerializedPage id = " + pageId + ", type=" + pageType 
+ ", size=" + data.length + "]";
        }
 }
\ No newline at end of file
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractConcurrentPageStoreTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractConcurrentPageStoreTest.java
index 3006313..a1fce22 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractConcurrentPageStoreTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractConcurrentPageStoreTest.java
@@ -19,6 +19,7 @@ package org.apache.wicket.pageStore;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
@@ -28,7 +29,6 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.wicket.page.IManageablePage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,78 +60,18 @@ public abstract class AbstractConcurrentPageStoreTest
                return existing != null ? existing : context;
        }
 
-       private static class TaskPage implements IManageablePage
-       {
-               private final String sessionId;
-
-               private int id;
-
-               private byte[] data;
-
-               public TaskPage(String sessionId, int id)
-               {
-                       this.sessionId = sessionId;
-
-                       this.id = id;
-
-                       int length = FILE_SIZE_MIN + 
random.nextInt(FILE_SIZE_MAX - FILE_SIZE_MIN);
-                       data = new byte[length];
-                       random.nextBytes(data);
-               }
-
-               public String getSessionId()
-               {
-                       return sessionId;
-               }
-
-               public boolean check(TaskPage other)
-               {
-                       if (other.data.length != other.data.length)
-                       {
-                               log.error("data.length != length");
-                               return false;
-                       }
-                       if (other.id != other.id)
-                       {
-                               log.error("data.id != id");
-                               return false;
-                       }
-                       if (other.sessionId != other.sessionId)
-                       {
-                               log.error("data.sessionId != sessionId");
-                               return false;
-                       }
-                       return true;
-               }
-
-               @Override
-               public boolean isPageStateless()
-               {
-                       return false;
-               }
-
-               @Override
-               public int getPageId()
-               {
-                       return id;
-               }
-
-               @Override
-               public void detach()
-               {
-               }
-
-               @Override
-               public boolean setFreezePageId(boolean freeze)
-               {
-                       return false;
-               }
+       private static SerializedPage createPage(String sessionId, int id) {
+               int length = FILE_SIZE_MIN + random.nextInt(FILE_SIZE_MAX - 
FILE_SIZE_MIN);
+               byte[] data = new byte[length];
+               random.nextBytes(data);
+               
+               return new SerializedPage(id, sessionId, data);
        }
-
+       
        private final Map<String, AtomicInteger> sessionCounter = new 
ConcurrentHashMap<String, AtomicInteger>();
-       private final ConcurrentLinkedQueue<TaskPage> pagesToSave = new 
ConcurrentLinkedQueue<TaskPage>();
-       private final ConcurrentLinkedQueue<TaskPage> filesToRead1 = new 
ConcurrentLinkedQueue<TaskPage>();
-       private final ConcurrentLinkedQueue<TaskPage> filesToRead2 = new 
ConcurrentLinkedQueue<TaskPage>();
+       private final ConcurrentLinkedQueue<SerializedPage> pagesToSave = new 
ConcurrentLinkedQueue<SerializedPage>();
+       private final ConcurrentLinkedQueue<SerializedPage> filesToRead1 = new 
ConcurrentLinkedQueue<SerializedPage>();
+       private final ConcurrentLinkedQueue<SerializedPage> filesToRead2 = new 
ConcurrentLinkedQueue<SerializedPage>();
 
        private final AtomicInteger read1Count = new AtomicInteger(0);
        private final AtomicInteger read2Count = new AtomicInteger(0);
@@ -171,9 +111,9 @@ public abstract class AbstractConcurrentPageStoreTest
                for (int i = 0; i < FILES_COUNT; ++i)
                {
                        String session = randomSessionId();
-                       TaskPage file = new TaskPage(session, 
nextSessionId(session));
+                       SerializedPage page = createPage(session, 
nextSessionId(session));
                        long now = System.nanoTime();
-                       pagesToSave.add(file);
+                       pagesToSave.add(page);
                        long duration = System.nanoTime() - now;
                        saveTime.addAndGet((int)duration);
                }
@@ -212,20 +152,20 @@ public abstract class AbstractConcurrentPageStoreTest
                @Override
                protected void doRun()
                {
-                       TaskPage page;
+                       SerializedPage page;
 
                        while ((page = pagesToSave.poll()) != null || 
saveCount.get() < FILES_COUNT)
                        {
                                if (page != null)
                                {
-                                       
pageStore.addPage(getContext(page.getSessionId()), page);
+                                       
pageStore.addPage(getContext(page.getPageType()), page);
 
                                        if (saveCount.get() % READ_MODULO == 0)
                                        {
                                                filesToRead1.add(page);
                                        }
                                        saveCount.incrementAndGet();
-                                       
bytesWritten.addAndGet(page.data.length);
+                                       
bytesWritten.addAndGet(page.getData().length);
                                }
 
                                try
@@ -248,21 +188,20 @@ public abstract class AbstractConcurrentPageStoreTest
                @Override
                protected void doRun()
                {
-                       TaskPage page;
+                       SerializedPage page;
                        while ((page = filesToRead1.poll()) != null || 
!saveDone.get())
                        {
                                if (page != null)
                                {
-                                       TaskPage other = 
(TaskPage)pageStore.getPage(getContext(page.getSessionId()),
-                                               page.getPageId());
-                                       if (page.check(other) == false)
+                                       SerializedPage other = 
(SerializedPage)pageStore.getPage(getContext(page.getPageType()), 
page.getPageId());
+                                       if (Arrays.compare(page.getData(), 
other.getData()) != 0)
                                        {
                                                failures.incrementAndGet();
                                                log.error("Detected error 
number: " + failures.get());
                                        }
                                        filesToRead2.add(page);
                                        read1Count.incrementAndGet();
-                                       bytesRead.addAndGet(other.data.length);
+                                       
bytesRead.addAndGet(other.getData().length);
                                }
 
                                try
@@ -284,20 +223,19 @@ public abstract class AbstractConcurrentPageStoreTest
                @Override
                protected void doRun()
                {
-                       TaskPage page;
+                       SerializedPage page;
                        while ((page = filesToRead2.poll()) != null || 
!read1Done.get())
                        {
                                if (page != null)
                                {
-                                       TaskPage other = 
(TaskPage)pageStore.getPage(getContext(page.getSessionId()),
-                                               page.getPageId());
-                                       if (page.check(other) == false)
+                                       SerializedPage other = 
(SerializedPage)pageStore.getPage(getContext(page.getPageType()), 
page.getPageId());
+                                       if (Arrays.compare(page.getData(), 
other.getData()) != 0)
                                        {
                                                failures.incrementAndGet();
                                                log.error("Detected error 
number: " + failures.get());
                                        }
                                        read2Count.incrementAndGet();
-                                       bytesRead.addAndGet(other.data.length);
+                                       
bytesRead.addAndGet(other.getData().length);
                                }
 
                                try
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java
index 9842e82..038b830 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java
@@ -23,9 +23,6 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.io.Serializable;
 
 import org.apache.wicket.MetaDataKey;
-import org.apache.wicket.MockPage;
-import org.apache.wicket.serialize.ISerializer;
-import org.apache.wicket.serialize.java.JavaSerializer;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -34,17 +31,16 @@ public abstract class AbstractPageStoreTest
 {
        protected final String sessionId = "1234567890";
        protected final int pageId = 123;
-       protected final ISerializer serializer = new 
JavaSerializer(getClass().getName());
        protected int maxEntries = 1;
        protected IPageStore pageStore = null;
 
        @BeforeEach
        public void before()
        {
-               pageStore = createPageStore(serializer, maxEntries);
+               pageStore = createPageStore( maxEntries);
        }
 
-       protected abstract IPageStore createPageStore(ISerializer serializer, 
int maxEntries);
+       protected abstract IPageStore createPageStore(int maxEntries);
 
        @AfterEach
        public void after()
@@ -64,7 +60,7 @@ public abstract class AbstractPageStoreTest
        {
                IPageContext context = new DummyPageContext(sessionId);
                
-               pageStore.addPage(context, new MockPage(pageId));
+               pageStore.addPage(context, new SerializedPage(pageId, new 
byte[0]));
 
                assertNotNull(pageStore.getPage(context, pageId));
        }
@@ -80,14 +76,14 @@ public abstract class AbstractPageStoreTest
                IPageContext context = new DummyPageContext(sessionId);
                int maxEntries = 10;
 
-               pageStore = createPageStore(serializer, maxEntries);
+               pageStore = createPageStore(maxEntries);
 
-               pageStore.addPage(context, new MockPage(pageId));
-               pageStore.addPage(context, new MockPage(pageId));
+               pageStore.addPage(context, new SerializedPage(pageId, new 
byte[0]));
+               pageStore.addPage(context, new SerializedPage(pageId, new 
byte[0]));
 
                assertNotNull(pageStore.getPage(context, pageId));
 
-               pageStore.removePage(context, new MockPage(pageId));
+               pageStore.removePage(context, new SerializedPage(pageId, new 
byte[0]));
 
                assertNull(pageStore.getPage(context, pageId));
        }
@@ -97,11 +93,11 @@ public abstract class AbstractPageStoreTest
        {
                IPageContext context = new DummyPageContext(sessionId);
                
-               pageStore.addPage(context, new MockPage(pageId));
+               pageStore.addPage(context, new SerializedPage(pageId, new 
byte[0]));
 
                assertNotNull(pageStore.getPage(context, pageId));
 
-               pageStore.removePage(context, new MockPage(pageId));
+               pageStore.removePage(context, new SerializedPage(pageId, new 
byte[0]));
 
                assertNull(pageStore.getPage(context, pageId));
        }
@@ -139,7 +135,7 @@ public abstract class AbstractPageStoreTest
                        }
                };
                
-               pageStore.removePage(context, new MockPage());
+               pageStore.removePage(context, new SerializedPage(0, new 
byte[0]));
        }
 
        @Test
@@ -147,7 +143,7 @@ public abstract class AbstractPageStoreTest
        {
                IPageContext context = new DummyPageContext(sessionId);
                
-               pageStore.addPage(context, new MockPage(pageId));
+               pageStore.addPage(context, new SerializedPage(pageId, new 
byte[0]));
 
                assertNotNull(pageStore.getPage(context, pageId));
 
@@ -164,12 +160,12 @@ public abstract class AbstractPageStoreTest
        {
                IPageContext context = new DummyPageContext(sessionId);
                
-               pageStore.addPage(context, new MockPage(pageId));
+               pageStore.addPage(context, new SerializedPage(pageId, new 
byte[0]));
 
                assertNotNull(pageStore.getPage(context, pageId));
 
                int pageId2 = 234;
-               pageStore.addPage(context, new MockPage(pageId2));
+               pageStore.addPage(context, new SerializedPage(pageId2, new 
byte[0]));
                assertNull(pageStore.getPage(context, pageId));
                assertNotNull(pageStore.getPage(context, pageId2));
        }
@@ -184,11 +180,11 @@ public abstract class AbstractPageStoreTest
                IPageContext context = new DummyPageContext(sessionId);
                IPageContext context2 = new DummyPageContext("0987654321");
 
-               pageStore.addPage(context, new MockPage(pageId));
+               pageStore.addPage(context, new SerializedPage(pageId, new 
byte[0]));
 
                assertNotNull(pageStore.getPage(context, pageId));
 
-               pageStore.addPage(context2, new MockPage(pageId));
+               pageStore.addPage(context2, new SerializedPage(pageId, new 
byte[0]));
 
                assertNotNull(pageStore.getPage(context, pageId));
                assertNotNull(pageStore.getPage(context2, pageId));
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java
index 2d88eae..a2bfffe 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java
@@ -20,7 +20,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
-import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
@@ -35,15 +34,9 @@ import org.apache.wicket.MockPage;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.mock.MockPageStore;
 import org.apache.wicket.page.IManageablePage;
-import org.apache.wicket.serialize.ISerializer;
-import org.apache.wicket.serialize.java.DeflatedJavaSerializer;
 import org.apache.wicket.util.WicketTestTag;
-import org.apache.wicket.util.file.File;
-import org.apache.wicket.util.lang.Bytes;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Stopwatch;
 
@@ -56,11 +49,8 @@ import com.google.common.base.Stopwatch;
 @Tag(WicketTestTag.SLOW)
 public class AsynchronousPageStoreTest
 {
-       /** Log for reporting. */
-       private static final Logger log = 
LoggerFactory.getLogger(AsynchronousPageStoreTest.class);
-
        @SuppressWarnings("serial")
-       private static class DummyPage implements IManageablePage
+       private static class DummyPage implements IManageablePage, Cloneable
        {
 
                private int pageId;
@@ -99,49 +89,19 @@ public class AsynchronousPageStoreTest
                        return false;
                }
 
-               /**
-                * @param s
-                * @throws IOException
-                */
-               private void writeObject(java.io.ObjectOutputStream s) throws 
IOException
-               {
-                       log.debug("serializing page {} for {}ms (session {})", 
getPageId(), writeMillis,
-                                       sessionId);
-                       try
-                       {
-                               Thread.sleep(writeMillis);
-                       }
-                       catch (InterruptedException e)
-                       {
-                               throw new RuntimeException(e);
-                       }
-
-                       s.writeInt(pageId);
-                       s.writeLong(writeMillis);
-                       s.writeLong(readMillis);
-                       s.writeObject(sessionId);
-               }
-
-               private void readObject(java.io.ObjectInputStream s)
-                               throws IOException, ClassNotFoundException
+               @Override
+               protected DummyPage clone()
                {
-                       log.debug("deserializing page {} for {}ms (session 
{})", getPageId(), writeMillis,
-                                       sessionId);
                        try
                        {
-                               Thread.sleep(readMillis);
+                               return (DummyPage) super.clone();
                        }
-                       catch (InterruptedException e)
+                       catch (CloneNotSupportedException e)
                        {
-                               throw new RuntimeException(e);
+                               throw new Error(e);
                        }
-
-                       pageId = s.readInt();
-                       writeMillis = s.readLong();
-                       readMillis = s.readLong();
-                       sessionId = (String)s.readObject();
                }
-
+               
                public String toString()
                {
                        return "DummyPage[pageId = " + pageId + ", writeMillis 
= " + writeMillis +
@@ -194,7 +154,7 @@ public class AsynchronousPageStoreTest
                
                IPageContext context = new DummyPageContext(sessionId);
 
-               DummyPage page = new DummyPage(pageId, 1000, 1000, sessionId);
+               SerializedPage page = new SerializedPage(pageId, "", new 
byte[0]);
                asyncPageStore.addPage(context, page);
 
                IManageablePage pageBack = asyncPageStore.getPage(context, 
pageId);
@@ -232,8 +192,6 @@ public class AsynchronousPageStoreTest
                        @Override
                        public IManageablePage getPage(IPageContext context, 
int id)
                        {
-                               got.set(true);
-                               
                                return super.getPage(context, id);
                        }
                };
@@ -246,7 +204,7 @@ public class AsynchronousPageStoreTest
                
                IPageContext context = new DummyPageContext(sessionId);
 
-               DummyPage page = new DummyPage(pageId, 1000, 1000, sessionId);
+               SerializedPage page = new SerializedPage(pageId, "", new 
byte[0]);
                asyncPageStore.addPage(context, page);
 
                try
@@ -473,19 +431,41 @@ public class AsynchronousPageStoreTest
 
                final CountDownLatch lock = new CountDownLatch(pages * 
sessions);
 
-               // ISerializer serializer = new DummySerializer();
-               ISerializer serializer = new 
DeflatedJavaSerializer("applicationKey");
-
-               IPageStore pageStore = new DiskPageStore("applicationName", new 
File("./target"),
-                               Bytes.bytes(10000l), serializer) {
+               IPageStore pageStore = new InMemoryPageStore("test", 
Integer.MAX_VALUE) {
                        @Override
                        public void addPage(IPageContext context, 
IManageablePage page)
                        {
+                               DummyPage dummyPage = (DummyPage) page;
 
-                               super.addPage(context, page);
-
+                               super.addPage(context, dummyPage.clone());
+                               
+                               try
+                               {
+                                       Thread.sleep(dummyPage.writeMillis);
+                               }
+                               catch (InterruptedException e)
+                               {
+                                       throw new RuntimeException(e);
+                               }
+                               
                                lock.countDown();
                        }
+                       
+                       @Override
+                       public IManageablePage getPage(IPageContext context, 
int id) {
+                               DummyPage dummyPage = (DummyPage) 
super.getPage(context, id);
+                               
+                               try
+                               {
+                                       Thread.sleep(dummyPage.readMillis);
+                               }
+                               catch (InterruptedException e)
+                               {
+                                       throw new RuntimeException(e);
+                               }
+                               
+                               return dummyPage;
+                       }
                };
 
                IPageStore asyncPageStore = new 
AsynchronousPageStore(pageStore, asyncPageStoreCapacity);
@@ -501,8 +481,7 @@ public class AsynchronousPageStoreTest
                                Metrics metrics = new Metrics();
 
                                stopwatch.reset();
-                               DummyPage page = new DummyPage(pageId, 
around(writeMillis), around(readMillis),
-                                               sessionId);
+                               DummyPage page = new DummyPage(pageId, 
around(writeMillis), around(readMillis), sessionId);
                                stopwatch.start();
                                asyncPageStore.addPage(context, page);
                                metrics.storedPage = page;
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/InMemoryPageStoreTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/InMemoryPageStoreTest.java
index ab1dcec..c4a385a 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/InMemoryPageStoreTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/InMemoryPageStoreTest.java
@@ -16,15 +16,13 @@
  */
 package org.apache.wicket.pageStore;
 
-import org.apache.wicket.serialize.ISerializer;
-
 /**
  * Tests for {@link InMemoryPageStore}
  */
 public class InMemoryPageStoreTest extends AbstractPageStoreTest
 {
        @Override
-       protected IPageStore createPageStore(ISerializer serializer, int 
maxEntries)
+       protected IPageStore createPageStore(int maxEntries)
        {
                return new InMemoryPageStore("test", maxEntries);
        }
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/InSessionPageStoreTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/InSessionPageStoreTest.java
index 4904c9b..301a33c 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/InSessionPageStoreTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/InSessionPageStoreTest.java
@@ -16,17 +16,15 @@
  */
 package org.apache.wicket.pageStore;
 
-import org.apache.wicket.serialize.ISerializer;
-
 /**
  * Test for {@link InSessionPageStore}. 
  */
 public class InSessionPageStoreTest extends AbstractPageStoreTest
 {
        @Override
-       protected IPageStore createPageStore(ISerializer serializer, int 
maxEntries)
+       protected IPageStore createPageStore(int maxEntries)
        {
-               return new InSessionPageStore(new NoopPageStore(), maxEntries, 
serializer);
+               return new InSessionPageStore(new NoopPageStore(), maxEntries);
        }
 
 }
diff --git 
a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java
 
b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java
index 5262bf3..417ae9d 100644
--- 
a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java
+++ 
b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java
@@ -77,7 +77,7 @@ class PersistedPagesProvider extends 
SortableDataProvider<IPersistedPage, String
 
                                if (persistentPagesStore != null)
                                {
-                                       
pages.addAll(persistentPagesStore.getPersistentPages(sessId));
+                                       
pages.addAll(persistentPagesStore.getPersistedPages(sessId));
                                }
                        }
                }
diff --git 
a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java
 
b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java
index 886970b..f4c6323 100644
--- 
a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java
+++ 
b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java
@@ -150,7 +150,7 @@ public class PersistedPanel extends 
GenericPanel<IPersistentPageStore>
 
                IPageContext context = new DefaultPageContext();
                
-               return store.getContextIdentifier(context);
+               return store.getSessionIdentifier(context);
        }
 
        private DataTable<IPersistedPage, String> createTable(String id, 
IModel<String> sessionId)
diff --git 
a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java
 
b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java
index dd7c8b8..714b9d6 100644
--- 
a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java
+++ 
b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java
@@ -48,10 +48,10 @@ public class SessionIdentifiersModel extends 
LoadableDetachableModel<List<String
                        return Collections.emptyList();
                }
 
-               ArrayList<String> identifiers = new 
ArrayList<>(store.getContextIdentifiers());
+               ArrayList<String> identifiers = new 
ArrayList<>(store.getSessionIdentifiers());
 
                IPageContext context = new DefaultPageContext();
-               String current = store.getContextIdentifier(context);
+               String current = store.getSessionIdentifier(context);
                if (identifiers.contains(current) == false)
                {
                        // identifiers of the store seem no to match their 
sessions ids,

Reply via email to