Author: mgrigorov
Date: Thu Jun 16 12:58:53 2011
New Revision: 1136419
URL: http://svn.apache.org/viewvc?rev=1136419&view=rev
Log:
Try to set/get the httpsession attribute used to hold the pages only if there
is Session in the current thread.
In the case when the web container notifies us that the session is unbound
after WicketFilter.destroy() there is neither Session nor Application.
Found while playing with wicket-threadtest
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/memory/HttpSessionDataStore.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/memory/HttpSessionDataStore.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/memory/HttpSessionDataStore.java?rev=1136419&r1=1136418&r2=1136419&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/memory/HttpSessionDataStore.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/memory/HttpSessionDataStore.java
Thu Jun 16 12:58:53 2011
@@ -18,8 +18,11 @@ package org.apache.wicket.pageStore.memo
import javax.servlet.http.HttpSession;
+import org.apache.wicket.Session;
import org.apache.wicket.page.IPageManagerContext;
import org.apache.wicket.pageStore.IDataStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A {@link DataStore} which stores the pages in the {@link HttpSession}. Uses
@@ -48,6 +51,7 @@ import org.apache.wicket.pageStore.IData
*/
public class HttpSessionDataStore implements IDataStore
{
+ private static final Logger log =
LoggerFactory.getLogger(HttpSessionDataStore.class);
/** the session attribute key. auto-prefixed with
application.getSessionAttributePrefix() */
private static final String PAGE_TABLE_KEY = "page:store:memory";
@@ -106,9 +110,16 @@ public class HttpSessionDataStore implem
public void storeData(String sessionId, int pageId, byte[] pageAsBytes)
{
PageTable pageTable = getPageTable(true);
- pageTable.storePage(pageId, pageAsBytes);
-
- evictionStrategy.evict(pageTable);
+ if (pageTable != null)
+ {
+ pageTable.storePage(pageId, pageAsBytes);
+ evictionStrategy.evict(pageTable);
+ }
+ else
+ {
+ log.error("Cannot store the data for page with id '{}'
in session with id '{}'",
+ pageId, sessionId);
+ }
}
public void destroy()
@@ -125,13 +136,16 @@ public class HttpSessionDataStore implem
private PageTable getPageTable(boolean create)
{
- PageTable pageTable =
(PageTable)pageManagerContext.getSessionAttribute(PAGE_TABLE_KEY);
- if (pageTable == null && create)
+ PageTable pageTable = null;
+ if (Session.exists())
{
- pageTable = new PageTable();
- pageManagerContext.setSessionAttribute(PAGE_TABLE_KEY,
pageTable);
+ pageTable =
(PageTable)pageManagerContext.getSessionAttribute(PAGE_TABLE_KEY);
+ if (pageTable == null && create)
+ {
+ pageTable = new PageTable();
+
pageManagerContext.setSessionAttribute(PAGE_TABLE_KEY, pageTable);
+ }
}
-
return pageTable;
}