Refactor common code
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/jcs/trunk@1775170 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractDoubleLinkedListMemoryCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractDoubleLinkedListMemoryCache.java
index 2a70420..b1faf25 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractDoubleLinkedListMemoryCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractDoubleLinkedListMemoryCache.java
@@ -20,14 +20,13 @@
*/
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicLong;
import org.apache.commons.jcs.engine.CacheConstants;
import org.apache.commons.jcs.engine.behavior.ICacheElement;
@@ -36,7 +35,6 @@
import org.apache.commons.jcs.engine.memory.util.DefaultMemoryElementDescriptor;
import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
import org.apache.commons.jcs.engine.stats.StatElement;
-import org.apache.commons.jcs.engine.stats.Stats;
import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
import org.apache.commons.jcs.engine.stats.behavior.IStats;
import org.apache.commons.jcs.utils.struct.DoubleLinkedList;
@@ -59,15 +57,6 @@
/** thread-safe double linked list for lru */
protected DoubleLinkedList<MemoryElementDescriptor<K, V>> list; // TODO privatise
- /** number of hits */
- private AtomicLong hitCnt;
-
- /** number of misses */
- private AtomicLong missCnt;
-
- /** number of puts */
- private AtomicLong putCnt;
-
/**
* For post reflection creation initialization.
* <p>
@@ -77,35 +66,9 @@
@Override
public void initialize(CompositeCache<K, V> hub)
{
- lock.lock();
- try
- {
- super.initialize(hub);
- hitCnt = new AtomicLong(0);
- missCnt = new AtomicLong(0);
- putCnt = new AtomicLong(0);
- list = new DoubleLinkedList<MemoryElementDescriptor<K, V>>();
- log.info("initialized MemoryCache for " + getCacheName());
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Reset statistics
- *
- * @see org.apache.commons.jcs.engine.memory.AbstractMemoryCache#dispose()
- */
- @Override
- public void dispose() throws IOException
- {
- super.dispose();
- removeAll();
- hitCnt.set(0);
- missCnt.set(0);
- putCnt.set(0);
+ super.initialize(hub);
+ list = new DoubleLinkedList<MemoryElementDescriptor<K, V>>();
+ log.info("initialized MemoryCache for " + getCacheName());
}
/**
@@ -689,26 +652,12 @@
@Override
public IStats getStatistics()
{
- IStats stats = new Stats();
+ IStats stats = super.getStatistics();
stats.setTypeName( /* add algorithm name */"Memory Cache");
- ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+ List<IStatElement<?>> elems = stats.getStatElements();
- lock.lock(); // not sure that's really relevant here but not that important
- try
- {
- elems.add(new StatElement<Integer>("List Size", Integer.valueOf(list.size())));
- elems.add(new StatElement<Integer>("Map Size", Integer.valueOf(map.size())));
- elems.add(new StatElement<AtomicLong>("Put Count", putCnt));
- elems.add(new StatElement<AtomicLong>("Hit Count", hitCnt));
- elems.add(new StatElement<AtomicLong>("Miss Count", missCnt));
- }
- finally
- {
- lock.unlock();
- }
-
- stats.setStatElements(elems);
+ elems.add(new StatElement<Integer>("List Size", Integer.valueOf(list.size())));
return stats;
}
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java
index c969b43..87929fa 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java
@@ -20,9 +20,11 @@
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@@ -32,7 +34,9 @@
import org.apache.commons.jcs.engine.control.CompositeCache;
import org.apache.commons.jcs.engine.memory.behavior.IMemoryCache;
import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
+import org.apache.commons.jcs.engine.stats.StatElement;
import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
import org.apache.commons.jcs.engine.stats.behavior.IStats;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -66,6 +70,15 @@
/** Map where items are stored by key. This is created by the concrete child class. */
protected Map<K, MemoryElementDescriptor<K, V>> map;// TODO privatise
+ /** number of hits */
+ protected AtomicLong hitCnt;
+
+ /** number of misses */
+ protected AtomicLong missCnt;
+
+ /** number of puts */
+ protected AtomicLong putCnt;
+
/**
* For post reflection creation initialization
* <p>
@@ -74,20 +87,17 @@
@Override
public void initialize( CompositeCache<K, V> hub )
{
- lock.lock();
- try
- {
- this.cacheAttributes = hub.getCacheAttributes();
- this.cache = hub;
- map = createMap();
+ hitCnt = new AtomicLong(0);
+ missCnt = new AtomicLong(0);
+ putCnt = new AtomicLong(0);
- chunkSize = cacheAttributes.getSpoolChunkSize();
- status = CacheStatus.ALIVE;
- }
- finally
- {
- lock.unlock();
- }
+ this.cacheAttributes = hub.getCacheAttributes();
+ this.chunkSize = cacheAttributes.getSpoolChunkSize();
+ this.cache = hub;
+
+ this.map = createMap();
+
+ this.status = CacheStatus.ALIVE;
}
/**
@@ -213,7 +223,7 @@
}
/**
- * Prepares for shutdown.
+ * Prepares for shutdown. Reset statistics
* <p>
* @throws IOException
*/
@@ -221,6 +231,10 @@
public void dispose()
throws IOException
{
+ removeAll();
+ hitCnt.set(0);
+ missCnt.set(0);
+ putCnt.set(0);
log.info( "Memory Cache dispose called." );
}
@@ -232,6 +246,15 @@
{
IStats stats = new Stats();
stats.setTypeName( "Abstract Memory Cache" );
+
+ ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+ stats.setStatElements(elems);
+
+ elems.add(new StatElement<AtomicLong>("Put Count", putCnt));
+ elems.add(new StatElement<AtomicLong>("Hit Count", hitCnt));
+ elems.add(new StatElement<AtomicLong>("Miss Count", missCnt));
+ elems.add(new StatElement<Integer>( "Map Size", Integer.valueOf(getSize()) ) );
+
return stats;
}
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java
index 91a28f2..acb3cee 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java
@@ -20,13 +20,11 @@
*/
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicLong;
import org.apache.commons.jcs.engine.CacheConstants;
import org.apache.commons.jcs.engine.behavior.ICacheElement;
@@ -35,9 +33,6 @@
import org.apache.commons.jcs.engine.memory.AbstractMemoryCache;
import org.apache.commons.jcs.engine.memory.util.DefaultMemoryElementDescriptor;
import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
-import org.apache.commons.jcs.engine.stats.StatElement;
-import org.apache.commons.jcs.engine.stats.Stats;
-import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
import org.apache.commons.jcs.engine.stats.behavior.IStats;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -51,15 +46,6 @@
/** The Logger. */
private static final Log log = LogFactory.getLog( LRUMemoryCache.class );
- /** number of hits */
- private AtomicLong hitCnt;
-
- /** number of misses */
- private AtomicLong missCnt;
-
- /** number of puts */
- private AtomicLong putCnt;
-
/**
* For post reflection creation initialization
* <p>
@@ -69,9 +55,6 @@
public void initialize( CompositeCache<K, V> hub )
{
super.initialize( hub );
- hitCnt = new AtomicLong(0);
- missCnt = new AtomicLong(0);
- putCnt = new AtomicLong(0);
log.info( "initialized LHMLRUMemoryCache for " + getCacheName() );
}
@@ -230,18 +213,9 @@
@Override
public IStats getStatistics()
{
- IStats stats = new Stats();
+ IStats stats = super.getStatistics();
stats.setTypeName( "LHMLRU Memory Cache" );
- ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
-
- elems.add(new StatElement<Integer>( "Map Size", Integer.valueOf(map.size()) ) );
- elems.add(new StatElement<AtomicLong>("Put Count", putCnt));
- elems.add(new StatElement<AtomicLong>("Hit Count", hitCnt));
- elems.add(new StatElement<AtomicLong>("Miss Count", missCnt));
-
- stats.setStatElements( elems );
-
return stats;
}
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/soft/SoftReferenceMemoryCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/soft/SoftReferenceMemoryCache.java
index c2e44d7..5108c66 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/soft/SoftReferenceMemoryCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/soft/SoftReferenceMemoryCache.java
@@ -21,15 +21,14 @@
import java.io.IOException;
import java.lang.ref.SoftReference;
-import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.atomic.AtomicLong;
import org.apache.commons.jcs.engine.CacheConstants;
import org.apache.commons.jcs.engine.behavior.ICacheElement;
@@ -40,7 +39,6 @@
import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
import org.apache.commons.jcs.engine.memory.util.SoftReferenceElementDescriptor;
import org.apache.commons.jcs.engine.stats.StatElement;
-import org.apache.commons.jcs.engine.stats.Stats;
import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
import org.apache.commons.jcs.engine.stats.behavior.IStats;
import org.apache.commons.logging.Log;
@@ -70,15 +68,6 @@
*/
private LinkedBlockingQueue<ICacheElement<K, V>> strongReferences;
- /** number of hits */
- private AtomicLong hitCnt;
-
- /** number of misses */
- private AtomicLong missCnt;
-
- /** number of puts */
- private AtomicLong putCnt;
-
/**
* For post reflection creation initialization
* <p>
@@ -89,9 +78,6 @@
{
super.initialize( hub );
strongReferences = new LinkedBlockingQueue<ICacheElement<K, V>>();
- hitCnt = new AtomicLong(0);
- missCnt = new AtomicLong(0);
- putCnt = new AtomicLong(0);
log.info( "initialized Soft Reference Memory Cache for " + getCacheName() );
}
@@ -149,21 +135,13 @@
@Override
public IStats getStatistics()
{
- ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+ IStats stats = super.getStatistics();
+ stats.setTypeName("Soft Reference Memory Cache");
- int size = getSize();
- int emptyrefs = map.size() - size;
-
- elems.add(new StatElement<Integer>("Size", Integer.valueOf(size)));
+ List<IStatElement<?>> elems = stats.getStatElements();
+ int emptyrefs = map.size() - getSize();
elems.add(new StatElement<Integer>("Empty References", Integer.valueOf(emptyrefs)));
elems.add(new StatElement<Integer>("Strong References", Integer.valueOf(strongReferences.size())));
- elems.add(new StatElement<AtomicLong>("Put Count", putCnt));
- elems.add(new StatElement<AtomicLong>("Hit Count", hitCnt));
- elems.add(new StatElement<AtomicLong>("Miss Count", missCnt));
-
- IStats stats = new Stats();
- stats.setTypeName("Soft Reference Memory Cache");
- stats.setStatElements(elems);
return stats;
}
@@ -358,21 +336,6 @@
}
/**
- * Prepares for shutdown.
- * <p>
- * @throws IOException
- */
- @Override
- public void dispose() throws IOException
- {
- super.dispose();
- removeAll();
- hitCnt.set(0);
- missCnt.set(0);
- putCnt.set(0);
- }
-
- /**
* This can't be implemented.
* <p>
* @param numberToFree