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,
