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 2008/04/06 13:40:04 UTC

svn commit: r645227 - in /wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket: RequestCycle.java protocol/http/WicketFilter.java

Author: jcompagner
Date: Sun Apr  6 04:40:02 2008
New Revision: 645227

URL: http://svn.apache.org/viewvc?rev=645227&view=rev
Log:
WICKET-1478
when setting an error status, the container will try to resolve that in that call itself. This will result in a second wicket call in the same thread. Because of that we will clean all thread locals like RequestCycle and Application. I do reset those now to the previous values.

The problem is that we have more thread locals which also could be affected. Like Sessions thread locals (dirty pages) Also the RequestContext for our portlet support how to handle that?
We need to look at this in a next release a bit more (1.4)

Modified:
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java?rev=645227&r1=645226&r2=645227&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java Sun Apr  6 04:40:02 2008
@@ -212,6 +212,8 @@
 		current.set(cycle);
 	}
 
+	private RequestCycle previousOne = null;
+
 	/**
 	 * True if the request cycle should automatically clear feedback messages after processing. True
 	 * by default.
@@ -285,6 +287,7 @@
 		originalResponse = response;
 		processor = safeGetRequestProcessor();
 
+		previousOne = (RequestCycle)current.get();
 		// Set this RequestCycle into ThreadLocal variable
 		current.set(this);
 	}
@@ -1382,7 +1385,7 @@
 
 		// Clear ThreadLocal reference; makes sense as this object should not be
 		// reused
-		current.set(null);
+		current.set(previousOne);
 	}
 
 	/**

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java?rev=645227&r1=645226&r2=645227&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java Sun Apr  6 04:40:02 2008
@@ -181,6 +181,11 @@
 
 		if (isWicketRequest(relativePath))
 		{
+			Application previous = null;
+			if (Application.exists())
+			{
+				previous = Application.get();
+			}
 			try
 			{
 				// Set the webapplication for this thread
@@ -224,9 +229,16 @@
 			}
 			finally
 			{
-				// always unset the application thread local
-				Application.unset();
-				RequestContext.unset();
+				// unset the application thread local if it didn't exist already.
+				if (previous == null)
+				{
+					Application.unset();
+					RequestContext.unset();
+				}
+				else
+				{
+					Application.set(previous);
+				}
 			}
 		}
 		else