Author: taylor
Date: Mon Jun  2 15:17:47 2014
New Revision: 1599238

URL: http://svn.apache.org/r1599238
Log:
JS2-1294: Fix for race condition occuring in SessionPathResolverCache since the 
internal cache is initialized with a non-threadsave HashMap. Contribution from 
Joachim Mueller.

Removed:
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/decoration/caches/HashMapPathResolverCache.java
Modified:
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/decoration/caches/SessionPathResolverCache.java
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/decoration/TestDecorations.java
    
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/decoration/caches/SessionPathResolverCache.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/decoration/caches/SessionPathResolverCache.java?rev=1599238&r1=1599237&r2=1599238&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/decoration/caches/SessionPathResolverCache.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/decoration/caches/SessionPathResolverCache.java
 Mon Jun  2 15:17:47 2014
@@ -16,35 +16,54 @@
  */
 package org.apache.jetspeed.decoration.caches;
 
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpSession;
-
 import org.apache.jetspeed.PortalReservedParameters;
 import org.apache.jetspeed.decoration.PathResolverCache;
 
+import javax.servlet.http.HttpSession;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 /**
  * Extends the 
  * 
  * @author <href a="mailto:wea...@apache.org";>Scott T. Weaver</a>
  *
  */
-public class SessionPathResolverCache extends HashMapPathResolverCache 
implements PathResolverCache
+public class SessionPathResolverCache implements PathResolverCache
 {
-    public SessionPathResolverCache(HttpSession session)
+    
+       private Map<String,String> cache = null;
+       
+       public SessionPathResolverCache(HttpSession session)
     {
-        cache = (Map) 
session.getAttribute(PortalReservedParameters.RESOVLER_CACHE_ATTR);
-        
+        cache = (Map) 
session.getAttribute(PortalReservedParameters.RESOLVER_CACHE_ATTR);
         if(cache == null)
         {
-            cache = new HashMap();
-            session.setAttribute(PortalReservedParameters.RESOVLER_CACHE_ATTR, 
cache);
+            cache = new ConcurrentHashMap<String, String>();
+            session.setAttribute(PortalReservedParameters.RESOLVER_CACHE_ATTR, 
cache);
         }
     }
     
-    public void clear()
-    {
+       @Override
+       public void clear() {
         cache.clear();
     }
+
+       @Override
+       public void addPath(String key, String path) {
+        cache.put(key, path);
+               
+       }
+
+       @Override
+       public String getPath(String key) {
+        return cache.get(key);
+       }
+
+       @Override
+       public String removePath(String key) {
+        return cache.remove(key);
+       }
+       
+
 }

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/decoration/TestDecorations.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/decoration/TestDecorations.java?rev=1599238&r1=1599237&r2=1599238&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/decoration/TestDecorations.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/decoration/TestDecorations.java
 Mon Jun  2 15:17:47 2014
@@ -16,16 +16,6 @@
  */
 package org.apache.jetspeed.decoration;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Properties;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
 import org.apache.jetspeed.PortalReservedParameters;
 import org.apache.jetspeed.om.page.ContentFragment;
 import org.apache.jetspeed.om.page.ContentPage;
@@ -36,6 +26,15 @@ import org.jmock.MockObjectTestCase;
 import org.jmock.core.Constraint;
 import org.jmock.core.InvocationMatcher;
 
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Properties;
+
 public class TestDecorations extends MockObjectTestCase
 {
     private Path testPathHtmlEn;
@@ -256,8 +255,7 @@ public class TestDecorations extends Moc
         expectAndReturn(atLeastOnce(), servletRequestMock, "getSession", 
sessionMock.proxy());
         expectAndReturn(atLeastOnce(), requestContextMock, "getRequest", 
servletRequestMock.proxy());
         
-        expectAndReturn(atLeastOnce(), sessionMock, "getAttribute", new 
Constraint[]{eq(PortalReservedParameters.RESOVLER_CACHE_ATTR)}, new HashMap());
-        //expectAndReturn(sessionMock, "getAttribute", 
PortalReservedParameters.RESOVLER_CACHE_ATTR);
+        expectAndReturn(atLeastOnce(), sessionMock, "getAttribute", new 
Constraint[]{eq(PortalReservedParameters.RESOLVER_CACHE_ATTR)}, new HashMap());
 
         expectAndReturn(childFragmentMock, "getDecorator", 
"myPortletDecoration");
 

Modified: 
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java?rev=1599238&r1=1599237&r2=1599238&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java
 Mon Jun  2 15:17:47 2014
@@ -65,7 +65,7 @@ public interface PortalReservedParameter
     public static final String PATH_ATTRIBUTE = "org.apache.jetspeed.Path";
     public static final String CONTENT_PATH_ATTRIBUTE = 
"org.apache.jetspeed.ContentPath";
     public static final String PARAMETER_ALREADY_DECODED_ATTRIBUTE = 
"org.apache.jetspeed.parameterAlreadyDecoded";
-    public static final String RESOVLER_CACHE_ATTR = 
"org.apache.jetspeed.resovler.cache";
+    public static final String RESOLVER_CACHE_ATTR = 
"org.apache.jetspeed.resolver.cache";
     public static final String PORTLET_DEFINITION_ATTRIBUTE = 
"org.apache.jetspeed.portlet.definition";
     public static final String PORTLET_WINDOW_ATTRIBUTE = 
"org.apache.jetspeed.portlet.window";
     public static final String PORTLET_FILTER_MANAGER_ATTRIBUTE = 
"org.apache.jetspeed.portlet.container.filterManager";



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org

Reply via email to