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 2008/06/17 23:43:19 UTC

svn commit: r668842 - /wicket/trunk/wicket/src/main/java/org/apache/wicket/Localizer.java

Author: ivaynberg
Date: Tue Jun 17 14:43:19 2008
New Revision: 668842

URL: http://svn.apache.org/viewvc?rev=668842&view=rev
Log:
code cleanup

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Localizer.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Localizer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Localizer.java?rev=668842&r1=668841&r2=668842&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Localizer.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Localizer.java Tue Jun 17 14:43:19 2008
@@ -16,14 +16,13 @@
  */
 package org.apache.wicket;
 
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map;
 import java.util.MissingResourceException;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.wicket.markup.repeater.AbstractRepeater;
 import org.apache.wicket.model.IModel;
@@ -429,9 +428,8 @@
 	 */
 	private static class ClassMetaDatabase
 	{
-		private final Map<String, Long> nameToId = new HashMap<String, Long>();
-		private final ReadWriteLock nameToIdLock = new ReentrantReadWriteLock();
-		private long nameCounter = 0;
+		private final ConcurrentMap<String, Long> nameToId = new ConcurrentHashMap<String, Long>();
+		private final AtomicLong nameCounter = new AtomicLong();
 
 		/**
 		 * Returns a unique id that represents this class' name. This can be used for compressing
@@ -443,32 +441,17 @@
 		public long id(Class<?> clazz)
 		{
 			final String name = clazz.getName();
-			nameToIdLock.readLock().lock();
-			try
+			Long id = nameToId.get(name);
+			if (id == null)
 			{
-				Long id = nameToId.get(name);
-				if (id == null)
+				id = nameCounter.incrementAndGet();
+				Long previousId = nameToId.putIfAbsent(name, id);
+				if (previousId != null)
 				{
-					nameToIdLock.readLock().unlock();
-					nameToIdLock.writeLock().lock();
-					try
-					{
-						nameToId.put(name, nameCounter);
-						id = nameCounter;
-						nameCounter++;
-					}
-					finally
-					{
-						nameToIdLock.readLock().lock();
-						nameToIdLock.writeLock().unlock();
-					}
+					id = previousId;
 				}
-				return id;
-			}
-			finally
-			{
-				nameToIdLock.readLock().unlock();
 			}
+			return id;
 		}
 	}