Author: jcompagner
Date: Mon Mar 30 10:16:08 2009
New Revision: 759905
URL: http://svn.apache.org/viewvc?rev=759905&view=rev
Log:
WebApplication is not thread-safe
made the bufferedResponse Concurrent and the Session specific map synchonized
Issue: WICKET-2191
Modified:
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
Modified:
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
URL:
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java?rev=759905&r1=759904&r2=759905&view=diff
==============================================================================
---
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
(original)
+++
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
Mon Mar 30 10:16:08 2009
@@ -16,7 +16,7 @@
*/
package org.apache.wicket.protocol.http;
-import java.util.HashMap;
+import java.util.Collections;
import java.util.Map;
import javax.servlet.ServletContext;
@@ -45,6 +45,7 @@
import
org.apache.wicket.request.target.coding.SharedResourceRequestTargetUrlCodingStrategy;
import org.apache.wicket.session.ISessionStore;
import org.apache.wicket.util.collections.MostRecentlyUsedMap;
+import org.apache.wicket.util.concurrent.ConcurrentHashMap;
import org.apache.wicket.util.file.FileCleaner;
import org.apache.wicket.util.file.IResourceFinder;
import org.apache.wicket.util.file.WebApplicationPath;
@@ -110,7 +111,7 @@
* Map of buffered responses that are in progress per session. Buffered
responses are
* temporarily stored
*/
- private final Map bufferedResponses = new HashMap();
+ private final Map bufferedResponses = new ConcurrentHashMap();
/** the default request cycle processor implementation. */
private IRequestCycleProcessor requestCycleProcessor;
@@ -458,9 +459,9 @@
* -Dwicket.configuration. If it does not exist check the servlet init
parameter (
*
<code><init-param><param-name>configuration</param-name></code>).
If not
* found check the servlet context init parameter
- *
<code><context-param><param-name6gt;configuration</param-name></code>).
If
- * the parameter is "development" (which is default), settings
appropriate for development are
- * set. If it's "deployment" , deployment settings are used. If
development is specified and a
+ *
<code><context-param><param-name6gt;configuration</param-name></code>).
If the
+ * parameter is "development" (which is default), settings appropriate
for development are set.
+ * If it's "deployment" , deployment settings are used. If development
is specified and a
* "sourceFolder" init parameter is also set, then resources in that
folder will be polled for
* changes.
*/
@@ -635,7 +636,7 @@
Map responsesPerSession = (Map)bufferedResponses.get(sessionId);
if (responsesPerSession == null)
{
- responsesPerSession = new MostRecentlyUsedMap(4);
+ responsesPerSession = Collections.synchronizedMap(new
MostRecentlyUsedMap(4));
bufferedResponses.put(sessionId, responsesPerSession);
}
responsesPerSession.put(bufferId, renderedResponse);