You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2007/05/28 22:49:12 UTC
svn commit: r542320 - in
/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http:
FilePageStore.java SecondLevelCacheSessionStore.java TestFilePageStore.java
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)