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 8dcf2e34927e0c164235f5bea79c7026d22192dc Author: Sven Meier <[email protected]> AuthorDate: Thu Dec 20 14:04:01 2018 +0100 WICKET-6563 review comments fixed --- .../java/org/apache/wicket/page/IPageManager.java | 16 +++++- .../wicket/pageStore/AsynchronousPageStore.java | 8 +-- .../apache/wicket/pageStore/CryptingPageStore.java | 11 +++- .../wicket/pageStore/DefaultPageContext.java | 14 ++--- .../org/apache/wicket/pageStore/DiskPageStore.java | 64 ++++++++-------------- .../org/apache/wicket/pageStore/FilePageStore.java | 9 +-- .../apache/wicket/pageStore/InMemoryPageStore.java | 3 +- .../wicket/pageStore/InSessionPageStore.java | 11 ++-- .../apache/wicket/pageStore/RequestPageStore.java | 10 ++-- .../wicket/pageStore/SerializingPageStore.java | 7 ++- 10 files changed, 80 insertions(+), 73 deletions(-) diff --git a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java index 50e0f58..8f4cd0e 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java @@ -57,7 +57,7 @@ public interface IPageManager * page to add */ void addPage(IManageablePage page); - + /** * Remove all pages. */ @@ -79,4 +79,18 @@ public interface IPageManager * @return store or <code>null</code> */ IPageStore getPageStore(); + + /** + * @deprecated will be removed in Wicket 10 + */ + default void touchPage(IManageablePage page) { + addPage(page); + } + + /** + * @deprecated will be removed in Wicket 10 + */ + default void clear() { + removeAllPages(); + } } diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/AsynchronousPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/AsynchronousPageStore.java index e5bdca1..9eb0c95 100644 --- a/wicket-core/src/main/java/org/apache/wicket/pageStore/AsynchronousPageStore.java +++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/AsynchronousPageStore.java @@ -339,7 +339,7 @@ public class AsynchronousPageStore extends DelegatingPageStore log.debug("Returning the page of a non-stored entry with page id '{}'", pageId); return entry.page; } - IManageablePage page = super.getPage(context, pageId); + IManageablePage page = getDelegate().getPage(context, pageId); log.debug("Returning the page of a stored entry with page id '{}'", pageId); @@ -359,7 +359,7 @@ public class AsynchronousPageStore extends DelegatingPageStore } } - super.removePage(context, page); + getDelegate().removePage(context, page); } @Override @@ -391,7 +391,7 @@ public class AsynchronousPageStore extends DelegatingPageStore log.warn("Delegated page store '{}' can not be asynchronous", getDelegate().getClass().getName()); } - super.addPage(context, page); + getDelegate().addPage(context, page); } @Override @@ -406,6 +406,6 @@ public class AsynchronousPageStore extends DelegatingPageStore } } - super.removeAllPages(context); + getDelegate().removeAllPages(context); } } \ No newline at end of file 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 c79ef98..01dae3b 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 @@ -24,6 +24,7 @@ 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; /** * A store that encrypts all pages before delegating and vice versa. @@ -68,6 +69,8 @@ public class CryptingPageStore extends DelegatingPageStore @Override public boolean canBeAsynchronous(IPageContext context) { + // session data must be added here *before* any asynchronous calls + // when session is no longer available getSessionData(context); return getDelegate().canBeAsynchronous(context); @@ -93,7 +96,7 @@ public class CryptingPageStore extends DelegatingPageStore @Override public IManageablePage getPage(IPageContext context, int id) { - IManageablePage page = super.getPage(context, id); + IManageablePage page = getDelegate().getPage(context, id); if (page != null) { @@ -127,16 +130,18 @@ public class CryptingPageStore extends DelegatingPageStore page = new SerializedPage(page.getPageId(), serializedPage.getPageType(), encrypted); - super.addPage(context, page); + getDelegate().addPage(context, page); } private static class SessionData implements Serializable { - private ICrypter cypter; + private final ICrypter cypter; public SessionData(ICrypter crypter) { + Args.notNull(crypter, "crypter"); + this.cypter= crypter; } diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageContext.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageContext.java index 6b8dc71..c75892b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageContext.java +++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageContext.java @@ -30,11 +30,6 @@ import org.apache.wicket.request.cycle.RequestCycle; */ public class DefaultPageContext implements IPageContext { - private Session session; - - public DefaultPageContext() { - this.session = Session.get(); - } /** * @see org.apache.wicket.pageStore.IPageContext#getSessionId() @@ -42,6 +37,8 @@ public class DefaultPageContext implements IPageContext @Override public String getSessionId() { + Session session = Session.get(); + session.bind(); return session.getId(); @@ -51,12 +48,13 @@ public class DefaultPageContext implements IPageContext @Override public <T extends Serializable> T getSessionAttribute(String key) { - return (T)session.getAttribute(key); + return (T)Session.get().getAttribute(key); } @Override public <T extends Serializable> void setSessionAttribute(String key, T value) { + Session session = Session.get(); session.bind(); session.setAttribute(key, value); } @@ -64,12 +62,14 @@ public class DefaultPageContext implements IPageContext @Override public <T extends Serializable> T getSessionData(MetaDataKey<T> key) { - return session.getMetaData(key); + return Session.get().getMetaData(key); } @Override public <T extends Serializable> T setSessionData(MetaDataKey<T> key, T value) { + Session session = Session.get(); + synchronized (session) { T oldValue = session.getMetaData(key); 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 b93b478..a8f5a0a 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 @@ -51,6 +51,7 @@ 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; @@ -63,7 +64,7 @@ import org.slf4j.LoggerFactory; * However this does not help in case of alternating requests between multiple browser windows: In this case requests are processed for * different page ids and the oldests pages are constantly overwritten (this can easily happen with Ajax timers on one or more pages). * This leads to pages with identical id superfluously kept in the file, while older pages are prematurely expelled. - * Any following request to these older pages will then fail {@link PageExpiredException}. + * Any following request to these older pages will then fail with {@link PageExpiredException}. */ public class DiskPageStore implements IPersistentPageStore { @@ -71,6 +72,9 @@ public class DiskPageStore implements IPersistentPageStore private static final String KEY = "wicket:DiskPageStore"; + /** + * Name of the file where the page index is stored. + */ private static final String INDEX_FILE_NAME = "DiskPageStoreIndex"; /** @@ -276,7 +280,7 @@ public class DiskPageStore implements IPersistentPageStore "DiskPageStore not configured for serialization"); } data = serializer.serialize(page); - type = page.getClass().getName(); + type = Classes.name(page.getClass()); } diskData.savePage(page.getPageId(), type, data); @@ -335,24 +339,16 @@ public class DiskPageStore implements IPersistentPageStore File index = new File(storeFolder, INDEX_FILE_NAME); if (index.exists() && index.length() > 0) { - try + try (InputStream stream = new FileInputStream(index)) { - InputStream stream = new FileInputStream(index); ObjectInputStream ois = new ObjectInputStream(stream); - try - { - diskDatas.clear(); - for (DiskData diskData : (List<DiskData>)ois.readObject()) - { - diskData.pageStore = this; - diskDatas.put(diskData.sessionIdentifier, diskData); - } - } - finally + diskDatas.clear(); + + for (DiskData diskData : (List<DiskData>)ois.readObject()) { - stream.close(); - ois.close(); + diskData.pageStore = this; + diskDatas.put(diskData.sessionIdentifier, diskData); } } catch (Exception e) @@ -363,9 +359,6 @@ public class DiskPageStore implements IPersistentPageStore Files.remove(index); } - /** - * - */ private void saveIndex() { File storeFolder = folders.getBase(); @@ -373,27 +366,19 @@ public class DiskPageStore implements IPersistentPageStore { File index = new File(storeFolder, INDEX_FILE_NAME); Files.remove(index); - try + try (OutputStream stream = new FileOutputStream(index)) { - OutputStream stream = new FileOutputStream(index); ObjectOutputStream oos = new ObjectOutputStream(stream); - try + + List<DiskData> list = new ArrayList<>(diskDatas.size()); + for (DiskData diskData : diskDatas.values()) { - List<DiskData> list = new ArrayList<>(diskDatas.size()); - for (DiskData diskData : diskDatas.values()) + if (diskData.sessionIdentifier != null) { - if (diskData.sessionIdentifier != null) - { - list.add(diskData); - } + list.add(diskData); } - oos.writeObject(list); - } - finally - { - stream.close(); - oos.close(); } + oos.writeObject(list); } catch (Exception e) { @@ -493,7 +478,7 @@ public class DiskPageStore implements IPersistentPageStore { if (fileName == null) { - fileName = pageStore.getSessionFileName(sessionIdentifier, true); + fileName = pageStore.getSessionFileName(sessionIdentifier); } return fileName; } @@ -553,7 +538,7 @@ public class DiskPageStore implements IPersistentPageStore } /** - * Removes the page from pagemap file. + * Removes the page from disk. * * @param pageId */ @@ -656,15 +641,14 @@ public class DiskPageStore implements IPersistentPageStore /** * Returns the file name for specified session. If the session folder (folder that contains the - * file) does not exist and createSessionFolder is true, the folder will be created. + * file) does not exist, the folder will be created. * * @param sessionIdentifier - * @param createSessionFolder * @return file name for pagemap */ - private String getSessionFileName(String sessionIdentifier, boolean createSessionFolder) + private String getSessionFileName(String sessionIdentifier) { - File sessionFolder = folders.get(sessionIdentifier, createSessionFolder); + File sessionFolder = folders.get(sessionIdentifier, true); return new File(sessionFolder, "data").getAbsolutePath(); } 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 3ff615d..a27f447 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 @@ -47,6 +47,7 @@ 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; @@ -98,7 +99,7 @@ public class FilePageStore implements IPersistentPageStore } /** - * Create a store to disk. + * Create a store to files. * * @param applicationName * name of application @@ -282,9 +283,9 @@ public class FilePageStore implements IPersistentPageStore { if (serializer == null) { - throw new WicketRuntimeException("DiskPageStore not configured for serialization"); + throw new WicketRuntimeException("FilePageStore not configured for serialization"); } - type = page.getClass().getName(); + type = Classes.name(page.getClass()); data = serializer.serialize(page); } @@ -401,7 +402,7 @@ public class FilePageStore implements IPersistentPageStore @Override public int compare(File f1, File f2) { - return (int)(f2.lastModified() - f1.lastModified()); + return Long.compare(f2.lastModified(), f1.lastModified()); } } 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 760d4aa..81e5f23 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 @@ -37,6 +37,7 @@ import org.apache.wicket.core.util.lang.WicketObjects; import org.apache.wicket.page.IManageablePage; import org.apache.wicket.util.lang.Args; import org.apache.wicket.util.lang.Bytes; +import org.apache.wicket.util.lang.Classes; /** * A storage of pages in memory. @@ -341,7 +342,7 @@ public class InMemoryPageStore implements IPersistentPageStore public PersistedPage(IManageablePage page, long size) { this.id = page.getPageId(); - this.type = page instanceof SerializedPage ? ((SerializedPage)page).getPageType() : page.getClass().getName(); + this.type = page instanceof SerializedPage ? ((SerializedPage)page).getPageType() : Classes.name(page.getClass());; this.size = size; } 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 01c3cb5..9ab8130 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 @@ -32,6 +32,7 @@ import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.page.IManageablePage; import org.apache.wicket.serialize.ISerializer; import org.apache.wicket.util.lang.Args; +import org.apache.wicket.util.lang.Classes; /** * A store keeping a configurable maximum of pages in the session. @@ -106,7 +107,7 @@ public class InSessionPageStore extends DelegatingPageStore } } - return super.getPage(context, id); + return getDelegate().getPage(context, id); } @Override @@ -116,7 +117,7 @@ public class InSessionPageStore extends DelegatingPageStore data.add(context, page, maxPages); - super.addPage(context, page); + getDelegate().addPage(context, page); } @Override @@ -127,7 +128,7 @@ public class InSessionPageStore extends DelegatingPageStore data.remove(page); } - super.removePage(context, page); + getDelegate().removePage(context, page); } @Override @@ -138,7 +139,7 @@ public class InSessionPageStore extends DelegatingPageStore data.removeAll(); } - super.removeAllPages(context); + getDelegate().removeAllPages(context); } private SessionData getSessionData(IPageContext context, boolean create) @@ -255,7 +256,7 @@ public class InSessionPageStore extends DelegatingPageStore { throw new IllegalStateException("SessionData#init() was not called"); } - pages.set(p, new SerializedPage(page.getPageId(), page.getClass().getName(), 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/RequestPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java index 89618bc..69a1210 100644 --- a/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java +++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java @@ -52,7 +52,7 @@ public class RequestPageStore extends DelegatingPageStore return page; } - return super.getPage(context, id); + return getDelegate().getPage(context, id); } @Override @@ -66,7 +66,7 @@ public class RequestPageStore extends DelegatingPageStore { getRequestData(context).remove(page); - super.removePage(context, page); + getDelegate().removePage(context, page); } @Override @@ -74,7 +74,7 @@ public class RequestPageStore extends DelegatingPageStore { getRequestData(context).removeAll(); - super.removeAllPages(context); + getDelegate().removeAllPages(context); } @Override @@ -96,12 +96,12 @@ public class RequestPageStore extends DelegatingPageStore if (isPageStateless == false) { - super.addPage(context, page); + getDelegate().addPage(context, page); } } requestData.removeAll(); - super.detach(context); + getDelegate().detach(context); } private RequestData getRequestData(IPageContext context) diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java index d588262..0a20825 100644 --- a/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java +++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java @@ -19,6 +19,7 @@ package org.apache.wicket.pageStore; import org.apache.wicket.page.IManageablePage; import org.apache.wicket.serialize.ISerializer; import org.apache.wicket.util.lang.Args; +import org.apache.wicket.util.lang.Classes; /** * A store that serializes all pages before delegating and vice versa. @@ -62,7 +63,7 @@ public class SerializingPageStore extends DelegatingPageStore @Override public IManageablePage getPage(IPageContext context, int id) { - IManageablePage page = super.getPage(context, id); + IManageablePage page = getDelegate().getPage(context, id); if (page instanceof SerializedPage) { page = (IManageablePage)serializer.deserialize(((SerializedPage)page).getData()); @@ -74,8 +75,8 @@ public class SerializingPageStore extends DelegatingPageStore public void addPage(IPageContext context, IManageablePage page) { if (page instanceof SerializedPage == false) { - page = new SerializedPage(page.getPageId(), page.getClass().getName(), serializer.serialize(page)); + page = new SerializedPage(page.getPageId(), Classes.name(page.getClass()), serializer.serialize(page)); } - super.addPage(context, page); + getDelegate().addPage(context, page); } } \ No newline at end of file
