Author: tv
Date: Fri May  2 20:27:57 2014
New Revision: 1592029

URL: http://svn.apache.org/r1592029
Log:
Simplify and generify statistics

Modified:
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWait.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWaitFacade.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheEventQueue.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/PooledCacheEventQueue.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractDoubleLinkedListMemoryCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/stats/CacheStats.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/stats/StatElement.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/stats/Stats.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/stats/behavior/ICacheStats.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/stats/behavior/IStatElement.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/stats/behavior/IStats.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/LRUMap.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/JCSThrashTest.java

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCache.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCache.java
 Fri May  2 20:27:57 2014
@@ -22,10 +22,8 @@ package org.apache.commons.jcs.auxiliary
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -536,30 +534,16 @@ public abstract class AbstractDiskCache<
         IStats stats = new Stats();
         stats.setTypeName( "Abstract Disk Cache" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
-        IStatElement se = null;
-
-        se = new StatElement();
-        se.setName( "Purgatory Hits" );
-        se.setData( "" + purgHits );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Purgatory Size" );
-        se.setData( "" + purgatory.size() );
-        elems.add( se );
+        elems.add(new StatElement<Integer>( "Purgatory Hits", 
Integer.valueOf(purgHits) ) );
+        elems.add(new StatElement<Integer>( "Purgatory Size", 
Integer.valueOf(purgatory.size()) ) );
 
         // get the stats from the event queue too
-        // get as array, convert to list, add list to our outer list
         IStats eqStats = this.cacheEventQueue.getStatistics();
-        IStatElement[] eqSEs = eqStats.getStatElements();
-        List<IStatElement> eqL = Arrays.asList( eqSEs );
-        elems.addAll( eqL );
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        elems.addAll(eqStats.getStatElements());
+
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java
 Fri May  2 20:27:57 2014
@@ -27,7 +27,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ScheduledExecutorService;
@@ -697,69 +696,35 @@ public class BlockDiskCache<K extends Se
         IStats stats = new Stats();
         stats.setTypeName( "Block Disk Cache" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
-        IStatElement se = null;
-
-        se = new StatElement();
-        se.setName( "Is Alive" );
-        se.setData( "" + alive );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Key Map Size" );
-        se.setData( "" + this.keyStore.size() );
-        elems.add( se );
+        elems.add(new StatElement<Boolean>( "Is Alive", Boolean.valueOf(alive) 
) );
+        elems.add(new StatElement<Integer>( "Key Map Size", 
Integer.valueOf(this.keyStore.size()) ) );
 
         try
         {
-            se = new StatElement();
-            se.setName( "Data File Length" );
-            if ( this.dataFile != null )
-            {
-                se.setData( "" + this.dataFile.length() );
-            }
-            else
-            {
-                se.setData( "-1" );
-            }
-            elems.add( se );
+            elems.add(new StatElement<Long>( "Data File Length",
+                    Long.valueOf(this.dataFile != null ? 
this.dataFile.length() : -1L) ) );
         }
-        catch ( Exception e )
+        catch ( IOException e )
         {
             log.error( e );
         }
 
-        se = new StatElement();
-        se.setName( "Block Size Bytes" );
-        se.setData( "" + this.dataFile.getBlockSizeBytes() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Number Of Blocks" );
-        se.setData( "" + this.dataFile.getNumberOfBlocks() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Average Put Size Bytes" );
-        se.setData( "" + this.dataFile.getAveragePutSizeBytes() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Empty Blocks" );
-        se.setData( "" + this.dataFile.getEmptyBlocks() );
-        elems.add( se );
+        elems.add(new StatElement<Integer>( "Block Size Bytes",
+                Integer.valueOf(this.dataFile.getBlockSizeBytes()) ) );
+        elems.add(new StatElement<Integer>( "Number Of Blocks",
+                Integer.valueOf(this.dataFile.getNumberOfBlocks()) ) );
+        elems.add(new StatElement<Long>( "Average Put Size Bytes",
+                Long.valueOf(this.dataFile.getAveragePutSizeBytes()) ) );
+        elems.add(new StatElement<Integer>( "Empty Blocks",
+                Integer.valueOf(this.dataFile.getEmptyBlocks()) ) );
 
         // get the stats from the super too
-        // get as array, convert to list, add list to our outer list
         IStats sStats = super.getStatistics();
-        IStatElement[] sSEs = sStats.getStatElements();
-        List<IStatElement> sL = Arrays.asList( sSEs );
-        elems.addAll( sL );
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        elems.addAll(sStats.getStatElements());
+
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
 Fri May  2 20:27:57 2014
@@ -1552,91 +1552,33 @@ public class IndexedDiskCache<K extends 
         IStats stats = new Stats();
         stats.setTypeName( "Indexed Disk Cache" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
-
-        IStatElement se = null;
-
-        se = new StatElement();
-        se.setName( "Is Alive" );
-        se.setData( "" + alive );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Key Map Size" );
-        if ( this.keyHash != null )
-        {
-            se.setData( "" + this.keyHash.size() );
-        }
-        else
-        {
-            se.setData( "-1" );
-        }
-        elems.add( se );
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
+        elems.add(new StatElement<Boolean>( "Is Alive", Boolean.valueOf(alive) 
) );
+        elems.add(new StatElement<Integer>( "Key Map Size",
+                Integer.valueOf(this.keyHash != null ? this.keyHash.size() : 
-1) ) );
         try
         {
-            se = new StatElement();
-            se.setName( "Data File Length" );
-            if ( this.dataFile != null )
-            {
-                se.setData( "" + this.dataFile.length() );
-            }
-            else
-            {
-                se.setData( "-1" );
-            }
-            elems.add( se );
+            elems.add(new StatElement<Long>( "Data File Length",
+                    Long.valueOf(this.dataFile != null ? 
this.dataFile.length() : -1L) ) );
         }
         catch ( Exception e )
         {
             log.error( e );
         }
-
-        se = new StatElement();
-        se.setName( "Hit Count" );
-        se.setData( "" + this.hitCount.get() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Bytes Free" );
-        se.setData( "" + this.bytesFree );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Optimize Operation Count" );
-        se.setData( "" + this.removeCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Times Optimized" );
-        se.setData( "" + this.timesOptimized );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Recycle Count" );
-        se.setData( "" + this.recycleCnt );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Recycle Bin Size" );
-        se.setData( "" + this.recycle.size() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Startup Size" );
-        se.setData( "" + this.startupSize );
-        elems.add( se );
+        elems.add(new StatElement<Integer>( "Hit Count", 
Integer.valueOf(this.hitCount.get()) ) );
+        elems.add(new StatElement<Long>( "Bytes Free", 
Long.valueOf(this.bytesFree) ) );
+        elems.add(new StatElement<Integer>( "Optimize Operation Count", 
Integer.valueOf(this.removeCount) ) );
+        elems.add(new StatElement<Integer>( "Times Optimized", 
Integer.valueOf(this.timesOptimized) ) );
+        elems.add(new StatElement<Integer>( "Recycle Count", 
Integer.valueOf(this.recycleCnt) ) );
+        elems.add(new StatElement<Integer>( "Recycle Bin Size", 
Integer.valueOf(this.recycle.size()) ) );
+        elems.add(new StatElement<Integer>( "Startup Size", 
Integer.valueOf(this.startupSize) ) );
 
         // get the stats from the super too
-        // get as array, convert to list, add list to our outer list
         IStats sStats = super.getStatistics();
-        IStatElement[] sSEs = sStats.getStatElements();
-        List<IStatElement> sL = Arrays.asList( sSEs );
-        elems.addAll( sL );
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        elems.addAll(sStats.getStatElements());
+
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
 Fri May  2 20:27:57 2014
@@ -27,8 +27,6 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -1124,77 +1122,25 @@ public class JDBCDiskCache<K extends Ser
     {
         IStats stats = super.getStatistics();
         stats.setTypeName( "JDBC/Abstract Disk Cache" );
-        stats.getStatElements();
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
+        List<IStatElement<?>> elems = stats.getStatElements();
 
-        IStatElement se = null;
-
-        se = new StatElement();
-        se.setName( "Update Count" );
-        se.setData( "" + updateCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Get Count" );
-        se.setData( "" + getCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Get Matching Count" );
-        se.setData( "" + getMatchingCount );
-        elems.add( se );
+        elems.add(new StatElement<Integer>( "Update Count", 
Integer.valueOf(updateCount) ) );
+        elems.add(new StatElement<Integer>( "Get Count", 
Integer.valueOf(getCount) ) );
+        elems.add(new StatElement<Integer>( "Get Matching Count", 
Integer.valueOf(getMatchingCount) ) );
 
         final JDBCDiskCachePoolAccess pool = getPoolAccess();
 
-        se = new StatElement();
-        se.setName( "Size" );
-        if (pool != null) {
-            se.setData( "" + getSize() );
-        } else {
-            se.setData( "No db connection pool found" );
-        }
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Active DB Connections" );
-        if (pool != null) {
-            se.setData( "" + pool.getNumActiveInPool() );
-        } else {
-            se.setData( "No db connection pool found" );
-        }
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Idle DB Connections" );
-        if (pool != null) {
-            se.setData( "" + pool.getNumIdleInPool() );
-        } else {
-            se.setData( "No db connection pool found" );
-        }
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "DB URL" );
-        if ( pool != null )
-        {
-            se.setData( "" + pool.getPoolUrl() );
-        }
-        else
-        {
-            se.setData( "" + getJdbcDiskCacheAttributes().getUrl() );
-        }
-        elems.add( se );
+        elems.add(new StatElement<Integer>( "Size",
+                Integer.valueOf(pool != null ? getSize() : -1) ) );
+        elems.add(new StatElement<Integer>( "Active DB Connections",
+                Integer.valueOf(pool != null ? pool.getNumActiveInPool() : -1) 
) );
+        elems.add(new StatElement<Integer>( "Idle DB Connections",
+                Integer.valueOf(pool != null ? pool.getNumIdleInPool() : -1) ) 
);
+        elems.add(new StatElement<String>( "DB URL",
+                pool != null ? pool.getPoolUrl() : 
getJdbcDiskCacheAttributes().getUrl()) );
 
-        // get the stats from the event queue too
-        // get as array, convert to list, add list to our outer list
-        IStatElement[] eqSEs = stats.getStatElements();
-        List<IStatElement> eqL = Arrays.asList( eqSEs );
-        elems.addAll( eqL );
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWait.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWait.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWait.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWait.java
 Fri May  2 20:27:57 2014
@@ -23,10 +23,8 @@ import java.io.IOException;
 import java.io.Serializable;
 import java.rmi.UnmarshalException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -411,44 +409,18 @@ public class LateralCacheNoWait<K extend
         IStats stats = new Stats();
         stats.setTypeName( "Lateral Cache No Wait" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
-
-        // IStatElement se = null;
-        // no data gathered here
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
         // get the stats from the event queue too
-        // get as array, convert to list, add list to our outer list
         IStats eqStats = this.eventQueue.getStatistics();
+        elems.addAll(eqStats.getStatElements());
+
+        elems.add(new StatElement<Integer>( "Get Count", 
Integer.valueOf(this.getCount) ) );
+        elems.add(new StatElement<Integer>( "Remove Count", 
Integer.valueOf(this.removeCount) ) );
+        elems.add(new StatElement<Integer>( "Put Count", 
Integer.valueOf(this.putCount) ) );
+        elems.add(new StatElement<AuxiliaryCacheAttributes>( "Attributes", 
cache.getAuxiliaryCacheAttributes() ) );
 
-        IStatElement[] eqSEs = eqStats.getStatElements();
-        List<IStatElement> eqL = Arrays.asList( eqSEs );
-        elems.addAll( eqL );
-
-        IStatElement se = null;
-
-        se = new StatElement();
-        se.setName( "Get Count" );
-        se.setData( "" + this.getCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Remove Count" );
-        se.setData( "" + this.removeCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Put Count" );
-        se.setData( "" + this.putCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Attributes" );
-        se.setData( "" + cache.getAuxiliaryCacheAttributes() );
-        elems.add( se );
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[elems.size()] );
-        stats.setStatElements( ses );
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWaitFacade.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWaitFacade.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWaitFacade.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWaitFacade.java
 Fri May  2 20:27:57 2014
@@ -22,10 +22,8 @@ package org.apache.commons.jcs.auxiliary
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -515,35 +513,24 @@ public class LateralCacheNoWaitFacade<K 
         IStats stats = new Stats();
         stats.setTypeName( "Lateral Cache No Wait Facade" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
-
-        IStatElement se = null;
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
         if ( noWaits != null )
         {
-            se = new StatElement();
-            se.setName( "Number of No Waits" );
-            se.setData( "" + noWaits.length );
-            elems.add( se );
+            elems.add(new StatElement<Integer>( "Number of No Waits", 
Integer.valueOf(noWaits.length) ) );
 
-            for ( int i = 0; i < noWaits.length; i++ )
+            for ( LateralCacheNoWait<K, V> lcnw : noWaits )
             {
-                if ( noWaits[i] != null )
+                if ( lcnw != null )
                 {
                     // get the stats from the super too
-                    // get as array, convert to list, add list to our outer 
list
-                    IStats sStats = noWaits[i].getStatistics();
-                    IStatElement[] sSEs = sStats.getStatElements();
-                    List<IStatElement> sL = Arrays.asList( sSEs );
-                    elems.addAll( sL );
+                    IStats sStats = lcnw.getStatistics();
+                    elems.addAll(sStats.getStatElements());
                 }
             }
-
         }
 
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
 Fri May  2 20:27:57 2014
@@ -150,10 +150,7 @@ public class LateralTCPCacheFactory
                 listener = LateralTCPListener.getInstance( attr, cacheMgr );
 
                 // register for shutdown notification
-                if ( listener instanceof IShutdownObserver )
-                {
-                    cacheMgr.registerShutdownObserver( (IShutdownObserver) 
listener );
-                }
+                cacheMgr.registerShutdownObserver( (IShutdownObserver) 
listener );
             }
             catch ( Exception e )
             {

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
 Fri May  2 20:27:57 2014
@@ -564,51 +564,30 @@ public abstract class AbstractRemoteAuxi
         IStats stats = new Stats();
         stats.setTypeName( "AbstractRemoteAuxiliaryCache" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
-        IStatElement se = null;
+        elems.add(new StatElement<String>( "Remote Type", 
this.getRemoteCacheAttributes().getRemoteTypeName() ) );
 
-        se = new StatElement();
-        se.setName( "Remote Type" );
-        se.setData( this.getRemoteCacheAttributes().getRemoteTypeName() + "" );
-        elems.add( se );
-
-//        if ( this.getRemoteCacheAttributes().getRemoteType() == 
RemoteType.CLUSTER )
-//        {
-//            // something cluster specific
-//        }
-
-        // no data gathered here
-
-        se = new StatElement();
-        se.setName( "UsePoolForGet" );
-        se.setData( "" + usePoolForGet );
-        elems.add( se );
+//      if ( this.getRemoteCacheAttributes().getRemoteType() == 
RemoteType.CLUSTER )
+//      {
+//          // something cluster specific
+//      }
+
+        elems.add(new StatElement<Boolean>( "UsePoolForGet", 
Boolean.valueOf(usePoolForGet) ) );
 
         if ( pool != null )
         {
-            se = new StatElement();
-            se.setName( "Pool Size" );
-            se.setData( "" + pool.getPoolSize() );
-            elems.add( se );
-
-            se = new StatElement();
-            se.setName( "Maximum Pool Size" );
-            se.setData( "" + pool.getMaximumPoolSize() );
-            elems.add( se );
+            elems.add(new StatElement<Integer>( "Pool Size", 
Integer.valueOf(pool.getPoolSize()) ) );
+            elems.add(new StatElement<Integer>( "Maximum Pool Size", 
Integer.valueOf(pool.getMaximumPoolSize()) ) );
         }
 
         if ( getRemoteCacheService() instanceof ZombieCacheServiceNonLocal )
         {
-            se = new StatElement();
-            se.setName( "Zombie Queue Size" );
-            se.setData( "" + ( (ZombieCacheServiceNonLocal<K, V>) 
getRemoteCacheService() ).getQueueSize() );
-            elems.add( se );
+            elems.add(new StatElement<Integer>( "Zombie Queue Size",
+                    Integer.valueOf(( (ZombieCacheServiceNonLocal<K, V>) 
getRemoteCacheService() ).getQueueSize()) ) );
         }
 
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
 Fri May  2 20:27:57 2014
@@ -22,10 +22,8 @@ package org.apache.commons.jcs.auxiliary
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -410,31 +408,21 @@ public abstract class AbstractRemoteCach
         IStats stats = new Stats();
         stats.setTypeName( "Remote Cache No Wait Facade" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
-
-        IStatElement se = null;
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
         if ( noWaits != null )
         {
-            se = new StatElement();
-            se.setName( "Number of No Waits" );
-            se.setData( "" + noWaits.length );
-            elems.add( se );
+            elems.add(new StatElement<Integer>( "Number of No Waits", 
Integer.valueOf(noWaits.length) ) );
 
-            for ( int i = 0; i < noWaits.length; i++ )
+            for ( RemoteCacheNoWait<K, V> rcnw : noWaits )
             {
                 // get the stats from the super too
-                // get as array, convert to list, add list to our outer list
-                IStats sStats = noWaits[i].getStatistics();
-                IStatElement[] sSEs = sStats.getStatElements();
-                List<IStatElement> sL = Arrays.asList( sSEs );
-                elems.addAll( sL );
+                IStats sStats = rcnw.getStatistics();
+                elems.addAll(sStats.getStatElements());
             }
         }
 
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCache.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCache.java
 Fri May  2 20:27:57 2014
@@ -22,8 +22,6 @@ package org.apache.commons.jcs.auxiliary
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
 
 import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
 import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheListener;
@@ -78,35 +76,21 @@ public class RemoteCache<K extends Seria
         IStats stats = new Stats();
         stats.setTypeName( "Remote Cache" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
-        IStatElement se = null;
+        elems.add(new StatElement<String>( "Remote Host:Port", 
getIPAddressForService() ) );
+        elems.add(new StatElement<String>( "Remote Type", 
this.getRemoteCacheAttributes().getRemoteTypeName() ) );
 
-        se = new StatElement();
-        se.setName( "Remote Host:Port" );
-        se.setData( getIPAddressForService() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Remote Type" );
-        se.setData( this.getRemoteCacheAttributes().getRemoteTypeName() + "" );
-        elems.add( se );
-
-//        if ( this.getRemoteCacheAttributes().getRemoteType() == 
RemoteType.CLUSTER )
-//        {
-//            // something cluster specific
-//        }
+//      if ( this.getRemoteCacheAttributes().getRemoteType() == 
RemoteType.CLUSTER )
+//      {
+//          // something cluster specific
+//      }
 
         // get the stats from the super too
-        // get as array, convert to list, add list to our outer list
         IStats sStats = super.getStatistics();
-        IStatElement[] sSEs = sStats.getStatElements();
-        List<IStatElement> sL = Arrays.asList( sSEs );
-        elems.addAll( sL );
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        elems.addAll(sStats.getStatElements());
+
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java
 Fri May  2 20:27:57 2014
@@ -23,10 +23,8 @@ import java.io.IOException;
 import java.io.Serializable;
 import java.rmi.UnmarshalException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -493,62 +491,28 @@ public class RemoteCacheNoWait<K extends
         IStats stats = new Stats();
         stats.setTypeName( "Remote Cache No Wait" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
-        IStatElement se = null;
-
-        se = new StatElement();
-        se.setName( "Status" );
-        se.setData( getStatus().toString() );
-        elems.add( se );
-
-        // no data gathered here
+        elems.add(new StatElement<CacheStatus>( "Status", getStatus() ) );
 
         // get the stats from the cache queue too
-        // get as array, convert to list, add list to our outer list
         IStats cStats = this.remoteCacheClient.getStatistics();
         if ( cStats != null )
         {
-            IStatElement[] cSEs = cStats.getStatElements();
-            List<IStatElement> cL = Arrays.asList( cSEs );
-            elems.addAll( cL );
+            elems.addAll(cStats.getStatElements());
         }
 
         // get the stats from the event queue too
-        // get as array, convert to list, add list to our outer list
         IStats eqStats = this.cacheEventQueue.getStatistics();
-        IStatElement[] eqSEs = eqStats.getStatElements();
-        List<IStatElement> eqL = Arrays.asList( eqSEs );
-        elems.addAll( eqL );
-
-        se = new StatElement();
-        se.setName( "Get Count" );
-        se.setData( "" + this.getCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "GetMatching Count" );
-        se.setData( "" + this.getMatchingCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "GetMultiple Count" );
-        se.setData( "" + this.getMultipleCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Remove Count" );
-        se.setData( "" + this.removeCount );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Put Count" );
-        se.setData( "" + this.putCount );
-        elems.add( se );
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[elems.size()] );
-        stats.setStatElements( ses );
+        elems.addAll(eqStats.getStatElements());
+
+        elems.add(new StatElement<Integer>( "Get Count", 
Integer.valueOf(this.getCount) ) );
+        elems.add(new StatElement<Integer>( "GetMatching Count", 
Integer.valueOf(this.getMatchingCount) ) );
+        elems.add(new StatElement<Integer>( "GetMultiple Count", 
Integer.valueOf(this.getMultipleCount) ) );
+        elems.add(new StatElement<Integer>( "Remove Count", 
Integer.valueOf(this.removeCount) ) );
+        elems.add(new StatElement<Integer>( "Put Count", 
Integer.valueOf(this.putCount) ) );
+
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheEventQueue.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheEventQueue.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheEventQueue.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheEventQueue.java
 Fri May  2 20:27:57 2014
@@ -365,24 +365,11 @@ public class CacheEventQueue<K extends S
         IStats stats = new Stats();
         stats.setTypeName( "Cache Event Queue" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
-        IStatElement se = null;
-
-        se = new StatElement();
-        se.setName( "Working" );
-        se.setData( "" + super.isWorking() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Alive" );
-        se.setData( "" + this.isAlive() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Empty" );
-        se.setData( "" + this.isEmpty() );
-        elems.add( se );
+        elems.add(new StatElement<Boolean>( "Working", 
Boolean.valueOf(super.isWorking()) ) );
+        elems.add(new StatElement<Boolean>( "Alive", 
Boolean.valueOf(this.isAlive()) ) );
+        elems.add(new StatElement<Boolean>( "Empty", 
Boolean.valueOf(this.isEmpty()) ) );
 
         int sz = 0;
         synchronized ( queueLock )
@@ -402,15 +389,10 @@ public class CacheEventQueue<K extends S
                 }
             }
 
-            se = new StatElement();
-            se.setName( "Size" );
-            se.setData( "" + sz );
-            elems.add( se );
+            elems.add(new StatElement<Integer>( "Size", Integer.valueOf(sz) ) 
);
         }
 
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/PooledCacheEventQueue.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/PooledCacheEventQueue.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/PooledCacheEventQueue.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/PooledCacheEventQueue.java
 Fri May  2 20:27:57 2014
@@ -168,52 +168,23 @@ public class PooledCacheEventQueue<K ext
         IStats stats = new Stats();
         stats.setTypeName( "Pooled Cache Event Queue" );
 
-        ArrayList<IStatElement> elems = new ArrayList<IStatElement>();
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
 
-        IStatElement se = null;
-
-        se = new StatElement();
-        se.setName( "Working" );
-        se.setData( "" + super.isWorking() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Destroyed" );
-        se.setData( "" + this.isAlive() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Empty" );
-        se.setData( "" + this.isEmpty() );
-        elems.add( se );
+        elems.add(new StatElement<Boolean>( "Working", 
Boolean.valueOf(super.isWorking()) ) );
+        elems.add(new StatElement<Boolean>( "Alive", 
Boolean.valueOf(this.isAlive()) ) );
+        elems.add(new StatElement<Boolean>( "Empty", 
Boolean.valueOf(this.isEmpty()) ) );
 
         if ( pool.getQueue() != null )
         {
             BlockingQueue<Runnable> bb = pool.getQueue();
-            se = new StatElement();
-            se.setName( "Queue Size" );
-            se.setData( "" + bb.size() );
-            elems.add( se );
-
-            se = new StatElement();
-            se.setName( "Queue Capacity" );
-            se.setData( "" + bb.remainingCapacity() );
-            elems.add( se );
+            elems.add(new StatElement<Integer>( "Queue Size", 
Integer.valueOf(bb.size()) ) );
+            elems.add(new StatElement<Integer>( "Queue Capacity", 
Integer.valueOf(bb.remainingCapacity()) ) );
         }
 
-        se = new StatElement();
-        se.setName( "Pool Size" );
-        se.setData( "" + pool.getPoolSize() );
-        elems.add( se );
-
-        se = new StatElement();
-        se.setName( "Maximum Pool Size" );
-        se.setData( "" + pool.getMaximumPoolSize() );
-        elems.add( se );
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = elems.toArray( new StatElement[elems.size()] );
-        stats.setStatElements( ses );
+        elems.add(new StatElement<Integer>( "Pool Size", 
Integer.valueOf(pool.getPoolSize()) ) );
+        elems.add(new StatElement<Integer>( "Maximum Pool Size", 
Integer.valueOf(pool.getMaximumPoolSize()) ) );
+
+        stats.setStatElements( elems );
 
         return stats;
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java?rev=1592029&r1=1592028&r2=1592029&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java
 Fri May  2 20:27:57 2014
@@ -54,7 +54,6 @@ import org.apache.commons.jcs.engine.mem
 import org.apache.commons.jcs.engine.memory.shrinking.ShrinkerThread;
 import org.apache.commons.jcs.engine.stats.CacheStats;
 import org.apache.commons.jcs.engine.stats.StatElement;
-import org.apache.commons.jcs.engine.stats.Stats;
 import org.apache.commons.jcs.engine.stats.behavior.ICacheStats;
 import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs.engine.stats.behavior.IStats;
@@ -1480,28 +1479,22 @@ public class CompositeCache<K extends Se
         stats.setRegionName( this.getCacheName() );
 
         // store the composite cache stats first
-        IStatElement[] elems = new StatElement[2];
-        elems[0] = new StatElement();
-        elems[0].setName( "HitCountRam" );
-        elems[0].setData( "" + getHitCountRam() );
-
-        elems[1] = new StatElement();
-        elems[1].setName( "HitCountAux" );
-        elems[1].setData( "" + getHitCountAux() );
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Integer>( "HitCountRam", 
Integer.valueOf(getHitCountRam()) ) );
+        elems.add(new StatElement<Integer>( "HitCountAux", 
Integer.valueOf(getHitCountAux()) ) );
 
-        // store these local stats
         stats.setStatElements( elems );
 
         // memory + aux, memory is not considered an auxiliary internally
         int total = auxCaches.length + 1;
-        IStats[] auxStats = new Stats[total];
+        ArrayList<IStats> auxStats = new ArrayList<IStats>(total);
 
-        auxStats[0] = getMemoryCache().getStatistics();
+        auxStats.add(getMemoryCache().getStatistics());
 
-        for ( int i = 0; i < auxCaches.length; i++ )
+        for ( AuxiliaryCache<K, V> aux : auxCaches )
         {
-            AuxiliaryCache<K, V> aux = auxCaches[i];
-            auxStats[i + 1] = aux.getStatistics();
+            auxStats.add(aux.getStatistics());
         }
 
         // store the auxiliary stats


Reply via email to