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;
                }
        }
 


Reply via email to