Author: jcompagner
Date: Mon Mar 30 10:29:28 2009
New Revision: 759909

URL: http://svn.apache.org/viewvc?rev=759909&view=rev
Log:
WebApplication is not thread-safe
made the bufferedResponse Concurrent and the Session specific map synchonized
Issue: WICKET-2191

Modified:
    wicket/trunk/wicket/   (props changed)
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java

Propchange: wicket/trunk/wicket/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Mar 30 10:29:28 2009
@@ -1 +1 @@
-/wicket/branches/wicket-1.3.x/jdk-1.4/wicket:653208,653212,653215,653226,653231,654304,655446,655466,655786,658141,658189,659118,659120,662360,663058,671549,671885,687144-688996,698530-698577,701132-701133,701843,701850-701877,704231,708127,722099-722105,726536,728467-728490,731960,734478,739647,739951,745468-745497,749817,755171-755176
+/wicket/branches/wicket-1.3.x/jdk-1.4/wicket:653208,653212,653215,653226,653231,654304,655446,655466,655786,658141,658189,659118,659120,662360,663058,671549,671885,687144-688996,698530-698577,701132-701133,701843,701850-701877,704231,708127,722099-722105,726536,728467-728490,731960,734478,739647,739951,745468-745497,749817,755171-755176,759905

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java?rev=759909&r1=759908&r2=759909&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
 Mon Mar 30 10:29:28 2009
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.protocol.http;
 
+import java.util.Collections;
 import java.util.Map;
 
 import javax.servlet.ServletContext;
@@ -129,7 +130,7 @@
         * Map of buffered responses that are in progress per session. Buffered 
responses are
         * temporarily stored
         */
-       private final Map<String, Map<String, BufferedHttpServletResponse>> 
bufferedResponses = Generics.newHashMap();
+       private final Map<String, Map<String, BufferedHttpServletResponse>> 
bufferedResponses = Generics.newConcurrentHashMap();
 
        /** the default request cycle processor implementation. */
        private IRequestCycleProcessor requestCycleProcessor;
@@ -509,9 +510,9 @@
         * -Dwicket.configuration. If it does not exist check the servlet init 
parameter (
         * 
<code>&lt;init-param&gt&lt;param-name&gt;configuration&lt;/param-name&gt;</code>).
 If not
         * found check the servlet context init parameter
-        * 
<code>&lt;context-param&gt&lt;param-name6gt;configuration&lt;/param-name&gt;</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>&lt;context-param&gt&lt;param-name6gt;configuration&lt;/param-name&gt;</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.
         */
@@ -689,7 +690,8 @@
                Map<String, BufferedHttpServletResponse> responsesPerSession = 
bufferedResponses.get(sessionId);
                if (responsesPerSession == null)
                {
-                       responsesPerSession = new MostRecentlyUsedMap<String, 
BufferedHttpServletResponse>(4);
+                       responsesPerSession = Collections.synchronizedMap(new 
MostRecentlyUsedMap<String, BufferedHttpServletResponse>(
+                               4));
                        bufferedResponses.put(sessionId, responsesPerSession);
                }
                responsesPerSession.put(bufferId, renderedResponse);


Reply via email to