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/06/03 14:32:57 UTC

svn commit: r543885 - in /incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket: RequestCycle.java protocol/http/FilePageStore.java protocol/http/SecondLevelCacheSessionStore.java

Author: jcompagner
Date: Sun Jun  3 05:32:56 2007
New Revision: 543885

URL: http://svn.apache.org/viewvc?view=rev&rev=543885
Log:
moved the restoredPages/usedPages too SecondLevelStore itself so that over the whole request
one page is only once deserialized and constructed
onEnd and onBeginRequest of the ISessionStore are implemented now (the methods where there but never called!)

Modified:
    incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
    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

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java?view=diff&rev=543885&r1=543884&r2=543885
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java Sun Jun  3 05:32:56 2007
@@ -962,7 +962,7 @@
 						+ ".", re);
 			}
 		}
-
+		
 		if (getResponse() instanceof BufferedWebResponse)
 		{
 			try
@@ -983,7 +983,16 @@
 		{
 			log.error("Exception occurred during onEndRequest", e);
 		}
-
+		
+		try
+		{
+			getApplication().getSessionStore().onEndRequest(getRequest());
+		}
+		catch (RuntimeException e)
+		{
+			log.error("Exception occurred during onEndRequest of the SessionStore", e);
+		}
+		
 		// Release thread local resources
 		try
 		{
@@ -1001,6 +1010,14 @@
 	 */
 	private void prepare()
 	{
+		try
+		{
+			getApplication().getSessionStore().onBeginRequest(getRequest());
+		}
+		catch (RuntimeException e)
+		{
+			log.error("Exception occurred during onEndRequest of the SessionStore", e);
+		}
 		// Event callback
 		onBeginRequest();
 	}

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=543885&r1=543884&r2=543885
==============================================================================
--- 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 Sun Jun  3 05:32:56 2007
@@ -390,8 +390,6 @@
 
 	private volatile long totalSerializationTime = 0;
 	
-	private static final ThreadLocal restoredPages = new ThreadLocal();
-
 	/**
 	 * Construct.
 	 */
@@ -532,14 +530,12 @@
 	 */
 	private Page readPage(int versionNumber, byte[] bytes)
 	{
+		boolean set = Page.serializer.get() == null; 
 		Page page = null;
-		Map map = null;
 		try
 		{
-			if (restoredPages.get() == null)
+			if (set)
 			{
-				map = new HashMap();
-				restoredPages.set(map);
 				Page.serializer.set(new PageSerializer(null));
 			}
 			IPageMapEntry entry = (IPageMapEntry)Objects.byteArrayToObject(bytes);
@@ -551,10 +547,9 @@
 		} 
 		finally
 		{
-			if (map != null)
+			if (set)
 			{
 				Page.serializer.set(null);
-				restoredPages.set(null);
 			}
 		}
 		return page;
@@ -860,21 +855,20 @@
 
 		public Page deserializePage(int id, String name, Page page, ObjectInputStream stream) throws IOException, ClassNotFoundException
 		{
-			HashMap map = (HashMap)restoredPages.get();
-			if (map != null)
+			HashMap pageMaps = (HashMap)SecondLevelCacheSessionStore.usedPages.get();
+			if (pageMaps == null)
 			{
-				IntHashMap pagesMap = (IntHashMap)map.get(name);
-				if (pagesMap == null)
-				{
-					pagesMap = new IntHashMap();
-					map.put(name, pagesMap);
-				}
-				
-				pagesMap.put(id, page);
+				pageMaps = new HashMap();
+				SecondLevelCacheSessionStore.usedPages.set(pageMaps);
 			}
-			
+			IntHashMap pages = (IntHashMap)pageMaps.get(name);
+			if (pages == null)
+			{
+				pages = new IntHashMap();
+				pageMaps.put(name, pages);
+			}
+			pages.put(id, page);
 			boolean b = stream.readBoolean();
-			
 			if (b == false) 
 			{
 				stream.defaultReadObject();
@@ -906,27 +900,7 @@
 		
 		protected Object readResolve() throws ObjectStreamException
 		{
-			IntHashMap intHashMap = null;
-			Map map = (Map)restoredPages.get();
-			if (map != null)
-			{
-				intHashMap = (IntHashMap)map.get(pagemap);
-				if (intHashMap == null)
-				{
-					intHashMap = new IntHashMap();
-					map.put(pagemap, intHashMap);
-				}
-			}
-			Page page = (Page)intHashMap.get(pageid);
-			if (page == null)
-			{
-				page = Session.get().getPage(pagemap, Integer.toString(pageid), -1);
-				if (page != null)
-				{
-					intHashMap.put(pageid, page);
-				}
-			}
-			return page;
+			return Session.get().getPage(pagemap, Integer.toString(pageid), -1);
 		}
 	}
 }

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=543885&r1=543884&r2=543885
==============================================================================
--- 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 Sun Jun  3 05:32:56 2007
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 import org.apache.wicket.Application;
@@ -28,6 +29,7 @@
 import org.apache.wicket.PageMap;
 import org.apache.wicket.Request;
 import org.apache.wicket.session.pagemap.IPageMapEntry;
+import org.apache.wicket.util.collections.IntHashMap;
 import org.apache.wicket.version.IPageVersionManager;
 import org.apache.wicket.version.undo.Change;
 
@@ -41,8 +43,8 @@
 {
 	/**
 	 * This interface is used by the SecondLevelCacheSessionStore so that pages
-	 * can be stored to a persistent layer. Implemenation should store the page
-	 * that it gets under the id and versionnumber. So that every page version
+	 * can be stored to a persistent layer. Implementation should store the page
+	 * that it gets under the id and version number. So that every page version
 	 * can be reconstructed when asked for.
 	 * 
 	 * @see FilePageStore as default implementation.
@@ -70,8 +72,8 @@
 
 		/**
 		 * This method is called when the page is accessed. A IPageStore
-		 * implemenation can block until a save of that page version is done. So
-		 * that a specifiek page version is always restoreable.
+		 * implementation can block until a save of that page version is done. So
+		 * that a specific page version is always restore able.
 		 * 
 		 * @param sessionId
 		 * @param page
@@ -126,6 +128,25 @@
 
 		public Page get(int id, int versionNumber)
 		{
+			HashMap pageMaps = (HashMap)usedPages.get();
+			if (pageMaps == null)
+			{
+				pageMaps = new HashMap();
+				usedPages.set(pageMaps);
+			}
+			IntHashMap pages = (IntHashMap)pageMaps.get(getName());
+			if (pages == null)
+			{
+				pages = new IntHashMap();
+				pageMaps.put(getName(), pages);
+			}
+			
+			// for now i only get by id.
+			// does it really make any sense that there are multiply instances of the 
+			// same page are alive in one session??
+			Page page = (Page)pages.get(id);
+			if (page != null) return page;
+			
 			PageVersions pv = null;
 			if (versionNumber == -1)
 			{
@@ -143,11 +164,12 @@
 			String sessionId = getSession().getId();
 			if (lastPage != null && lastPage.getNumericId() == id)
 			{
-				Page page = lastPage.getVersion(versionNumber);
+				page = lastPage.getVersion(versionNumber);
 				if (page != null)
 				{
 					// ask the page store if it is ready saving the page.
 					getStore().pageAccessed(sessionId, page);
+					pages.put(id,page);
 					return page;
 				}
 			}
@@ -167,7 +189,10 @@
 					ajaxVersionNumber = pv.ajaxversionid;
 				}
 				lastPage = null;
-				return getStore().getPage(sessionId, getName(), id, versionNumber, ajaxVersionNumber);
+				page = getStore().getPage(sessionId, getName(), id, versionNumber, ajaxVersionNumber);
+				pages.put(id,page);
+				return page;
+				
 			}
 			return null;
 		}
@@ -465,6 +490,8 @@
 		}
 
 	}
+	
+	static final ThreadLocal usedPages = new ThreadLocal();
 
 	private IPageStore pageStore;
 
@@ -483,10 +510,10 @@
 
 		this.pageStore = pageStore;
 
-		// turn automatic multiwindow support off by default, as we don't really
+		// turn automatic multi window support off by default, as we don't really
 		// need to be afraid to run out of history with this implementation.
 		// note that the session store is created before Application#init is
-		// called, so if users set this setting explicitly, it'll be overriden
+		// called, so if users set this setting explicitly, it'll be overridden
 		// (and that's exactly what we want: provide a better default, but not
 		// forcing people to do away with this feature).
 		Application.get().getPageSettings().setAutomaticMultiWindowSupport(false);
@@ -501,6 +528,14 @@
 		return new SecondLevelCachePageMap(name);
 	}
 
+	/**
+	 * @see org.apache.wicket.protocol.http.AbstractHttpSessionStore#onEndRequest(org.apache.wicket.Request)
+	 */
+	public void onEndRequest(Request request)
+	{
+		super.onEndRequest(request);
+		usedPages.set(null);
+	}
 	/**
 	 * @see org.apache.wicket.protocol.http.AbstractHttpSessionStore#destroy()
 	 */