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