[jbosscache-commits] JBoss Cache SVN: r6710 - in benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0: src/org/cachebench/cachewrappers and 1 other directory.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Thu Sep 11 07:49:31 EDT 2008
Author: mircea.markus
Date: 2008-09-11 07:49:31 -0400 (Thu, 11 Sep 2008)
New Revision: 6710
Added:
benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-invalidate-async.xml
benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-invalidate-sync.xml
benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache.xsd
benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/src/org/cachebench/cachewrappers/EHCacheReplicationTest.java
Modified:
benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-async.xml
benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-sync.xml
benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/src/org/cachebench/cachewrappers/EHCacheWrapper.java
Log:
various changes to distributed ehcache configs:
- disbaled eviction (eternal=true)
- ${sys_prop} syntax is supported in config files, updated files and wrapper
- added UT to see how replication works
Copied: benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-invalidate-async.xml (from rev 6511, benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-async.xml)
===================================================================
--- benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-invalidate-async.xml (rev 0)
+++ benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-invalidate-async.xml 2008-09-11 11:49:31 UTC (rev 6710)
@@ -0,0 +1,307 @@
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
+
+ <!--
+ 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=${bind.address}, 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="1000000"
+ eternal="true"
+ overflowToDisk="false"
+ diskPersistent="false"
+ />
+
+ <!--
+ 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="1000000"
+ eternal="true"
+ overflowToDisk="false">
+ <cacheEventListenerFactory
+ class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+ properties="replicateAsynchronously=true, replicatePuts=true,
+ replicateUpdates=true, replicateUpdatesViaCopy=false,
+ replicateRemovals=true"/>
+ </cache>
+
+</ehcache>
Copied: benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-invalidate-sync.xml (from rev 6511, benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-sync.xml)
===================================================================
--- benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-invalidate-sync.xml (rev 0)
+++ benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-invalidate-sync.xml 2008-09-11 11:49:31 UTC (rev 6710)
@@ -0,0 +1,306 @@
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
+
+ <!--
+ 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=${bind.address}, 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="1000000"
+ eternal="true"
+ overflowToDisk="false"
+ diskPersistent="false"
+ />
+
+ <!--
+ 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="1000000"
+ eternal="true"
+ overflowToDisk="false">
+ <cacheEventListenerFactory
+ class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+ properties="replicateAsynchronously=false, replicatePuts=true,
+ replicateUpdates=true, replicateUpdatesViaCopy=false,
+ replicateRemovals=true"/>
+ </cache>
+</ehcache>
Modified: benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-async.xml
===================================================================
--- benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-async.xml 2008-09-11 11:46:27 UTC (rev 6709)
+++ benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-async.xml 2008-09-11 11:49:31 UTC (rev 6710)
@@ -1,23 +1,6 @@
<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.
@@ -171,7 +154,7 @@
-->
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
- properties="hostName=127.0.0.1, socketTimeoutMillis=120000"/>
+ properties="hostName=${bind.address}, socketTimeoutMillis=120000"/>
<!-- Cache configuration.
@@ -292,14 +275,9 @@
-->
<defaultCache
maxElementsInMemory="1000000"
- eternal="false"
- timeToIdleSeconds="120"
- timeToLiveSeconds="120"
- overflowToDisk="true"
- maxElementsOnDisk="10000000"
+ eternal="true"
+ overflowToDisk="false"
diskPersistent="false"
- diskExpiryThreadIntervalSeconds="120"
- memoryStoreEvictionPolicy="LRU"
/>
<!--
@@ -317,9 +295,7 @@
-->
<cache name="cache"
maxElementsInMemory="1000000"
- eternal="false"
- timeToIdleSeconds="120"
- timeToLiveSeconds="120"
+ eternal="true"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
Modified: benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-sync.xml
===================================================================
--- benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-sync.xml 2008-09-11 11:46:27 UTC (rev 6709)
+++ benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache-repl-sync.xml 2008-09-11 11:49:31 UTC (rev 6710)
@@ -1,23 +1,6 @@
<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.
@@ -123,8 +106,8 @@
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=automatic,
- multicastGroupAddress=228.1.2.3,
- multicastGroupPort=48866, timeToLive=64"/>
+ multicastGroupAddress=228.1.2.3,
+ multicastGroupPort=48866, timeToLive=64"/>
<!--
@@ -171,7 +154,7 @@
-->
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
- properties="hostName=127.0.0.1, socketTimeoutMillis=120000"/>
+ properties="hostName=${bind.address}, socketTimeoutMillis=120000"/>
<!-- Cache configuration.
@@ -292,14 +275,9 @@
-->
<defaultCache
maxElementsInMemory="1000000"
- eternal="false"
- timeToIdleSeconds="120"
- timeToLiveSeconds="120"
- overflowToDisk="true"
- maxElementsOnDisk="10000000"
+ eternal="true"
+ overflowToDisk="false"
diskPersistent="false"
- diskExpiryThreadIntervalSeconds="120"
- memoryStoreEvictionPolicy="LRU"
/>
<!--
@@ -311,20 +289,18 @@
-->
<!--
- Sample distributed cache named sampleDistributedCache2.
- This cache replicates using specific properties.
- It only replicates updates and does so synchronously via copy
+ Sample distributed cache named sampleDistributedCache3.
+ This cache replicates using defaults except that the asynchronous replication
+ interval is set to 200ms.
-->
<cache name="cache"
maxElementsInMemory="1000000"
- eternal="false"
- timeToIdleSeconds="120"
- timeToLiveSeconds="120"
+ eternal="true"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false, replicatePuts=true,
- replicateUpdates=true, replicateUpdatesViaCopy=true,
- replicateRemovals=true"/>
+ replicateUpdates=true, replicateUpdatesViaCopy=true,
+ replicateRemovals=true"/>
</cache>
</ehcache>
Added: benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache.xsd
===================================================================
--- benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache.xsd (rev 0)
+++ benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/conf/ehcache.xsd 2008-09-11 11:49:31 UTC (rev 6710)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+ <xs:element name="ehcache" >
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="1" ref="diskStore"/>
+ <xs:element minOccurs="0" maxOccurs="1"
+ ref="cacheManagerEventListenerFactory"/>
+ <xs:element minOccurs="0" maxOccurs="1"
+ ref="cacheManagerPeerProviderFactory"/>
+ <xs:element minOccurs="0" maxOccurs="1"
+ ref="cacheManagerPeerListenerFactory"/>
+ <xs:element ref="defaultCache"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="cache"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="diskStore">
+ <xs:complexType>
+ <xs:attribute name="path" use="optional" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cacheManagerEventListenerFactory">
+ <xs:complexType>
+ <xs:attribute name="class" use="required"/>
+ <xs:attribute name="properties" use="optional"/>
+ <xs:attribute name="propertySeparator" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cacheManagerPeerProviderFactory">
+ <xs:complexType>
+ <xs:attribute name="class" use="required"/>
+ <xs:attribute name="properties" use="optional"/>
+ <xs:attribute name="propertySeparator" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cacheManagerPeerListenerFactory">
+ <xs:complexType>
+ <xs:attribute name="class" use="required"/>
+ <xs:attribute name="properties" use="optional"/>
+ <xs:attribute name="propertySeparator" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+ <!-- add clone support for addition of cacheExceptionHandler. Important! -->
+ <xs:element name="defaultCache">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheEventListenerFactory"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheExtensionFactory"/>
+ <xs:element minOccurs="0" maxOccurs="1" ref="bootstrapCacheLoaderFactory"/>
+ <xs:element minOccurs="0" maxOccurs="1" ref="cacheExceptionHandlerFactory"/>
+ <xs:element minOccurs="0" maxOccurs="1" ref="cacheLoaderFactory"/>
+ </xs:sequence>
+ <xs:attribute name="diskExpiryThreadIntervalSeconds" use="optional" type="xs:integer"/>
+ <xs:attribute name="diskSpoolBufferSizeMB" use="optional" type="xs:integer"/>
+ <xs:attribute name="diskPersistent" use="optional" type="xs:boolean"/>
+ <xs:attribute name="eternal" use="required" type="xs:boolean"/>
+ <xs:attribute name="maxElementsInMemory" use="required" type="xs:integer"/>
+ <xs:attribute name="memoryStoreEvictionPolicy" use="optional" type="xs:string"/>
+ <xs:attribute name="overflowToDisk" use="required" type="xs:boolean"/>
+ <xs:attribute name="timeToIdleSeconds" use="optional" type="xs:integer"/>
+ <xs:attribute name="timeToLiveSeconds" use="optional" type="xs:integer"/>
+ <xs:attribute name="maxElementsOnDisk" use="optional" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cache">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheEventListenerFactory"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheExtensionFactory"/>
+ <xs:element minOccurs="0" maxOccurs="1" ref="bootstrapCacheLoaderFactory"/>
+ <xs:element minOccurs="0" maxOccurs="1" ref="cacheExceptionHandlerFactory"/>
+ <xs:element minOccurs="0" maxOccurs="1" ref="cacheLoaderFactory"/>
+ </xs:sequence>
+ <xs:attribute name="diskExpiryThreadIntervalSeconds" use="optional" type="xs:integer"/>
+ <xs:attribute name="diskSpoolBufferSizeMB" use="optional" type="xs:integer"/>
+ <xs:attribute name="diskPersistent" use="optional" type="xs:boolean"/>
+ <xs:attribute name="eternal" use="required" type="xs:boolean"/>
+ <xs:attribute name="maxElementsInMemory" use="required" type="xs:integer"/>
+ <xs:attribute name="memoryStoreEvictionPolicy" use="optional" type="xs:string"/>
+ <xs:attribute name="name" use="required" type="xs:string"/>
+ <xs:attribute name="overflowToDisk" use="required" type="xs:boolean"/>
+ <xs:attribute name="timeToIdleSeconds" use="optional" type="xs:integer"/>
+ <xs:attribute name="timeToLiveSeconds" use="optional" type="xs:integer"/>
+ <xs:attribute name="maxElementsOnDisk" use="optional" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cacheEventListenerFactory">
+ <xs:complexType>
+ <xs:attribute name="class" use="required"/>
+ <xs:attribute name="properties" use="optional"/>
+ <xs:attribute name="propertySeparator" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="bootstrapCacheLoaderFactory">
+ <xs:complexType>
+ <xs:attribute name="class" use="required"/>
+ <xs:attribute name="properties" use="optional"/>
+ <xs:attribute name="propertySeparator" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cacheExtensionFactory">
+ <xs:complexType>
+ <xs:attribute name="class" use="required"/>
+ <xs:attribute name="properties" use="optional"/>
+ <xs:attribute name="propertySeparator" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cacheExceptionHandlerFactory">
+ <xs:complexType>
+ <xs:attribute name="class" use="required"/>
+ <xs:attribute name="properties" use="optional"/>
+ <xs:attribute name="propertySeparator" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cacheLoaderFactory">
+ <xs:complexType>
+ <xs:attribute name="class" use="required"/>
+ <xs:attribute name="properties" use="optional"/>
+ <xs:attribute name="propertySeparator" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
Added: benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/src/org/cachebench/cachewrappers/EHCacheReplicationTest.java
===================================================================
--- benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/src/org/cachebench/cachewrappers/EHCacheReplicationTest.java (rev 0)
+++ benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/src/org/cachebench/cachewrappers/EHCacheReplicationTest.java 2008-09-11 11:49:31 UTC (rev 6710)
@@ -0,0 +1,102 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.cachebench.cachewrappers;
+
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeMethod;
+import net.sf.ehcache.CacheManager;
+import net.sf.ehcache.Element;
+import net.sf.ehcache.Ehcache;
+
+/**
+ * @author Mircea.Markus at jboss.com
+ */
+ at Test
+public class EHCacheReplicationTest
+{
+
+ @BeforeMethod
+ public void setUp()
+ {
+ System.setProperty("bind.address","127.0.0.1");//bind address referenced from config file
+ }
+
+
+ public void testSyncReplication() throws Exception
+ {
+ Ehcache cache1;
+ Ehcache cache2;
+
+ CacheManager c1 = new CacheManager("C:\\jboss\\benchmarks\\CacheBenchmarkFwk\\cache-products\\ehcache-1.5.0\\conf\\ehcache-repl-sync.xml");
+ CacheManager c2 = new CacheManager("C:\\jboss\\benchmarks\\CacheBenchmarkFwk\\cache-products\\ehcache-1.5.0\\conf\\ehcache-repl-sync.xml");
+
+
+ cache1 = c1.getCache("cache");
+ cache2 = c2.getCache("cache");
+
+ Thread.sleep(5000);
+
+ System.out.println("c1 members: " + c1.getCachePeerListener().getBoundCachePeers());
+ System.out.println("c2 members" + c2.getCachePeerListener().getBoundCachePeers());
+ assert c1.getCachePeerListener().getBoundCachePeers().size() == 1;
+ assert c2.getCachePeerListener().getBoundCachePeers().size() == 1;
+
+ for (int i = 0; i < 100; i++)
+ {
+ cache1.put(new Element("key" + i, "value" + i));
+ assert cache2.get("key" + i).getValue().equals("value" + i);
+ }
+ System.out.println(cache1.getKeys());
+ System.out.println(cache2.getKeys());
+
+ c1.shutdown();
+ c2.shutdown();
+ }
+
+
+ public void testInvalidation() throws Exception
+ {
+ Ehcache cache1;
+ Ehcache cache2;
+
+ CacheManager c1 = new CacheManager("C:\\jboss\\benchmarks\\CacheBenchmarkFwk\\cache-products\\ehcache-1.5.0\\conf\\ehcache-invalidate-sync.xml");
+ CacheManager c2 = new CacheManager("C:\\jboss\\benchmarks\\CacheBenchmarkFwk\\cache-products\\ehcache-1.5.0\\conf\\ehcache-invalidate-sync.xml");
+
+ cache1 = c1.getCache("cache");
+ cache2 = c2.getCache("cache");
+
+ Thread.sleep(5000);
+
+ System.out.println("c1 members: " + c1.getCachePeerListener().getBoundCachePeers());
+ System.out.println("c2 members" + c2.getCachePeerListener().getBoundCachePeers());
+ assert c1.getCachePeerListener().getBoundCachePeers().size() == 1;
+ assert c2.getCachePeerListener().getBoundCachePeers().size() == 1;
+
+ cache1.put(new Element("key","value"));
+ assert cache2.get("key").getValue().equals("value");
+ cache2.put(new Element("key","newValue"));
+ assert cache1.get("key") == null;
+
+ c1.shutdown();
+ c2.shutdown();
+ }
+}
Modified: benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/src/org/cachebench/cachewrappers/EHCacheWrapper.java
===================================================================
--- benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/src/org/cachebench/cachewrappers/EHCacheWrapper.java 2008-09-11 11:46:27 UTC (rev 6709)
+++ benchmarks/benchmark-fwk/trunk/cache-products/ehcache-1.5.0/src/org/cachebench/cachewrappers/EHCacheWrapper.java 2008-09-11 11:49:31 UTC (rev 6710)
@@ -13,13 +13,13 @@
import java.net.URL;
import java.util.List;
import java.util.Map;
-import java.util.StringTokenizer;
/**
* An implementation of SerializableCacheWrapper that uses EHCache as an underlying implementation.
* <p/>
* Pass in a -Dbind.address=IP_ADDRESS
+ * ehcache propery files allows referencing system properties through syntax ${bind.address}.
*
* @author Manik Surtani (manik at surtani.org)
* @version $Id: EHCacheWrapper.java,v 1.6 2007/05/21 16:17:56 msurtani Exp $
@@ -28,7 +28,7 @@
{
private CacheManager manager;
private Ehcache cache;
- private Log logger = LogFactory.getLog("org.cachebench.cachewrappers.EHCacheWrapper");
+ private Log log = LogFactory.getLog("org.cachebench.cachewrappers.EHCacheWrapper");
boolean localmode;
/* (non-Javadoc)
@@ -36,74 +36,32 @@
*/
public void init(Map parameters) throws Exception
{
+ if (log.isTraceEnabled()) log.trace("Entering EHCacheWrapper.init()");
localmode = (Boolean.parseBoolean((String) parameters.get("localOnly")));
- logger.debug("Initializing the cache with props " + parameters);
+ log.debug("Initializing the cache with props " + parameters);
URL url = getClass().getClassLoader().getResource((String) parameters.get("config"));
- logger.debug("Config URL = " + url);
+ log.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);
setUp();
- logger.debug("Finish Initializing the cache");
+ log.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);
+ log.info("Caches avbl:");
+ for (String s : manager.getCacheNames()) log.info(" * " + s);
cache = manager.getCache("cache");
- logger.info("Using named cache " + cache);
+ log.info("Using named cache " + cache);
if (!localmode)
{
- logger.info("Bounded peers: " + manager.getCachePeerListener().getBoundCachePeers());
- logger.info("Remote peers: " + manager.getCacheManagerPeerProvider().listRemoteCachePeers(cache));
+ log.info("Bounded peers: " + manager.getCachePeerListener().getBoundCachePeers());
+ log.info("Remote peers: " + manager.getCacheManagerPeerProvider().listRemoteCachePeers(cache));
}
}
@@ -171,6 +129,11 @@
public Object getReplicatedData(List<String> path, String key) throws Exception
{
- return get(path, key);
+ Object o = get(path, key);
+ if (log.isTraceEnabled())
+ {
+ log.trace("Result for the key: '" + key + "' is value '" + o + "'");
+ }
+ return o;
}
}
More information about the jbosscache-commits
mailing list