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)