You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by eh...@apache.org on 2007/08/27 22:12:18 UTC

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

Author: ehillenius
Date: Mon Aug 27 13:12:16 2007
New Revision: 570234

URL: http://svn.apache.org/viewvc?rev=570234&view=rev
Log:
whenever a request cycle is constructed, the application thread local should have been set. Wasn't the case for lastModified code. Included some minor tweaks.

Modified:
    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/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=570234&r1=570233&r2=570234&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 Mon Aug 27 13:12:16 2007
@@ -115,35 +115,55 @@
 
 		if (isWicketRequest(relativePath))
 		{
-			HttpServletResponse httpServletResponse = (HttpServletResponse)response;
-			long lastModified = getLastModified(httpServletRequest, httpServletResponse);
-			if (lastModified == -1)
-			{
-				// servlet doesn't support if-modified-since, no reason
-				// to go through further expensive logic
-				doGet(httpServletRequest, httpServletResponse);
-			}
-			else
-			{
-				long ifModifiedSince = httpServletRequest.getDateHeader("If-Modified-Since");
-				if (ifModifiedSince < (lastModified / 1000 * 1000))
-				{
-					// If the servlet mod time is later, call doGet()
-					// Round down to the nearest second for a proper compare
-					// A ifModifiedSince of -1 will always be less
-					maybeSetLastModified(httpServletResponse, lastModified);
+			// Set the webapplication for this thread
+			Application.set(webApplication);
+
+			try
+			{
+				HttpServletResponse httpServletResponse = (HttpServletResponse)response;
+				long lastModified = getLastModified(httpServletRequest, httpServletResponse);
+				if (lastModified == -1)
+				{
+					// servlet doesn't support if-modified-since, no reason
+					// to go through further expensive logic
 					doGet(httpServletRequest, httpServletResponse);
 				}
 				else
 				{
-					httpServletResponse.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+					long ifModifiedSince = httpServletRequest.getDateHeader("If-Modified-Since");
+					if (ifModifiedSince < (lastModified / 1000 * 1000))
+					{
+						// If the servlet mod time is later, call doGet()
+						// Round down to the nearest second for a proper compare
+						// A ifModifiedSince of -1 will always be less
+						maybeSetLastModified(httpServletResponse, lastModified);
+						doGet(httpServletRequest, httpServletResponse);
+					}
+					else
+					{
+						httpServletResponse.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+					}
 				}
 			}
-			// we might have created a request cycle inside getLastModified, so we need to
-			// clean it here (in case the doGet method was not called
-			if (RequestCycle.get() != null)
+			finally
 			{
-				RequestCycle.get().detach();
+				// we might have created a request cycle inside getLastModified, so we need to
+				// clean it here (in case the doGet method was not called
+				if (RequestCycle.get() != null)
+				{
+					try
+					{
+						RequestCycle.get().detach();
+					}
+					catch (RuntimeException e)
+					{
+						log.error("error detaching request cycle " + RequestCycle.get() + ": " +
+								e.getMessage(), e);
+					}
+				}
+
+				// always unset the application thread local
+				Application.unset();
 			}
 		}
 		else
@@ -249,9 +269,6 @@
 				}
 			}
 
-			// First, set the webapplication for this thread
-			Application.set(webApplication);
-
 			// Create a response object and set the output encoding according to
 			// wicket's application setttings.
 			final WebResponse response = existingRequestCycle != null
@@ -418,6 +435,7 @@
 			String contextKey = "wicket:" + filterConfig.getFilterName();
 			filterConfig.getServletContext().setAttribute(contextKey, webApplication);
 
+			// set the application thread local in case initialization code uses it
 			Application.set(webApplication);
 
 			// Call internal init method of web application for default
@@ -721,19 +739,19 @@
 			final String resourceReferenceKey = pathInfo
 					.substring(WebRequestCodingStrategy.RESOURCES_PATH_PREFIX.length());
 
-			final WebRequest request = webApplication.newWebRequest(servletRequest);
-			final WebResponse response = webApplication.newWebResponse(servletResponse);
-			RequestCycle cycle = webApplication.newRequestCycle(request, response);
+			Resource resource = null;
+			try
+			{
+				final WebRequest request = webApplication.newWebRequest(servletRequest);
+				final WebResponse response = webApplication.newWebResponse(servletResponse);
+				RequestCycle cycle = webApplication.newRequestCycle(request, response);
 
-			// Try to find shared resource
-			Resource resource = webApplication.getSharedResources().get(resourceReferenceKey);
+				// Try to find shared resource
+				resource = webApplication.getSharedResources().get(resourceReferenceKey);
 
-			// If resource found and it is cacheable
-			if ((resource != null) && resource.isCacheable())
-			{
-				try
+				// If resource found and it is cacheable
+				if ((resource != null) && resource.isCacheable())
 				{
-					Application.set(webApplication);
 
 					// Set parameters from servlet request
 					resource.setParameters(request.getParameterMap());
@@ -755,14 +773,16 @@
 
 					return time != null ? time.getMilliseconds() : -1;
 				}
-				catch (AbortException e)
-				{
-					return -1;
-				}
-				finally
+			}
+			catch (AbortException e)
+			{
+				return -1;
+			}
+			finally
+			{
+				if (resource != null)
 				{
 					resource.setParameters(null);
-					Application.unset();
 				}
 			}
 		}