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
The following commit(s) were added to refs/heads/WICKET-6563 by this push:
new d52371d WICKET-6563 update size when removing pages
d52371d is described below
commit d52371d8e294da4bdc475e4362667d1119752e4b
Author: Sven Meier <[email protected]>
AuthorDate: Wed Jan 23 15:58:37 2019 +0100
WICKET-6563 update size when removing pages
and keep pages in list for InMemoryPageStore, in case pages are not
serialized and change
their id afterwards
---
.../apache/wicket/pageStore/InMemoryPageStore.java | 72 ++++++++++++++--------
.../wicket/pageStore/InSessionPageStore.java | 4 +-
2 files changed, 47 insertions(+), 29 deletions(-)
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 e8bca9c..9ea6476 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
@@ -18,7 +18,7 @@ package org.apache.wicket.pageStore;
import java.util.ArrayList;
import java.util.Iterator;
-import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -46,6 +46,8 @@ public class InMemoryPageStore extends
AbstractPersistentPageStore
private final Supplier<MemoryData> dataCreator;
/**
+ * Keep {@code maxPages} for each session.
+ *
* @param applicationName
* {@link Application#getName()}
* @param maxPages
@@ -57,10 +59,15 @@ public class InMemoryPageStore extends
AbstractPersistentPageStore
}
/**
+ * Keep page up to {@code maxBytes} for each session.
+ * <p>
+ * All pages added to this store <em>must</em> be {@code
SerializedPage}s. You can achieve this by letting
+ * a {@link SerializingPageStore} delegate to this store.
+ *
* @param applicationName
* {@link Application#getName()}
- * @param maxPages
- * max pages per session
+ * @param maxBytes
+ * maximum bytes to keep in session
*/
public InMemoryPageStore(String applicationName, Bytes maxBytes)
{
@@ -200,39 +207,58 @@ public class InMemoryPageStore extends
AbstractPersistentPageStore
*/
static abstract class MemoryData implements Iterable<IManageablePage>
{
- LinkedHashMap<Integer, IManageablePage> pages = new
LinkedHashMap<>();
+ /**
+ * Kept in list instead of map, since non-serialized pages
might change their id during a request.
+ */
+ List<IManageablePage> pages = new LinkedList<>();
@Override
public Iterator<IManageablePage> iterator()
{
- return pages.values().iterator();
+ return pages.iterator();
}
public synchronized void add(IManageablePage page)
{
- pages.remove(page.getPageId());
- pages.put(page.getPageId(), page);
- }
-
- public IManageablePage remove(int pageId)
- {
- return pages.remove(pageId);
+ remove(page.getPageId());
+
+ pages.add(page);
}
- public void removeAll()
+ public synchronized IManageablePage remove(int pageId)
{
- pages.clear();
+ Iterator<IManageablePage> iterator = pages.iterator();
+ while (iterator.hasNext())
+ {
+ IManageablePage page = iterator.next();
+
+ if (page.getPageId() == pageId)
+ {
+ iterator.remove();
+ return page;
+ }
+ }
+ return null;
}
- public IManageablePage get(int id)
+ public synchronized IManageablePage get(int pageId)
{
- IManageablePage page = pages.get(id);
-
- return page;
+ Iterator<IManageablePage> iterator = pages.iterator();
+ while (iterator.hasNext())
+ {
+ IManageablePage page = iterator.next();
+
+ if (page.getPageId() == pageId)
+ {
+ return page;
+ }
+ }
+
+ return null;
}
protected void removeOldest() {
- IManageablePage page = pages.values().iterator().next();
+ IManageablePage page = pages.iterator().next();
remove(page.getPageId());
}
@@ -308,13 +334,5 @@ public class InMemoryPageStore extends
AbstractPersistentPageStore
}
return page;
}
-
- @Override
- public synchronized void removeAll()
- {
- super.removeAll();
-
- size = 0;
- }
}
}
\ No newline at end of file
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 81d1060..b33690c 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
@@ -91,7 +91,7 @@ public class InSessionPageStore extends DelegatingPageStore
/**
* Keep page up to {@code maxBytes} in each session.
* <p>
- * All pages added to this store must be {@code SerializedPage}s. You
can achieve this by letting
+ * All pages added to this store <em>must</em> be {@code
SerializedPage}s. You can achieve this by letting
* a {@link SerializingPageStore} delegate to this store.
*
* @param delegate
@@ -192,7 +192,7 @@ public class InSessionPageStore extends DelegatingPageStore
/**
* Pages, may partly be serialized.
* <p>
- * Kept in list instead of map, since life pages might change
their id during a request.
+ * Kept in list instead of map, since non-serialized pages
might change their id during a request.
*/
List<IManageablePage> pages = new LinkedList<>();