You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by da...@apache.org on 2007/03/28 17:15:17 UTC

svn commit: r523360 - in /incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket: PageMap.java protocol/http/SecondLevelCacheSessionStore.java

Author: dashorst
Date: Wed Mar 28 08:15:13 2007
New Revision: 523360

URL: http://svn.apache.org/viewvc?view=rev&rev=523360
Log:
Probable fix for cross session pagemap problems

Modified:
    incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java
    incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/protocol/http/SecondLevelCacheSessionStore.java

Modified: incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java
URL: http://svn.apache.org/viewvc/incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java?view=diff&rev=523360&r1=523359&r2=523360
==============================================================================
--- incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java (original)
+++ incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java Wed Mar 28 08:15:13 2007
@@ -21,6 +21,9 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import wicket.session.pagemap.IPageMapEntry;
 import wicket.util.lang.Objects;
 
@@ -31,6 +34,7 @@
 {
 	private static final long serialVersionUID = 1L;
 
+	private static Log log = LogFactory.getLog(PageMap.class);
 
 	/** Name of default pagemap */
 	public static final String DEFAULT_NAME = null;
@@ -92,7 +96,7 @@
 		{
 			throw new IllegalArgumentException("session must be not null");
 		}
-		this.session = session;
+		this.setSession(session);
 	}
 
 
@@ -101,7 +105,7 @@
 	 */
 	public final IPageMapEntry getEntry(final int id)
 	{
-		return (IPageMapEntry)session.getAttribute(attributeForId(id));
+		return (IPageMapEntry)getSession().getAttribute(attributeForId(id));
 	}
 
 	/**
@@ -117,9 +121,24 @@
 	 */
 	public final Session getSession()
 	{
+		Session threadSession = Session.get();
+		if (threadSession != session && session != null)
+		{
+			// now we have big shit
+			log.error("Session stored in pagemap (" + session.getId()
+					+ ") is not equal to request session (" + threadSession.getId() + ")");
+			// fixing the session
+			session = threadSession;
+			// clear the current page.
+			houstonWeHaveAProblem();
+		}
 		return session;
 	}
 
+	protected void houstonWeHaveAProblem() 
+	{
+	}
+
 	/**
 	 * @see wicket.IPageMap#isDefault()
 	 */
@@ -139,7 +158,7 @@
 
 	protected final void dirty()
 	{
-		session.dirtyPageMap(this);
+		getSession().dirtyPageMap(this);
 	}
 
 	/**
@@ -231,8 +250,8 @@
 		cycle.setRedirect(true);
 		cycle.setResponsePage(page);
 	}
-	
-    /**
+
+	/**
 	 * Redirects browser to an intermediate page such as a sign-in page. The
 	 * current request's URL is saved exactly as it was requested for future use
 	 * by continueToOriginalDestination(); Only use this method when you plan to
@@ -253,12 +272,12 @@
 		interceptContinuationURL = cycle.getRequest().getURL();
 
 		// Page map is dirty
-		session.dirtyPageMap(this);
+		getSession().dirtyPageMap(this);
 
 		// Redirect to the page
 		cycle.setRedirect(true);
 		cycle.setResponsePage(pageClazz);
-	}	
+	}
 
 	/**
 	 * @see wicket.IPageMap#clear()
@@ -289,13 +308,13 @@
 	 */
 	protected final void visitEntries(final IVisitor visitor)
 	{
-		final List attributes = session.getAttributeNames();
+		final List attributes = getSession().getAttributeNames();
 		for (final Iterator iterator = attributes.iterator(); iterator.hasNext();)
 		{
 			final String attribute = (String)iterator.next();
 			if (attribute.startsWith(attributePrefix()))
 			{
-				visitor.entry((IPageMapEntry)session.getAttribute(attribute));
+				visitor.entry((IPageMapEntry)getSession().getAttribute(attribute));
 			}
 		}
 	}
@@ -309,7 +328,7 @@
 		clear();
 
 		// Then remove the pagemap itself
-		session.removePageMap(this);
+		getSession().removePageMap(this);
 	}
 
 	/**
@@ -344,7 +363,7 @@
 	{
 		long size = Objects.sizeof(this);
 		Iterator it = getEntries().iterator();
-		while(it.hasNext())
+		while (it.hasNext())
 		{
 			IPageMapEntry entry = (IPageMapEntry)it.next();
 			if (entry instanceof Page)
@@ -364,14 +383,14 @@
 	 */
 	private final List getEntries()
 	{
-		final List attributes = session.getAttributeNames();
+		final List attributes = getSession().getAttributeNames();
 		final List list = new ArrayList();
 		for (final Iterator iterator = attributes.iterator(); iterator.hasNext();)
 		{
 			final String attribute = (String)iterator.next();
 			if (attribute.startsWith(attributePrefix()))
 			{
-				list.add(session.getAttribute(attribute));
+				list.add(getSession().getAttribute(attribute));
 			}
 		}
 		return list;

Modified: incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/protocol/http/SecondLevelCacheSessionStore.java
URL: http://svn.apache.org/viewvc/incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/protocol/http/SecondLevelCacheSessionStore.java?view=diff&rev=523360&r1=523359&r2=523360
==============================================================================
--- incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/protocol/http/SecondLevelCacheSessionStore.java (original)
+++ incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/protocol/http/SecondLevelCacheSessionStore.java Wed Mar 28 08:15:13 2007
@@ -19,6 +19,9 @@
 import java.lang.ref.SoftReference;
 import java.util.Map;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import wicket.Application;
 import wicket.IPageMap;
 import wicket.Page;
@@ -35,6 +38,8 @@
  */
 public class SecondLevelCacheSessionStore extends HttpSessionStore
 {
+	private static final Log log = LogFactory.getLog(SecondLevelCacheSessionStore.class);
+
 	private static final class SecondLevelCachePageMap extends PageMap
 	{
 		private static final long serialVersionUID = 1L;
@@ -59,6 +64,13 @@
 			{
 				getStore().removePage(sessionId, entry.getPage());
 			}
+		}
+
+		protected void houstonWeHaveAProblem()
+		{
+			log.error("Problem encountered: pagemap of different session found. Previous active page: "
+							+ lastPage);
+			lastPage = null;
 		}
 
 		public void put(Page page)