Author: jcompagner
Date: Mon May 28 13:49:11 2007
New Revision: 542320

URL: http://svn.apache.org/viewvc?view=rev&rev=542320
Log:
fix for removing pages from disk when calling clear/remove or remove(page) on 
pagemap

Modified:
    
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/FilePageStore.java
    
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java
    
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/TestFilePageStore.java

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/FilePageStore.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/FilePageStore.java?view=diff&rev=542320&r1=542319&r2=542320
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/FilePageStore.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/FilePageStore.java
 Mon May 28 13:49:11 2007
@@ -38,6 +38,7 @@
 import org.apache.wicket.Page;
 import org.apache.wicket.Session;
 import org.apache.wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore;
+import org.apache.wicket.session.pagemap.IPageMapEntry;
 import org.apache.wicket.util.collections.IntHashMap;
 import org.apache.wicket.util.concurrent.ConcurrentHashMap;
 import org.apache.wicket.util.lang.Objects;
@@ -531,7 +532,7 @@
         */
        private Page readPage(int versionNumber, byte[] bytes)
        {
-               Page page;
+               Page page = null;
                Map map = null;
                try
                {
@@ -541,8 +542,12 @@
                                restoredPages.set(map);
                                Page.serializer.set(new PageSerializer(null));
                        }
-                       page = (Page)Objects.byteArrayToObject(bytes);
-                       page = page.getVersion(versionNumber);
+                       IPageMapEntry entry = 
(IPageMapEntry)Objects.byteArrayToObject(bytes);
+                       if (entry != null)
+                       {
+                               page = entry.getPage();
+                               page = page.getVersion(versionNumber);
+                       }
                } 
                finally
                {
@@ -570,9 +575,10 @@
         * @see 
org.apache.wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore#removePage(java.lang.String,
         *      org.apache.wicket.Page)
         */
-       public void removePage(String sessionId, Page page)
+       public void removePage(String sessionId, String pageMapName, int pageId)
        {
-               removePageFromPendingMap(sessionId, page.getNumericId());
+               removePageFromPendingMap(sessionId, pageMapName, pageId);
+               removeFiles(sessionId,pageMapName, pageId);
        }
 
        /**
@@ -614,12 +620,20 @@
        }
 
 
-       private void removePage(String sessionId, int id)
+       private void removeFiles(String sessionId, String pageMap, int id)
        {
                File sessionDir = new File(getWorkDir(), sessionId);
                if (sessionDir.exists())
                {
-                       final String filepart = appName + "-page-" + id;
+                       final String filepart;
+                       if (id != -1)
+                       {
+                               filepart = appName + "-pm-"+pageMap +"-p-" + id;
+                       }
+                       else
+                       {
+                               filepart = appName + "-pm-"+pageMap;
+                       }
                        File[] listFiles = sessionDir.listFiles(new 
FilenameFilter()
                        {
                                public boolean accept(File dir, String name)
@@ -636,10 +650,11 @@
        }
 
        /**
-        * @param sessionId
-        * @param id
+        * @param sessionId The session of the page that must be removed
+        * @param pageMap The pagemap of the page that must be removed
+        * @param id The id of the page.
         */
-       private void removePageFromPendingMap(String sessionId, int id)
+       private void removePageFromPendingMap(String sessionId, String 
pageMap,int id)
        {
                List list = (List)pagesToBeSerialized.get(sessionId);
 
@@ -652,14 +667,14 @@
                        while (iterator.hasNext())
                        {
                                SessionPageKey key = 
(SessionPageKey)iterator.next();
-                               if (key.sessionId == sessionId && key.id == id)
+                               
+                               if ( (id == -1 ||  key.id == id) && 
Objects.equal(key.sessionId, sessionId) && 
+                                               Objects.equal(key.pageMap, 
pageMap))
                                {
                                        iterator.remove();
                                }
                        }
                }
-               // TODO remove from pages to be saved
-               removePage(sessionId, id);
        }
 
        private void removeSession(String sessionId)
@@ -698,7 +713,7 @@
                Page.serializer.set(new PageSerializer(key));
                try
                {
-                       bytes = Objects.objectToByteArray(page);
+                       bytes = 
Objects.objectToByteArray(page.getPageMapEntry());
                        totalSerializationTime += (System.currentTimeMillis() - 
t1);
                        serialized++;
                        if (log.isDebugEnabled() && bytes != null)
@@ -833,7 +848,7 @@
                        {
                                previous.add(current);
                                current = spk;
-                               byte[] bytes = Objects.objectToByteArray(page);
+                               byte[] bytes = 
Objects.objectToByteArray(page.getPageMapEntry());
                                current.setObject(bytes);
                                pagesToBeSaved.put(spk, spk);
                                completed.add(current);

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java?view=diff&rev=542320&r1=542319&r2=542320
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java
 Mon May 28 13:49:11 2007
@@ -81,10 +81,11 @@
                /**
                 * Removes a page from the persistent layer.
                 * 
-                * @param sessionId
-                * @param page
+                * @param sessionId The session of the page that must be removed
+                * @param pagemap The pagemap of the page that must be removed
+                * @param id The id of the page.
                 */
-               void removePage(String sessionId, Page page);
+               void removePage(String sessionId, String pagemap, int id);
 
                /**
                 * Stores the page to a persistent layer. The page should be 
stored
@@ -192,13 +193,26 @@
                                }
                        }
                }
+               
+               /**
+                * @see org.apache.wicket.PageMap#clear()
+                */
+               public void clear()
+               {
+                       super.clear();
+                       String sessionId = getSession().getId();
+                       if (sessionId != null)
+                       {
+                               getStore().removePage(sessionId, getName(),-1);
+                       }
+               }
 
                public void removeEntry(IPageMapEntry entry)
                {
                        String sessionId = getSession().getId();
                        if (sessionId != null)
                        {
-                               getStore().removePage(sessionId, 
entry.getPage());
+                               getStore().removePage(sessionId, getName(), 
entry.getNumericId());
                        }
                }
 

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/TestFilePageStore.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/TestFilePageStore.java?view=diff&rev=542320&r1=542319&r2=542320
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/TestFilePageStore.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/TestFilePageStore.java
 Mon May 28 13:49:11 2007
@@ -21,13 +21,10 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.Iterator;
-import java.util.Map;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Page;
 import org.apache.wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore;
-import org.apache.wicket.util.concurrent.ConcurrentHashMap;
 import org.apache.wicket.util.lang.Objects;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -47,8 +44,6 @@
        /** log. */
        protected static Logger log = 
LoggerFactory.getLogger(TestFilePageStore.class);
 
-       private Map map = new ConcurrentHashMap();
-       
        public void destroy()
        {
        }
@@ -197,10 +192,8 @@
                
        }
 
-       public void removePage(String sessionId, Page page)
+       public void removePage(String sessionId, String pageMapName, int pageId)
        {
-               SessionPageKey key = new SessionPageKey(sessionId, page);
-               map.remove(page);
        }
 
        public void storePage(String sessionId, Page page)
@@ -213,11 +206,6 @@
 
        public void unbind(String sessionId)
        {
-               for (Iterator i = map.keySet().iterator(); i.hasNext(); ) {
-                       SessionPageKey key = (SessionPageKey)i.next();
-                       if (key.sessionId.equals(sessionId))
-                               i.remove();
-               }
        }
 
        private File getPageFile(SessionPageKey key, File sessionDir)


Reply via email to