You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/06/29 18:47:56 UTC

svn commit: r959026 - /wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java

Author: ivaynberg
Date: Tue Jun 29 16:47:56 2010
New Revision: 959026

URL: http://svn.apache.org/viewvc?rev=959026&view=rev
Log:
optimize access to mount map, making webrequestcodingstrategy more concurrent

Modified:
    wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java

Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java?rev=959026&r1=959025&r2=959026&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java Tue Jun 29 16:47:56 2010
@@ -21,8 +21,10 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 import java.util.Map.Entry;
+import java.util.TreeMap;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
@@ -169,6 +171,7 @@ public class WebRequestCodingStrategy im
 	 * </p>
 	 */
 	private final MountsMap mountsOnPath;
+	private final ReadWriteLock mountsOnPathLock = new ReentrantReadWriteLock();
 
 	/**
 	 * Construct.
@@ -402,11 +405,16 @@ public class WebRequestCodingStrategy im
 	 */
 	public IRequestTargetUrlCodingStrategy[] listMounts()
 	{
-		synchronized (mountsOnPath)
+		try
 		{
+			mountsOnPathLock.readLock().lock();
 			return mountsOnPath.strategies().toArray(
 				new IRequestTargetUrlCodingStrategy[mountsOnPath.size()]);
 		}
+		finally
+		{
+			mountsOnPathLock.readLock().unlock();
+		}
 	}
 
 	/**
@@ -414,8 +422,9 @@ public class WebRequestCodingStrategy im
 	 */
 	public IRequestTargetUrlCodingStrategy urlCodingStrategyForPath(String path)
 	{
-		synchronized (mountsOnPath)
+		try
 		{
+			mountsOnPathLock.readLock().lock();
 			if (path == null)
 			{
 				return mountsOnPath.strategyForMount(null);
@@ -428,8 +437,13 @@ public class WebRequestCodingStrategy im
 					return strategy;
 				}
 			}
+			return null;
 		}
-		return null;
+		finally
+		{
+			mountsOnPathLock.readLock().unlock();
+		}
+
 	}
 
 	/**
@@ -461,8 +475,9 @@ public class WebRequestCodingStrategy im
 			path = path.substring(1);
 		}
 
-		synchronized (mountsOnPath)
+		try
 		{
+			mountsOnPathLock.writeLock().lock();
 			if (mountsOnPath.strategyForMount(path) != null)
 			{
 				throw new WicketRuntimeException(path + " is already mounted for " +
@@ -470,6 +485,10 @@ public class WebRequestCodingStrategy im
 			}
 			mountsOnPath.mount(path, encoder);
 		}
+		finally
+		{
+			mountsOnPathLock.writeLock().unlock();
+		}
 	}
 
 	/**
@@ -523,10 +542,15 @@ public class WebRequestCodingStrategy im
 			path = path.substring(1);
 		}
 
-		synchronized (mountsOnPath)
+		try
 		{
+			mountsOnPathLock.writeLock().lock();
 			mountsOnPath.unmount(path);
 		}
+		finally
+		{
+			mountsOnPathLock.writeLock().unlock();
+		}
 	}
 
 	/**
@@ -981,8 +1005,9 @@ public class WebRequestCodingStrategy im
 
 		if (IActivePageBehaviorListener.INTERFACE.getName().equals(listenerName))
 		{
-			url.append(url.indexOf("?") > -1 ? "&" : "?").append(
-				IGNORE_IF_NOT_ACTIVE_PARAMETER_NAME).append("=true");
+			url.append(url.indexOf("?") > -1 ? "&" : "?")
+				.append(IGNORE_IF_NOT_ACTIVE_PARAMETER_NAME)
+				.append("=true");
 		}
 		return url;
 	}
@@ -1020,8 +1045,9 @@ public class WebRequestCodingStrategy im
 	 */
 	protected IRequestTargetUrlCodingStrategy getMountEncoder(IRequestTarget requestTarget)
 	{
-		synchronized (mountsOnPath)
+		try
 		{
+			mountsOnPathLock.readLock().lock();
 			// TODO Post 1.2: Performance: Optimize algorithm if possible and/ or
 			// cache lookup results
 			for (IRequestTargetUrlCodingStrategy encoder : mountsOnPath.strategies())
@@ -1032,6 +1058,10 @@ public class WebRequestCodingStrategy im
 				}
 			}
 		}
+		finally
+		{
+			mountsOnPathLock.readLock().unlock();
+		}
 		return null;
 	}