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)