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;
        }
 


Reply via email to