[jbosscache-commits] JBoss Cache SVN: r4799 - in cache-bench-fwk: trunk and 47 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Thu Dec 6 12:39:01 EST 2007


Author: manik.surtani at jboss.com
Date: 2007-12-06 12:39:01 -0500 (Thu, 06 Dec 2007)
New Revision: 4799

Added:
   cache-bench-fwk/trunk/
   cache-bench-fwk/trunk/build.properties
   cache-bench-fwk/trunk/build.xml
   cache-bench-fwk/trunk/build/
   cache-bench-fwk/trunk/build/build.properties
   cache-bench-fwk/trunk/build/build.xml
   cache-bench-fwk/trunk/cache-products/
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/coherence-3.2.2.iml
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/cache-config.xml
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/tangosol-coherence-override.xml
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/.cvsignore
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/README.txt
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/src/
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/src/org/
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/src/org/cachebench/
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/src/org/cachebench/cachewrappers/
   cache-bench-fwk/trunk/cache-products/coherence-3.2.2/src/org/cachebench/cachewrappers/CoherenceWrapper.java
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/ehcache-repl-async.xml
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/ehcache-repl-sync.xml
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/ehcache-1.2.4.iml
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/lib/
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/lib/commons-logging.jar
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/lib/ehcache.jar
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/EHCacheTest.java
   cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/EHCacheWrapper.java
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/opt-repl-async.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/opt-repl-sync.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/pess-repl-async.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/pess-repl-sync.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/jbosscache-1.4.1.iml
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/commons-logging.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/concurrent.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-aop.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-cache.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-common.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-j2ee.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-jmx.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-minimal.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-serialization.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-system.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jgroups.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/trove.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/src/
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/src/org/
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/src/org/cachebench/
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/src/org/cachebench/cachewrappers/
   cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/src/org/cachebench/cachewrappers/JBossCacheWrapper.java
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/opt-repl-async.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/opt-repl-sync.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-async.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-sync-br.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-sync.xml
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/jbosscache-2.0.0.iml
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/concurrent.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jboss-common-core.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jboss-j2ee.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jbosscache.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jcip-annotations.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jgroups.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/trove.jar
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/src/
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/src/org/
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/src/org/cachebench/
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/src/org/cachebench/cachewrappers/
   cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/src/org/cachebench/cachewrappers/JBossCache200Wrapper.java
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/.cvsignore
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/README.txt
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/src/
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/src/org/
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/src/org/cachebench/
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/src/org/cachebench/cachewrappers/
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/src/org/cachebench/cachewrappers/TerracottaWrapper.java
   cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/terracotta-2.3.0.iml
   cache-bench-fwk/trunk/conf/
   cache-bench-fwk/trunk/conf/cachebench.xml
   cache-bench-fwk/trunk/conf/log4j.xml
   cache-bench-fwk/trunk/doc/
   cache-bench-fwk/trunk/doc/CacheReport.txt
   cache-bench-fwk/trunk/doc/Documentation.txt
   cache-bench-fwk/trunk/doc/ExceptionHandling.txt
   cache-bench-fwk/trunk/doc/TODO.txt
   cache-bench-fwk/trunk/doc/TestTypes.txt
   cache-bench-fwk/trunk/lib/
   cache-bench-fwk/trunk/lib/commons-beanutils.jar
   cache-bench-fwk/trunk/lib/commons-digester.jar
   cache-bench-fwk/trunk/lib/commons-logging.jar
   cache-bench-fwk/trunk/lib/commons-math-1.0.jar
   cache-bench-fwk/trunk/lib/log4j.jar
   cache-bench-fwk/trunk/src/
   cache-bench-fwk/trunk/src/org/
   cache-bench-fwk/trunk/src/org/cachebench/
   cache-bench-fwk/trunk/src/org/cachebench/CacheBenchmarkRunner.java
   cache-bench-fwk/trunk/src/org/cachebench/CacheBenchmarkSlave.java
   cache-bench-fwk/trunk/src/org/cachebench/CacheWrapper.java
   cache-bench-fwk/trunk/src/org/cachebench/SerializableCacheWrapper.java
   cache-bench-fwk/trunk/src/org/cachebench/TestResult.java
   cache-bench-fwk/trunk/src/org/cachebench/config/
   cache-bench-fwk/trunk/src/org/cachebench/config/Configuration.java
   cache-bench-fwk/trunk/src/org/cachebench/config/NVPair.java
   cache-bench-fwk/trunk/src/org/cachebench/config/Report.java
   cache-bench-fwk/trunk/src/org/cachebench/config/TestCase.java
   cache-bench-fwk/trunk/src/org/cachebench/config/TestConfig.java
   cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/
   cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/AbstractReportGenerator.java
   cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/CSVReportGenerator.java
   cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/ReportGenerator.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/AbstractSuperclass.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomType.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeSubclassOfAbstract.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithAssocs.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithStatics.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithTransient.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableAbstractSuperclass.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomType.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeSubclassOfAbstract.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithAssocs.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithStatics.java
   cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithTransient.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/
   cache-bench-fwk/trunk/src/org/cachebench/tests/AssociationsTest.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/CacheTest.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/CustomClassTest.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/PrimitiveTest.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/SimpleTest.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/StaticsTest.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/StringTest.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/SubclassTest.java
   cache-bench-fwk/trunk/src/org/cachebench/tests/TransientTest.java
   cache-bench-fwk/trunk/src/org/cachebench/utils/
   cache-bench-fwk/trunk/src/org/cachebench/utils/Instantiator.java
Log:
Migrated from CVS

Added: cache-bench-fwk/trunk/build/build.properties
===================================================================
--- cache-bench-fwk/trunk/build/build.properties	                        (rev 0)
+++ cache-bench-fwk/trunk/build/build.properties	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,9 @@
+#unified props set
+
+project.src=${basedir}/src
+project.bin=${basedir}/compiled
+project.conf=${basedir}/conf
+project.dist=${basedir}/dist
+project.lib=${basedir}/lib
+project.version=0.1
+project.jarname=cachebench-framework-0.1.jar
\ No newline at end of file


Property changes on: cache-bench-fwk/trunk/build/build.properties
___________________________________________________________________
Name: svn:executable
   + *

Added: cache-bench-fwk/trunk/build/build.xml
===================================================================
--- cache-bench-fwk/trunk/build/build.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/build/build.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<!-- ======================================================================
+     16-Feb-2005 12:26:06
+
+     CacheBenchMarkerFramework
+     Simple framework for testing standalone and distributed cacheing products
+
+     Manik Surtani (manik at surtani.org)
+     version $Id: build.xml,v 1.8 2007/05/17 07:37:44 msurtani Exp $
+     ====================================================================== -->
+<project name="CacheBenchMarkerFramework" default="dist" basedir="../">
+    <description>
+            Simple framework for testing standalone and distributed cacheing products
+    </description>
+	
+	<path id="project.libs">
+		<fileset includes="**/*.jar" dir="${basedir}/lib" />
+	</path>
+	
+	<path id="thirdparty.libs">
+			<fileset includes="**/*.jar" dir="${basedir}/cache-products" />
+	</path>
+
+    <path id="run.libs">
+        <pathelement path="${basedir}/conf"/>
+        <fileset includes="**/*.jar" dir="${basedir}/lib"/>
+        <fileset includes="**/*.jar" dir="${basedir}/cache-products"/>
+        <pathelement path="${basedir}/cache-products/ehcache-1.2.4/conf"/>
+        <pathelement path="${basedir}/cache-products/jbosscache-2.0.0/conf"/>
+        <pathelement path="${basedir}/cache-products/jbosscache-1.4.1/conf"/>
+        <fileset includes="**/*.jar" dir="${basedir}/dist"/>
+    </path>
+
+	<target name="init">
+		<property file="${basedir}/build/build.properties" />
+	</target>
+	
+	<target name="prepare" depends="init">
+		<mkdir dir="${project.bin}" />
+		<mkdir dir="${project.dist}" />
+	</target>
+	
+	<target name="clean" depends="init">
+		<delete dir="${project.bin}" />
+		<delete dir="${project.dist}" />
+	</target>
+		
+	
+    <target name="compile" depends="prepare">
+    	<javac 
+    		optimize="on"
+    		debug="on" 
+    		srcdir="${project.src}" 
+    		destdir="${project.bin}">
+				<classpath refid="project.libs">
+				</classpath>
+	    		<classpath refid="thirdparty.libs">
+    			</classpath>
+    	    		
+		</javac>        
+    </target>
+
+	<target name="dist" depends="compile">
+		<jar 
+			basedir="${project.bin}" 
+			compress="false"
+			jarfile="${project.dist}/${project.jarname}"/>
+		<copy todir="${project.dist}">
+			<fileset dir="${project.lib}" />
+		</copy>
+	</target>
+
+    <target name="run">
+        <java classname="org.cachebench.CacheBenchmarkRunner">
+            <classpath refid="run.libs"/>
+        </java>
+    </target>
+    
+    <target name="runall" depends="dist,run">
+
+    </target>
+
+</project>
+


Property changes on: cache-bench-fwk/trunk/build/build.xml
___________________________________________________________________
Name: svn:executable
   + *

Added: cache-bench-fwk/trunk/build.properties
===================================================================
--- cache-bench-fwk/trunk/build.properties	                        (rev 0)
+++ cache-bench-fwk/trunk/build.properties	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,10 @@
+## Used when performing either runMaster or runSlave targets on the build script.
+jvm.fork=true
+jvm.maxmem=1024M
+
+bind.address=127.0.0.1
+java.net.preferIPv4Stack=true
+org.cachebench.debug=false
+tangosol.coherence.localhost=127.0.0.1
+
+

Added: cache-bench-fwk/trunk/build.xml
===================================================================
--- cache-bench-fwk/trunk/build.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/build.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,554 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project name="cachebenchfwk" default="help">
+  
+  
+  <property file="build.properties"/>
+  <!-- Uncomment the following property if no tests compilation is needed -->
+  <!-- 
+  <property name="skip.tests" value="true"/>
+   -->
+  
+  <!-- Compiler options -->
+  
+  <property name="compiler.debug" value="on"/>
+  <property name="compiler.generate.no.warnings" value="off"/>
+  <property name="compiler.args" value=""/>
+  <property name="compiler.max.memory" value="128m"/>
+  <patternset id="ignored.files">
+    <exclude name="**/CVS/**"/>
+    <exclude name="**/SCCS/**"/>
+    <exclude name="**/RCS/**"/>
+    <exclude name="**/rcs/**"/>
+    <exclude name="**/.DS_Store/**"/>
+    <exclude name="**/.svn/**"/>
+    <exclude name="**/.sbas/**"/>
+    <exclude name="**/.IJI.*/**"/>
+  </patternset>
+  <patternset id="compiler.resources">
+    <include name="**/?*.properties"/>
+    <include name="**/?*.xml"/>
+    <include name="**/?*.gif"/>
+    <include name="**/?*.png"/>
+    <include name="**/?*.jpeg"/>
+    <include name="**/?*.jpg"/>
+    <include name="**/?*.html"/>
+    <include name="**/?*.dtd"/>
+    <include name="**/?*.tld"/>
+  </patternset>
+  
+  <!-- Modules -->
+  
+  
+  <!-- Module Framework -->
+  
+  <dirname property="module.framework.basedir" file="${ant.file}"/>
+  
+  
+  
+  <property name="compiler.args.framework" value="${compiler.args}"/>
+  
+  <property name="framework.output.dir" value="${module.framework.basedir}/classes/production/Framework"/>
+  <property name="framework.testoutput.dir" value="${module.framework.basedir}/classes/test/Framework"/>
+  
+  <path id="framework.module.bootclasspath">
+    <!-- Paths to be included in compilation bootclasspath -->
+  </path>
+  
+  <path id="framework.module.classpath">
+    <pathelement location="${module.framework.basedir}/lib/commons-logging.jar"/>
+    <pathelement location="${module.framework.basedir}/lib/log4j.jar"/>
+    <pathelement location="${module.framework.basedir}/lib/commons-digester.jar"/>
+    <pathelement location="${module.framework.basedir}/lib/commons-beanutils.jar"/>
+    <pathelement location="${module.framework.basedir}/lib/commons-math-1.0.jar"/>
+    <pathelement location="${module.framework.basedir}/conf"/>
+  </path>
+  
+  
+  <patternset id="excluded.from.module.framework">
+    <patternset refid="ignored.files"/>
+  </patternset>
+  
+  <patternset id="excluded.from.compilation.framework">
+    <patternset refid="excluded.from.module.framework"/>
+  </patternset>
+  
+  <path id="framework.module.sourcepath">
+    <dirset dir="${module.framework.basedir}">
+      <include name="src"/>
+    </dirset>
+  </path>
+  
+  <target name="help" description="Dumps usage information">
+     <echo>
+This script has 2 purposes: to build AND run the CacheBenchFwk.
+See /docs/ for more details.
+        
+Some useful targets:
+
+   help      - this documentation
+   all       - builds the entire project, including plugins for all
+               cache products in /cache-products/.  Output classes
+               in /classes/.
+   runMaster - runs the CacheBenchFwk in "master" mode.
+   runSlave  - runs the CacheBenchFwk in "slave" mode.
+
+For either runMaster or runSlave, make sure you have looked at:
+
+   1) 'build.properties' and have set JVM params (such as heap size,
+       etc.) as necessary.
+   2) '/conf/cachebench.xml' to configure the tests you want run and
+      output file for reports.
+   3) '/conf/log4j.xml' for logging settings (make sure these aren't
+       very verbose as it can skew tests).
+   4)  Provided one of the plugins as a system property.  This is
+       necessary since at the moment plugin libs may overlap and
+       cause problems, so are not loaded every time.  Specify which
+       plugin you plan to use in your test by using
+
+         -Dorg.cachebench.plugins.jbosscache1=true -Dbind.address=${MYTESTIP_1}
+         -Dorg.cachebench.plugins.jbosscache2=true -Dbind.address=${MYTESTIP_1}
+         -Dorg.cachebench.pluins.ehcache=true -Dbind.address=${MYTESTIP_1}
+         -Dorg.cachebench.plugins.coherence=true -Dtangosol.coherence.localhost=${MYTESTIP_1}
+        
+        // WORK IN PROGRESS
+         -Dorg.cachebench.plugins.terracotta=true
+
+
+      when running ant.  Note that only one can be set at any time.
+
+NB: NEEDS Ant >= 1.7.0        
+     </echo>
+  </target>
+
+
+  <target name="compile.module.framework" depends="compile.module.framework.production,compile.module.framework.tests" description="Compile module Framework"/>
+  
+  <target name="compile.module.framework.production" description="Compile module Framework; production classes">
+    <mkdir dir="${framework.output.dir}"/>
+    <javac destdir="${framework.output.dir}" debug="${compiler.debug}" nowarn="${compiler.generate.no.warnings}" memorymaximumsize="${compiler.max.memory}" fork="true">
+      <compilerarg line="${compiler.args.framework}"/>
+      <bootclasspath refid="framework.module.bootclasspath"/>
+      <classpath refid="framework.module.classpath"/>
+      <src refid="framework.module.sourcepath"/>
+      <patternset refid="excluded.from.compilation.framework"/>
+    </javac>
+    
+    <copy todir="${framework.output.dir}">
+      <fileset dir="${module.framework.basedir}/src">
+        <patternset refid="compiler.resources"/>
+        <type type="file"/>
+      </fileset>
+    </copy>
+  </target>
+  
+  <target name="compile.module.framework.tests" depends="compile.module.framework.production" description="compile module Framework; test classes" unless="skip.tests"/>
+  
+  <target name="clean.module.framework" description="cleanup module">
+    <delete dir="${framework.output.dir}"/>
+    <delete dir="${framework.testoutput.dir}"/>
+  </target>
+  
+  
+  <!-- Module ehcache-1.2.4 -->
+  
+  <dirname property="module.ehcache124-plugin.basedir" file="${ant.file}"/>
+  
+  
+  
+  <property name="compiler.args.ehcache124-plugin" value="${compiler.args}"/>
+  
+  <property name="ehcache124-plugin.output.dir" value="${module.ehcache124-plugin.basedir}/classes/production/ehcache-1.2.4"/>
+  <property name="ehcache124-plugin.testoutput.dir" value="${module.ehcache124-plugin.basedir}/classes/test/ehcache-1.2.4"/>
+  
+  <path id="ehcache124-plugin.module.bootclasspath">
+    <!-- Paths to be included in compilation bootclasspath -->
+  </path>
+  
+  <path id="ehcache124-plugin.module.classpath">
+     <fileset dir="${module.ehcache124-plugin.basedir}/cache-products/ehcache-1.2.4/lib" includes="*.jar" />
+     <pathelement location="${module.ehcache124-plugin.basedir}/cache-products/ehcache-1.2.4/conf"/>
+     <pathelement location="${framework.output.dir}"/>
+     <pathelement location="${framework.testoutput.dir}"/>
+     <pathelement location="${ehcache124-plugin.output.dir}" />
+  </path>
+  
+  
+  <patternset id="excluded.from.module.ehcache124-plugin">
+    <patternset refid="ignored.files"/>
+  </patternset>
+  
+  <patternset id="excluded.from.compilation.ehcache124-plugin">
+    <patternset refid="excluded.from.module.ehcache124-plugin"/>
+  </patternset>
+  
+  <path id="ehcache124-plugin.module.sourcepath">
+    <dirset dir="${module.ehcache124-plugin.basedir}/cache-products/ehcache-1.2.4">
+      <include name="src"/>
+    </dirset>
+  </path>
+  
+  
+  <target name="compile.module.ehcache124-plugin" depends="compile.module.ehcache124-plugin.production,compile.module.ehcache124-plugin.tests" description="Compile module ehcache-1.2.4"/>
+  
+  <target name="compile.module.ehcache124-plugin.production" depends="compile.module.framework" description="Compile module ehcache-1.2.4; production classes">
+    <mkdir dir="${ehcache124-plugin.output.dir}"/>
+    <javac destdir="${ehcache124-plugin.output.dir}" debug="${compiler.debug}" nowarn="${compiler.generate.no.warnings}" memorymaximumsize="${compiler.max.memory}" fork="true">
+      <compilerarg line="${compiler.args.ehcache124-plugin}"/>
+      <bootclasspath refid="ehcache124-plugin.module.bootclasspath"/>
+      <classpath refid="ehcache124-plugin.module.classpath"/>
+      <src refid="ehcache124-plugin.module.sourcepath"/>
+      <patternset refid="excluded.from.compilation.ehcache124-plugin"/>
+    </javac>
+    
+    <copy todir="${ehcache124-plugin.output.dir}">
+      <fileset dir="${module.ehcache124-plugin.basedir}/cache-products/ehcache-1.2.4/src">
+        <patternset refid="compiler.resources"/>
+        <type type="file"/>
+      </fileset>
+    </copy>
+  </target>
+  
+  <target name="compile.module.ehcache124-plugin.tests" depends="compile.module.ehcache124-plugin.production" description="compile module ehcache-1.2.4; test classes" unless="skip.tests"/>
+  
+  <target name="clean.module.ehcache124-plugin" description="cleanup module">
+    <delete dir="${ehcache124-plugin.output.dir}"/>
+    <delete dir="${ehcache124-plugin.testoutput.dir}"/>
+  </target>
+
+
+
+   <!-- Module coherence-3.2.2 -->
+
+  <dirname property="module.coherence322-plugin.basedir" file="${ant.file}"/>
+
+
+
+  <property name="compiler.args.coherence322-plugin" value="${compiler.args}"/>
+
+  <property name="coherence322-plugin.output.dir" value="${module.coherence322-plugin.basedir}/classes/production/coherence-3.2.2"/>
+  <property name="coherence322-plugin.testoutput.dir" value="${module.coherence322-plugin.basedir}/classes/test/coherence-3.2.2"/>
+
+  <path id="coherence322-plugin.module.bootclasspath">
+    <!-- Paths to be included in compilation bootclasspath -->
+  </path>
+
+  <path id="coherence322-plugin.module.classpath">
+     <fileset dir="${module.coherence322-plugin.basedir}/cache-products/coherence-3.2.2/lib" includes="*.jar" />
+     <pathelement location="${module.coherence322-plugin.basedir}/cache-products/coherence-3.2.2/conf"/>
+     <pathelement location="${framework.output.dir}"/>
+     <pathelement location="${framework.testoutput.dir}"/>
+     <pathelement location="${coherence322-plugin.output.dir}" />
+  </path>
+
+
+  <patternset id="excluded.from.module.coherence322-plugin">
+    <patternset refid="ignored.files"/>
+  </patternset>
+
+  <patternset id="excluded.from.compilation.coherence322-plugin">
+    <patternset refid="excluded.from.module.coherence322-plugin"/>
+  </patternset>
+
+  <path id="coherence322-plugin.module.sourcepath">
+    <dirset dir="${module.ehcache124-plugin.basedir}/cache-products/coherence-3.2.2">
+      <include name="src"/>
+    </dirset>
+  </path>
+
+
+  <target name="compile.module.coherence322-plugin" depends="compile.module.coherence322-plugin.production, compile.module.coherence322-plugin.tests" description="Compile module coherence322"/>
+
+  <target name="compile.module.coherence322-plugin.production" depends="compile.module.framework" description="Compile module coherence322; production classes">
+    <mkdir dir="${coherence322-plugin.output.dir}"/>
+    <javac destdir="${coherence322-plugin.output.dir}" debug="${compiler.debug}" nowarn="${compiler.generate.no.warnings}" memorymaximumsize="${compiler.max.memory}" fork="true">
+      <compilerarg line="${compiler.args.coherence322-plugin}"/>
+      <bootclasspath refid="coherence322-plugin.module.bootclasspath"/>
+      <classpath refid="coherence322-plugin.module.classpath"/>
+      <src refid="coherence322-plugin.module.sourcepath"/>
+      <patternset refid="excluded.from.compilation.coherence322-plugin"/>
+    </javac>
+
+    <copy todir="${coherence322-plugin.output.dir}">
+      <fileset dir="${module.coherence322-plugin.basedir}/cache-products/coherence-3.2.2/src">
+        <patternset refid="compiler.resources"/>
+        <type type="file"/>
+      </fileset>
+    </copy>
+  </target>
+
+  <target name="compile.module.coherence322-plugin.tests" depends="compile.module.coherence322-plugin.production" description="compile module coherence322; test classes" unless="skip.tests"/>
+
+  <target name="clean.module.coherence322-plugin" description="cleanup module">
+    <delete dir="${coherence322-plugin.output.dir}"/>
+    <delete dir="${coherence322-plugin.testoutput.dir}"/>
+  </target>
+
+     <!-- Module terracotta-2.3.0 -->
+
+  <dirname property="module.terracotta-plugin.basedir" file="${ant.file}"/>
+
+
+
+  <property name="compiler.args.terracotta-plugin" value="${compiler.args}"/>
+
+  <property name="terracotta-plugin.output.dir" value="${module.terracotta-plugin.basedir}/classes/production/terracotta-2.3.0"/>
+  <property name="terracotta-plugin.testoutput.dir" value="${module.terracotta-plugin.basedir}/classes/test/terracotta-2.3.0"/>
+
+  <path id="terracotta-plugin.module.bootclasspath">
+    <!-- Paths to be included in compilation bootclasspath -->
+  </path>
+
+  <path id="terracotta-plugin.module.classpath">
+    <pathelement location="${module.terracotta-plugin.basedir}/cache-products/terracotta-2.3.0/conf"/>
+    <pathelement location="${framework.output.dir}"/>
+    <pathelement location="${framework.testoutput.dir}"/>
+    <fileset dir="${module.terracotta-plugin.basedir}/cache-products/terracotta-2.3.0/lib" includes="*.jar" />
+    <pathelement location="${terracotta-plugin.output.dir}" />
+  </path>
+
+
+  <patternset id="excluded.from.module.terracotta-plugin">
+    <patternset refid="ignored.files"/>
+  </patternset>
+
+  <patternset id="excluded.from.compilation.terracotta-plugin">
+    <patternset refid="excluded.from.module.terracotta-plugin"/>
+  </patternset>
+
+  <path id="terracotta-plugin.module.sourcepath">
+    <dirset dir="${module.terracotta-plugin.basedir}/cache-products/terracotta-2.3.0">
+      <include name="src"/>
+    </dirset>
+  </path>
+
+
+  <target name="compile.module.terracotta-plugin" depends="compile.module.terracotta-plugin.production,compile.module.terracotta-plugin.tests" description="Compile module terracotta-2.3.0"/>
+
+  <target name="compile.module.terracotta-plugin.production" depends="compile.module.framework" description="Compile module terracotta-2.3.0; production classes">
+    <mkdir dir="${terracotta-plugin.output.dir}"/>
+    <javac destdir="${terracotta-plugin.output.dir}" debug="${compiler.debug}" nowarn="${compiler.generate.no.warnings}" memorymaximumsize="${compiler.max.memory}" fork="true">
+      <compilerarg line="${compiler.args.terracotta-plugin}"/>
+      <bootclasspath refid="terracotta-plugin.module.bootclasspath"/>
+      <classpath refid="terracotta-plugin.module.classpath"/>
+      <src refid="terracotta-plugin.module.sourcepath"/>
+      <patternset refid="excluded.from.compilation.terracotta-plugin"/>
+    </javac>
+
+    <copy todir="${terracotta-plugin.output.dir}">
+      <fileset dir="${module.terracotta-plugin.basedir}/cache-products/terracotta-2.3.0/src">
+        <patternset refid="compiler.resources"/>
+        <type type="file"/>
+      </fileset>
+    </copy>
+  </target>
+
+  <target name="compile.module.terracotta-plugin.tests" depends="compile.module.terracotta-plugin.production" description="compile module terracotta-2.3.0; test classes" unless="skip.tests"/>
+
+  <target name="clean.module.terracotta-plugin" description="cleanup module">
+    <delete dir="${terracotta-plugin.output.dir}"/>
+    <delete dir="${terracotta-plugin.testoutput.dir}"/>
+  </target>
+
+
+  <!-- Module jbosscache-1.4.1 -->
+  
+  <dirname property="module.jbosscache140-plugin.basedir" file="${ant.file}"/>
+  
+  
+  
+  <property name="compiler.args.jbosscache140-plugin" value="${compiler.args}"/>
+  
+  <property name="jbosscache140-plugin.output.dir" value="${module.jbosscache140-plugin.basedir}/classes/production/jbosscache-1.4.1"/>
+  <property name="jbosscache140-plugin.testoutput.dir" value="${module.jbosscache140-plugin.basedir}/classes/test/jbosscache-1.4.1"/>
+  
+  <path id="jbosscache140-plugin.module.bootclasspath">
+    <!-- Paths to be included in compilation bootclasspath -->
+  </path>
+  
+  <path id="jbosscache140-plugin.module.classpath">
+    <fileset dir="${module.jbosscache140-plugin.basedir}/cache-products/jbosscache-1.4.1/lib" includes="**/*.jar" />
+    <pathelement location="${framework.output.dir}"/>
+    <pathelement location="${framework.testoutput.dir}"/>
+    <pathelement location="${jbosscache140-plugin.output.dir}" />
+    <pathelement location="${module.jbosscache140-plugin.basedir}/cache-products/jbosscache-1.4.1/conf" />
+  </path>
+  
+  
+  <patternset id="excluded.from.module.jbosscache140-plugin">
+    <patternset refid="ignored.files"/>
+  </patternset>
+  
+  <patternset id="excluded.from.compilation.jbosscache140-plugin">
+    <patternset refid="excluded.from.module.jbosscache140-plugin"/>
+  </patternset>
+  
+  <path id="jbosscache140-plugin.module.sourcepath">
+    <dirset dir="${module.jbosscache140-plugin.basedir}/cache-products/jbosscache-1.4.1">
+      <include name="src"/>
+    </dirset>
+  </path>
+  
+  
+  <target name="compile.module.jbosscache140-plugin" depends="compile.module.jbosscache140-plugin.production,compile.module.jbosscache140-plugin.tests" description="Compile module jbosscache-1.4.1"/>
+  
+  <target name="compile.module.jbosscache140-plugin.production" depends="compile.module.framework" description="Compile module jbosscache-1.4.1; production classes">
+    <mkdir dir="${jbosscache140-plugin.output.dir}"/>
+    <javac destdir="${jbosscache140-plugin.output.dir}" debug="${compiler.debug}" nowarn="${compiler.generate.no.warnings}" memorymaximumsize="${compiler.max.memory}" fork="true">
+      <compilerarg line="${compiler.args.jbosscache140-plugin}"/>
+      <bootclasspath refid="jbosscache140-plugin.module.bootclasspath"/>
+      <classpath refid="jbosscache140-plugin.module.classpath"/>
+      <src refid="jbosscache140-plugin.module.sourcepath"/>
+      <patternset refid="excluded.from.compilation.jbosscache140-plugin"/>
+    </javac>
+    
+    <copy todir="${jbosscache140-plugin.output.dir}">
+      <fileset dir="${module.jbosscache140-plugin.basedir}/cache-products/jbosscache-1.4.1/src">
+        <patternset refid="compiler.resources"/>
+        <type type="file"/>
+      </fileset>
+    </copy>
+  </target>
+  
+  <target name="compile.module.jbosscache140-plugin.tests" depends="compile.module.jbosscache140-plugin.production" description="compile module jbosscache-1.4.1; test classes" unless="skip.tests"/>
+  
+  <target name="clean.module.jbosscache140-plugin" description="cleanup module">
+    <delete dir="${jbosscache140-plugin.output.dir}"/>
+    <delete dir="${jbosscache140-plugin.testoutput.dir}"/>
+  </target>
+  
+  
+  <!-- Module jbosscache-2.0.0 -->
+  
+  <dirname property="module.jbosscache200-plugin.basedir" file="${ant.file}"/>
+  
+  
+  
+  <property name="compiler.args.jbosscache200-plugin" value="${compiler.args}"/>
+  
+  <property name="jbosscache200-plugin.output.dir" value="${module.jbosscache200-plugin.basedir}/classes/production/jbosscache-2.0.0"/>
+  <property name="jbosscache200-plugin.testoutput.dir" value="${module.jbosscache200-plugin.basedir}/classes/test/jbosscache-2.0.0"/>
+  
+  <path id="jbosscache200-plugin.module.bootclasspath">
+    <!-- Paths to be included in compilation bootclasspath -->
+  </path>
+  
+  <path id="jbosscache200-plugin.module.classpath">
+    <fileset dir="${module.jbosscache200-plugin.basedir}/cache-products/jbosscache-2.0.0/lib" includes="*.jar" />
+    <pathelement location="${module.jbosscache200-plugin.basedir}/cache-products/jbosscache-2.0.0/conf"/>
+    <pathelement location="${framework.output.dir}"/>
+    <pathelement location="${framework.testoutput.dir}"/>
+    <pathelement location="${jbosscache200-plugin.output.dir}" />
+  </path>
+  
+  
+  <patternset id="excluded.from.module.jbosscache200-plugin">
+    <patternset refid="ignored.files"/>
+  </patternset>
+  
+  <patternset id="excluded.from.compilation.jbosscache200-plugin">
+    <patternset refid="excluded.from.module.jbosscache200-plugin"/>
+  </patternset>
+  
+  <path id="jbosscache200-plugin.module.sourcepath">
+    <dirset dir="${module.jbosscache200-plugin.basedir}/cache-products/jbosscache-2.0.0">
+      <include name="src"/>
+    </dirset>
+  </path>
+  
+  
+  <target name="compile.module.jbosscache200-plugin" depends="compile.module.jbosscache200-plugin.production,compile.module.jbosscache200-plugin.tests" description="Compile module jbosscache-2.0.0"/>
+  
+  <target name="compile.module.jbosscache200-plugin.production" depends="compile.module.framework" description="Compile module jbosscache-2.0.0; production classes">
+    <mkdir dir="${jbosscache200-plugin.output.dir}"/>
+    <javac destdir="${jbosscache200-plugin.output.dir}" debug="${compiler.debug}" nowarn="${compiler.generate.no.warnings}" memorymaximumsize="${compiler.max.memory}" fork="true">
+      <compilerarg line="${compiler.args.jbosscache200-plugin}"/>
+      <bootclasspath refid="jbosscache200-plugin.module.bootclasspath"/>
+      <classpath refid="jbosscache200-plugin.module.classpath"/>
+      <src refid="jbosscache200-plugin.module.sourcepath"/>
+      <patternset refid="excluded.from.compilation.jbosscache200-plugin"/>
+    </javac>
+    
+    <copy todir="${jbosscache200-plugin.output.dir}">
+      <fileset dir="${module.jbosscache200-plugin.basedir}/cache-products/jbosscache-2.0.0/src">
+        <patternset refid="compiler.resources"/>
+        <type type="file"/>
+      </fileset>
+    </copy>
+  </target>
+  
+  <target name="compile.module.jbosscache200-plugin.tests" depends="compile.module.jbosscache200-plugin.production" description="compile module jbosscache-2.0.0; test classes" unless="skip.tests"/>
+  
+  <target name="clean.module.jbosscache200-plugin" description="cleanup module">
+    <delete dir="${jbosscache200-plugin.output.dir}"/>
+    <delete dir="${jbosscache200-plugin.testoutput.dir}"/>
+  </target>
+  
+  <target name="init" description="Build initialization">
+    <!-- Perform any build initialization in this target -->
+  </target>
+  
+  <target name="clean" depends="clean.module.framework, clean.module.ehcache124-plugin, clean.module.jbosscache140-plugin, clean.module.jbosscache200-plugin" description="cleanup all"/>
+  
+  <target name="all" depends="init, clean, compile.module.framework, compile.module.ehcache124-plugin, compile.module.coherence322-plugin,compile.module.jbosscache140-plugin, compile.module.jbosscache200-plugin, compile.module.terracotta-plugin" description="build all"/>
+
+  <target name="setJBossCache140PluginCPRef" if="org.cachebench.plugins.jbosscache1" description="Sets the classpath ref for this plugin only if enabled via system property">
+     <property name="plugin.classpath.ref" value="jbosscache140-plugin.module.classpath" />
+  </target>
+
+   <target name="setJBossCache200PluginCPRef" if="org.cachebench.plugins.jbosscache2" description="Sets the classpath ref for this plugin only if enabled via system property">
+      <property name="plugin.classpath.ref" value="jbosscache200-plugin.module.classpath" />
+   </target>
+
+   <target name="setEHCache124PluginCPRef" if="org.cachebench.plugins.ehcache" description="Sets the classpath ref for this plugin only if enabled via system property">
+      <property name="plugin.classpath.ref" value="ehcache124-plugin.module.classpath" />
+   </target>
+
+    <target name="setTerracotta230PluginCPRef" if="org.cachebench.plugins.terracotta" description="Sets the classpath ref for this plugin only if enabled via system property">
+       <property name="plugin.classpath.ref" value="terracotta-plugin.module.classpath" />
+    </target>
+
+   <target name="setCoherence322PluginCPRef" if="org.cachebench.plugins.coherence" description="Sets the classpath ref for this plugin only if enabled via system property">
+      <property name="plugin.classpath.ref" value="coherence322-plugin.module.classpath" />
+   </target>
+
+
+  <target name="run" depends="setJBossCache140PluginCPRef, setJBossCache200PluginCPRef, setEHCache124PluginCPRef, setTerracotta230PluginCPRef, setCoherence322PluginCPRef">
+     <!-- the classpaths here are a bit arse - you need to MANUALLY specify which plugins to add to the classpath
+     to prevent JBoss Cache 1.x and 2.x tripping over each other. -->
+
+     <!-- Formats: expects system properties
+         org.cachebench.plugins.jbosscache1
+         org.cachebench.plugins.jbosscache2
+         org.cachebench.pluins.ehcache
+         org.cachebench.plugins.terracotta
+         org.cachebench.plugins.coherence
+         to be set to true if they need to be added to the classpath of the test.  -->
+
+     <echo>Running class ${runtime.classname} with classpath ref ${plugin.classpath.ref}</echo>
+
+     <java classname="${runtime.classname}" fork="${jvm.fork}" maxmemory="${jvm.maxmem}" clonevm="true">
+        <!--<bootclasspath>-->
+           <!--<pathelement location="./cache-products/terracotta-2.3.0/lib/bootstrap/boot.jar" />-->
+        <!--</bootclasspath>-->
+        <sysproperty key="bind.address" value="${bind.address}" />
+	<sysproperty key="tangosol.coherence.localhost" value="${tangosol.coherence.localhost}" />
+	<sysproperty key="org.cachebench.debug" value="${org.cachebench.debug}" />
+        <sysproperty key="java.net.preferIPv4Stack" value="${java.net.preferIPv4Stack}" />
+        <classpath refid="framework.module.classpath" />
+        <classpath refid="${plugin.classpath.ref}"/>
+     </java>
+  </target>
+
+  <target name="runSlave">
+     <antcall target="run">
+        <param name="runtime.classname" value="org.cachebench.CacheBenchmarkSlave" />
+     </antcall>
+  </target>
+
+  <target name="runMaster">
+     <antcall target="run">
+        <param name="runtime.classname" value="org.cachebench.CacheBenchmarkRunner" />
+     </antcall>
+  </target>
+   
+</project>

Added: cache-bench-fwk/trunk/cache-products/coherence-3.2.2/coherence-3.2.2.iml
===================================================================
--- cache-bench-fwk/trunk/cache-products/coherence-3.2.2/coherence-3.2.2.iml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/coherence-3.2.2/coherence-3.2.2.iml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/demo.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/commonj.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/coherence-wlp.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/tangosol.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/coherence.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/coherence-work.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module" module-name="Framework" />
+    <orderEntryProperties />
+  </component>
+</module>
+

Added: cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/cache-config.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/cache-config.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/cache-config.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE cache-config SYSTEM "cache-config.dtd">
+
+<cache-config>
+    <caching-scheme-mapping>
+        <!--
+        Caches with any name will be created as default replicated.
+        -->
+        <cache-mapping>
+            <cache-name>*</cache-name>
+            <scheme-name>default-replicated</scheme-name>
+        </cache-mapping>
+    </caching-scheme-mapping>
+
+    <caching-schemes>
+        <!--
+        Default Replicated caching scheme.
+        -->
+        <replicated-scheme>
+            <scheme-name>default-replicated</scheme-name>
+            <service-name>ReplicatedCache</service-name>
+
+            <backing-map-scheme>
+                <class-scheme>
+                    <scheme-ref>default-backing-map</scheme-ref>
+                </class-scheme>
+            </backing-map-scheme>
+        </replicated-scheme>
+
+        <!--
+        Default backing map scheme definition used by all
+        The caches that do not require any eviction policies
+        -->
+        <class-scheme>
+            <scheme-name>default-backing-map</scheme-name>
+
+            <class-name>com.tangosol.util.SafeHashMap</class-name>
+        </class-scheme>
+
+    </caching-schemes>
+</cache-config>
+

Added: cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/tangosol-coherence-override.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/tangosol-coherence-override.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/coherence-3.2.2/conf/tangosol-coherence-override.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,7 @@
+<coherence>
+   <cluster-config>
+      <unicast-listener>
+         <address system-property="tangosol.coherence.localhost">localhost</address>         
+      </unicast-listener>
+   </cluster-config>
+</coherence>

Added: cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/.cvsignore
===================================================================
--- cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/.cvsignore	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/.cvsignore	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1 @@
+local

Added: cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/README.txt
===================================================================
--- cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/README.txt	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/coherence-3.2.2/lib/README.txt	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1 @@
+Please download Tangosol Coherence from http://www.tangosol.com/product-downloads.jsp and place jars here.
\ No newline at end of file

Added: cache-bench-fwk/trunk/cache-products/coherence-3.2.2/src/org/cachebench/cachewrappers/CoherenceWrapper.java
===================================================================
--- cache-bench-fwk/trunk/cache-products/coherence-3.2.2/src/org/cachebench/cachewrappers/CoherenceWrapper.java	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/coherence-3.2.2/src/org/cachebench/cachewrappers/CoherenceWrapper.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,60 @@
+package org.cachebench.cachewrappers;
+
+import org.cachebench.CacheWrapper;
+
+import java.util.Properties;
+
+import com.tangosol.net.NamedCache;
+import com.tangosol.net.CacheFactory;
+
+/**
+ *
+ * Pass in a -Dtangosol.coherence.localhost=IP_ADDRESS
+ *
+ * @author <a href="mailto:manik at jboss.org">Manik Surtani</a>
+ * @since 2.0.0
+ */
+public class CoherenceWrapper implements CacheWrapper
+{
+   NamedCache cache;
+
+   public void init(Properties parameters) throws Exception
+   {
+      cache = CacheFactory.getReplicatedCache();
+//      cache = CacheFactory.getCache("VirtualCache");
+   }
+
+   public void setUp() throws Exception
+   {
+   }
+
+   public void tearDown() throws Exception
+   {
+      cache.release();
+   }
+
+   public void put(Object key, Object value) throws Exception
+   {
+      cache.put(key, value);
+   }
+
+   public Object get(Object key) throws Exception
+   {
+      return cache.get(key);
+   }
+
+   public void empty() throws Exception
+   {
+      cache.clear();
+   }
+
+   public int getNumMembers()
+   {
+      return cache.getCacheService().getCluster().getMemberSet().size();
+   }
+
+   public String getInfo()
+   {
+      return cache.keySet().toString();
+   }
+}

Added: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/ehcache-repl-async.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/ehcache-repl-async.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/ehcache-repl-async.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,331 @@
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
+
+    <!--
+    DiskStore configuration
+
+    Sets the path to the directory where cache files are created.
+
+    If the path is a Java System Property it is replaced by its value in the
+    running VM.
+
+    The following properties are translated:
+    * user.home - User's home directory
+    * user.dir - User's current working directory
+    * java.io.tmpdir - Default temp file path
+
+    Subdirectories can be specified below the property e.g. java.io.tmpdir/one
+    -->
+    <diskStore path="java.io.tmpdir"/>
+
+    <!--
+    Specifies a CacheManagerEventListenerFactory, be used to create a CacheManagerPeerProvider,
+    which is notified when Caches are added or removed from the CacheManager.
+
+    The attributes of CacheManagerEventListenerFactory are:
+    * class - a fully qualified factory class name
+    * properties - comma separated properties having meaning only to the factory.
+
+    Sets the fully qualified class name to be registered as the CacheManager event listener.
+
+    The events include:
+    * adding a Cache
+    * removing a Cache
+
+    Callbacks to listener methods are synchronous and unsynchronized. It is the responsibility
+    of the implementer to safely handle the potential performance and thread safety issues
+    depending on what their listener is doing.
+
+    If no class is specified, no listener is created. There is no default.
+    -->
+    <cacheManagerEventListenerFactory class="" properties=""/>
+
+
+    <!--
+    (Enable for distributed operation)
+
+    Specifies a CacheManagerPeerProviderFactory which will be used to create a
+    CacheManagerPeerProvider, which discovers other CacheManagers in the cluster.
+
+    The attributes of cacheManagerPeerProviderFactory are:
+    * class - a fully qualified factory class name
+    * properties - comma separated properties having meaning only to the factory.
+
+    Ehcache comes with a built-in RMI-based distribution system with two means of discovery of
+    CacheManager peers participating in the cluster:
+    * automatic, using a multicast group. This one automatically discovers peers and detects
+      changes such as peers entering and leaving the group
+    * manual, using manual rmiURL configuration. A hardcoded list of peers is provided at
+      configuration time.
+
+    Configuring Automatic Discovery:
+    Automatic discovery is configured as per the following example:
+    <cacheManagerPeerProviderFactory
+                        class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
+                        properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
+                                    multicastGroupPort=4446, timeToLive=32"/>
+
+    Valid properties are:
+    * peerDiscovery (mandatory) - specify "automatic"
+    * multicastGroupAddress (mandatory) - specify a valid multicast group address
+    * multicastGroupPort (mandatory) - specify a dedicated port for the multicast heartbeat
+      traffic
+    * timeToLive - specify a value between 0 and 255 which determines how far the packets will propagate.
+      By convention, the restrictions are:
+      0   - the same host
+      1   - the same subnet
+      32  - the same site
+      64  - the same region
+      128 - the same continent
+      255 - unrestricted
+
+    Configuring Manual Discovery:
+    Manual discovery is configured as per the following example:
+    <cacheManagerPeerProviderFactory class=
+                          "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
+                          properties="peerDiscovery=manual,
+                          rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1
+                          | //server1:40000/sampleCache2|//server2:40000/sampleCache2"/>
+
+    Valid properties are:
+    * peerDiscovery (mandatory) - specify "manual"
+    * rmiUrls (mandatory) - specify a pipe separated list of rmiUrls, in the form
+                            //hostname:port
+
+    The hostname is the hostname of the remote CacheManager peer. The port is the listening
+    port of the RMICacheManagerPeerListener of the remote CacheManager peer.
+
+    An alternate CacheManagerPeerProviderFactory can be used for JNDI discovery of other
+    CacheManagers in the cluster. Only manual discovery is supported.
+
+    For cacheManagerPeerProviderFactory specify class
+    net.sf.ehcache.distribution.JNDIManualRMICacheManagerPeerProviderFactoryerFactory.
+
+    Correspondingly for cacheManagerPeerListenerFactory specify class
+    net.sf.ehcache.distribution.JNDIRMICacheManagerPeerListenerFactoryory.
+
+    Configuring JNDI Manual Discovery:
+    Manual JNDI discovery is configured as per the following example:
+    <cacheManagerPeerProviderFactory class=
+        "net.sf.ehcache.distribution.JNDIManualRMICacheManagerPeerProviderFactoryerFactory"
+        properties="peerDiscovery=manual, stashContexts=true, stashRemoteCachePeers=true,
+              jndiUrls=t3//server1:40000/sampleCache1|t3//server2:40000/sampleCache1
+              |t3//server1:40000/sampleCache2|t3//server2:40000/sampleCache2"/>
+
+    Valid properties are:
+    * peerDiscovery (mandatory) - specify "manual"
+    * stashContexts (optional) - specify "true" or "false".  Defaults to true.
+      java.naming.Context objects are stashed for performance.
+    * stashRemoteCachePeers (optional) - specify "true" or "false".  Defaults to true.
+      CachePeer objects are stashed for performance.
+    * jndiUrls (mandatory) - specify a pipe separated list of jndiUrls,
+      in the form protocol//hostname:port
+    -->
+   <cacheManagerPeerProviderFactory
+           class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
+           properties="peerDiscovery=automatic,
+                       multicastGroupAddress=228.1.2.3,
+                       multicastGroupPort=48866, timeToLive=64"/>
+
+
+    <!--
+    (Enable for distributed operation)
+
+    Specifies a CacheManagerPeerListenerFactory which will be used to create a
+    CacheManagerPeerListener, which
+    listens for messages from cache replicators participating in the cluster.
+
+    The attributes of cacheManagerPeerListenerFactory are:
+    class - a fully qualified factory class name
+    properties - comma separated properties having meaning only to the factory.
+
+    Ehcache comes with a built-in RMI-based distribution system. The listener component is
+    RMICacheManagerPeerListener which is configured using
+    RMICacheManagerPeerListenerFactory. It is configured as per the following example:
+
+    <cacheManagerPeerListenerFactory
+        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
+        properties="hostName=fully_qualified_hostname_or_ip,
+                    port=40001,
+                    socketTimeoutMillis=120000"/>
+
+    All properties are optional. They are:
+    * hostName - the hostName of the host the listener is running on. Specify
+      where the host is multihomed and you want to control the interface over which cluster
+      messages are received. Defaults to the host name of the default interface if not
+      specified.
+    * port - the port the listener listens on. This defaults to a free port if not specified.
+    * socketTimeoutMillis - the number of ms client sockets will stay open when sending
+      messages to the listener. This should be long enough for the slowest message.
+      If not specified it defaults 120000ms.
+
+
+    An alternate CacheManagerPeerListenerFactory can be also be used for JNDI binding of
+    listeners for messages from cache replicators participating in the cluster. For
+    cacheManagerPeerListenerFactory specify
+    class net.sf.ehcache.distribution.JNDIRMICacheManagerPeerListenerFactory.
+    Correspondingly for cacheManagerPeerProviderFactory specify class
+    net.sf.ehcache.distribution.JNDIManualRMICacheManagerPeerProviderFactoryerFactory.
+    Properties for JNDIRMICacheManagerPeerListenerFactory are the same as
+    RMICacheManagerPeerListenerFactory.
+
+    -->
+   <cacheManagerPeerListenerFactory
+     class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
+     properties="hostName=127.0.0.1, socketTimeoutMillis=120000"/>
+
+
+    <!-- Cache configuration.
+
+    The following attributes are required.
+
+    name:
+    Sets the name of the cache. This is used to identify the cache. It must be unique.
+
+    maxElementsInMemory:
+    Sets the maximum number of objects that will be created in memory
+
+	maxElementsOnDisk:
+    Sets the maximum number of objects that will be maintained in the DiskStore
+	The default value is zero, meaning unlimited.
+
+    eternal:
+    Sets whether elements are eternal. If eternal,  timeouts are ignored and the
+    element is never expired.
+
+    overflowToDisk:
+    Sets whether elements can overflow to disk when the memory store
+    has reached the maxInMemory limit.
+
+    The following attributes are optional.
+
+    timeToIdleSeconds:
+    Sets the time to idle for an element before it expires.
+    i.e. The maximum amount of time between accesses before an element expires
+    Is only used if the element is not eternal.
+    Optional attribute. A value of 0 means that an Element can idle for infinity.
+    The default value is 0.
+
+    timeToLiveSeconds:
+    Sets the time to live for an element before it expires.
+    i.e. The maximum time between creation time and when an element expires.
+    Is only used if the element is not eternal.
+    Optional attribute. A value of 0 means that and Element can live for infinity.
+    The default value is 0.
+
+    diskPersistent:
+    Whether the disk store persists between restarts of the Virtual Machine.
+    The default value is false.
+
+    diskExpiryThreadIntervalSeconds:
+    The number of seconds between runs of the disk expiry thread. The default value
+    is 120 seconds.
+
+    memoryStoreEvictionPolicy:
+    Policy would be enforced upon reaching the maxElementsInMemory limit. Default
+    policy is Least Recently Used (specified as LRU). Other policies available -
+    First In First Out (specified as FIFO) and Less Frequently Used
+    (specified as LFU)
+
+    Cache elements can also contain sub elements which take the same format of a factory class
+    and properties. Defined sub-elements are:
+
+    * cacheEventListenerFactory - Enables registration of listeners for cache events, such as
+      put, remove, update, and expire.
+
+    * bootstrapCacheLoaderFactory - Specifies a BootstrapCacheLoader, which is called by a
+      cache on initialisation to prepopulate itself.
+
+    Each cache that will be distributed needs to set a cache event listener which replicates
+    messages to the other CacheManager peers. For the built-in RMI implementation this is done
+    by adding a cacheEventListenerFactory element of type RMICacheReplicatorFactory to each
+    distributed cache's configuration as per the following example:
+
+    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+         properties="replicateAsynchronously=true,
+         replicatePuts=true,
+         replicateUpdates=true,
+         replicateUpdatesViaCopy=true,
+         replicateRemovals=true "/>
+
+    The RMICacheReplicatorFactory recognises the following properties:
+
+    * replicatePuts=true|false - whether new elements placed in a cache are
+      replicated to others. Defaults to true.
+
+    * replicateUpdates=true|false - whether new elements which override an
+      element already existing with the same key are replicated. Defaults to true.
+
+    * replicateRemovals=true - whether element removals are replicated. Defaults to true.
+
+    * replicateAsynchronously=true | false - whether replications are
+      asynchronous (true) or synchronous (false). Defaults to true.
+
+    * replicateUpdatesViaCopy=true | false - whether the new elements are
+      copied to other caches (true), or whether a remove message is sent. Defaults to true.
+
+    * asynchronousReplicationIntervalMillis=<number of milliseconds> - The asynchronous
+      replicator runs at a set interval of milliseconds. The default is 1000. The minimum
+      is 10. This property is only applicable if replicateAsynchronously=true
+
+    The RMIBootstrapCacheLoader bootstraps caches in clusters where RMICacheReplicators are
+    used. It is configured as per the following example:
+
+    <bootstrapCacheLoaderFactory
+        class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
+        properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/>
+
+    The RMIBootstrapCacheLoaderFactory recognises the following optional properties:
+
+    * bootstrapAsynchronously=true|false - whether the bootstrap happens in the background
+      after the cache has started. If false, bootstrapping must complete before the cache is
+      made available. The default value is true.
+
+    * maximumChunkSizeBytes=<integer> - Caches can potentially be very large, larger than the
+      memory limits of the VM. This property allows the bootstraper to fetched elements in
+      chunks. The default chunk size is 5000000 (5MB).
+
+    -->
+
+    <!--
+    Mandatory Default Cache configuration. These settings will be applied to caches
+    created programmtically using CacheManager.add(String cacheName)
+    -->
+    <defaultCache
+            maxElementsInMemory="10000"
+            eternal="false"
+            timeToIdleSeconds="120"
+            timeToLiveSeconds="120"
+            overflowToDisk="true"
+            maxElementsOnDisk="10000000"
+            diskPersistent="false"
+            diskExpiryThreadIntervalSeconds="120"
+            memoryStoreEvictionPolicy="LRU"
+            />
+
+    <!--
+    Sample caches. Following are some example caches. Remove these before use.
+    -->
+
+   <!--
+      NOTE that the cache benchmarking fwk looks for a cache named "cache".
+    -->
+   
+    <!--
+    Sample distributed cache named sampleDistributedCache3.
+    This cache replicates using defaults except that the asynchronous replication
+    interval is set to 200ms.
+    -->
+   <cache name="cache"
+          maxElementsInMemory="10000"
+          eternal="false"
+          timeToIdleSeconds="100"
+          timeToLiveSeconds="100"
+          overflowToDisk="false">
+       <cacheEventListenerFactory
+               class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+               properties="replicateAsynchronously=true, replicatePuts=true,
+                           replicateUpdates=true, replicateUpdatesViaCopy=true,
+                           replicateRemovals=true"/>
+   </cache>
+
+</ehcache>

Added: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/ehcache-repl-sync.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/ehcache-repl-sync.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/conf/ehcache-repl-sync.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,330 @@
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
+
+    <!--
+    DiskStore configuration
+
+    Sets the path to the directory where cache files are created.
+
+    If the path is a Java System Property it is replaced by its value in the
+    running VM.
+
+    The following properties are translated:
+    * user.home - User's home directory
+    * user.dir - User's current working directory
+    * java.io.tmpdir - Default temp file path
+
+    Subdirectories can be specified below the property e.g. java.io.tmpdir/one
+    -->
+    <diskStore path="java.io.tmpdir"/>
+
+    <!--
+    Specifies a CacheManagerEventListenerFactory, be used to create a CacheManagerPeerProvider,
+    which is notified when Caches are added or removed from the CacheManager.
+
+    The attributes of CacheManagerEventListenerFactory are:
+    * class - a fully qualified factory class name
+    * properties - comma separated properties having meaning only to the factory.
+
+    Sets the fully qualified class name to be registered as the CacheManager event listener.
+
+    The events include:
+    * adding a Cache
+    * removing a Cache
+
+    Callbacks to listener methods are synchronous and unsynchronized. It is the responsibility
+    of the implementer to safely handle the potential performance and thread safety issues
+    depending on what their listener is doing.
+
+    If no class is specified, no listener is created. There is no default.
+    -->
+    <cacheManagerEventListenerFactory class="" properties=""/>
+
+
+    <!--
+    (Enable for distributed operation)
+
+    Specifies a CacheManagerPeerProviderFactory which will be used to create a
+    CacheManagerPeerProvider, which discovers other CacheManagers in the cluster.
+
+    The attributes of cacheManagerPeerProviderFactory are:
+    * class - a fully qualified factory class name
+    * properties - comma separated properties having meaning only to the factory.
+
+    Ehcache comes with a built-in RMI-based distribution system with two means of discovery of
+    CacheManager peers participating in the cluster:
+    * automatic, using a multicast group. This one automatically discovers peers and detects
+      changes such as peers entering and leaving the group
+    * manual, using manual rmiURL configuration. A hardcoded list of peers is provided at
+      configuration time.
+
+    Configuring Automatic Discovery:
+    Automatic discovery is configured as per the following example:
+    <cacheManagerPeerProviderFactory
+                        class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
+                        properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
+                                    multicastGroupPort=4446, timeToLive=32"/>
+
+    Valid properties are:
+    * peerDiscovery (mandatory) - specify "automatic"
+    * multicastGroupAddress (mandatory) - specify a valid multicast group address
+    * multicastGroupPort (mandatory) - specify a dedicated port for the multicast heartbeat
+      traffic
+    * timeToLive - specify a value between 0 and 255 which determines how far the packets will propagate.
+      By convention, the restrictions are:
+      0   - the same host
+      1   - the same subnet
+      32  - the same site
+      64  - the same region
+      128 - the same continent
+      255 - unrestricted
+
+    Configuring Manual Discovery:
+    Manual discovery is configured as per the following example:
+    <cacheManagerPeerProviderFactory class=
+                          "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
+                          properties="peerDiscovery=manual,
+                          rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1
+                          | //server1:40000/sampleCache2|//server2:40000/sampleCache2"/>
+
+    Valid properties are:
+    * peerDiscovery (mandatory) - specify "manual"
+    * rmiUrls (mandatory) - specify a pipe separated list of rmiUrls, in the form
+                            //hostname:port
+
+    The hostname is the hostname of the remote CacheManager peer. The port is the listening
+    port of the RMICacheManagerPeerListener of the remote CacheManager peer.
+
+    An alternate CacheManagerPeerProviderFactory can be used for JNDI discovery of other
+    CacheManagers in the cluster. Only manual discovery is supported.
+
+    For cacheManagerPeerProviderFactory specify class
+    net.sf.ehcache.distribution.JNDIManualRMICacheManagerPeerProviderFactoryerFactory.
+
+    Correspondingly for cacheManagerPeerListenerFactory specify class
+    net.sf.ehcache.distribution.JNDIRMICacheManagerPeerListenerFactoryory.
+
+    Configuring JNDI Manual Discovery:
+    Manual JNDI discovery is configured as per the following example:
+    <cacheManagerPeerProviderFactory class=
+        "net.sf.ehcache.distribution.JNDIManualRMICacheManagerPeerProviderFactoryerFactory"
+        properties="peerDiscovery=manual, stashContexts=true, stashRemoteCachePeers=true,
+              jndiUrls=t3//server1:40000/sampleCache1|t3//server2:40000/sampleCache1
+              |t3//server1:40000/sampleCache2|t3//server2:40000/sampleCache2"/>
+
+    Valid properties are:
+    * peerDiscovery (mandatory) - specify "manual"
+    * stashContexts (optional) - specify "true" or "false".  Defaults to true.
+      java.naming.Context objects are stashed for performance.
+    * stashRemoteCachePeers (optional) - specify "true" or "false".  Defaults to true.
+      CachePeer objects are stashed for performance.
+    * jndiUrls (mandatory) - specify a pipe separated list of jndiUrls,
+      in the form protocol//hostname:port
+    -->
+    <cacheManagerPeerProviderFactory
+            class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
+            properties="peerDiscovery=automatic,
+                        multicastGroupAddress=228.1.2.3,
+                        multicastGroupPort=48866, timeToLive=64"/>
+
+
+    <!--
+    (Enable for distributed operation)
+
+    Specifies a CacheManagerPeerListenerFactory which will be used to create a
+    CacheManagerPeerListener, which
+    listens for messages from cache replicators participating in the cluster.
+
+    The attributes of cacheManagerPeerListenerFactory are:
+    class - a fully qualified factory class name
+    properties - comma separated properties having meaning only to the factory.
+
+    Ehcache comes with a built-in RMI-based distribution system. The listener component is
+    RMICacheManagerPeerListener which is configured using
+    RMICacheManagerPeerListenerFactory. It is configured as per the following example:
+
+    <cacheManagerPeerListenerFactory
+        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
+        properties="hostName=fully_qualified_hostname_or_ip,
+                    port=40001,
+                    socketTimeoutMillis=120000"/>
+
+    All properties are optional. They are:
+    * hostName - the hostName of the host the listener is running on. Specify
+      where the host is multihomed and you want to control the interface over which cluster
+      messages are received. Defaults to the host name of the default interface if not
+      specified.
+    * port - the port the listener listens on. This defaults to a free port if not specified.
+    * socketTimeoutMillis - the number of ms client sockets will stay open when sending
+      messages to the listener. This should be long enough for the slowest message.
+      If not specified it defaults 120000ms.
+
+
+    An alternate CacheManagerPeerListenerFactory can be also be used for JNDI binding of
+    listeners for messages from cache replicators participating in the cluster. For
+    cacheManagerPeerListenerFactory specify
+    class net.sf.ehcache.distribution.JNDIRMICacheManagerPeerListenerFactory.
+    Correspondingly for cacheManagerPeerProviderFactory specify class
+    net.sf.ehcache.distribution.JNDIManualRMICacheManagerPeerProviderFactoryerFactory.
+    Properties for JNDIRMICacheManagerPeerListenerFactory are the same as
+    RMICacheManagerPeerListenerFactory.
+
+    -->
+    <cacheManagerPeerListenerFactory
+      class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
+      properties="hostName=127.0.0.1, socketTimeoutMillis=120000"/>
+
+
+    <!-- Cache configuration.
+
+    The following attributes are required.
+
+    name:
+    Sets the name of the cache. This is used to identify the cache. It must be unique.
+
+    maxElementsInMemory:
+    Sets the maximum number of objects that will be created in memory
+
+	maxElementsOnDisk:
+    Sets the maximum number of objects that will be maintained in the DiskStore
+	The default value is zero, meaning unlimited.
+
+    eternal:
+    Sets whether elements are eternal. If eternal,  timeouts are ignored and the
+    element is never expired.
+
+    overflowToDisk:
+    Sets whether elements can overflow to disk when the memory store
+    has reached the maxInMemory limit.
+
+    The following attributes are optional.
+
+    timeToIdleSeconds:
+    Sets the time to idle for an element before it expires.
+    i.e. The maximum amount of time between accesses before an element expires
+    Is only used if the element is not eternal.
+    Optional attribute. A value of 0 means that an Element can idle for infinity.
+    The default value is 0.
+
+    timeToLiveSeconds:
+    Sets the time to live for an element before it expires.
+    i.e. The maximum time between creation time and when an element expires.
+    Is only used if the element is not eternal.
+    Optional attribute. A value of 0 means that and Element can live for infinity.
+    The default value is 0.
+
+    diskPersistent:
+    Whether the disk store persists between restarts of the Virtual Machine.
+    The default value is false.
+
+    diskExpiryThreadIntervalSeconds:
+    The number of seconds between runs of the disk expiry thread. The default value
+    is 120 seconds.
+
+    memoryStoreEvictionPolicy:
+    Policy would be enforced upon reaching the maxElementsInMemory limit. Default
+    policy is Least Recently Used (specified as LRU). Other policies available -
+    First In First Out (specified as FIFO) and Less Frequently Used
+    (specified as LFU)
+
+    Cache elements can also contain sub elements which take the same format of a factory class
+    and properties. Defined sub-elements are:
+
+    * cacheEventListenerFactory - Enables registration of listeners for cache events, such as
+      put, remove, update, and expire.
+
+    * bootstrapCacheLoaderFactory - Specifies a BootstrapCacheLoader, which is called by a
+      cache on initialisation to prepopulate itself.
+
+    Each cache that will be distributed needs to set a cache event listener which replicates
+    messages to the other CacheManager peers. For the built-in RMI implementation this is done
+    by adding a cacheEventListenerFactory element of type RMICacheReplicatorFactory to each
+    distributed cache's configuration as per the following example:
+
+    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+         properties="replicateAsynchronously=true,
+         replicatePuts=true,
+         replicateUpdates=true,
+         replicateUpdatesViaCopy=true,
+         replicateRemovals=true "/>
+
+    The RMICacheReplicatorFactory recognises the following properties:
+
+    * replicatePuts=true|false - whether new elements placed in a cache are
+      replicated to others. Defaults to true.
+
+    * replicateUpdates=true|false - whether new elements which override an
+      element already existing with the same key are replicated. Defaults to true.
+
+    * replicateRemovals=true - whether element removals are replicated. Defaults to true.
+
+    * replicateAsynchronously=true | false - whether replications are
+      asynchronous (true) or synchronous (false). Defaults to true.
+
+    * replicateUpdatesViaCopy=true | false - whether the new elements are
+      copied to other caches (true), or whether a remove message is sent. Defaults to true.
+
+    * asynchronousReplicationIntervalMillis=<number of milliseconds> - The asynchronous
+      replicator runs at a set interval of milliseconds. The default is 1000. The minimum
+      is 10. This property is only applicable if replicateAsynchronously=true
+
+    The RMIBootstrapCacheLoader bootstraps caches in clusters where RMICacheReplicators are
+    used. It is configured as per the following example:
+
+    <bootstrapCacheLoaderFactory
+        class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
+        properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/>
+
+    The RMIBootstrapCacheLoaderFactory recognises the following optional properties:
+
+    * bootstrapAsynchronously=true|false - whether the bootstrap happens in the background
+      after the cache has started. If false, bootstrapping must complete before the cache is
+      made available. The default value is true.
+
+    * maximumChunkSizeBytes=<integer> - Caches can potentially be very large, larger than the
+      memory limits of the VM. This property allows the bootstraper to fetched elements in
+      chunks. The default chunk size is 5000000 (5MB).
+
+    -->
+
+    <!--
+    Mandatory Default Cache configuration. These settings will be applied to caches
+    created programmtically using CacheManager.add(String cacheName)
+    -->
+    <defaultCache
+            maxElementsInMemory="10000"
+            eternal="false"
+            timeToIdleSeconds="120"
+            timeToLiveSeconds="120"
+            overflowToDisk="true"
+            maxElementsOnDisk="10000000"
+            diskPersistent="false"
+            diskExpiryThreadIntervalSeconds="120"
+            memoryStoreEvictionPolicy="LRU"
+            />
+
+    <!--
+    Sample caches. Following are some example caches. Remove these before use.
+    -->
+
+   <!--
+      NOTE that the cache benchmarking fwk looks for a cache named "cache".
+    -->
+
+    <!--
+    Sample distributed cache named sampleDistributedCache2.
+    This cache replicates using specific properties.
+    It only replicates updates and does so synchronously via copy
+    -->
+    <cache name="cache"
+           maxElementsInMemory="10000"
+           eternal="false"
+           timeToIdleSeconds="100"
+           timeToLiveSeconds="100"
+           overflowToDisk="false">
+        <cacheEventListenerFactory
+                class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+                properties="replicateAsynchronously=false, replicatePuts=true,
+                            replicateUpdates=true, replicateUpdatesViaCopy=true,
+                            replicateRemovals=true"/>
+    </cache>
+</ehcache>

Added: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/ehcache-1.2.4.iml
===================================================================
--- cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/ehcache-1.2.4.iml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/ehcache-1.2.4.iml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/ehcache.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="file://$MODULE_DIR$/conf" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module" module-name="Framework" />
+    <orderEntryProperties />
+  </component>
+</module>
+

Added: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/lib/commons-logging.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/lib/commons-logging.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/lib/ehcache.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/lib/ehcache.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/EHCacheTest.java
===================================================================
--- cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/EHCacheTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/EHCacheTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,53 @@
+package org.cachebench.cachewrappers;
+
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.CacheManager;
+import net.sf.ehcache.Element;
+
+import java.net.URL;
+import java.io.File;
+import java.util.Properties;
+
+import org.cachebench.CacheWrapper;
+
+/**
+ * // TODO: Add Javadocs
+ *
+ * @author <a href="mailto:manik at jboss.org">Manik Surtani</a>
+ * @since 2.0.0
+ */
+public class EHCacheTest
+{
+
+   public static void main(String[] args) throws Exception
+   {
+
+
+      CacheWrapper w = new EHCacheWrapper();
+      Properties p = new Properties();
+      p.setProperty("config", "ehcache-repl-sync.xml");
+      w.init(p);
+
+      Ehcache cache;
+      URL url = new URL("file:///Users/manik/Code/CacheBenchFwk/cache-products/ehcache-1.2.4/conf/ehcache-repl-sync.xml");
+
+      System.out.println("URL " + url);
+
+      System.out.println("FIle: " + url.getFile());
+      CacheManager m = CacheManager.create(url);
+
+      System.out.println("Caches:");
+      for (String s : m.getCacheNames()) System.out.println("   " + s);
+
+      cache = m.getCache("cache");
+
+      for (int i=0; i<100; i++) cache.put(new Element("key" + i, "value" + i));
+
+      System.out.println(cache.getKeys());
+
+      System.out.println("members: " + m.getCachePeerListener().getBoundCachePeers());
+
+      m.shutdown();
+
+   }
+}

Added: cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/EHCacheWrapper.java
===================================================================
--- cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/EHCacheWrapper.java	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/ehcache-1.2.4/src/org/cachebench/cachewrappers/EHCacheWrapper.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,160 @@
+package org.cachebench.cachewrappers;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.CacheManager;
+import net.sf.ehcache.Element;
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.config.Configuration;
+import net.sf.ehcache.config.ConfigurationFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.cachebench.SerializableCacheWrapper;
+
+import java.io.Serializable;
+import java.net.URL;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+
+/**
+ * An implementation of SerializableCacheWrapper that uses EHCache as an underlying implementation.
+ *
+ * Pass in a -Dbind.address=IP_ADDRESS
+ *
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: EHCacheWrapper.java,v 1.6 2007/05/21 16:17:56 msurtani Exp $
+ */
+public class EHCacheWrapper implements SerializableCacheWrapper
+{
+   private CacheManager manager;
+   private Ehcache cache;
+   private Log logger = LogFactory.getLog("org.cachebench.cachewrappers.EHCacheWrapper");
+
+   /* (non-Javadoc)
+   * @see org.cachebench.CacheWrapper#init(java.util.Properties)
+   */
+   public void init(Properties parameters) throws Exception
+   {
+      logger.debug("Initializing the cache with props " + parameters);
+      URL url = getClass().getClassLoader().getResource(parameters.getProperty("config"));
+      logger.debug("Config URL = " + url);
+      Configuration c = ConfigurationFactory.parseConfiguration(url);
+      c.setSource("URL of " + url);
+
+      // frig the manager to use a bind address as per sys props
+      String bindAddress = System.getProperty("bind.address");
+
+      if (bindAddress!= null)
+      {
+         String props = c.getCacheManagerPeerListenerFactoryConfiguration().getProperties();
+         props = injectBindAddress(props, bindAddress);
+         c.getCacheManagerPeerListenerFactoryConfiguration().setProperties(props);
+      }
+
+      manager = new CacheManager(c);
+      
+      logger.debug("Finish Initializing the cache");
+   }
+
+   private String injectBindAddress(String props, String bindAddress)
+   {
+      String newProps = "hostName=" + bindAddress;
+
+      StringTokenizer st = new StringTokenizer(props, ",", false);
+      while (st.hasMoreTokens())
+      {
+         boolean skip = false;
+         String p = st.nextToken();
+         if (p != null)
+         {
+            p.trim();
+            String[] kv = p.split("=");
+            if (kv[0] != null)
+            {
+               kv[0].trim();
+               if (kv[0].equals("hostName"))
+                  skip = true;
+               else
+                  newProps += ", " + kv[0];
+            }
+            if (kv[1] != null && !skip)
+            {
+               kv[1].trim();
+               newProps += "=" + kv[1];
+            }
+
+         }
+      }
+
+      return newProps;
+   }
+
+   /* (non-Javadoc)
+   * @see org.cachebench.CacheWrapper#setUp()
+   */
+   public void setUp() throws Exception
+   {
+      logger.info("Caches avbl:");
+      for (String s : manager.getCacheNames()) logger.info("    * " + s);
+      cache = manager.getCache("cache");
+      logger.info("Using named cache " + cache);
+      logger.info("Bounded peers: " + manager.getCachePeerListener().getBoundCachePeers());
+      logger.info("Remote peers: " + manager.getCacheManagerPeerProvider().listRemoteCachePeers(cache));
+   }
+
+   /* (non-Javadoc)
+   * @see org.cachebench.CacheWrapper#tearDown()
+   */
+   public void tearDown() throws Exception
+   {
+      manager.shutdown();
+   }
+
+   /* (non-Javadoc)
+   * @see org.cachebench.SerializableCacheWrapper#putSerializable(java.io.Serializable, java.io.Serializable)
+   */
+   public void putSerializable(Serializable key, Serializable value) throws Exception
+   {
+      Element element = new Element(key, value);
+      cache.put(element);
+   }
+
+   /* (non-Javadoc)
+   * @see org.cachebench.SerializableCacheWrapper#getSerializable(java.io.Serializable)
+   */
+   public Object getSerializable(Serializable key) throws Exception
+   {
+      return cache.get(key);
+   }
+
+   public void empty() throws Exception
+   {
+      cache.removeAll();
+   }
+
+   /* (non-Javadoc)
+   * @see org.cachebench.CacheWrapper#put(java.lang.Object, java.lang.Object)
+   */
+   public void put(Object key, Object value) throws Exception
+   {
+      throw new Exception("Put: Does not deal with non-Serializables, should not be called.");
+   }
+
+   /* (non-Javadoc)
+   * @see org.cachebench.CacheWrapper#get(java.lang.Object)
+   */
+   public Object get(Object key) throws Exception
+   {
+      throw new Exception("Get: Does not deal with non-Serializables, should not be called.");
+   }
+
+   public int getNumMembers()
+   {
+      return manager.getCacheManagerPeerProvider().listRemoteCachePeers(cache).size();
+   }
+
+   public String getInfo()
+   {
+      return cache.getKeys().toString() + " remote peers: " + manager.getCachePeerListener().getBoundCachePeers();
+   }
+}

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/opt-repl-async.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/opt-repl-async.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/opt-repl-async.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Sample TreeCache Service Configuration                               -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+
+<server>
+
+    <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+    <!-- ==================================================================== -->
+    <!-- Defines TreeCache configuration                                      -->
+    <!-- ==================================================================== -->
+
+    <mbean code="org.jboss.cache.TreeCache"
+        name="jboss.cache:service=TreeCache">
+
+        <depends>jboss:service=Naming</depends>
+        <depends>jboss:service=TransactionManager</depends>
+
+        <!--
+        Configure the TransactionManager
+    -->
+        <attribute name="TransactionManagerLookupClass">org.jboss.cache.DummyTransactionManagerLookup</attribute>
+
+        <!--
+            Isolation level : SERIALIZABLE
+                              REPEATABLE_READ (default)
+                              READ_COMMITTED
+                              READ_UNCOMMITTED
+                              NONE
+        -->
+        <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
+        <attribute name="NodeLockingScheme">OPTIMISTIC</attribute>
+
+        <!--
+             Valid modes are LOCAL
+                             REPL_ASYNC
+                             REPL_SYNC
+                             INVALIDATION_ASYNC
+                             INVALIDATION_SYNC
+        -->
+        <attribute name="CacheMode">REPL_ASYNC</attribute>
+
+        <!--
+        Just used for async repl: use a replication queue
+        -->
+        <attribute name="UseReplQueue">false</attribute>
+
+        <!--
+            Replication interval for replication queue (in ms)
+        -->
+        <attribute name="ReplQueueInterval">0</attribute>
+
+        <!--
+            Max number of elements which trigger replication
+        -->
+        <attribute name="ReplQueueMaxElements">0</attribute>
+
+        <!-- Name of cluster. Needs to be the same for all clusters, in order
+             to find each other
+        -->
+        <attribute name="ClusterName">TreeCache-Cluster</attribute>
+
+        <!-- JGroups protocol stack properties. Can also be a URL,
+             e.g. file:/home/bela/default.xml
+           <attribute name="ClusterProperties"></attribute>
+        -->
+
+        <attribute name="ClusterConfig">
+            <config>
+                <!-- UDP: if you have a multihomed machine,
+                set the bind_addr attribute to the appropriate NIC IP address, e.g bind_addr="192.168.0.2"
+                -->
+                <!-- UDP: On Windows machines, because of the media sense feature
+                 being broken with multicast (even after disabling media sense)
+                 set the loopback attribute to true -->
+                <UDP mcast_addr="228.1.2.3" mcast_port="48866"
+                    ip_ttl="64" ip_mcast="true" 
+                    mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
+                    ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
+                    loopback="false"/>
+                <PING timeout="2000" num_initial_members="3"
+                    up_thread="false" down_thread="false"/>
+                <MERGE2 min_interval="10000" max_interval="20000"/>
+                <!--        <FD shun="true" up_thread="true" down_thread="true" />-->
+                <FD_SOCK/>
+                <VERIFY_SUSPECT timeout="1500"
+                    up_thread="false" down_thread="false"/>
+                <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
+                    max_xmit_size="8192" up_thread="false" down_thread="false"/>
+                <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
+                    down_thread="false"/>
+                <pbcast.STABLE desired_avg_gossip="20000"
+                    up_thread="false" down_thread="false"/>
+                <FRAG frag_size="8192"
+                    down_thread="false" up_thread="false"/>
+                <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
+                    shun="true" print_local_addr="true"/>
+                <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
+            </config>
+        </attribute>
+
+
+        <!--
+         Whether or not to fetch state on joining a cluster
+         NOTE this used to be called FetchStateOnStartup and has been renamed to be more descriptive.
+        -->
+        <attribute name="FetchInMemoryState">false</attribute>
+
+        <!--
+            The max amount of time (in milliseconds) we wait until the
+            initial state (ie. the contents of the cache) are retrieved from
+            existing members in a clustered environment
+        -->
+        <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+
+        <!--
+            Number of milliseconds to wait until all responses for a
+            synchronous call have been received.
+        -->
+        <attribute name="SyncReplTimeout">60000</attribute>
+
+        <!-- Max number of milliseconds to wait for a lock acquisition -->
+        <attribute name="LockAcquisitionTimeout">10000</attribute>
+
+        <!-- Name of the eviction policy class. -->
+        <attribute name="EvictionPolicyClass"></attribute>
+
+       <!--
+          Indicate whether to use region based marshalling or not. Set this to true if you are running under a scoped
+          class loader, e.g., inside an application server. Default is "false".
+       -->
+        <attribute name="UseRegionBasedMarshalling">false</attribute>
+    </mbean>
+
+
+   <!--  Uncomment to get a graphical view of the TreeCache MBean above -->
+   <!--   <mbean code="org.jboss.cache.TreeCacheView" name="jboss.cache:service=TreeCacheView">-->
+   <!--      <depends>jboss.cache:service=TreeCache</depends>-->
+   <!--      <attribute name="CacheService">jboss.cache:service=TreeCache</attribute>-->
+   <!--   </mbean>-->
+
+
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/opt-repl-sync.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/opt-repl-sync.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/opt-repl-sync.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Sample TreeCache Service Configuration                               -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+
+<server>
+
+    <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+    <!-- ==================================================================== -->
+    <!-- Defines TreeCache configuration                                      -->
+    <!-- ==================================================================== -->
+
+    <mbean code="org.jboss.cache.TreeCache"
+        name="jboss.cache:service=TreeCache">
+
+        <depends>jboss:service=Naming</depends>
+        <depends>jboss:service=TransactionManager</depends>
+
+        <!--
+        Configure the TransactionManager
+    -->
+        <attribute name="TransactionManagerLookupClass">org.jboss.cache.DummyTransactionManagerLookup</attribute>
+
+        <!--
+            Isolation level : SERIALIZABLE
+                              REPEATABLE_READ (default)
+                              READ_COMMITTED
+                              READ_UNCOMMITTED
+                              NONE
+        -->
+        <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
+       <attribute name="NodeLockingScheme">OPTIMISTIC</attribute>
+
+        <!--
+             Valid modes are LOCAL
+                             REPL_ASYNC
+                             REPL_SYNC
+                             INVALIDATION_ASYNC
+                             INVALIDATION_SYNC
+        -->
+        <attribute name="CacheMode">REPL_SYNC</attribute>
+
+        <!--
+        Just used for async repl: use a replication queue
+        -->
+        <attribute name="UseReplQueue">false</attribute>
+
+        <!--
+            Replication interval for replication queue (in ms)
+        -->
+        <attribute name="ReplQueueInterval">0</attribute>
+
+        <!--
+            Max number of elements which trigger replication
+        -->
+        <attribute name="ReplQueueMaxElements">0</attribute>
+
+        <!-- Name of cluster. Needs to be the same for all clusters, in order
+             to find each other
+        -->
+        <attribute name="ClusterName">TreeCache-Cluster</attribute>
+
+        <!-- JGroups protocol stack properties. Can also be a URL,
+             e.g. file:/home/bela/default.xml
+           <attribute name="ClusterProperties"></attribute>
+        -->
+
+        <attribute name="ClusterConfig">
+            <config>
+                <!-- UDP: if you have a multihomed machine,
+                set the bind_addr attribute to the appropriate NIC IP address, e.g bind_addr="192.168.0.2"
+                -->
+                <!-- UDP: On Windows machines, because of the media sense feature
+                 being broken with multicast (even after disabling media sense)
+                 set the loopback attribute to true -->
+                <UDP mcast_addr="228.1.2.3" mcast_port="48866"
+                    ip_ttl="64" ip_mcast="true" 
+                    mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
+                    ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
+                    loopback="false"/>
+                <PING timeout="2000" num_initial_members="3"
+                    up_thread="false" down_thread="false"/>
+                <MERGE2 min_interval="10000" max_interval="20000"/>
+                <!--        <FD shun="true" up_thread="true" down_thread="true" />-->
+                <FD_SOCK/>
+                <VERIFY_SUSPECT timeout="1500"
+                    up_thread="false" down_thread="false"/>
+                <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
+                    max_xmit_size="8192" up_thread="false" down_thread="false"/>
+                <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
+                    down_thread="false"/>
+                <pbcast.STABLE desired_avg_gossip="20000"
+                    up_thread="false" down_thread="false"/>
+                <FRAG frag_size="8192"
+                    down_thread="false" up_thread="false"/>
+                <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
+                    shun="true" print_local_addr="true"/>
+                <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
+            </config>
+        </attribute>
+
+
+        <!--
+         Whether or not to fetch state on joining a cluster
+         NOTE this used to be called FetchStateOnStartup and has been renamed to be more descriptive.
+        -->
+        <attribute name="FetchInMemoryState">false</attribute>
+
+        <!--
+            The max amount of time (in milliseconds) we wait until the
+            initial state (ie. the contents of the cache) are retrieved from
+            existing members in a clustered environment
+        -->
+        <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+
+        <!--
+            Number of milliseconds to wait until all responses for a
+            synchronous call have been received.
+        -->
+        <attribute name="SyncReplTimeout">60000</attribute>
+
+        <!-- Max number of milliseconds to wait for a lock acquisition -->
+        <attribute name="LockAcquisitionTimeout">10000</attribute>
+
+        <!-- Name of the eviction policy class. -->
+        <attribute name="EvictionPolicyClass"></attribute>
+
+       <!--
+          Indicate whether to use region based marshalling or not. Set this to true if you are running under a scoped
+          class loader, e.g., inside an application server. Default is "false".
+       -->
+        <attribute name="UseRegionBasedMarshalling">false</attribute>
+    </mbean>
+
+
+   <!--  Uncomment to get a graphical view of the TreeCache MBean above -->
+   <!--   <mbean code="org.jboss.cache.TreeCacheView" name="jboss.cache:service=TreeCacheView">-->
+   <!--      <depends>jboss.cache:service=TreeCache</depends>-->
+   <!--      <attribute name="CacheService">jboss.cache:service=TreeCache</attribute>-->
+   <!--   </mbean>-->
+
+
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/pess-repl-async.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/pess-repl-async.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/pess-repl-async.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Sample TreeCache Service Configuration                               -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+
+<server>
+
+    <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+    <!-- ==================================================================== -->
+    <!-- Defines TreeCache configuration                                      -->
+    <!-- ==================================================================== -->
+
+    <mbean code="org.jboss.cache.TreeCache"
+        name="jboss.cache:service=TreeCache">
+
+        <depends>jboss:service=Naming</depends>
+        <depends>jboss:service=TransactionManager</depends>
+
+        <!--
+        Configure the TransactionManager
+    -->
+        <attribute name="TransactionManagerLookupClass">org.jboss.cache.DummyTransactionManagerLookup</attribute>
+
+        <!--
+            Isolation level : SERIALIZABLE
+                              REPEATABLE_READ (default)
+                              READ_COMMITTED
+                              READ_UNCOMMITTED
+                              NONE
+        -->
+        <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
+
+        <!--
+             Valid modes are LOCAL
+                             REPL_ASYNC
+                             REPL_SYNC
+                             INVALIDATION_ASYNC
+                             INVALIDATION_SYNC
+        -->
+        <attribute name="CacheMode">REPL_ASYNC</attribute>
+
+        <!--
+        Just used for async repl: use a replication queue
+        -->
+        <attribute name="UseReplQueue">false</attribute>
+
+        <!--
+            Replication interval for replication queue (in ms)
+        -->
+        <attribute name="ReplQueueInterval">0</attribute>
+
+        <!--
+            Max number of elements which trigger replication
+        -->
+        <attribute name="ReplQueueMaxElements">0</attribute>
+
+        <!-- Name of cluster. Needs to be the same for all clusters, in order
+             to find each other
+        -->
+        <attribute name="ClusterName">TreeCache-Cluster</attribute>
+
+        <!-- JGroups protocol stack properties. Can also be a URL,
+             e.g. file:/home/bela/default.xml
+           <attribute name="ClusterProperties"></attribute>
+        -->
+
+        <attribute name="ClusterConfig">
+            <config>
+                <!-- UDP: if you have a multihomed machine,
+                set the bind_addr attribute to the appropriate NIC IP address, e.g bind_addr="192.168.0.2"
+                -->
+                <!-- UDP: On Windows machines, because of the media sense feature
+                 being broken with multicast (even after disabling media sense)
+                 set the loopback attribute to true -->
+                <UDP mcast_addr="228.1.2.3" mcast_port="48866"
+                    ip_ttl="64" ip_mcast="true" 
+                    mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
+                    ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
+                    loopback="false"/>
+                <PING timeout="2000" num_initial_members="3"
+                    up_thread="false" down_thread="false"/>
+                <MERGE2 min_interval="10000" max_interval="20000"/>
+                <!--        <FD shun="true" up_thread="true" down_thread="true" />-->
+                <FD_SOCK/>
+                <VERIFY_SUSPECT timeout="1500"
+                    up_thread="false" down_thread="false"/>
+                <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
+                    max_xmit_size="8192" up_thread="false" down_thread="false"/>
+                <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
+                    down_thread="false"/>
+                <pbcast.STABLE desired_avg_gossip="20000"
+                    up_thread="false" down_thread="false"/>
+                <FRAG frag_size="8192"
+                    down_thread="false" up_thread="false"/>
+                <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
+                    shun="true" print_local_addr="true"/>
+                <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
+            </config>
+        </attribute>
+
+
+        <!--
+         Whether or not to fetch state on joining a cluster
+         NOTE this used to be called FetchStateOnStartup and has been renamed to be more descriptive.
+        -->
+        <attribute name="FetchInMemoryState">false</attribute>
+
+        <!--
+            The max amount of time (in milliseconds) we wait until the
+            initial state (ie. the contents of the cache) are retrieved from
+            existing members in a clustered environment
+        -->
+        <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+
+        <!--
+            Number of milliseconds to wait until all responses for a
+            synchronous call have been received.
+        -->
+        <attribute name="SyncReplTimeout">60000</attribute>
+
+        <!-- Max number of milliseconds to wait for a lock acquisition -->
+        <attribute name="LockAcquisitionTimeout">10000</attribute>
+
+        <!-- Name of the eviction policy class. -->
+        <attribute name="EvictionPolicyClass"></attribute>
+
+       <!--
+          Indicate whether to use region based marshalling or not. Set this to true if you are running under a scoped
+          class loader, e.g., inside an application server. Default is "false".
+       -->
+        <attribute name="UseRegionBasedMarshalling">false</attribute>
+    </mbean>
+
+
+   <!--  Uncomment to get a graphical view of the TreeCache MBean above -->
+   <!--   <mbean code="org.jboss.cache.TreeCacheView" name="jboss.cache:service=TreeCacheView">-->
+   <!--      <depends>jboss.cache:service=TreeCache</depends>-->
+   <!--      <attribute name="CacheService">jboss.cache:service=TreeCache</attribute>-->
+   <!--   </mbean>-->
+
+
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/pess-repl-sync.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/pess-repl-sync.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/conf/pess-repl-sync.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Sample TreeCache Service Configuration                               -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+
+<server>
+
+    <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+    <!-- ==================================================================== -->
+    <!-- Defines TreeCache configuration                                      -->
+    <!-- ==================================================================== -->
+
+    <mbean code="org.jboss.cache.TreeCache"
+        name="jboss.cache:service=TreeCache">
+
+        <depends>jboss:service=Naming</depends>
+        <depends>jboss:service=TransactionManager</depends>
+
+        <!--
+        Configure the TransactionManager
+    -->
+        <attribute name="TransactionManagerLookupClass">org.jboss.cache.DummyTransactionManagerLookup</attribute>
+
+        <!--
+            Isolation level : SERIALIZABLE
+                              REPEATABLE_READ (default)
+                              READ_COMMITTED
+                              READ_UNCOMMITTED
+                              NONE
+        -->
+        <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
+
+        <!--
+             Valid modes are LOCAL
+                             REPL_ASYNC
+                             REPL_SYNC
+                             INVALIDATION_ASYNC
+                             INVALIDATION_SYNC
+        -->
+        <attribute name="CacheMode">REPL_SYNC</attribute>
+
+        <!--
+        Just used for async repl: use a replication queue
+        -->
+        <attribute name="UseReplQueue">false</attribute>
+
+        <!--
+            Replication interval for replication queue (in ms)
+        -->
+        <attribute name="ReplQueueInterval">0</attribute>
+
+        <!--
+            Max number of elements which trigger replication
+        -->
+        <attribute name="ReplQueueMaxElements">0</attribute>
+
+        <!-- Name of cluster. Needs to be the same for all clusters, in order
+             to find each other
+        -->
+        <attribute name="ClusterName">TreeCache-Cluster</attribute>
+
+        <!-- JGroups protocol stack properties. Can also be a URL,
+             e.g. file:/home/bela/default.xml
+           <attribute name="ClusterProperties"></attribute>
+        -->
+
+        <attribute name="ClusterConfig">
+            <config>
+                <!-- UDP: if you have a multihomed machine,
+                set the bind_addr attribute to the appropriate NIC IP address, e.g bind_addr="192.168.0.2"
+                -->
+                <!-- UDP: On Windows machines, because of the media sense feature
+                 being broken with multicast (even after disabling media sense)
+                 set the loopback attribute to true -->
+                <UDP mcast_addr="228.1.2.3" mcast_port="48866"
+                    ip_ttl="64" ip_mcast="true" 
+                    mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
+                    ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
+                    loopback="false"/>
+                <PING timeout="2000" num_initial_members="3"
+                    up_thread="false" down_thread="false"/>
+                <MERGE2 min_interval="10000" max_interval="20000"/>
+                <!--        <FD shun="true" up_thread="true" down_thread="true" />-->
+                <FD_SOCK/>
+                <VERIFY_SUSPECT timeout="1500"
+                    up_thread="false" down_thread="false"/>
+                <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
+                    max_xmit_size="8192" up_thread="false" down_thread="false"/>
+                <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
+                    down_thread="false"/>
+                <pbcast.STABLE desired_avg_gossip="20000"
+                    up_thread="false" down_thread="false"/>
+                <FRAG frag_size="8192"
+                    down_thread="false" up_thread="false"/>
+                <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
+                    shun="true" print_local_addr="true"/>
+                <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
+            </config>
+        </attribute>
+
+
+        <!--
+         Whether or not to fetch state on joining a cluster
+         NOTE this used to be called FetchStateOnStartup and has been renamed to be more descriptive.
+        -->
+        <attribute name="FetchInMemoryState">false</attribute>
+
+        <!--
+            The max amount of time (in milliseconds) we wait until the
+            initial state (ie. the contents of the cache) are retrieved from
+            existing members in a clustered environment
+        -->
+        <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+
+        <!--
+            Number of milliseconds to wait until all responses for a
+            synchronous call have been received.
+        -->
+        <attribute name="SyncReplTimeout">60000</attribute>
+
+        <!-- Max number of milliseconds to wait for a lock acquisition -->
+        <attribute name="LockAcquisitionTimeout">10000</attribute>
+
+        <!-- Name of the eviction policy class. -->
+        <attribute name="EvictionPolicyClass"></attribute>
+
+       <!--
+          Indicate whether to use region based marshalling or not. Set this to true if you are running under a scoped
+          class loader, e.g., inside an application server. Default is "false".
+       -->
+        <attribute name="UseRegionBasedMarshalling">false</attribute>
+    </mbean>
+
+
+   <!--  Uncomment to get a graphical view of the TreeCache MBean above -->
+   <!--   <mbean code="org.jboss.cache.TreeCacheView" name="jboss.cache:service=TreeCacheView">-->
+   <!--      <depends>jboss.cache:service=TreeCache</depends>-->
+   <!--      <attribute name="CacheService">jboss.cache:service=TreeCache</attribute>-->
+   <!--   </mbean>-->
+
+
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/jbosscache-1.4.1.iml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/jbosscache-1.4.1.iml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/jbosscache-1.4.1.iml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-minimal.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jgroups.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-common.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-cache.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/concurrent.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-jmx.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-system.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-aop.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-j2ee.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/trove.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-serialization.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="file://$MODULE_DIR$/conf" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module" module-name="Framework" />
+    <orderEntryProperties />
+  </component>
+</module>
+

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/commons-logging.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/commons-logging.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/concurrent.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/concurrent.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-aop.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-aop.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-cache.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-cache.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-common.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-common.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-j2ee.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-j2ee.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-jmx.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-jmx.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-minimal.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-minimal.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-serialization.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-serialization.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-system.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jboss-system.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jgroups.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/jgroups.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/trove.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/lib/trove.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/src/org/cachebench/cachewrappers/JBossCacheWrapper.java
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/src/org/cachebench/cachewrappers/JBossCacheWrapper.java	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-1.4.1/src/org/cachebench/cachewrappers/JBossCacheWrapper.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,72 @@
+package org.cachebench.cachewrappers;
+
+import org.cachebench.CacheWrapper;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.cache.PropertyConfigurator;
+import org.jboss.cache.TreeCache;
+
+import java.util.Properties;
+import java.util.HashMap;
+
+
+/**
+ * An implementation of CacheWrapper that uses JBossCache as an underlying implementation.
+ *
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: JBossCacheWrapper.java,v 1.1 2007/05/17 08:13:46 msurtani Exp $
+ */
+public class JBossCacheWrapper implements CacheWrapper
+{
+    private TreeCache tree;
+    private Log log = LogFactory.getLog("org.cachebench.cachewrappers.JBossCacheWrapper");
+
+    public void init(Properties parameters) throws Exception
+    {
+            log.debug("Initializing the cache");
+            //parameters.
+            tree = new TreeCache();
+	        PropertyConfigurator conf = new PropertyConfigurator();
+	        conf.configure( tree, parameters.getProperty("config") );
+    }
+
+    public void setUp() throws Exception
+    {
+            tree.createService(); // not necessary, but is same as MBean lifecycle
+	        tree.startService(); // kick start tree cache
+    }
+
+    public void tearDown() throws Exception
+    {
+        tree.stopService();
+        tree.destroyService();
+    }
+
+    public void put(Object key, Object value) throws Exception
+    {
+        HashMap map = new HashMap(1);
+        map.put( key, value );
+            tree.put(key.toString(), map);
+    }
+
+    public Object get(Object key) throws Exception
+    {
+            return tree.get( key.toString() );
+
+    }
+    
+    public void empty() throws Exception
+    {
+      tree.remove("/");
+    }
+
+   public int getNumMembers()
+   {
+      return tree.getMembers().size();
+   }
+
+   public String getInfo()
+   {
+      return tree.printDetails();
+   }
+}

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/opt-repl-async.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/opt-repl-async.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/opt-repl-async.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<server>
+
+   <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+   <mbean code="org.jboss.cache.CacheImpl"
+          name="jboss.cache:service=TreeCache">
+
+      <depends>jboss:service=Naming</depends>
+      <depends>jboss:service=TransactionManager</depends>
+
+      <attribute name="TransactionManagerLookupClass">org.jboss.cache.transaction.GenericTransactionManagerLookup</attribute>
+      <attribute name="NodeLockingScheme">OPTIMISTIC</attribute>
+      <attribute name="CacheMode">REPL_ASYNC</attribute>
+      <attribute name="UseReplQueue">false</attribute>
+      <attribute name="ReplQueueInterval">0</attribute>
+      <attribute name="ReplQueueMaxElements">0</attribute>
+      <attribute name="ClusterName">JBossCache-Cluster</attribute>
+      <attribute name="ClusterConfig">
+         <config>
+            <UDP mcast_addr="229.10.10.10"
+                 mcast_port="45599"
+                 tos="8"
+                 ucast_recv_buf_size="20000000"
+                 ucast_send_buf_size="640000"
+                 mcast_recv_buf_size="25000000"
+                 mcast_send_buf_size="640000"
+                 loopback="false"
+                 discard_incompatible_packets="true"
+                 max_bundle_size="64000"
+                 max_bundle_timeout="30"
+                 use_incoming_packet_handler="true"
+                 use_outgoing_packet_handler="false"
+                 ip_ttl="2"
+                 down_thread="false" up_thread="false"
+                 enable_bundling="false"/>
+            <PING timeout="2000"
+                  down_thread="false" up_thread="false" num_initial_members="3"/>
+            <MERGE2 max_interval="100000"
+                    down_thread="false" up_thread="false" min_interval="20000"/>
+            <FD_SOCK down_thread="false" up_thread="false"/>
+            <FD timeout="10000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
+            <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
+            <pbcast.NAKACK max_xmit_size="60000"
+                           use_mcast_xmit="false" gc_lag="0"
+                           retransmit_timeout="300,600,1200,2400,4800"
+                           down_thread="false" up_thread="false"
+                           discard_delivered_msgs="true"/>
+            <UNICAST timeout="300,600,1200,2400,3600"
+                     down_thread="false" up_thread="false"/>
+            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
+                           down_thread="false" up_thread="false"
+                           max_bytes="400000"/>
+            <pbcast.GMS print_local_addr="true" join_timeout="3000" use_flush="true" flush_timeout="3000"
+                        down_thread="false" up_thread="false"
+                        join_retry_timeout="2000" shun="false"
+                        view_bundling="true"/>
+            <FC max_credits="2000000" down_thread="false" up_thread="false"
+                min_threshold="0.20"/>
+            <FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
+            <!-- <pbcast.STREAMING_STATE_TRANSFER down_thread="false" up_thread="false"
+                                         use_flush="true" flush_timeout="3000" use_reading_thread="true"/> -->
+            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="true" flush_timeout="3000"/>
+            <pbcast.FLUSH down_thread="false" up_thread="false" timeout="8000" auto_flush_conf="false"/>
+         </config>
+      </attribute>
+      <attribute name="FetchInMemoryState">true</attribute>
+      <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+      <attribute name="SyncReplTimeout">60000</attribute>
+      <attribute name="LockAcquisitionTimeout">10000</attribute>
+      <attribute name="EvictionPolicyConfig">
+      </attribute>
+    
+      <attribute name="CacheLoaderConfiguration">
+      </attribute>
+
+      <attribute name="UseRegionBasedMarshalling">false</attribute>
+   </mbean>
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/opt-repl-sync.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/opt-repl-sync.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/opt-repl-sync.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<server>
+
+   <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+   <mbean code="org.jboss.cache.CacheImpl"
+          name="jboss.cache:service=TreeCache">
+
+      <depends>jboss:service=Naming</depends>
+      <depends>jboss:service=TransactionManager</depends>
+
+      <attribute name="TransactionManagerLookupClass">org.jboss.cache.transaction.GenericTransactionManagerLookup</attribute>
+      <attribute name="NodeLockingScheme">PESSIMISTIC</attribute>
+      <attribute name="CacheMode">REPL_SYNC</attribute>
+      <attribute name="UseReplQueue">false</attribute>
+      <attribute name="ReplQueueInterval">0</attribute>
+      <attribute name="ReplQueueMaxElements">0</attribute>
+      <attribute name="ClusterName">JBossCache-Cluster</attribute>
+      <attribute name="ClusterConfig">
+         <config>
+            <UDP mcast_addr="229.10.10.10"
+                 mcast_port="45599"
+                 tos="8"
+                 ucast_recv_buf_size="20000000"
+                 ucast_send_buf_size="640000"
+                 mcast_recv_buf_size="25000000"
+                 mcast_send_buf_size="640000"
+                 loopback="false"
+                 discard_incompatible_packets="true"
+                 max_bundle_size="64000"
+                 max_bundle_timeout="30"
+                 use_incoming_packet_handler="true"
+                 use_outgoing_packet_handler="false"
+                 ip_ttl="2"
+                 down_thread="false" up_thread="false"
+                 enable_bundling="false"/>
+            <PING timeout="2000"
+                  down_thread="false" up_thread="false" num_initial_members="3"/>
+            <MERGE2 max_interval="100000"
+                    down_thread="false" up_thread="false" min_interval="20000"/>
+            <FD_SOCK down_thread="false" up_thread="false"/>
+            <FD timeout="10000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
+            <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
+            <pbcast.NAKACK max_xmit_size="60000"
+                           use_mcast_xmit="false" gc_lag="0"
+                           retransmit_timeout="300,600,1200,2400,4800"
+                           down_thread="false" up_thread="false"
+                           discard_delivered_msgs="true"/>
+            <UNICAST timeout="300,600,1200,2400,3600"
+                     down_thread="false" up_thread="false"/>
+            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
+                           down_thread="false" up_thread="false"
+                           max_bytes="400000"/>
+            <pbcast.GMS print_local_addr="true" join_timeout="3000" use_flush="true" flush_timeout="3000"
+                        down_thread="false" up_thread="false"
+                        join_retry_timeout="2000" shun="false"
+                        view_bundling="true"/>
+            <FC max_credits="2000000" down_thread="false" up_thread="false"
+                min_threshold="0.20"/>
+            <FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
+            <!-- <pbcast.STREAMING_STATE_TRANSFER down_thread="false" up_thread="false"
+                                         use_flush="true" flush_timeout="3000" use_reading_thread="true"/> -->
+            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="true" flush_timeout="3000"/>
+            <pbcast.FLUSH down_thread="false" up_thread="false" timeout="8000" auto_flush_conf="false"/>
+         </config>
+      </attribute>
+      <attribute name="FetchInMemoryState">true</attribute>
+      <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+      <attribute name="SyncReplTimeout">60000</attribute>
+      <attribute name="LockAcquisitionTimeout">10000</attribute>
+      <attribute name="EvictionPolicyConfig">
+      </attribute>    
+
+      <attribute name="CacheLoaderConfiguration">
+      </attribute>
+
+      <attribute name="UseRegionBasedMarshalling">false</attribute>
+   </mbean>
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-async.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-async.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-async.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<server>
+
+   <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+   <mbean code="org.jboss.cache.CacheImpl"
+          name="jboss.cache:service=TreeCache">
+
+      <depends>jboss:service=Naming</depends>
+      <depends>jboss:service=TransactionManager</depends>
+
+      <attribute name="TransactionManagerLookupClass">org.jboss.cache.transaction.GenericTransactionManagerLookup</attribute>
+      <attribute name="IsolationLevel">READ_COMMITTED</attribute>
+      <attribute name="CacheMode">REPL_ASYNC</attribute>
+      <attribute name="UseReplQueue">true</attribute>
+      <attribute name="ReplQueueInterval">0</attribute>
+      <attribute name="ReplQueueMaxElements">100</attribute>
+      <attribute name="ClusterName">JBossCache-Cluster</attribute>
+      <attribute name="ClusterConfig">
+         <config>
+            <UDP mcast_addr="229.10.10.10"
+                 mcast_port="45599"
+                 tos="8"
+                 ucast_recv_buf_size="20000000"
+                 ucast_send_buf_size="640000"
+                 mcast_recv_buf_size="25000000"
+                 mcast_send_buf_size="640000"
+                 loopback="false"
+                 discard_incompatible_packets="true"
+                 max_bundle_size="64000"
+                 max_bundle_timeout="30"
+                 use_incoming_packet_handler="true"
+                 use_outgoing_packet_handler="false"
+                 ip_ttl="2"
+                 down_thread="false" up_thread="false"
+                 enable_bundling="false"/>
+            <PING timeout="2000"
+                  down_thread="false" up_thread="false" num_initial_members="3"/>
+            <MERGE2 max_interval="100000"
+                    down_thread="false" up_thread="false" min_interval="20000"/>
+            <FD_SOCK down_thread="false" up_thread="false"/>
+            <FD timeout="10000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
+            <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
+            <pbcast.NAKACK max_xmit_size="60000"
+                           use_mcast_xmit="false" gc_lag="0"
+                           retransmit_timeout="300,600,1200,2400,4800"
+                           down_thread="false" up_thread="false"
+                           discard_delivered_msgs="true"/>
+            <UNICAST timeout="300,600,1200,2400,3600"
+                     down_thread="false" up_thread="false"/>
+            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
+                           down_thread="false" up_thread="false"
+                           max_bytes="400000"/>
+            <pbcast.GMS print_local_addr="true" join_timeout="3000" use_flush="true" flush_timeout="3000"
+                        down_thread="false" up_thread="false"
+                        join_retry_timeout="2000" shun="false"
+                        view_bundling="true"/>
+            <FC max_credits="2000000" down_thread="false" up_thread="false"
+                min_threshold="0.20"/>
+            <FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
+            <!-- <pbcast.STREAMING_STATE_TRANSFER down_thread="false" up_thread="false"
+                                         use_flush="true" flush_timeout="3000" use_reading_thread="true"/> -->
+            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="true" flush_timeout="3000"/>
+            <pbcast.FLUSH down_thread="false" up_thread="false" timeout="8000" auto_flush_conf="false"/>
+         </config>
+      </attribute>
+      <attribute name="FetchInMemoryState">true</attribute>
+      <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+      <attribute name="SyncReplTimeout">60000</attribute>
+      <attribute name="LockAcquisitionTimeout">10000</attribute>
+      <attribute name="EvictionPolicyConfig">
+      </attribute>
+
+      <attribute name="CacheLoaderConfiguration">
+      </attribute>
+
+      <attribute name="UseRegionBasedMarshalling">false</attribute>
+   </mbean>
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-sync-br.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-sync-br.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-sync-br.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<server>
+
+   <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+   <mbean code="org.jboss.cache.CacheImpl"
+          name="jboss.cache:service=TreeCache">
+
+      <depends>jboss:service=Naming</depends>
+      <depends>jboss:service=TransactionManager</depends>
+
+      <attribute name="TransactionManagerLookupClass">org.jboss.cache.transaction.GenericTransactionManagerLookup</attribute>
+      <attribute name="IsolationLevel">READ_COMMITTED</attribute>
+      <attribute name="CacheMode">REPL_SYNC</attribute>
+      <attribute name="UseReplQueue">false</attribute>
+      <attribute name="ReplQueueInterval">0</attribute>
+      <attribute name="ReplQueueMaxElements">0</attribute>
+      <attribute name="ClusterName">JBossCache-Cluster</attribute>
+      <attribute name="ClusterConfig">
+         <config>
+            <UDP mcast_addr="229.10.10.10"
+                 mcast_port="45599"
+                 tos="8"
+                 ucast_recv_buf_size="20000000"
+                 ucast_send_buf_size="640000"
+                 mcast_recv_buf_size="25000000"
+                 mcast_send_buf_size="640000"
+                 loopback="false"
+                 discard_incompatible_packets="true"
+                 max_bundle_size="64000"
+                 max_bundle_timeout="30"
+                 use_incoming_packet_handler="true"
+                 use_outgoing_packet_handler="false"
+                 ip_ttl="2"
+                 down_thread="false" up_thread="false"
+                 bind_addr="127.0.0.1"
+                 enable_bundling="false"/>
+            <PING timeout="2000"
+                  down_thread="false" up_thread="false" num_initial_members="3"/>
+            <MERGE2 max_interval="100000"
+                    down_thread="false" up_thread="false" min_interval="20000"/>
+            <FD_SOCK down_thread="false" up_thread="false"/>
+            <FD timeout="10000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
+            <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
+            <pbcast.NAKACK max_xmit_size="60000"
+                           use_mcast_xmit="false" gc_lag="0"
+                           retransmit_timeout="300,600,1200,2400,4800"
+                           down_thread="false" up_thread="false"
+                           discard_delivered_msgs="true"/>
+            <UNICAST timeout="300,600,1200,2400,3600"
+                     down_thread="false" up_thread="false"/>
+            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
+                           down_thread="false" up_thread="false"
+                           max_bytes="400000"/>
+            <pbcast.GMS print_local_addr="true" join_timeout="3000" use_flush="true" flush_timeout="3000"
+                        down_thread="false" up_thread="false"
+                        join_retry_timeout="2000" shun="false"
+                        view_bundling="true"/>
+            <FC max_credits="2000000" down_thread="false" up_thread="false"
+                min_threshold="0.20"/>
+            <FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
+            <!-- <pbcast.STREAMING_STATE_TRANSFER down_thread="false" up_thread="false"
+                                         use_flush="true" flush_timeout="3000" use_reading_thread="true"/> -->
+            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="true" flush_timeout="3000"/>
+            <pbcast.FLUSH down_thread="false" up_thread="false" timeout="8000" auto_flush_conf="false"/>
+         </config>
+      </attribute>
+      <attribute name="FetchInMemoryState">false</attribute>
+      <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+      <attribute name="SyncReplTimeout">60000</attribute>
+      <attribute name="LockAcquisitionTimeout">10000</attribute>
+      <attribute name="EvictionPolicyConfig">
+      </attribute>
+
+      <attribute name="CacheLoaderConfiguration">
+      </attribute>
+
+      <attribute name="UseRegionBasedMarshalling">false</attribute>
+
+      <!-- Buddy Replication config -->
+      <attribute name="BuddyReplicationConfig">
+         <config>
+            <buddyReplicationEnabled>true</buddyReplicationEnabled>
+            <buddyLocatorClass>org.jboss.cache.buddyreplication.NextMemberBuddyLocator</buddyLocatorClass>
+            <buddyLocatorProperties>
+               numBuddies = 1
+               ignoreColocatedBuddies = true
+            </buddyLocatorProperties>
+
+            <buddyPoolName>myBuddyPoolReplicationGroup</buddyPoolName>
+
+            <buddyCommunicationTimeout>2000</buddyCommunicationTimeout>
+
+
+            <autoDataGravitation>false</autoDataGravitation>
+
+            <dataGravitationRemoveOnFind>true</dataGravitationRemoveOnFind>
+
+            <dataGravitationSearchBackupTrees>true</dataGravitationSearchBackupTrees>
+
+         </config>
+      </attribute>
+
+   </mbean>
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-sync.xml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-sync.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/conf/pess-repl-sync.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<server>
+
+   <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
+
+
+   <mbean code="org.jboss.cache.CacheImpl"
+          name="jboss.cache:service=TreeCache">
+
+      <depends>jboss:service=Naming</depends>
+      <depends>jboss:service=TransactionManager</depends>
+
+      <attribute name="TransactionManagerLookupClass">org.jboss.cache.transaction.GenericTransactionManagerLookup</attribute>
+      <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
+      <attribute name="CacheMode">REPL_SYNC</attribute>
+      <attribute name="UseReplQueue">false</attribute>
+      <attribute name="ReplQueueInterval">0</attribute>
+      <attribute name="ReplQueueMaxElements">0</attribute>
+      <attribute name="ClusterName">JBossCache-Cluster</attribute>
+      <attribute name="ClusterConfig">
+         <config>
+            <UDP mcast_addr="229.10.10.10"
+                 mcast_port="45599"
+                 tos="8"
+                 ucast_recv_buf_size="20000000"
+                 ucast_send_buf_size="640000"
+                 mcast_recv_buf_size="25000000"
+                 mcast_send_buf_size="640000"
+                 loopback="false"
+                 discard_incompatible_packets="true"
+                 max_bundle_size="64000"
+                 max_bundle_timeout="30"
+                 use_incoming_packet_handler="true"
+                 use_outgoing_packet_handler="false"
+                 ip_ttl="2"
+                 down_thread="false" up_thread="false"
+                 bind_addr="127.0.0.1"
+                 enable_bundling="false"/>
+            <PING timeout="2000"
+                  down_thread="false" up_thread="false" num_initial_members="3"/>
+            <MERGE2 max_interval="100000"
+                    down_thread="false" up_thread="false" min_interval="20000"/>
+            <FD_SOCK down_thread="false" up_thread="false"/>
+            <FD timeout="10000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
+            <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
+            <pbcast.NAKACK max_xmit_size="60000"
+                           use_mcast_xmit="false" gc_lag="0"
+                           retransmit_timeout="300,600,1200,2400,4800"
+                           down_thread="false" up_thread="false"
+                           discard_delivered_msgs="true"/>
+            <UNICAST timeout="300,600,1200,2400,3600"
+                     down_thread="false" up_thread="false"/>
+            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
+                           down_thread="false" up_thread="false"
+                           max_bytes="400000"/>
+            <pbcast.GMS print_local_addr="true" join_timeout="3000" use_flush="true" flush_timeout="3000"
+                        down_thread="false" up_thread="false"
+                        join_retry_timeout="2000" shun="false"
+                        view_bundling="true"/>
+            <FC max_credits="2000000" down_thread="false" up_thread="false"
+                min_threshold="0.20"/>
+            <FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
+            <!-- <pbcast.STREAMING_STATE_TRANSFER down_thread="false" up_thread="false"
+                                         use_flush="true" flush_timeout="3000" use_reading_thread="true"/> -->
+            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="true" flush_timeout="3000"/>
+            <pbcast.FLUSH down_thread="false" up_thread="false" timeout="8000" auto_flush_conf="false"/>
+         </config>
+      </attribute>
+      <attribute name="FetchInMemoryState">false</attribute>
+      <attribute name="InitialStateRetrievalTimeout">15000</attribute>
+      <attribute name="SyncReplTimeout">60000</attribute>
+      <attribute name="LockAcquisitionTimeout">10000</attribute>
+      <attribute name="EvictionPolicyConfig">
+      </attribute>
+
+      <attribute name="CacheLoaderConfiguration">
+      </attribute>
+
+      <attribute name="UseRegionBasedMarshalling">false</attribute>
+   </mbean>
+</server>

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/jbosscache-2.0.0.iml
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/jbosscache-2.0.0.iml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/jbosscache-2.0.0.iml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-serialization.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jcip-annotations.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/trove.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-common-core.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jbosscache.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jgroups.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jboss-j2ee.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="file://$MODULE_DIR$/conf" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module" module-name="Framework" />
+    <orderEntryProperties />
+  </component>
+</module>
+

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/concurrent.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/concurrent.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jboss-common-core.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jboss-common-core.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jboss-j2ee.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jboss-j2ee.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jbosscache.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jbosscache.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jcip-annotations.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jcip-annotations.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jgroups.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/jgroups.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/trove.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/lib/trove.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/src/org/cachebench/cachewrappers/JBossCache200Wrapper.java
===================================================================
--- cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/src/org/cachebench/cachewrappers/JBossCache200Wrapper.java	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/jbosscache-2.0.0/src/org/cachebench/cachewrappers/JBossCache200Wrapper.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,56 @@
+package org.cachebench.cachewrappers;
+
+import org.cachebench.CacheWrapper;
+import org.jboss.cache.Cache;
+import org.jboss.cache.DefaultCacheFactory;
+import org.jboss.cache.Fqn;
+
+import java.util.Properties;
+
+public class JBossCache200Wrapper implements CacheWrapper
+{
+   private Cache cache;
+
+   public void init(Properties parameters) throws Exception
+   {
+      cache = DefaultCacheFactory.getInstance().createCache(parameters.getProperty("config"));
+   }
+
+   public void setUp() throws Exception
+   {
+   }
+
+   public void tearDown() throws Exception
+   {
+      cache.stop();
+   }
+
+   public void put(Object key, Object value) throws Exception
+   {
+      // make sure the threads don't conflict!
+      Fqn f = new Fqn("test", key);
+      cache.put(f, key, value);
+   }
+
+   public Object get(Object key) throws Exception
+   {
+      Fqn f = new Fqn("test", key);
+      return cache.get(f, key);
+   }
+
+   public void empty() throws Exception
+   {
+      cache.removeNode(Fqn.ROOT);
+   }
+
+   public int getNumMembers()
+   {
+      return cache.getMembers().size();
+   }
+
+   public String getInfo()
+   {
+      return "Num direct children: " + cache.getRoot().getChildren().size();
+   }
+
+}

Added: cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/.cvsignore
===================================================================
--- cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/.cvsignore	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/.cvsignore	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1 @@
+local

Added: cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/README.txt
===================================================================
--- cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/README.txt	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/lib/README.txt	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1 @@
+Please download Terracotta from http://www.terracotta.org/confluence/display/orgsite/Download and place jars here.
\ No newline at end of file

Added: cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/src/org/cachebench/cachewrappers/TerracottaWrapper.java
===================================================================
--- cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/src/org/cachebench/cachewrappers/TerracottaWrapper.java	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/src/org/cachebench/cachewrappers/TerracottaWrapper.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,56 @@
+package org.cachebench.cachewrappers;
+
+import org.cachebench.CacheWrapper;
+
+import java.util.Properties;
+import java.util.Map;
+
+/**
+ * Cache wrapper for Terracotta 2.3.0
+ *
+ * Using the terracotta-cache package on http://www.terracotta.org/confluence/display/labs/Terracotta+Cache
+ *
+ * @author <a href="manik at jboss.org">Manik Surtani</a>
+ */
+public class TerracottaWrapper implements CacheWrapper
+{
+   // Since terracotta 
+   private Map cache;
+   public void init(Properties parameters) throws Exception
+   {
+      //To change body of implemented methods use File | Settings | File Templates.
+   }
+
+   public void setUp() throws Exception
+   {
+   }
+
+   public void tearDown() throws Exception
+   {
+   }
+
+   public void put(Object key, Object value) throws Exception
+   {
+      //To change body of implemented methods use File | Settings | File Templates.
+   }
+
+   public Object get(Object key) throws Exception
+   {
+      return null;  //To change body of implemented methods use File | Settings | File Templates.
+   }
+
+   public void empty() throws Exception
+   {
+      //To change body of implemented methods use File | Settings | File Templates.
+   }
+
+   public int getNumMembers()
+   {
+      return 0;  //To change body of implemented methods use File | Settings | File Templates.
+   }
+
+   public String getInfo()
+   {
+      return null;  //To change body of implemented methods use File | Settings | File Templates.
+   }
+}

Added: cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/terracotta-2.3.0.iml
===================================================================
--- cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/terracotta-2.3.0.iml	                        (rev 0)
+++ cache-bench-fwk/trunk/cache-products/terracotta-2.3.0/terracotta-2.3.0.iml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/tomcat-juli-6.0.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jmxri-1.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/appframe-1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/tcconfigV2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/xbean_xpath-2.1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/slf4j-nop-1.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/xml-apis-1.3.02.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/commons-collections-3.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jline-0.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/commons-codec-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/tcconfig-xmlbeans-generated.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jfreechart-1.0.0x.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/tc.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jmxremote_optional-1.0.1_04-b58.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jetty-util-6.0.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/xml-resolver-1.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jetty-6.0.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/bsh-2.0b4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jmxremote-1.0.1_04.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/trove-1.1b5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/commons-io-1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/knopflerfish-2.0.1-tc.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/commons-httpclient-3.0.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/antlr-2.7.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/catalina-tribes-6.0.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/servlet-api-2.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/xbean-2.1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/commons-lang-2.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/tcconfigV1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/commons-logging-1.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/treemap-tc-1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/commons-cli-1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/xmlbeans-jsr173_1.0_api.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/log4j-1.2.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/xmlpublic-2.1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/concurrent-1.3.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/je-3.2.13.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/jmxtools-1.2_8.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module" module-name="Framework" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="file://$MODULE_DIR$/conf" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntryProperties />
+  </component>
+</module>
+

Added: cache-bench-fwk/trunk/conf/cachebench.xml
===================================================================
--- cache-bench-fwk/trunk/conf/cachebench.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/conf/cachebench.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,73 @@
+<!--
+	Configures and controls the behaviour of the cache benchmarking framework.
+
+	sampleSize - this is the number of putsgets to be performed, an average is used in metrics.
+	gcBetweenTestsEnabled - if true, the framework pauses between each test and requests System.gc() - use this if you find yourself running out of mem!
+	sleepBetweenTests - ms to sleep between tests.  useful to allow the JVM some time to do a gc
+	emptyCacheBetweenTests - again, use if you're running out of mem.
+	numThreads - the number of executor threads to use to perform the required number of operations.  
+-->
+<cachebench sampleSize="100000" gcBetweenTestsEnabled="true" sleepBetweenTests="1000" emptyCacheBetweenTests="true" numThreads="10">
+
+	<!-- Each testcase represents either a single configuration or a cacheing product.
+		  
+		 For example, WhirlyCache would be one test case. JBossCache-standalone could be another, JBossCache-replicated could be yet another 
+		 
+		 See the javadoc for org.cachebench.CacheWrapper for the cacheWrapper property
+		 -->
+
+   <!--
+      Note that if you are using REPLICATED tests, using the "ant runSlave" command, you can only run one test at a time.
+      Otherwise, if you are using the test in standalone mode (testing a LOCAL cache), you can add multiple "testcase" elements.
+   -->
+
+   <!-- Make SURE you read the docs - especially when using Terracotta as this involves some additional setup -->
+
+   <!-- Legacy stuff -->
+   <!--<testcase name="JBossCache140-Pessimistic-REPL_SYNC" cacheWrapper="org.cachebench.cachewrappers.JBossCacheWrapper">-->
+   <!--<testcase name="EHCache124-replicated" cacheWrapper="org.cachebench.cachewrappers.EHCacheWrapper">-->
+   <!--<testcase name="Terracotta230" cacheWrapper="org.cachebench.cachewrappers.TerracottaWrapper">-->
+
+
+    <!--<testcase name="JBossCache2x-Pessimistic-REPL_SYNC_BR" cacheWrapper="org.cachebench.cachewrappers.JBossCache200Wrapper">-->
+    <!--<testcase name="JBossCache2x-Pessimistic-REPL_ASYNC" cacheWrapper="org.cachebench.cachewrappers.JBossCache200Wrapper">-->
+    <testcase name="Coherence-3.x" cacheWrapper="org.cachebench.cachewrappers.CoherenceWrapper">
+
+      <!--
+         * The "name" attrib is just used for display in the reports.
+         * You can write your own custom testClass.
+         * weight is currently unused.
+      -->
+      <test name="Strings" testClass="org.cachebench.tests.StringTest" weight="2.0" />
+
+       <!--
+      <test name="Primitive Wrappers" testClass="org.cachebench.tests.PrimitiveTest" weight="1.0" />
+		<test name="Custom Class Types" testClass="org.cachebench.tests.CustomClassTest" weight="1.0" />
+		<test name="Custom Subclasses of Abstracts" testClass="org.cachebench.tests.SubclassTest" weight="1.5" />
+		<test name="Custom Types With Transients" testClass="org.cachebench.tests.TransientTest" weight="1.0" />
+		<test name="Custom Types With Statics" testClass="org.cachebench.tests.StaticsTest" weight="1.5" />
+		<test name="Custom Types With Associations" testClass="org.cachebench.tests.AssociationsTest" weight="2.0" />
+		-->
+
+		<!-- arbitrary params may be passed into the cacheWrapper implementation, typically used to pass in config files for the cache product. -->
+      <!-- JBoss Cache 1.4.x and 2.x -->
+      <param name="config" value="pess-repl-sync-br.xml" />       
+      <!--<param name="config" value="pess-repl-async.xml" />-->
+
+      <!-- EHCache -->
+      <!--<param name="config" value="ehcache-repl-sync.xml" />-->
+
+      <!-- Terracotta -->
+      <!--<param name="config" value="tc-config-pojo.xml" />-->
+   </testcase>
+
+
+	<!-- Currently we only have a CSVReportGenerator.  See javadocs for org.cachebench.reportgenerators.ReportGenerator for writing your
+		own report generators such as XML generators, graphic generators, etc -->
+
+   <!-- The CSV report generated can be plugged in to a spreadsheet to generate graphs, etc. -->
+   <report
+		outputFile="performance.csv"
+		generator="org.cachebench.reportgenerators.CSVReportGenerator" />
+		
+</cachebench>

Added: cache-bench-fwk/trunk/conf/log4j.xml
===================================================================
--- cache-bench-fwk/trunk/conf/log4j.xml	                        (rev 0)
+++ cache-bench-fwk/trunk/conf/log4j.xml	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<!-- The Log4j Configuration -->
+<!-- $Id: log4j.xml,v 1.10 2007/05/18 14:32:09 msurtani Exp $ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+    <!-- The list of appenders -->
+    <!-- The rolling file appender -->
+    <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
+        <param name="File" value="cachebench.log"/>
+        <param name="Append" value="false"/>
+        <param name="Threshold" value="DEBUG"/>
+        <param name="MaxFileSize" value="10480KB"/>
+        <param name="MaxBackupIndex" value="3"/>
+        <layout class="org.apache.log4j.PatternLayout">
+            <!-- The default pattern: Date Priority [Category] Message\n -->
+            <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+            <!--param name="ConversionPattern" valye="%p %t %c - %m%n"/-->
+        </layout>
+    </appender>
+
+    <!-- The console appender -->
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <param name="Threshold" value="TRACE"/>
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </layout>
+    </appender>
+
+    <!-- The list of Categories-->
+    <category name="CacheException" additivity="false">
+        <priority value="ERROR"/>
+        <appender-ref ref="FILE"/>
+    </category>
+
+    <category name="org.apache" additivity="false">
+        <priority value="ERROR"/>
+        <appender-ref ref="FILE"/>
+    </category>
+
+    <category name="org.cachebench" additivity="false">
+        <priority value="DEBUG"/>
+        <appender-ref ref="FILE"/>
+    </category>
+
+    <category name="org.cachebench.tests" additivity="false">
+        <priority value="INFO"/>
+        <appender-ref ref="CONSOLE"/>
+    </category>
+
+    <category name="net.sf.ehcache" additivity="false">
+        <priority value="DEBUG"/>
+        <appender-ref ref="FILE"/>
+    </category>
+
+   <category name="com.tc" additivity="false">
+        <priority value="DEBUG"/>
+        <appender-ref ref="FILE"/>
+    </category>
+
+   <category name="org.tc" additivity="false">
+        <priority value="DEBUG"/>
+        <appender-ref ref="FILE"/>
+    </category>
+
+   <category name="org.jboss" additivity="false">
+        <priority value="ERROR"/>
+        <appender-ref ref="FILE"/>
+    </category>
+
+    <!-- Here goes the root -->
+    <root>
+        <priority value ="ERROR" />
+        <appender-ref ref="FILE" />
+    </root>
+
+</log4j:configuration>

Added: cache-bench-fwk/trunk/doc/CacheReport.txt
===================================================================
--- cache-bench-fwk/trunk/doc/CacheReport.txt	                        (rev 0)
+++ cache-bench-fwk/trunk/doc/CacheReport.txt	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,50 @@
+This document describes the report generated by the Bech marker.
+
+The Release 1 of the tool only supports a CSV report with the following fields.
+
+TEST NAME
+The name of the cache product that has been tested. This maps to the testcase/name of the cachebench.xml (The cach bechmarker configuration file).
+
+TEST DATE
+The time stamp of a test that has been executed.
+
+TEST TYPE
+The test that has been executed. This maps to the testcase/test/name of the cachebench.xml (The cach bechmarker configuration file).
+
+MEAN PUT TIME
+The statistical average on the PUT time on specified test. The average is based on the number of tests specified in the cachebench/sampleSize of the cachebench.xml (The cach bechmarker configuration file).
+This statistic would help you identify the average time a prodcut takes to perform a specific action for a given number of iterations and an anticipated load.
+
+MEAN GET TIME
+The statistical average on the GET time on specified test. The average is based on the number of tests specified in the cachebench/sampleSize of the cachebench.xml (The cach bechmarker configuration file).
+This statistic would help you identify the average time a prodcut takes to perform a specific action for a given number of iterations and an anticipated load.
+
+MEDIAN PUT TIME
+The mid point of the PUT actions done on a specific test. The number of puts are based on the number specified in the cachebench/sampleSize of the cachebench.xml (The cach bechmarker configuration file).
+This statistic would give a sense of the mid point of the series of times a particular action took on a specific test.
+
+MEDIAN GET TIME
+The mid point of the GET actions done on a specific test. The number of puts are based on the number specified in the cachebench/sampleSize of the cachebench.xml (The cach bechmarker configuration file).
+This statistic would give a sense of the mid point of the series of times a particular action took on a specific test.
+
+STANDARD DEVIATION PUT TIME
+This is the stadard deviation of the times taken to perform the PUT operation for a specific test.
+This statistic helps understand the variability of the diffrent times taken to perform the PUT operations for the test.
+With a high standard deviation it shows that the the variability between the times are high, and by that gives a sense of how well the test has performed with growing data.
+
+STANDARD DEVIATION GET TIME
+This is the stadard deviation of the times taken to perform the GET operation for a specific test.
+This statistic helps understand the variability of the diffrent times taken to perform the GET operations for the test.
+With a high standard deviation it shows that the the variability between the times are high, and by that gives a sense of how well the test has performed with growing data.
+
+MAX PUT TIME
+This is the maximum PUT time that a test has taken during its iteration of actions. The iterations depend on the cachebench/sampleSize specifed in the cachebench.xml (The cach bechmarker configuration file).
+
+MAX GET TIME
+This is the maximum GET time that a test has taken during its iteration of actions. The iterations depend on the cachebench/sampleSize specifed in the cachebench.xml (The cach bechmarker configuration file).
+
+MIN PUT TIME
+This is the minimum PUT time that a test has taken during its iteration of actions. The iterations depend on the cachebench/sampleSize specifed in the cachebench.xml (The cach bechmarker configuration file).
+
+MAX GET TIME
+This is the minimum GET time that a test has taken during its iteration of actions. The iterations depend on the cachebench/sampleSize specifed in the cachebench.xml (The cach bechmarker configuration file).

Added: cache-bench-fwk/trunk/doc/Documentation.txt
===================================================================
--- cache-bench-fwk/trunk/doc/Documentation.txt	                        (rev 0)
+++ cache-bench-fwk/trunk/doc/Documentation.txt	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,101 @@
+Wrappers:
+=========
+The goal of the CacheBenchFwk is to provide a harness which can test individual caching products in a repeatable way and
+provide statistics to bechmark different caching products
+
+The framework is a simple set of wrappers around each cache product, each wrapper implementing the org.cachebench.
+CacheWrapper interface, to provide the framework with a standard way of accessing the cache's functionality.
+Some wrappers are in the org.cachebench.cachewrappers package.  We expect to have more wrappers here for specific
+caching products, and expect end users to create their own cache wrappers if necessary.
+
+A wrapper could be implemented in two ways:
+ - Serializable
+ - Non-serializable
+
+Serializable:
+Certain cache products, provide only serializable values to be processed in cache. Thus, implementing
+a wrapper for such cache product, the SerializableCacheWrapper needs to be implemented.
+
+Non-serializable:
+For Cache products that allow values which are non-serializable to be processed in cache, the CacheWrapper
+should be implemented.
+
+The cachebench.xml (The configuration file for the framework)
+=============================================================
+The CacheBenchFwk is configured, entirely on the cachebench.xml. The xml provides the means to handle:
+ - The tests that needs to be performed, and what product should be tested.
+ - Provides additional information for the framework such as periodic breaks in the cache operations, cache size etc.
+ - Provides the means in configurating the report
+
+Following are the details of the different nodes and attributes of the cachebench.xml:
+<cachebench>
+This is the root node of the xml.
+:sampleSize
+  - Integer value
+  - This indicates the maximum size of the cahce to be tested.
+:gcBetweenTestsEnabled
+
+:sleepBetweenTests
+
+:emptyCacheBetweenTests
+
+<testcase>
+This node holds the information about the tests that needs to be executed. It would contain a collection of <test> nodes
+(which would explained further) and general test information that would describe the type of test that should be executed.
+:name
+  - String value
+  - This holds the name of the product under test
+:cacheWrapper
+  - String value
+  - This holds the fully qualified class name of the wrapper of the product under test (Ref: Documentation on wrappers)
+<test>
+This node defines the individual test to be executed. The name and class of the test would be indicated here, for the
+framework to execute them.
+:name
+  - String value
+  - The name of the test to be executed.
+:testClass
+  - String value
+  - The fully qualified class name of the test class which will be executed by the framework. (Ref: Documentation on Test types)
+:weight
+  - Double value
+  - This is the importance each test would be given by the framework. This is yet to be implemented TODO.
+<test>
+<param>
+This node gives the means in adding any configurable attributes that might be needed by different cache products.
+:name
+  - String value
+  - The name of the configurable parameter
+:value
+  - String value
+  - The value of the configurable parameter
+</param>
+</testcase>
+
+<report>
+This node defines the report that would be generated by the framework once the tests are executed.
+:outputFile
+  - String value
+  - The file name of the report to be generated. The full path needs to be indicated here.
+:generator
+  - String value
+  - The fully qualified class name of the report warpper used for the report generation purpose (Ref: Documentation on Reports)
+</report>
+</cachebench>
+
+Running clustered tests
+=======================
+
+There is some rudimentary support for clustered tests at the moment, with some limitations:
+
+1.  Only master/slave type tests are supported, where one node performs all the cache puts and gets and performance is
+measured on this master node.  The other nodes just act as dummies which participate in the cluster by acting as recipients
+for network traffic.
+
+2.  Only one <testcase> element at a time is supported if using this setup.  Slaves will barf if configured to deal with
+more than one test case.
+
+3.  Slaves need to be started manually on each host using the runSlave.sh script.
+
+4.  Master nodes have no "intelligence" to wait for a specified number of slaves.  This needs to be done manually, by
+starting the required number of slaves before starting the master.

Added: cache-bench-fwk/trunk/doc/ExceptionHandling.txt
===================================================================
--- cache-bench-fwk/trunk/doc/ExceptionHandling.txt	                        (rev 0)
+++ cache-bench-fwk/trunk/doc/ExceptionHandling.txt	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,15 @@
+Exception Handling in the CacheBenchMarking Framework:
+
+This piece of documentation captures the exception handling mechanism in the framework.
+In shows whats in the respective release. Unless otherwise the current release of the framework doesn't have any specific
+notes in this documentation, the notes for previous release is applicable to the current.
+
+Release 1:
+The only exception dealt with within the framework is the java.lang.Exception.
+Given the avaible functionality and features there hasn't been any need to add framework specific exceptions. We'd get to framework
+specific exception only if the needs arises.
+All Exceptions are handled at only one level to avoid catching-rethrowing complexities. Thus, the CacheBenchMarker, which is the entry
+point to the framework hanldes all expcetions and logs them in the relevant log files and appends them to the report as required.
+All exceptions with their detailed stack trace are logged in the application's log file defined in the log4j configuration file.
+However, the exceptions occured while executing tests, are tracked separately as test results and added to the report. Also the exceptions
+that are generated by the external tasks that take place during the test execution are reported as foot notes to the report.

Added: cache-bench-fwk/trunk/doc/TODO.txt
===================================================================
--- cache-bench-fwk/trunk/doc/TODO.txt	                        (rev 0)
+++ cache-bench-fwk/trunk/doc/TODO.txt	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,22 @@
+$Id: TODO.txt,v 1.1 2007/03/13 16:25:15 msurtani Exp $
+The following lists out the featues in their order of priority (High priority --> Low)
+
+1. Add the cache size to the report. Cache size would be measured as the number of objects in the cache initially.
+This would give a method of comparing the put and get times respective to the number of objects in the cache. The number
+of objects would be hard-coded when this feature is completed.
+
+2. Add object count in to the configuration file
+This would give the user a method of configuring the number of objects that he/she wishes to see going into the cache.
+
+3. A way to customize a complex object that coule be used as the object that goes in and out to the cache.
+This is to give the user a method of creating his/her own complex object declared in XML, which he could use to be used
+in the above load test. The user can indicate the number of attributes and type of the attributes for the field.
+Thus giving the user define the test objects apart from the default test objects we have.
+
+4. Tag the gcBetweenTestsEnabled with a object count, so that different VM parameters coule be tried out when
+benchmarking the chaching systems.
+
+5. Add a feature in the report that shows the object size in bytes.
+This would need some work.
+
+6.  Proper agent-based replicated tests where each node in the cluster is stressed.

Added: cache-bench-fwk/trunk/doc/TestTypes.txt
===================================================================
--- cache-bench-fwk/trunk/doc/TestTypes.txt	                        (rev 0)
+++ cache-bench-fwk/trunk/doc/TestTypes.txt	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,46 @@
+Test Types:
+===========
+The framework provides some simple tests, in org.cachewrapper.tests.  Again, we expect users to write their own tests 
+such as to mimic their cache usage scenarios to provide a useful benchmark of cache products, based on their usage scenarios.
+
+Following is a list of Tests provided by the Cache Benchmark Framework:
+
+- String Test
+This is a simple test of adding and getting java.lang.String objects in and out of the cache.
+
+- Primitive Test
+This is a simple test of adding and getting java.lang.Integer objects in and out of the cache.
+
+- Custom Class Test
+This is a test on the time taken to add and get a custom object to and from the cache.
+There are two differnet custom objects that could be used based on the wrapper in use. If the wrapper is a serializable
+wrapper, then the SerializableCustomType object would be used. If the wrapper is not a serializable wrapper, then
+CustomType object would be used.
+Refer JavaDocs for SerializableCustomType and CustomType class structures.
+
+- Associations Test
+This is a test on the time taken to add and get a custom object to and from the cache with aggregated objects within it.
+There are two differnet custom objects that could be used based on the wrapper in use. If the wrapper is a serializable
+wrapper, then the SerializableCustomTypeWithAssocs object would be used. If the wrapper is not a serializable wrapper, then
+CustomTypeWithAssocs object would be used.
+Refer JavaDocs for SerializableCustomTypeWithAssocs and CustomTypeWithAssocs class structures.
+
+- Statics Test
+This is a test on the time taken to add and get a custom object to and from the cache with aggregated static objects within it.
+There are two differnet custom objects that could be used based on the wrapper in use. If the wrapper is a serializable
+wrapper, then the SerializableCustomTypeWithStatics object would be used. If the wrapper is not a serializable wrapper, then
+CustomTypeWithStatics object would be used.
+Refer JavaDocs for SerializableCustomTypeWithStatics and CustomTypeWithStatics class structures.
+
+- Subclass Test
+This is a test on the time taken to add and get a object to and from the cache with. The object under test in this instance,
+would be a sub class. Which means it would be inheriting from a parent and would have a additional attributes which will go in the Cache.
+There two different sub class tests that would be done based on the wrapper in use. If the wrapper is a Serializable,
+then the SerializableCustomTypeSubclassOfAbstract object would be used. If the wrapper is not serializable, then
+the CustomTypeSubclassOfAbstract object would be used.
+
+- Transient Test
+This is a test on the time taken to add and get a object to and from the cache with Transient objects. The object under test
+in this instance would be a Object which consists of transient objects. The type of object under test would also differ based
+on the wrapper in use. Thus if the wrapper in use is Serializable, the SerializableCustomTypeWithTransient object would be used.
+Else if the wrapper is not serializable, the CustomTypeWithTransient object would be used.

Added: cache-bench-fwk/trunk/lib/commons-beanutils.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/lib/commons-beanutils.jar
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/lib/commons-digester.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/lib/commons-digester.jar
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/lib/commons-logging.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/lib/commons-logging.jar
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/lib/commons-math-1.0.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/lib/commons-math-1.0.jar
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/lib/log4j.jar
===================================================================
(Binary files differ)


Property changes on: cache-bench-fwk/trunk/lib/log4j.jar
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + application/octet-stream

Added: cache-bench-fwk/trunk/src/org/cachebench/CacheBenchmarkRunner.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/CacheBenchmarkRunner.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/CacheBenchmarkRunner.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,352 @@
+package org.cachebench;
+
+
+import org.apache.commons.digester.Digester;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.cachebench.config.Configuration;
+import org.cachebench.config.Report;
+import org.cachebench.config.TestCase;
+import org.cachebench.config.TestConfig;
+import org.cachebench.reportgenerators.ReportGenerator;
+import org.cachebench.tests.CacheTest;
+import org.cachebench.utils.Instantiator;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CacheBenchmarkRunner.java,v 1.1 2007/05/17 07:37:44 msurtani Exp $
+ */
+public class CacheBenchmarkRunner
+{
+
+   private Configuration conf;
+   private Log logger = LogFactory.getLog("org.cachebench.CacheBenchmarkRunner");
+   private Log errorLogger = LogFactory.getLog("CacheException");
+
+   public static void main(String[] args)
+   {
+      String conf = null;
+      if (args.length == 1)
+      {
+         conf = args[0];
+      }
+      if (conf != null && conf.toLowerCase().endsWith(".xml"))
+      {
+         new CacheBenchmarkRunner(conf);
+      }
+      else
+      {
+         new CacheBenchmarkRunner();
+      }
+   }
+
+   private CacheBenchmarkRunner()
+   {
+      this("cachebench.xml");
+   }
+
+   private CacheBenchmarkRunner(String s)
+   {
+      // first, try and find the configuration on the filesystem.
+      URL confFile = findOnFS(s);
+      if (confFile == null)
+      {
+         confFile = findInClasspath(s);
+      }
+      if (confFile == null)
+      {
+         logger.warn("Unable to locate a configuration file; Application terminated");
+      }
+      else
+      {
+         if (logger.isDebugEnabled()) logger.debug("Using configuration " + confFile);
+         logger.debug("Parsing configuration");
+         try
+         {
+            conf = parseConfiguration(confFile);
+            logger.info("Starting Benchmarking....");
+            List<TestResult> results = runTests(); // Run the tests from this point.
+            if (results != null && results.size() != 0)
+            {
+               generateReports(results); // Run the reports...
+            }
+            else
+            {
+               logger.warn("No Results to be reported");
+            }
+            logger.info("Benchmarking Completed.  Hope you enjoyed using this!");
+         }
+         catch (Exception e)
+         {
+            logger.warn("Unable to parse configuration file " + confFile + ". Application terminated");
+            errorLogger.fatal("Unable to parse configuration file " + confFile, e);
+         }
+      }
+   }
+
+   private Configuration parseConfiguration(URL url) throws Exception
+   {
+      Digester digester = new Digester();
+      // set up the digester rules.
+      digester.setValidating(false);
+      digester.addObjectCreate("cachebench", "org.cachebench.config.Configuration");
+      digester.addSetProperties("cachebench");
+      digester.addObjectCreate("cachebench/testcase", "org.cachebench.config.TestCase");
+      digester.addSetProperties("cachebench/testcase");
+
+      digester.addObjectCreate("cachebench/testcase/test", "org.cachebench.config.TestConfig");
+      digester.addSetProperties("cachebench/testcase/test");
+      digester.addSetNext("cachebench/testcase/test", "addTest", "org.cachebench.config.TestConfig");
+
+      digester.addObjectCreate("cachebench/testcase/param", "org.cachebench.config.NVPair");
+      digester.addSetProperties("cachebench/testcase/param");
+
+      digester.addSetNext("cachebench/testcase/param", "addParam", "org.cachebench.config.NVPair");
+      digester.addSetNext("cachebench/testcase", "addTestCase", "org.cachebench.config.TestCase");
+
+      digester.addObjectCreate("cachebench/report", "org.cachebench.config.Report");
+      digester.addSetProperties("cachebench/report");
+      digester.addSetNext("cachebench/report", "addReport", "org.cachebench.config.Report");
+      return (Configuration) digester.parse(url.openStream());
+   }
+
+   /**
+    * Executes each test case and returns the result.
+    *
+    * @return The Array of TestResult objects with the results of the tests.
+    */
+   private List<TestResult> runTests()
+   {
+      List<TestResult> results = new ArrayList<TestResult>();
+      for (TestCase test : conf.getTestCases())
+      {
+         CacheWrapper cache;
+         try
+         {
+            cache = getCacheWrapperInstance(test);
+            if (cache != null)
+            {
+               cache.init(test.getParams());
+               cache.setUp();
+               List<TestResult> resultsForCache = runTestsOnCache(cache, test);
+               shutdownCache(cache);
+               results.addAll(resultsForCache);
+            }
+         }
+         catch (Exception e)
+         {
+            logger.warn("Unable to Initialize or Setup the Cache - Not performing any tests", e);
+            errorLogger.error("Unable to Initialize or Setup the Cache: " + test.getCacheWrapper(), e);
+            errorLogger.error("Skipping this test");
+         }
+      }
+      return results;
+   }
+
+   /**
+    * Peforms the necessary external tasks for cache benchmarking.
+    * These external tasks are defined in the cachebench.xml and would
+    * be executed against the cache under test.
+    *
+    * @param cache      The CacheWrapper for the cache in test.
+    * @param testResult The TestResult of the test to which the tasks are executed.
+    */
+   private TestResult executeTestTasks(CacheWrapper cache, TestResult testResult)
+   {
+      try
+      {
+         if (conf.isEmptyCacheBetweenTests())
+         {
+            cache.empty();
+         }
+         if (conf.isGcBetweenTestsEnabled())
+         {
+            System.gc();
+            Thread.sleep(conf.getSleepBetweenTests());
+         }
+      }
+      catch (InterruptedException e)
+      {
+         // Nothing doing here...
+      }
+      catch (Exception e)
+      {
+         // The Empty process of the cache failed. Add a foot note for the TestResult here.
+         testResult.setFootNote("The Cache Empty process failed after test case: " + testResult.getTestName() + " : " + testResult.getTestType());
+         errorLogger.error("The Cache Empty process failed after test case : " + testResult.getTestName() + ", " + testResult.getTestType(), e);
+      }
+
+      return testResult;
+   }
+
+   private List<TestResult> runTestsOnCache(CacheWrapper cache, TestCase testCase)
+   {
+      List<TestResult> results = new ArrayList<TestResult>();
+      for (TestConfig testConfig: testCase.getTests())
+      {
+         CacheTest testConfigClass = getCacheTestWrapper(testConfig);
+         if (testConfigClass != null)
+         {
+            TestResult result;
+            String testName = testConfig.getName();
+            String testCaseName = testCase.getName();
+            try
+            {
+               result = testConfigClass.doTest(testCaseName, cache, testName, conf.getSampleSize(), conf.getNumThreads());
+            }
+            catch (Exception e)
+            {
+               // The test failed. We should add a test result object with a error message and indicate that it failed.
+               result = new TestResult();
+               result.setTestName(testCaseName);
+               result.setTestTime(new Date());
+               result.setTestType(testName);
+
+               result.setTestPassed(false);
+               result.setErrorMsg("Failed to Execute - See logs for details : " + e.getMessage());
+               logger.warn("Test case : " + testCaseName + ", Test : " + testName + " - Failed");
+               errorLogger.error("Test case : " + testCaseName + ", Test : " + testName + " - Failed : " + e.getMessage(), e);
+            }
+            executeTestTasks(cache, result);
+            results.add(result);
+         }
+      }
+      return results;
+   }
+
+   private void generateReports(List<TestResult> results)
+   {
+      logger.info("Generating Reports...");
+      for (Report report : conf.getReports())
+      {
+         ReportGenerator generator;
+         try
+         {
+            generator = getReportWrapper(report);
+            if (generator != null)
+            {
+               generator.setResults(results);
+               generator.setOutputFile(new File(report.getOutputFile()));
+               generator.generate();
+               logger.info("Report Generation Complted");
+            }
+            else
+            {
+               logger.info("Report not Generated - See logs for reasons");
+            }
+         }
+         catch (Exception e)
+         {
+            logger.warn("Unable to generate Report : " + report.getGenerator() + " - See logs for reasons");
+            logger.warn("Skipping this report");
+            errorLogger.error("Unable to generate Report : " + report.getGenerator(), e);
+            errorLogger.error("Skipping this report");
+         }
+      }
+   }
+
+   /**
+    * Util method to locate a resource on the filesystem as a URL
+    *
+    * @param filename
+    * @return The URL object of the file
+    */
+   private URL findOnFS(String filename)
+   {
+      File f = new File(filename);
+      try
+      {
+         if (f.exists()) return f.toURL();
+      }
+      catch (MalformedURLException mue)
+      {
+         // bad URL
+      }
+      return null;
+   }
+
+   /**
+    * Util method to locate a resource in your classpath
+    *
+    * @param filename
+    * @return The URL object of the file
+    */
+   private URL findInClasspath(String filename)
+   {
+      return getClass().getClassLoader().getResource(filename);
+   }
+
+   private CacheWrapper getCacheWrapperInstance(TestCase testCaseClass)
+   {
+      CacheWrapper cache = null;
+      try
+      {
+         cache = (CacheWrapper) Instantiator.getInstance().createClass(testCaseClass.getCacheWrapper());
+
+      }
+      catch (Exception e)
+      {
+         logger.warn("Unable to instantiate CacheWrapper class: " + testCaseClass.getCacheWrapper() + " - Not Running any tests");
+         errorLogger.error("Unable to instantiate CacheWrapper class: " + testCaseClass.getCacheWrapper(), e);
+         errorLogger.error("Skipping this test");
+      }
+      return cache;
+   }
+
+   private ReportGenerator getReportWrapper(Report reportClass)
+   {
+      ReportGenerator report = null;
+      try
+      {
+         report = (ReportGenerator) Instantiator.getInstance().createClass(reportClass.getGenerator());
+
+      }
+      catch (Exception e)
+      {
+         logger.warn("Unable to instantiate ReportGenerator class: " + reportClass.getGenerator() + " - Not generating the report");
+         errorLogger.error("Unable to instantiate ReportGenerator class: " + reportClass.getGenerator(), e);
+         errorLogger.error("Skipping this report");
+      }
+      return report;
+
+   }
+
+   private CacheTest getCacheTestWrapper(TestConfig testConfig)
+   {
+      CacheTest cacheTestClass = null;
+      try
+      {
+         cacheTestClass = (CacheTest) Instantiator.getInstance().createClass(testConfig.getTestClass());
+
+      }
+      catch (Exception e)
+      {
+         logger.warn("Unable to instantiate CacheTest class: " + testConfig.getTestClass() + " - Not Running any tests");
+         errorLogger.error("Unable to instantiate CacheTest class: " + testConfig.getTestClass(), e);
+         errorLogger.error("Skipping this Test");
+      }
+      return cacheTestClass;
+
+   }
+
+   private void shutdownCache(CacheWrapper cache)
+   {
+      try
+      {
+         cache.tearDown();
+      }
+      catch (Exception e)
+      {
+         logger.warn("Cache Shutdown - Failed.");
+         errorLogger.error("Cache Shutdown failed : ", e);
+      }
+   }
+}
\ No newline at end of file

Added: cache-bench-fwk/trunk/src/org/cachebench/CacheBenchmarkSlave.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/CacheBenchmarkSlave.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/CacheBenchmarkSlave.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,178 @@
+package org.cachebench;
+
+import org.apache.commons.digester.Digester;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.cachebench.config.Configuration;
+import org.cachebench.config.TestCase;
+import org.cachebench.utils.Instantiator;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+import java.util.concurrent.Semaphore;
+
+import sun.misc.Unsafe;
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CacheBenchmarkSlave.java,v 1.8 2007/05/21 16:30:00 msurtani Exp $
+ */
+public class CacheBenchmarkSlave
+{
+
+   private Configuration conf;
+   private Log logger = LogFactory.getLog("org.cachebench.CacheBenchmarkRunner");
+   private Log errorLogger = LogFactory.getLog("CacheException");
+
+   public static void main(String[] args)
+   {
+      String conf = null;
+      if (args.length == 1)
+      {
+         conf = args[0];
+      }
+      if (conf != null && conf.toLowerCase().endsWith(".xml"))
+      {
+         new CacheBenchmarkSlave(conf);
+      }
+      else
+      {
+         new CacheBenchmarkSlave();
+      }
+   }
+
+   private CacheBenchmarkSlave()
+   {
+      this("cachebench.xml");
+   }
+
+   private CacheBenchmarkSlave(String s)
+   {
+      // first, try and find the configuration on the filesystem.
+      URL confFile = findOnFS(s);
+      final Object o = new Object();
+      if (confFile == null)
+      {
+         confFile = findInClasspath(s);
+      }
+      if (confFile == null)
+      {
+         logger.warn("Unable to locate a configuration file; Application terminated");
+      }
+      else
+      {
+         if (logger.isDebugEnabled()) logger.debug("Using configuration " + confFile);
+         logger.debug("Parsing configuration");
+         try
+         {
+            conf = parseConfiguration(confFile);
+            logger.info("Starting Slave....");
+
+            // will only start the first valid test.  Slaves don't support more than one test at a time
+            List<TestCase> cases = conf.getTestCases();
+            if (cases.size() == 0) throw new RuntimeException("Unable to proceed; no tests configured!");
+            if (cases.size() != 1)
+               logger.warn("Slaves only support running one test case at a time.  You have " + cases.size() + " cases configured.  Will only attempt the first one.");
+
+            CacheWrapper c = getCacheWrapperInstance(cases.get(0));
+            c.init(cases.get(0).getParams());
+            c.setUp();
+
+            logger.info("Slave is listening.  CTRL-C to kill.");
+//            Semaphore sema = new Semaphore(1);
+
+            // hack to cause the main thread to wait forever.
+//            for (int i = 0; i<2; i++) sema.acquire();
+            boolean debug = Boolean.getBoolean("org.cachebench.debug");
+            if (debug) System.out.println("DEBUG mode is true.  Will dump cache contents periodically");
+            System.out.println("Slave listening... ");
+            while (true)
+            {
+               Thread.sleep(debug ? 5000 : 240000);
+               System.out.println(c.getInfo());
+            }
+         }
+         catch (Exception e)
+         {
+            logger.warn("Unable to parse configuration file " + confFile + ". Application terminated.", e);
+            errorLogger.fatal("Unable to parse configuration file " + confFile, e);
+         }
+      }
+   }
+
+   private Configuration parseConfiguration(URL url) throws Exception
+   {
+      Digester digester = new Digester();
+      // set up the digester rules.
+      digester.setValidating(false);
+      digester.addObjectCreate("cachebench", "org.cachebench.config.Configuration");
+      digester.addSetProperties("cachebench");
+      digester.addObjectCreate("cachebench/testcase", "org.cachebench.config.TestCase");
+      digester.addSetProperties("cachebench/testcase");
+
+      digester.addObjectCreate("cachebench/testcase/test", "org.cachebench.config.TestConfig");
+      digester.addSetProperties("cachebench/testcase/test");
+      digester.addSetNext("cachebench/testcase/test", "addTest", "org.cachebench.config.TestConfig");
+
+      digester.addObjectCreate("cachebench/testcase/param", "org.cachebench.config.NVPair");
+      digester.addSetProperties("cachebench/testcase/param");
+
+      digester.addSetNext("cachebench/testcase/param", "addParam", "org.cachebench.config.NVPair");
+      digester.addSetNext("cachebench/testcase", "addTestCase", "org.cachebench.config.TestCase");
+
+      digester.addObjectCreate("cachebench/report", "org.cachebench.config.Report");
+      digester.addSetProperties("cachebench/report");
+      digester.addSetNext("cachebench/report", "addReport", "org.cachebench.config.Report");
+      return (Configuration) digester.parse(url.openStream());
+   }
+
+   /**
+    * Util method to locate a resource on the filesystem as a URL
+    *
+    * @param filename
+    * @return The URL object of the file
+    */
+   private URL findOnFS(String filename)
+   {
+      File f = new File(filename);
+      try
+      {
+         if (f.exists()) return f.toURL();
+      }
+      catch (MalformedURLException mue)
+      {
+         // bad URL
+      }
+      return null;
+   }
+
+   /**
+    * Util method to locate a resource in your classpath
+    *
+    * @param filename
+    * @return The URL object of the file
+    */
+   private URL findInClasspath(String filename)
+   {
+      return getClass().getClassLoader().getResource(filename);
+   }
+
+   private CacheWrapper getCacheWrapperInstance(TestCase testCaseClass)
+   {
+      CacheWrapper cache = null;
+      try
+      {
+         cache = (CacheWrapper) Instantiator.getInstance().createClass(testCaseClass.getCacheWrapper());
+
+      }
+      catch (Exception e)
+      {
+         logger.warn("Unable to instantiate CacheWrapper class: " + testCaseClass.getCacheWrapper() + " - Not Running any tests");
+         errorLogger.error("Unable to instantiate CacheWrapper class: " + testCaseClass.getCacheWrapper(), e);
+         errorLogger.error("Skipping this test");
+      }
+      return cache;
+   }
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/CacheWrapper.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/CacheWrapper.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/CacheWrapper.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,73 @@
+package org.cachebench;
+
+import java.util.Properties;
+
+
+/**
+ * CacheWrappers wrap cacheing products tp provide the cachebench framework with a standard way of
+ * accessing and manipulating a cache.
+ *
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CacheWrapper.java,v 1.5 2007/05/17 08:13:45 msurtani Exp $
+ */
+public interface CacheWrapper
+{
+   /**
+    * Initialises the cache.  Typically this step will configure the
+    * cacheing product with various params passed in, described in
+    * cachebench.xml for a particular cacheing product, which is
+    * usually the name or path to a config file specific to the
+    * cacheing product being tested.
+    *
+    * @param parameters
+    */
+   void init(Properties parameters) throws Exception;
+
+   /**
+    * setUp() is called immediately after init(), and usually involves instantiating
+    * a cache.
+    */
+   void setUp() throws Exception;
+
+   /**
+    * This is called at the very end of all tests on this cache, and is used for clean-up
+    * operations.
+    */
+   void tearDown() throws Exception;
+
+   /**
+    * This method is called when the framework needs to put an object in cache.  This method is treated
+    * as a black box, and is what is timed, so it should be implemented in the most efficient (or most
+    * realistic) way possible.
+    *
+    * @param key
+    * @param value
+    */
+   void put(Object key, Object value) throws Exception;
+
+   /**
+    * Similar to put, get wraps up an operation related to retrieving an object from the cache.  As in the
+    * case of put, this too is treated as a black box and is timed, and should be implemented in the most
+    * efficient/realistic way possible.
+    *
+    * @param key
+    * @return The value pertaining to the key in cache
+    */
+   Object get(Object key) throws Exception;
+
+   /**
+    * This is called after each test type (if emptyCacheBetweenTests is set to true in cachebench.xml) and is
+    * used to flush the cache.
+    */
+   void empty() throws Exception;
+
+   /**
+    * @return the number of members in the cache's cluster
+    */
+   int getNumMembers();
+
+   /**
+    * @return Some info about the cache contents, perhaps just a count of objects.
+    */
+   String getInfo();
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/SerializableCacheWrapper.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/SerializableCacheWrapper.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/SerializableCacheWrapper.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,27 @@
+package org.cachebench;
+
+import java.io.Serializable;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: SerializableCacheWrapper.java,v 1.4 2007/04/18 19:09:29 msurtani Exp $
+ */
+public interface SerializableCacheWrapper extends CacheWrapper
+{
+   /**
+    * Similar to get, only uses serializable objects
+    *
+    * @param key The key of the value in cache.
+    * @return The value in cache.
+    */
+   Object getSerializable(Serializable key) throws Exception;
+
+   /**
+    * Similar to put, only uses serializable objects
+    *
+    * @param key   The serializable key in which the value will be saved.
+    * @param value The serializable value be saved.
+    */
+   void putSerializable(Serializable key, Serializable value) throws Exception;
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/TestResult.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/TestResult.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/TestResult.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,155 @@
+package org.cachebench;
+
+import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
+
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: TestResult.java,v 1.4 2007/04/18 19:09:30 msurtani Exp $
+ */
+public class TestResult
+{
+   private String testName;
+   private String testType;
+   private Date testTime;
+   private DescriptiveStatistics putData, getData;
+   private boolean testPassed; // This is to indicate whether the test is passed/failed.
+   private String errorMsg = ""; // This holds the error message if any error had occured in the test.
+   private String footNote = ""; // This is utilized if special notes need to be captured for this test.
+   private int throughputTransactionsPerSecond;
+   private int throughputBytesPerSecond;
+   private int numMembers;
+   private int numThreads;
+
+   public DescriptiveStatistics getGetData()
+   {
+      return getData;
+   }
+
+   public void setGetData(DescriptiveStatistics getData)
+   {
+      this.getData = getData;
+   }
+
+   public DescriptiveStatistics getPutData()
+   {
+      return putData;
+   }
+
+   public void setPutData(DescriptiveStatistics putData)
+   {
+      this.putData = putData;
+   }
+
+   public String getTestName()
+   {
+      return testName;
+   }
+
+   public void setTestName(String testName)
+   {
+      this.testName = testName;
+   }
+
+   public String getTestType()
+   {
+      return testType;
+   }
+
+   public void setTestType(String testType)
+   {
+      this.testType = testType;
+   }
+
+   public Date getTestTime()
+   {
+      return testTime;
+   }
+
+   public void setTestTime(Date testTime)
+   {
+      this.testTime = testTime;
+   }
+
+   public boolean isTestPassed()
+   {
+      return testPassed;
+   }
+
+   public void setTestPassed(boolean testPassed)
+   {
+      this.testPassed = testPassed;
+   }
+
+   public String getErrorMsg()
+   {
+      return errorMsg;
+   }
+
+   public void setErrorMsg(String errorMsg)
+   {
+      this.errorMsg = errorMsg;
+   }
+
+   public String getFootNote()
+   {
+      return footNote;
+   }
+
+   public void setFootNote(String footNote)
+   {
+      this.footNote = footNote;
+   }
+
+   /**
+    * This is only measured on put() operations as it has little meaning for get()s.
+    */
+   public int getThroughputTransactionsPerSecond()
+   {
+      return throughputTransactionsPerSecond;
+   }
+
+   public void setThroughputTransactionsPerSecond(int throughputTransactionsPerSecond)
+   {
+      this.throughputTransactionsPerSecond = throughputTransactionsPerSecond;
+   }
+
+   /**
+    * This is only measured on put() operations as it has little meaning for get()s.  Note that the serialized size of objects
+    * are used to calculate this, not the ACTUAL bytes transmitted, as some cache impls (JBoss Cache >= 1.4) has internal
+    * marshallers that reduce object sizes to smaller than what they would be if serialized.  For the sake of comparing though,
+    * one must still consider that an object of, say, 200 bytes when serialized was transmitted, even if the cache compresses
+    * this to 100 bytes.
+    */
+   public int getThroughputBytesPerSecond()
+   {
+      return throughputBytesPerSecond;
+   }
+
+   public void setThroughputBytesPerSecond(int throughputBytesPerSecond)
+   {
+      this.throughputBytesPerSecond = throughputBytesPerSecond;
+   }
+
+   public int getNumMembers()
+   {
+      return numMembers;
+   }
+
+   public void setNumMembers(int numMembers)
+   {
+      this.numMembers = numMembers;
+   }
+
+   public int getNumThreads()
+   {
+      return numThreads;
+   }
+
+   public void setNumThreads(int numThreads)
+   {
+      this.numThreads = numThreads;
+   }
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/config/Configuration.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/config/Configuration.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/config/Configuration.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,93 @@
+package org.cachebench.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: Configuration.java,v 1.3 2007/04/18 19:09:31 msurtani Exp $
+ */
+public class Configuration
+{
+   private int sampleSize;
+   private int sleepBetweenTests;
+   private boolean gcBetweenTestsEnabled;
+   private boolean emptyCacheBetweenTests;
+
+   private List<TestCase> testCases = new ArrayList<TestCase>();
+
+   private List<Report> reports = new ArrayList<Report>();
+   private int numThreads;
+
+
+   public int getSampleSize()
+   {
+      return sampleSize;
+   }
+
+   public void setSampleSize(int sampleSize)
+   {
+      this.sampleSize = sampleSize;
+   }
+
+   public boolean isGcBetweenTestsEnabled()
+   {
+      return gcBetweenTestsEnabled;
+   }
+
+   public void setGcBetweenTestsEnabled(boolean gcBetweenTestsEnabled)
+   {
+      this.gcBetweenTestsEnabled = gcBetweenTestsEnabled;
+   }
+
+   public int getSleepBetweenTests()
+   {
+      return sleepBetweenTests;
+   }
+
+   public void setSleepBetweenTests(int sleepBetweenTests)
+   {
+      this.sleepBetweenTests = sleepBetweenTests;
+   }
+
+   public boolean isEmptyCacheBetweenTests()
+   {
+      return emptyCacheBetweenTests;
+   }
+
+   public void setEmptyCacheBetweenTests(boolean emptyCacheBetweenTests)
+   {
+      this.emptyCacheBetweenTests = emptyCacheBetweenTests;
+   }
+
+   public List<Report> getReports()
+   {
+      return reports;
+   }
+
+   public List<TestCase> getTestCases()
+   {
+      return testCases;
+   }
+
+   public void addTestCase(TestCase testCase)
+   {
+      testCases.add(testCase);
+   }
+
+   public void addReport(Report report)
+   {
+      reports.add(report);
+   }
+
+   public int getNumThreads()
+   {
+      return numThreads;
+   }
+
+   public void setNumThreads(int numThreads)
+   {
+      this.numThreads = numThreads;
+   }
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/config/NVPair.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/config/NVPair.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/config/NVPair.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,32 @@
+package org.cachebench.config;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: NVPair.java,v 1.2 2007/03/13 14:50:46 msurtani Exp $
+ */
+public class NVPair
+{
+   private String name;
+   private String value;
+
+   public String getName()
+   {
+      return name;
+   }
+
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+
+   public String getValue()
+   {
+      return value;
+   }
+
+   public void setValue(String value)
+   {
+      this.value = value;
+   }
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/config/Report.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/config/Report.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/config/Report.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,29 @@
+package org.cachebench.config;
+
+
+public class Report
+{
+   private String generator;
+   private String outputFile;
+
+   public String getGenerator()
+   {
+      return generator;
+   }
+
+   public void setGenerator(String generator)
+   {
+      this.generator = generator;
+   }
+
+   public String getOutputFile()
+   {
+      return outputFile;
+   }
+
+   public void setOutputFile(String outputFile)
+   {
+      this.outputFile = outputFile;
+   }
+
+}
\ No newline at end of file

Added: cache-bench-fwk/trunk/src/org/cachebench/config/TestCase.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/config/TestCase.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/config/TestCase.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,62 @@
+package org.cachebench.config;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+
+public class TestCase
+{
+   private String name;
+   private String cacheWrapper;
+
+   private Properties params = new Properties();
+   private List<TestConfig> tests = new ArrayList<TestConfig>();
+
+
+   public String getName()
+   {
+      return name;
+   }
+
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+
+   public Properties getParams()
+   {
+      return params;
+   }
+
+   public void addParam(NVPair nvPair)
+   {
+      params.put(nvPair.getName(), nvPair.getValue());
+   }
+
+   /**
+    * @return Returns the cacheWrapper.
+    */
+   public String getCacheWrapper()
+   {
+      return cacheWrapper;
+   }
+
+   /**
+    * @param cacheWrapper The cacheWrapper to set.
+    */
+   public void setCacheWrapper(String cacheWrapper)
+   {
+      this.cacheWrapper = cacheWrapper;
+   }
+
+   public List<TestConfig> getTests()
+   {
+      return this.tests;
+   }
+
+   public void addTest(TestConfig test)
+   {
+      tests.add(test);
+   }
+}
\ No newline at end of file

Added: cache-bench-fwk/trunk/src/org/cachebench/config/TestConfig.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/config/TestConfig.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/config/TestConfig.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,58 @@
+package org.cachebench.config;
+
+
+public class TestConfig
+{
+   private String name;
+   private String testClass;
+   private float weight;
+
+
+   /**
+    * @return Returns the name.
+    */
+   public String getName()
+   {
+      return name;
+   }
+
+   /**
+    * @param name The name to set.
+    */
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+
+   /**
+    * @return Returns the testClass.
+    */
+   public String getTestClass()
+   {
+      return testClass;
+   }
+
+   /**
+    * @param testClass The testClass to set.
+    */
+   public void setTestClass(String testClass)
+   {
+      this.testClass = testClass;
+   }
+
+   /**
+    * @return Returns the weight.
+    */
+   public float getWeight()
+   {
+      return weight;
+   }
+
+   /**
+    * @param weight The weight to set.
+    */
+   public void setWeight(float weight)
+   {
+      this.weight = weight;
+   }
+}
\ No newline at end of file

Added: cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/AbstractReportGenerator.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/AbstractReportGenerator.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/AbstractReportGenerator.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,30 @@
+package org.cachebench.reportgenerators;
+
+import org.cachebench.TestResult;
+import org.apache.commons.logging.Log;
+
+import java.io.File;
+import java.util.List;
+import java.util.Enumeration;
+import java.net.NetworkInterface;
+import java.net.InetAddress;
+
+/**
+ * Base implementation of {@link org.cachebench.reportgenerators.ReportGenerator}
+ */
+public abstract class AbstractReportGenerator implements ReportGenerator
+{
+   protected File output;
+   protected List<TestResult> results;
+   protected Log log;
+
+   public void setOutputFile(File output)
+   {
+      this.output = output;
+   }
+
+   public void setResults(List<TestResult> results)
+   {
+      this.results = results;
+   }
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/CSVReportGenerator.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/CSVReportGenerator.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/CSVReportGenerator.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,164 @@
+package org.cachebench.reportgenerators;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
+import org.cachebench.TestResult;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CSVReportGenerator.java,v 1.5 2007/04/18 19:09:31 msurtani Exp $
+ */
+public class CSVReportGenerator extends AbstractReportGenerator
+{
+   private ArrayList footNotes;
+
+
+   public CSVReportGenerator()
+   {
+      log = LogFactory.getLog(this.getClass());
+   }
+
+   public void generate() throws Exception
+   {
+      BufferedWriter writer = null;
+      log.debug("Opening output file [" + output + "]");
+      writer = new BufferedWriter(new FileWriter(output));
+      writeHeaderLine(writer); // Write the Header of the Report
+      // Write the results
+      for (TestResult result : results)
+      {
+         writeTestResult(result, writer);
+      }
+      // Write the Footnotes (if available)
+      if (footNotes != null)
+      {
+         writeFoodNotes(writer);
+      }
+
+      writer.close();
+      log.debug("Report complete");
+   }
+
+   /**
+    * Writes out the report.
+    * The method checkes whether the result is passed or failed. And based on the status would generate the report with
+    * appropriate content. The method also checks whether the report has any foot notes attached to the test case. If
+    * any foot note is found, then its added to the <code>footNotes</code> ArrayList for later processing.
+    *
+    * @param result
+    * @param writer
+    * @throws IOException
+    */
+   private void writeTestResult(TestResult result, BufferedWriter writer) throws IOException
+   {
+      log.debug("Writing the Result to the Report");
+      StringBuffer buf = new StringBuffer();
+      if (result.isTestPassed())
+      {
+         // This test has pased. Lets add this test results to the report.
+         DescriptiveStatistics putData = result.getPutData();
+         DescriptiveStatistics getData = result.getGetData();
+
+         buf.append(result.getTestName());
+         buf.append(",");
+         buf.append(result.getTestTime());
+         buf.append(",");
+         buf.append(result.getTestType());
+         buf.append(",");
+         buf.append(result.getNumMembers());
+         buf.append(",");
+         buf.append(result.getNumThreads());
+         buf.append(",");
+         buf.append(putData.getSum()/1000);
+         buf.append(",");
+         buf.append(getData.getSum()/1000);
+         buf.append(",");
+         buf.append(putData.getMean());
+         buf.append(",");
+         buf.append(getData.getMean());
+         buf.append(",");
+         // medians are the 50th percentile...
+         buf.append(putData.getPercentile(50));
+         buf.append(",");
+         buf.append(getData.getPercentile(50));
+         buf.append(",");
+         buf.append(putData.getStandardDeviation());
+         buf.append(",");
+         buf.append(getData.getStandardDeviation());
+         buf.append(",");
+         buf.append(putData.getMax());
+         buf.append(",");
+         buf.append(getData.getMax());
+         buf.append(",");
+         buf.append(putData.getMin());
+         buf.append(",");
+         buf.append(getData.getMin());
+         buf.append(",");
+         buf.append(result.getThroughputTransactionsPerSecond());
+         buf.append(",");
+         buf.append(result.getThroughputBytesPerSecond());
+      }
+      else
+      {
+         // This test has failed. Need to add this to the report.
+         buf.append(result.getTestName());
+         buf.append(",");
+         buf.append(result.getTestTime());
+         buf.append(",");
+         buf.append(result.getTestType());
+         buf.append(",");
+         buf.append(result.getErrorMsg());
+      }
+
+      // write details of this test to file.
+      writer.write(buf.toString());
+      writer.newLine();
+
+      // Now check if we have foot notes for this error
+      if (!"".equals(result.getFootNote()))
+      {
+         // We hae footnotes
+         if (footNotes == null)
+         {
+            footNotes = new ArrayList();
+         }
+         footNotes.add(result.getFootNote());
+      }
+      log.debug("Completed writing test result");
+   }
+
+   private void writeHeaderLine(BufferedWriter writer) throws IOException
+   {
+      log.debug("Write the Report Header");
+      writer.write("TEST NAME, TEST DATE, TEST TYPE, NUM MEMBERS, NUM THREADS, TOTAL PUT TIME (secs), TOTAL GET TIME (secs), MEAN PUT TIME, MEAN GET TIME, MEDIAN PUT TIME, MEDIAN GET TIME, STANDARD DEVIATION PUT TIME, STANDARD DEVIATION GET TIME, MAX PUT TIME, MAX GET TIME, MIN PUT TIME, MIN GET TIME, THROUGHPUT TRANSACTIONS PER SEC, THROUGHPUT BYTES PER SEC");
+      writer.newLine();
+      log.debug("Complted the Report Header");
+   }
+
+   private void writeFoodNotes(BufferedWriter writer) throws IOException
+   {
+      log.debug("Writing the Footnotes");
+      writer.newLine();
+      writer.newLine();
+      writer.newLine();
+      writer.newLine();
+      writer.write("Report FootNotes");
+      writer.newLine();
+      int footNoteSize = footNotes.size();
+      for (int i = 0; i < footNoteSize; i++)
+      {
+         writer.write((String) footNotes.get(i));
+         writer.newLine();
+      }
+      log.debug("Complted the Footnotes");
+   }
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/ReportGenerator.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/ReportGenerator.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/reportgenerators/ReportGenerator.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,20 @@
+package org.cachebench.reportgenerators;
+
+import org.cachebench.TestResult;
+
+import java.io.File;
+import java.util.List;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: ReportGenerator.java,v 1.4 2007/04/18 19:09:31 msurtani Exp $
+ */
+public interface ReportGenerator
+{
+   public void setOutputFile(File output);
+
+   public void setResults(List<TestResult> results);
+
+   public void generate() throws Exception;
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/AbstractSuperclass.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/AbstractSuperclass.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/AbstractSuperclass.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,17 @@
+package org.cachebench.testobjects;
+
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: AbstractSuperclass.java,v 1.2 2007/03/13 14:50:45 msurtani Exp $
+ */
+public abstract class AbstractSuperclass
+{
+   protected String myString = "MyString";
+   protected int myInt = 5;
+   protected float myFloat = 5.0f;
+   protected long myLong = 5l;
+   protected Date myDate = new Date();
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomType.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomType.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomType.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,18 @@
+package org.cachebench.testobjects;
+
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CustomType.java,v 1.3 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class CustomType
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeSubclassOfAbstract.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeSubclassOfAbstract.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeSubclassOfAbstract.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,17 @@
+package org.cachebench.testobjects;
+
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CustomTypeSubclassOfAbstract.java,v 1.2 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class CustomTypeSubclassOfAbstract extends AbstractSuperclass
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithAssocs.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithAssocs.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithAssocs.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,23 @@
+package org.cachebench.testobjects;
+
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CustomTypeWithAssocs.java,v 1.2 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class CustomTypeWithAssocs
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+
+   // recursive assoc
+   protected CustomType assoc1 = new CustomType();
+   protected CustomType assoc2 = new CustomType();
+   protected CustomType assoc3 = new CustomType();
+}
+

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithStatics.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithStatics.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithStatics.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,21 @@
+package org.cachebench.testobjects;
+
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CustomTypeWithStatics.java,v 1.2 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class CustomTypeWithStatics
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+
+   protected static String stString = "static string";
+   protected static Date stDate = new Date();
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithTransient.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithTransient.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/CustomTypeWithTransient.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,20 @@
+package org.cachebench.testobjects;
+
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: CustomTypeWithTransient.java,v 1.3 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class CustomTypeWithTransient
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+
+   protected transient String trString = "transient";
+   protected transient Date trDate = new Date();
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableAbstractSuperclass.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableAbstractSuperclass.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableAbstractSuperclass.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,18 @@
+package org.cachebench.testobjects;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: SerializableAbstractSuperclass.java,v 1.2 2007/03/13 14:50:45 msurtani Exp $
+ */
+public abstract class SerializableAbstractSuperclass implements Serializable
+{
+   protected String myString = "MyString";
+   protected int myInt = 5;
+   protected float myFloat = 5.0f;
+   protected long myLong = 5l;
+   protected Date myDate = new Date();
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomType.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomType.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomType.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,18 @@
+package org.cachebench.testobjects;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: SerializableCustomType.java,v 1.3 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class SerializableCustomType implements Serializable
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeSubclassOfAbstract.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeSubclassOfAbstract.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeSubclassOfAbstract.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,17 @@
+package org.cachebench.testobjects;
+
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: SerializableCustomTypeSubclassOfAbstract.java,v 1.2 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class SerializableCustomTypeSubclassOfAbstract extends SerializableAbstractSuperclass
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithAssocs.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithAssocs.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithAssocs.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,24 @@
+package org.cachebench.testobjects;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: SerializableCustomTypeWithAssocs.java,v 1.2 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class SerializableCustomTypeWithAssocs implements Serializable
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+
+   // recursive assoc
+   protected CustomType assoc1 = new CustomType();
+   protected CustomType assoc2 = new CustomType();
+   protected CustomType assoc3 = new CustomType();
+}
+

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithStatics.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithStatics.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithStatics.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,22 @@
+package org.cachebench.testobjects;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: SerializableCustomTypeWithStatics.java,v 1.2 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class SerializableCustomTypeWithStatics implements Serializable
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+
+   protected static String stString = "static string";
+   protected static Date stDate = new Date();
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithTransient.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithTransient.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/testobjects/SerializableCustomTypeWithTransient.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,21 @@
+package org.cachebench.testobjects;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: SerializableCustomTypeWithTransient.java,v 1.3 2007/03/13 14:50:45 msurtani Exp $
+ */
+public class SerializableCustomTypeWithTransient implements Serializable
+{
+   protected String subString = "subclass string";
+   protected int subInt = 5;
+   protected float subFloat = 5.0f;
+   protected long subLong = 5l;
+   protected Date subDate = new Date();
+
+   protected transient String trString = "transient";
+   protected transient Date trDate = new Date();
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/AssociationsTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/AssociationsTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/AssociationsTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,26 @@
+package org.cachebench.tests;
+
+import org.cachebench.CacheWrapper;
+import org.cachebench.SerializableCacheWrapper;
+import org.cachebench.TestResult;
+import org.cachebench.testobjects.CustomTypeWithAssocs;
+import org.cachebench.testobjects.SerializableCustomTypeWithAssocs;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public class AssociationsTest extends SimpleTest
+{
+
+   /* (non-Javadoc)
+   * @see org.cachebench.tests.CacheTest#doTest(org.cachebench.config.TestConfig)
+   */
+   public TestResult doTest(String testName, CacheWrapper cache, String testCaseName, int sampleSize, int numThreads) throws Exception
+   {
+      return performTestWithObjectType(testName, cache, cache instanceof SerializableCacheWrapper ? SerializableCustomTypeWithAssocs.class : CustomTypeWithAssocs.class, testCaseName, sampleSize, numThreads);
+
+   }
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/CacheTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/CacheTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/CacheTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,25 @@
+package org.cachebench.tests;
+
+import org.cachebench.CacheWrapper;
+import org.cachebench.TestResult;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public interface CacheTest
+{
+   /**
+    * Performs the benchmarking on the given tese.
+    *
+    * @param testName     The name of the test to be performed.
+    * @param cache        The Cache wrapper for the product under bench-mark.
+    * @param testCaseName The name of the test case.
+    * @param sampleSize   The sample size of the cache to be tested.
+    * @param numThreads   The number of concurrent threads to use to achieve the sample number of invocations
+    * @return The result of the test.
+    * @throws Exception When the cache opertations blow up an error.
+    */
+   public TestResult doTest(String testName, CacheWrapper cache, String testCaseName, int sampleSize, int numThreads) throws Exception;
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/CustomClassTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/CustomClassTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/CustomClassTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,26 @@
+package org.cachebench.tests;
+
+import org.cachebench.CacheWrapper;
+import org.cachebench.SerializableCacheWrapper;
+import org.cachebench.TestResult;
+import org.cachebench.testobjects.CustomType;
+import org.cachebench.testobjects.SerializableCustomType;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public class CustomClassTest extends SimpleTest
+{
+
+   /* (non-Javadoc)
+   * @see org.cachebench.tests.CacheTest#doTest(org.cachebench.config.TestConfig)
+   */
+   public TestResult doTest(String testName, CacheWrapper cache, String testCaseName, int sampleSize, int numThreads) throws Exception
+   {
+      return performTestWithObjectType(testName, cache, cache instanceof SerializableCacheWrapper ? SerializableCustomType.class : CustomType.class, testCaseName, sampleSize, numThreads);
+
+   }
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/PrimitiveTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/PrimitiveTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/PrimitiveTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,23 @@
+package org.cachebench.tests;
+
+import org.cachebench.CacheWrapper;
+import org.cachebench.TestResult;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public class PrimitiveTest extends SimpleTest
+{
+
+   /* (non-Javadoc)
+   * @see org.cachebench.tests.CacheTest#doTest(org.cachebench.config.TestConfig)
+   */
+   public TestResult doTest(String testName, CacheWrapper cache, String testCaseName, int sampleSize, int numThreads) throws Exception
+   {
+      return performTestWithObjectType(testName, cache, Integer.class, testCaseName, sampleSize, numThreads);
+
+   }
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/SimpleTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/SimpleTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/SimpleTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,270 @@
+package org.cachebench.tests;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
+import org.cachebench.CacheWrapper;
+import org.cachebench.SerializableCacheWrapper;
+import org.cachebench.TestResult;
+
+import java.io.Serializable;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.util.Date;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.atomic.AtomicLong;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public abstract class SimpleTest implements CacheTest
+{
+   protected Log log = LogFactory.getLog(this.getClass());
+   protected AtomicLong numberOfBytesPut = new AtomicLong(0);
+   protected long elapsedSecondsForAllPuts = 0;
+   protected ExecutorService executor;
+   private static final int EXECUTOR_SHUTDOWN_TIMEOUT_POLL_SECS = 60;
+
+   protected TestResult performTestWithObjectType(String testCaseName, CacheWrapper cache, Class valueClass, String testName, int sampleSize, int numThreads) throws Exception
+   {
+      log.info("Number of threads " + numThreads);
+      executor = Executors.newFixedThreadPool(numThreads);
+
+      TestResult result = new TestResult();
+      result.setTestName(testCaseName);
+      result.setTestTime(new Date());
+      result.setTestType(testName);
+
+      log.info("Performing PUTs");
+      DescriptiveStatistics putStats = doPuts(cache, valueClass, sampleSize);
+      executor = Executors.newFixedThreadPool(numThreads);
+      log.info("Performing GETs");
+      DescriptiveStatistics getStats = doGets(cache, sampleSize);
+
+      result.setGetData(getStats);
+      result.setPutData(putStats);
+      result.setTestPassed(true); // The test is passed. The report would make use of this attribute.
+
+      // calculate throughput, in transactions per second.
+      // we only measure put operations for throughput.
+
+      // calc tps.
+
+      System.out.println("*** sum of time: " + elapsedSecondsForAllPuts);
+      System.out.println("*** num puts occured: " + putStats.getN());
+
+      try
+      {
+         result.setThroughputTransactionsPerSecond((int) (sampleSize / elapsedSecondsForAllPuts));
+      }
+      catch (ArithmeticException ae)
+      {
+         log.warn("Divide by 0 - elapsedSecondsForAllPuts = 0?");
+         result.setThroughputTransactionsPerSecond(-999);
+      }
+
+      try
+      {
+         result.setThroughputBytesPerSecond((int) (numberOfBytesPut.longValue() / elapsedSecondsForAllPuts));
+      }
+      catch (ArithmeticException ae)
+      {
+         log.warn("Divide by 0 - elapsedSecondsForAllPuts = 0?");
+         result.setThroughputBytesPerSecond(-999);
+      }
+
+
+      // set the number of members in the cluster
+      result.setNumMembers(cache.getNumMembers());
+      result.setNumThreads(numThreads);
+
+      return result;
+   }
+
+   /**
+    * @param cache      The Cachewrapper on which the bechmark is conducted.
+    * @param sampleSize The size of the cache.
+    * @return The Descriptive statistics of the cache benchmarking.
+    */
+   private DescriptiveStatistics doGets(final CacheWrapper cache, int sampleSize) throws Exception
+   {
+      log.debug("Inside doGets for : " + cache);
+      final String key = "baseKey";
+      final DescriptiveStatistics stats = DescriptiveStatistics.newInstance();
+      final boolean useSerializable = cache instanceof SerializableCacheWrapper;
+
+      for (int i = 0; i < sampleSize; i++)
+      {
+         final int cycleNumber = i;
+         Runnable r = new Runnable()
+         {
+            public void run()
+            {
+               try
+               {
+                  if (!useSerializable)
+                  {
+                     // start your timer...
+                     long startTime = System.currentTimeMillis();
+                     cache.get(key + cycleNumber);
+                     long statValue = (System.currentTimeMillis() - startTime);
+                     stats.addValue(statValue);
+                     log.debug("The Get stat : " + statValue);
+                  }
+                  else
+                  {
+                     SerializableCacheWrapper sCache = (SerializableCacheWrapper) cache;
+                     long startTime = System.currentTimeMillis();
+                     sCache.getSerializable(key + cycleNumber);
+                     long statValue = (System.currentTimeMillis() - startTime);
+                     stats.addValue(statValue);
+                     log.debug("The Get stat : " + statValue);
+                  }
+               }
+               catch (Exception e)
+               {
+                  // how should we handle this?  Log for now...
+                  log.error("Operation failed!", e);
+               }
+            }
+         };
+
+         // submit task to be executed
+         executor.execute(r);
+      }
+
+      // only leave once the task queue is empty!!
+      blockTillTasksComplete();
+
+      // return the raw data
+      log.debug("Leaving doGets for : " + cache);
+      return stats;
+   }
+
+   /**
+    * @param cache      The Cachewrapper on which the bechmark is conducted.
+    * @param valueClass The value class instance which is going to be inserted into the Cache.
+    * @param sampleSize The size of the cache.
+    * @return The Descriptive statistics of the cache benchmarking.
+    */
+   private DescriptiveStatistics doPuts(final CacheWrapper cache, final Class valueClass, int sampleSize) throws Exception
+   {
+      log.debug("Inside doPuts for " + cache);
+      final String key = "baseKey";
+      final DescriptiveStatistics stats = DescriptiveStatistics.newInstance();
+      final boolean useSerializable = cache instanceof SerializableCacheWrapper;
+      numberOfBytesPut.set(0);
+      elapsedSecondsForAllPuts = 0;
+      long startElapsedTime = System.currentTimeMillis();
+
+      for (int i = 0; i < sampleSize; i++)
+      {
+         final int cycleNumber = i;
+         Runnable r = new Runnable()
+         {
+            public void run()
+            {
+               try
+               {
+                  // generate some value
+                  Object value;
+                  if (valueClass == null) value = null;
+                  else if (valueClass.getName().equals("java.lang.String")) value = "value" + cycleNumber;
+                  else if (valueClass.getName().equals("java.lang.Integer")) value = cycleNumber;
+                  else value = valueClass.newInstance();
+
+                  // even though some impls may use special marshalling to reduce the amount of data transmitted (such as JBoss Cache's
+                  // CacheMarshaller) we still want to measure the serialized size of objects for this metric.
+
+                  numberOfBytesPut.getAndAdd(calculateSerializedSize(value));
+
+                  if (!useSerializable)
+                  {
+                     // start your timer...
+                     long startTime = System.currentTimeMillis();
+                     cache.put(key + cycleNumber, value);
+                     long statValue = (System.currentTimeMillis() - startTime);
+                     stats.addValue(statValue);
+                     log.debug("The Put stat : " + statValue);
+                  }
+                  else
+                  {
+                     SerializableCacheWrapper sCache = (SerializableCacheWrapper) cache;
+                     Serializable sValue = (Serializable) value;
+                     long startTime = System.currentTimeMillis();
+                     sCache.putSerializable(key + cycleNumber, sValue);
+                     long statValue = (System.currentTimeMillis() - startTime);
+                     stats.addValue(statValue);
+                     log.debug("The Put stat : " + statValue);
+                  }
+               }
+               catch (Exception e)
+               {
+                  // how should we handle this?  Log for now...
+                  log.error("Operation failed!", e);
+               }
+            }
+         };
+         // submit task to be executed
+         executor.execute(r);
+      }
+
+      // only leave once the task queue is empty!!
+      blockTillTasksComplete();
+      elapsedSecondsForAllPuts = (System.currentTimeMillis() - startElapsedTime) / 1000;
+
+      // return the raw data
+      log.debug("Leaving doPuts for " + cache);
+      return stats;
+   }
+
+   private void blockTillTasksComplete()
+   {
+      // now that just told us that all the tasks have been submitted.  Lets check that the executor has finished everything.
+      executor.shutdown();
+      while (!executor.isTerminated())
+      {
+         try
+         {
+            executor.awaitTermination(EXECUTOR_SHUTDOWN_TIMEOUT_POLL_SECS, TimeUnit.SECONDS);
+         }
+         catch (InterruptedException e)
+         {
+            // do nothing?
+         }
+      }
+   }
+
+   private long calculateSerializedSize(Object value)
+   {
+      ByteArrayOutputStream baos = null;
+      ObjectOutputStream oos = null;
+      try
+      {
+         baos = new ByteArrayOutputStream();
+         oos = new ObjectOutputStream(baos);
+         oos.writeObject(value);
+         oos.close();
+         baos.close();
+         return baos.size();
+      }
+      catch (Exception e)
+      {
+         log.warn("Unable to calculate serialized size of object " + value, e);
+         try
+         {
+            if (oos != null) oos.close();
+            if (baos != null) baos.close();
+         }
+         catch (Exception e2)
+         {
+            log.warn("Unable to close streams", e2);
+         }
+      }
+      return 0;
+   }
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/StaticsTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/StaticsTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/StaticsTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,25 @@
+package org.cachebench.tests;
+
+import org.cachebench.CacheWrapper;
+import org.cachebench.SerializableCacheWrapper;
+import org.cachebench.TestResult;
+import org.cachebench.testobjects.CustomTypeWithStatics;
+import org.cachebench.testobjects.SerializableCustomTypeWithStatics;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public class StaticsTest extends SimpleTest
+{
+
+   /* (non-Javadoc)
+   * @see org.cachebench.tests.CacheTest#doTest(org.cachebench.config.TestConfig)
+   */
+   public TestResult doTest(String testName, CacheWrapper cache, String testCaseName, int sampleSize, int numThreads) throws Exception
+   {
+      return performTestWithObjectType(testName, cache, cache instanceof SerializableCacheWrapper ? SerializableCustomTypeWithStatics.class : CustomTypeWithStatics.class, testCaseName, sampleSize, numThreads);
+   }
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/StringTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/StringTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/StringTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,23 @@
+package org.cachebench.tests;
+
+import org.cachebench.CacheWrapper;
+import org.cachebench.TestResult;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public class StringTest extends SimpleTest
+{
+
+   /* (non-Javadoc)
+   * @see org.cachebench.tests.CacheTest#doTest(org.cachebench.config.TestConfig)
+   */
+   public TestResult doTest(String testName, CacheWrapper cache, String testCaseName, int sampleSize, int numThreads) throws Exception
+   {
+      return performTestWithObjectType(testName, cache, String.class, testCaseName, sampleSize, numThreads);
+
+   }
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/SubclassTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/SubclassTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/SubclassTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,26 @@
+package org.cachebench.tests;
+
+import org.cachebench.CacheWrapper;
+import org.cachebench.SerializableCacheWrapper;
+import org.cachebench.TestResult;
+import org.cachebench.testobjects.CustomTypeSubclassOfAbstract;
+import org.cachebench.testobjects.SerializableCustomTypeSubclassOfAbstract;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public class SubclassTest extends SimpleTest
+{
+
+   /* (non-Javadoc)
+   * @see org.cachebench.tests.CacheTest#doTest(org.cachebench.config.TestConfig)
+   */
+   public TestResult doTest(String testName, CacheWrapper cache, String testCaseName, int sampleSize, int numThreads) throws Exception
+   {
+      return performTestWithObjectType(testName, cache, cache instanceof SerializableCacheWrapper ? SerializableCustomTypeSubclassOfAbstract.class : CustomTypeSubclassOfAbstract.class, testCaseName, sampleSize, numThreads);
+
+   }
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/tests/TransientTest.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/tests/TransientTest.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/tests/TransientTest.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,26 @@
+package org.cachebench.tests;
+
+import org.cachebench.CacheWrapper;
+import org.cachebench.SerializableCacheWrapper;
+import org.cachebench.TestResult;
+import org.cachebench.testobjects.CustomTypeWithTransient;
+import org.cachebench.testobjects.SerializableCustomTypeWithTransient;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ *         (C) Manik Surtani, 2004
+ */
+public class TransientTest extends SimpleTest
+{
+
+   /* (non-Javadoc)
+   * @see org.cachebench.tests.CacheTest#doTest(org.cachebench.config.TestConfig)
+   */
+   public TestResult doTest(String testName, CacheWrapper cache, String testCaseName, int sampleSize, int numThreads) throws Exception
+   {
+      return performTestWithObjectType(testName, cache, cache instanceof SerializableCacheWrapper ? SerializableCustomTypeWithTransient.class : CustomTypeWithTransient.class, testCaseName, sampleSize, numThreads);
+
+   }
+
+}

Added: cache-bench-fwk/trunk/src/org/cachebench/utils/Instantiator.java
===================================================================
--- cache-bench-fwk/trunk/src/org/cachebench/utils/Instantiator.java	                        (rev 0)
+++ cache-bench-fwk/trunk/src/org/cachebench/utils/Instantiator.java	2007-12-06 17:39:01 UTC (rev 4799)
@@ -0,0 +1,31 @@
+package org.cachebench.utils;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * @author Manik Surtani (manik at surtani.org)
+ * @version $Id: Instantiator.java,v 1.4 2007/03/13 14:50:46 msurtani Exp $
+ */
+public class Instantiator
+{
+   private static Instantiator _singleton;
+   private Log logger = LogFactory.getLog("org.cachebench.utils.Instantiator");
+
+   private Instantiator()
+   {
+   }
+
+   public static Instantiator getInstance()
+   {
+      if (_singleton == null) _singleton = new Instantiator();
+      return _singleton;
+   }
+
+   public Object createClass(String className) throws Exception
+   {
+      Class c = getClass().getClassLoader().loadClass(className);
+      return c.newInstance();
+   }
+}




More information about the jbosscache-commits mailing list