[infinispan-commits] Infinispan SVN: r1525 - in trunk/core/src: main/resources/xslt and 2 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Fri Feb 19 10:12:31 EST 2010
Author: manik.surtani at jboss.com
Date: 2010-02-19 10:12:30 -0500 (Fri, 19 Feb 2010)
New Revision: 1525
Added:
trunk/core/src/main/resources/xslt/ehcache1x2infinispan4x.xslt
trunk/core/src/test/resources/configs/ehcache/ehcache-1.6.xml
Removed:
trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt
trunk/core/src/test/resources/configs/ehcache/ehcache-1.6RC1.xml
Modified:
trunk/core/src/main/java/org/infinispan/config/parsing/ConfigFilesConvertor.java
trunk/core/src/test/java/org/infinispan/config/parsing/EHCache2InfinispanTransformerTest.java
Log:
Support all EHCache 1.x configs
Modified: trunk/core/src/main/java/org/infinispan/config/parsing/ConfigFilesConvertor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/parsing/ConfigFilesConvertor.java 2010-02-19 14:53:10 UTC (rev 1524)
+++ trunk/core/src/main/java/org/infinispan/config/parsing/ConfigFilesConvertor.java 2010-02-19 15:12:30 UTC (rev 1525)
@@ -55,10 +55,9 @@
public class ConfigFilesConvertor {
static final String JBOSS_CACHE3X = "JBossCache3x";
- static final String EHCACHE_CACHE16X = "Ehcache16x";
- static final String EHCACHE_CACHE15X = "Ehcache15x";
+ static final String EHCACHE_CACHE1X = "Ehcache1x";
static final String COHERENCE_35X = "Coherence35x";
- static final String[] SUPPORTED_FORMATS = {JBOSS_CACHE3X, EHCACHE_CACHE15X, EHCACHE_CACHE16X, COHERENCE_35X};
+ static final String[] SUPPORTED_FORMATS = {JBOSS_CACHE3X, EHCACHE_CACHE1X, COHERENCE_35X};
public void parse(InputStream is, OutputStream os, String xsltFile) throws Exception {
InputStream xsltInStream = new FileLookup().lookupFile(xsltFile);
@@ -102,7 +101,7 @@
private static void help() {
System.out.println("Usage:");
- System.out.println("ConfigFilesConvertor [-source <the file to be transformed>] [-destination <where to store resulting XML>] [-type <the type of the source, possible values being: " + Arrays.asList(SUPPORTED_FORMATS) + " >]");
+ System.out.println("importConfig [-source <the file to be transformed>] [-destination <where to store resulting XML>] [-type <the type of the source, possible values being: " + Arrays.asList(SUPPORTED_FORMATS) + " >]");
}
@@ -139,8 +138,8 @@
if (type.equals(JBOSS_CACHE3X)) {
transformFromJbossCache3x(sourceName, destinationName);
- } else if (type.equals(EHCACHE_CACHE15X) || type.equals(EHCACHE_CACHE16X)) {
- transformFromEhcache15X_16x(sourceName, destinationName);
+ } else if (type.equals(EHCACHE_CACHE1X)) {
+ transformFromEhcache1x(sourceName, destinationName);
} else if (type.equals(COHERENCE_35X)) {
transformFromCoherence35x(sourceName, destinationName);
}
@@ -171,7 +170,7 @@
}
fos = new FileOutputStream(destinationName);
- convertor.parse(is, fos, "xslt/ehcache16x2infinispan4x.xslt");
+ convertor.parse(is, fos, "xslt/ehcache1x2infinispan4x.xslt");
} finally {
Util.flushAndCloseStream(fos);
Util.closeStream(is);
@@ -233,13 +232,13 @@
}
}
- private static void transformFromEhcache15X_16x(String sourceName, String destinationName) throws Exception {
+ private static void transformFromEhcache1x(String sourceName, String destinationName) throws Exception {
File oldConfig = new File(sourceName);
if (!oldConfig.exists()) {
System.err.println("File specified as input ('" + sourceName + ") does not exist.");
System.exit(1);
}
- ConfigFilesConvertor convertor = new ConfigFilesConvertor();
+ ConfigFilesConvertor converter = new ConfigFilesConvertor();
FileInputStream is = null;
FileOutputStream fos = null;
@@ -254,7 +253,7 @@
}
fos = new FileOutputStream(destinationName);
- convertor.parse(is, fos, "xslt/ehcache16x2infinispan4x.xslt");
+ converter.parse(is, fos, "xslt/ehcache1x2infinispan4x.xslt");
} finally {
Util.flushAndCloseStream(fos);
Util.closeStream(is);
Deleted: trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt
===================================================================
--- trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt 2010-02-19 14:53:10 UTC (rev 1524)
+++ trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt 2010-02-19 15:12:30 UTC (rev 1525)
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<xsl:stylesheet xmlns="urn:infinispan:config:4.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
- <xsl:output method="xml" indent="yes" version="1.0" encoding="UTF-8" omit-xml-declaration="no"/>
- <xsl:template match="/ehcache">
- <xsl:comment>
- This XSL stylesheet is used to convert an Ehcache 1.5.x/1.6.x configuration into an Infinispan 4.0.x configuration.
- Note that Infinispan supports JGroups only, caches are migrated to using JGroups.
- Peer discovery will also be using JGroups. Eviction policies are translated to LRU, FIFO or NONE.
- </xsl:comment>
- <xsl:element name="infinispan">
-
- <xsl:element name="global">
- <transport />
- <asyncListenerExecutor factory="org.infinispan.executors.DefaultExecutorFactory">
- <properties>
- <property name="threadNamePrefix" value="AsyncTransportThread"/>
- </properties>
- </asyncListenerExecutor>
-
- <asyncTransportExecutor factory="org.infinispan.executors.DefaultExecutorFactory">
- <properties>
- <property name="threadNamePrefix" value="AsyncListenerThread"/>
- </properties>
- </asyncTransportExecutor>
-
- <evictionScheduledExecutor factory="org.infinispan.executors.DefaultScheduledExecutorFactory">
- <properties>
- <property name="threadNamePrefix" value="EvictionThread"/>
- </properties>
- </evictionScheduledExecutor>
-
- <replicationQueueScheduledExecutor factory="org.infinispan.executors.DefaultScheduledExecutorFactory">
- <properties>
- <property name="threadNamePrefix" value="ReplicationQueueThread"/>
- </properties>
- </replicationQueueScheduledExecutor>
-
- <globalJmxStatistics jmxDomain="infinispan" enabled="true"/>
-
- <shutdown hookBehavior="DEFAULT"/>
- </xsl:element>
-
- <xsl:for-each select="defaultCache">
- <xsl:element name="default">
- <xsl:call-template name="generateCache"/>
- </xsl:element>
- </xsl:for-each>
-
- <xsl:for-each select="cache">
- <xsl:element name="namedCache">
- <xsl:attribute name="name">
- <xsl:value-of select="@name"/>
- </xsl:attribute>
- <xsl:call-template name="generateCache"/>
- </xsl:element>
- </xsl:for-each>
- </xsl:element>
- </xsl:template>
-
- <xsl:template name="generateCache">
- <xsl:if test="@memoryStoreEvictionPolicy">
- <xsl:element name="eviction">
- <xsl:attribute name="strategy">
- <xsl:if test="contains(@memoryStoreEvictionPolicy, 'LRU') or contains(@memoryStoreEvictionPolicy, 'FIFO')">
- <xsl:value-of select="@memoryStoreEvictionPolicy"/>
- </xsl:if>
-
- <xsl:if test="contains(@memoryStoreEvictionPolicy, 'LFU')">
- <xsl:message terminate="no">WARNING!!! Infinispan does not support LFU eviction. Using LRU instead.
- </xsl:message>
- <xsl:text>LRU</xsl:text>
- </xsl:if>
- </xsl:attribute>
-
- <xsl:attribute name="wakeUpInterval">
- <xsl:choose>
- <xsl:when test="@diskExpiryThreadIntervalSeconds">
- <xsl:value-of select="concat(@diskExpiryThreadIntervalSeconds,'000')"/>
- </xsl:when>
- <xsl:otherwise>
- <!-- by default the value is 120 seconds in EHCache-->
- <xsl:value-of select="120000"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
-
- <xsl:if test="@maxElementsInMemory">
- <xsl:attribute name="maxEntries">
- <xsl:value-of select="@maxElementsInMemory"/>
- </xsl:attribute>
- </xsl:if>
- </xsl:element>
- </xsl:if>
-
- <xsl:if
- test="(@timeToIdleSeconds or @timeToLiveSeconds) and not(@eternal = 'true')">
- <xsl:element name="expiration">
- <xsl:if test="@timeToIdleSeconds">
- <xsl:attribute name="maxIdle">
- <xsl:value-of select="@timeToIdleSeconds"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test="@timeToLiveSeconds">
- <xsl:attribute name="lifespan">
- <xsl:value-of select="@timeToLiveSeconds"/>
- </xsl:attribute>
- </xsl:if>
- </xsl:element>
- </xsl:if>
-
- <xsl:choose>
- <xsl:when test="@overflowToDisk='true'">
- <xsl:if test="/ehcache/defaultCache[@overflowToDisk = 'false'] or not(@name)">
- <xsl:element name="loaders">
- <xsl:attribute name="passivation">true</xsl:attribute>
- <xsl:attribute name="preload">
- <xsl:value-of select="string(@diskPersistent = 'true')"/>
- </xsl:attribute>
- <xsl:element name="loader">
- <xsl:attribute name="class">org.infinispan.loaders.file.FileCacheStore</xsl:attribute>
- <xsl:attribute name="purgeOnStartup">
- <xsl:value-of select="string(@diskPersistent = 'true')"/>
- </xsl:attribute>
- <xsl:if test="/ehcache/diskStore[@path]">
- <properties>
- <xsl:element name="property">
- <xsl:attribute name="name">location</xsl:attribute>
- <xsl:attribute name="value">
- <xsl:choose>
- <xsl:when
- test="/ehcache/diskStore[@path='user.home' or @path='user.dir' or @path='java.io.tmpdir']">
- <xsl:value-of select="concat('${',/ehcache/diskStore/@path,'}')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="/ehcache/diskStore/@path"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- </xsl:element>
- </properties>
- </xsl:if>
- </xsl:element>
- </xsl:element>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <xsl:if test="/ehcache/defaultCache[@overflowToDisk = 'true']">
- <!-- if this cache does not overflow to disk then override the possible cache loader definition from 'defaultCache' -->
- <loaders/>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:if test="cacheEventListenerFactory">
- <xsl:element name="clustering">
- <xsl:attribute name="mode">
- <xsl:choose>
- <xsl:when test="contains(cacheEventListenerFactory/@properties, 'replicatePutsViaCopy=false')">
- <xsl:text>invalidation</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>distribution</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- <xsl:choose>
- <xsl:when
- test="contains(cacheEventListenerFactory/@properties, 'replicateAsynchronously=false')">
- <sync/>
- </xsl:when>
- <xsl:otherwise>
- <async/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:if>
- </xsl:template>
-</xsl:stylesheet>
Copied: trunk/core/src/main/resources/xslt/ehcache1x2infinispan4x.xslt (from rev 1515, trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt)
===================================================================
--- trunk/core/src/main/resources/xslt/ehcache1x2infinispan4x.xslt (rev 0)
+++ trunk/core/src/main/resources/xslt/ehcache1x2infinispan4x.xslt 2010-02-19 15:12:30 UTC (rev 1525)
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsl:stylesheet xmlns="urn:infinispan:config:4.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output method="xml" indent="yes" version="1.0" encoding="UTF-8" omit-xml-declaration="no"/>
+ <xsl:template match="/ehcache">
+ <xsl:comment>
+ This XSL stylesheet is used to convert an EHCache 1.x configuration into an Infinispan 4.0.x configuration.
+ Note that Infinispan supports JGroups only, caches are migrated to using JGroups.
+ Peer discovery will also be using JGroups. Eviction policies are translated to LRU, FIFO or NONE.
+ </xsl:comment>
+ <xsl:element name="infinispan">
+
+ <xsl:element name="global">
+ <transport />
+ <asyncListenerExecutor factory="org.infinispan.executors.DefaultExecutorFactory">
+ <properties>
+ <property name="threadNamePrefix" value="AsyncTransportThread"/>
+ </properties>
+ </asyncListenerExecutor>
+
+ <asyncTransportExecutor factory="org.infinispan.executors.DefaultExecutorFactory">
+ <properties>
+ <property name="threadNamePrefix" value="AsyncListenerThread"/>
+ </properties>
+ </asyncTransportExecutor>
+
+ <evictionScheduledExecutor factory="org.infinispan.executors.DefaultScheduledExecutorFactory">
+ <properties>
+ <property name="threadNamePrefix" value="EvictionThread"/>
+ </properties>
+ </evictionScheduledExecutor>
+
+ <replicationQueueScheduledExecutor factory="org.infinispan.executors.DefaultScheduledExecutorFactory">
+ <properties>
+ <property name="threadNamePrefix" value="ReplicationQueueThread"/>
+ </properties>
+ </replicationQueueScheduledExecutor>
+
+ <globalJmxStatistics jmxDomain="infinispan" enabled="true"/>
+
+ <shutdown hookBehavior="DEFAULT"/>
+ </xsl:element>
+
+ <xsl:for-each select="defaultCache">
+ <xsl:element name="default">
+ <xsl:call-template name="generateCache"/>
+ </xsl:element>
+ </xsl:for-each>
+
+ <xsl:for-each select="cache">
+ <xsl:element name="namedCache">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:call-template name="generateCache"/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template name="generateCache">
+ <xsl:if test="@memoryStoreEvictionPolicy">
+ <xsl:element name="eviction">
+ <xsl:attribute name="strategy">
+ <xsl:if test="contains(@memoryStoreEvictionPolicy, 'LRU') or contains(@memoryStoreEvictionPolicy, 'FIFO')">
+ <xsl:value-of select="@memoryStoreEvictionPolicy"/>
+ </xsl:if>
+
+ <xsl:if test="contains(@memoryStoreEvictionPolicy, 'LFU')">
+ <xsl:message terminate="no">WARNING!!! Infinispan does not support LFU eviction. Using LRU instead.
+ </xsl:message>
+ <xsl:text>LRU</xsl:text>
+ </xsl:if>
+ </xsl:attribute>
+
+ <xsl:attribute name="wakeUpInterval">
+ <xsl:choose>
+ <xsl:when test="@diskExpiryThreadIntervalSeconds">
+ <xsl:value-of select="concat(@diskExpiryThreadIntervalSeconds,'000')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- by default the value is 120 seconds in EHCache-->
+ <xsl:value-of select="120000"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+
+ <xsl:if test="@maxElementsInMemory">
+ <xsl:attribute name="maxEntries">
+ <xsl:value-of select="@maxElementsInMemory"/>
+ </xsl:attribute>
+ </xsl:if>
+ </xsl:element>
+ </xsl:if>
+
+ <xsl:if
+ test="(@timeToIdleSeconds or @timeToLiveSeconds) and not(@eternal = 'true')">
+ <xsl:element name="expiration">
+ <xsl:if test="@timeToIdleSeconds">
+ <xsl:attribute name="maxIdle">
+ <xsl:value-of select="@timeToIdleSeconds"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="@timeToLiveSeconds">
+ <xsl:attribute name="lifespan">
+ <xsl:value-of select="@timeToLiveSeconds"/>
+ </xsl:attribute>
+ </xsl:if>
+ </xsl:element>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test="@overflowToDisk='true'">
+ <xsl:if test="/ehcache/defaultCache[@overflowToDisk = 'false'] or not(@name)">
+ <xsl:element name="loaders">
+ <xsl:attribute name="passivation">true</xsl:attribute>
+ <xsl:attribute name="preload">
+ <xsl:value-of select="string(@diskPersistent = 'true')"/>
+ </xsl:attribute>
+ <xsl:element name="loader">
+ <xsl:attribute name="class">org.infinispan.loaders.file.FileCacheStore</xsl:attribute>
+ <xsl:attribute name="purgeOnStartup">
+ <xsl:value-of select="string(@diskPersistent = 'true')"/>
+ </xsl:attribute>
+ <xsl:if test="/ehcache/diskStore[@path]">
+ <properties>
+ <xsl:element name="property">
+ <xsl:attribute name="name">location</xsl:attribute>
+ <xsl:attribute name="value">
+ <xsl:choose>
+ <xsl:when
+ test="/ehcache/diskStore[@path='user.home' or @path='user.dir' or @path='java.io.tmpdir']">
+ <xsl:value-of select="concat('${',/ehcache/diskStore/@path,'}')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="/ehcache/diskStore/@path"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ </xsl:element>
+ </properties>
+ </xsl:if>
+ </xsl:element>
+ </xsl:element>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="/ehcache/defaultCache[@overflowToDisk = 'true']">
+ <!-- if this cache does not overflow to disk then override the possible cache loader definition from 'defaultCache' -->
+ <loaders/>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="cacheEventListenerFactory">
+ <xsl:element name="clustering">
+ <xsl:attribute name="mode">
+ <xsl:choose>
+ <xsl:when test="contains(cacheEventListenerFactory/@properties, 'replicatePutsViaCopy=false')">
+ <xsl:text>invalidation</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>distribution</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:choose>
+ <xsl:when
+ test="contains(cacheEventListenerFactory/@properties, 'replicateAsynchronously=false')">
+ <sync/>
+ </xsl:when>
+ <xsl:otherwise>
+ <async/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:element>
+ </xsl:if>
+ </xsl:template>
+</xsl:stylesheet>
Modified: trunk/core/src/test/java/org/infinispan/config/parsing/EHCache2InfinispanTransformerTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/config/parsing/EHCache2InfinispanTransformerTest.java 2010-02-19 14:53:10 UTC (rev 1524)
+++ trunk/core/src/test/java/org/infinispan/config/parsing/EHCache2InfinispanTransformerTest.java 2010-02-19 15:12:30 UTC (rev 1525)
@@ -14,7 +14,6 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
-import java.io.FileOutputStream;
import static java.lang.Thread.currentThread;
import static org.testng.Assert.assertEquals;
@@ -25,12 +24,12 @@
@Test(groups = "functional", testName = "config.parsing.EHCache2InfinispanTransformerTest")
public class EHCache2InfinispanTransformerTest extends AbstractInfinispanTest {
- public static final String XSLT_FILE = "xslt/ehcache16x2infinispan4x.xslt";
+ public static final String XSLT_FILE = "xslt/ehcache1x2infinispan4x.xslt";
private static final String BASE_DIR = "configs/ehcache";
ConfigFilesConvertor convertor = new ConfigFilesConvertor();
public void testEhCache16File() throws Exception {
- testAllFile("/ehcache-1.6RC1.xml");
+ testAllFile("/ehcache-1.6.xml");
}
// @Test(enabled=false)
Copied: trunk/core/src/test/resources/configs/ehcache/ehcache-1.6.xml (from rev 1515, trunk/core/src/test/resources/configs/ehcache/ehcache-1.6RC1.xml)
===================================================================
--- trunk/core/src/test/resources/configs/ehcache/ehcache-1.6.xml (rev 0)
+++ trunk/core/src/test/resources/configs/ehcache/ehcache-1.6.xml 2010-02-19 15:12:30 UTC (rev 1525)
@@ -0,0 +1,584 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="ehcache-1.6.xsd" >
+
+ <!--
+ CacheManager Configuration
+ ==========================
+ An ehcache.xml corresponds to a single CacheManager.
+
+ See instructions below or the ehcache schema (ehcache-1.6.xsd) on how to configure.
+
+ System property tokens can be specified in this file which are replaced when the configuration
+ is loaded. For example multicastGroupPort=${multicastGroupPort} can be replaced with the
+ System property either from an environment variable or a system property specified with a
+ command line switch such as -DmulticastGroupPort=4446.
+
+ DiskStore configuration
+ =======================
+
+ The diskStore element is optional. To turn off disk store path creation, comment out the diskStore
+ element below.
+
+ Configure it if you have overflowToDisk or diskPersistent enabled for any cache.
+
+ If it is not configured, and a cache is created which requires a disk store, a warning will be
+ issued and java.io.tmpdir will automatically be used.
+
+ diskStore has only one attribute - "path". It is the path to the directory where
+ .data and .index files will be created.
+
+ If the path is one of the following Java System Property it is replaced by its value in the
+ running VM. For backward compatibility these are not specified without being enclosed in the ${token}
+ replacement syntax.
+
+ 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
+ * ehcache.disk.store.dir - A system property you would normally specify on the command line
+ e.g. java -Dehcache.disk.store.dir=/u01/myapp/diskdir ...
+
+ Subdirectories can be specified below the property e.g. java.io.tmpdir/one
+ -->
+ <diskStore path="java.io.tmpdir"/>
+
+ <!--
+ CacheManagerEventListener
+ =========================
+ Specifies a CacheManagerEventListenerFactory 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=""/>
+
+
+ <!--
+ CacheManagerPeerProvider
+ ========================
+ (For distributed operation)
+
+ Specifies a CacheManagerPeerProviderFactory which will be used to create a
+ CacheManagerPeerProvider, which discovers other CacheManagers in the cluster.
+
+ One or more providers can be configured. The first one in the ehcache.xml is the default, which is used
+ for replication and bootstrapping.
+
+ The attributes of cacheManagerPeerProviderFactory are:
+ * class - a fully qualified factory class name
+ * properties - comma separated properties having meaning only to the factory.
+
+ Providers are available for RMI, JGroups and JMS as shown following.
+
+ RMICacheManagerPeerProvider
+ +++++++++++++++++++++++++++
+
+ 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"
+ propertySeparator="," />
+
+ 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.
+
+ JGroupsCacheManagerPeerProvider
+ +++++++++++++++++++++++++++++++
+ <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
+ properties="connect=UDP(mcast_addr=231.12.21.132;mcast_port=45566;ip_ttl=32;
+ mcast_send_buf_size=150000;mcast_recv_buf_size=80000):
+ PING(timeout=2000;num_initial_members=6):
+ MERGE2(min_interval=5000;max_interval=10000):
+ FD_SOCK:VERIFY_SUSPECT(timeout=1500):
+ pbcast.NAKACK(gc_lag=10;retransmit_timeout=3000):
+ UNICAST(timeout=5000):
+ pbcast.STABLE(desired_avg_gossip=20000):
+ FRAG:
+ pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=false)"
+ propertySeparator="::"
+ />
+ The only property necessary is the connect String used by jgroups to configure itself. Refer to the Jgroups documentation for explanation
+ of all the protocols. The example above uses UDP multicast. If the connect property is not specified the default JGroups connection will be
+ used.
+
+
+ JMSCacheManagerPeerProviderFactory
+ ++++++++++++++++++++++++++++++++++
+ <cacheManagerPeerProviderFactory
+ class="net.sf.ehcache.distribution.jms.JMSCacheManagerPeerProviderFactory"
+ properties="..."
+ propertySeparator=","
+ />
+
+ The JMS PeerProviderFactory uses JNDI to maintain message queue independence. Refer to the manual for full configuration
+ examples using ActiveMQ and Open Message Queue.
+
+ Valid properties are:
+ * initialContextFactoryName (mandatory) - the name of the factory used to create the message queue initial context.
+ * providerURL (mandatory) - the JNDI configuration information for the service provider to use.
+ * topicConnectionFactoryBindingName (mandatory) - the JNDI binding name for the TopicConnectionFactory
+ * topicBindingName (mandatory) - the JNDI binding name for the topic name
+ * getQueueBindingName (mandatory only if using jmsCacheLoader) - the JNDI binding name for the queue name
+ * securityPrincipalName - the JNDI java.naming.security.principal
+ * securityCredentials - the JNDI java.naming.security.credentials
+ * urlPkgPrefixes - the JNDI java.naming.factory.url.pkgs
+ * userName - the user name to use when creating the TopicConnection to the Message Queue
+ * password - the password to use when creating the TopicConnection to the Message Queue
+ * acknowledgementMode - the JMS Acknowledgement mode for both publisher and subscriber. The available choices are
+ AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE and SESSION_TRANSACTED. The default is AUTO_ACKNOWLEDGE.
+ -->
+
+ <cacheManagerPeerProviderFactory
+ class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
+ properties="peerDiscovery=automatic,
+ multicastGroupAddress=230.0.0.1,
+ multicastGroupPort=4446, timeToLive=1"
+ propertySeparator=","
+ />
+
+
+ <!--
+ CacheManagerPeerListener
+ ========================
+ (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,
+ remoteObjectPort=40002,
+ socketTimeoutMillis=120000"
+ propertySeparator="," />
+
+ 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 RMI Registry listener listens on. This defaults to a free port if not specified.
+ * remoteObjectPort - the port number on which the remote objects bound in the registry receive calls.
+ 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 to 120000ms.
+
+ -->
+ <cacheManagerPeerListenerFactory
+ class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>
+
+
+ <!--
+ 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 and elements 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.
+
+ diskSpoolBufferSizeMB:
+ This is the size to allocate the DiskStore for a spool buffer. Writes are made
+ to this area and then asynchronously written to disk. The default size is 30MB.
+ Each spool buffer is used only by its cache. If you get OutOfMemory errors consider
+ lowering this value. To improve DiskStore performance consider increasing it. Trace level
+ logging in the DiskStore will show if put back ups are occurring.
+
+ 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.
+
+ * cacheExtensionFactory - Specifies a CacheExtension, a generic mechansim to tie a class
+ which holds a reference to a cache to the cache lifecycle.
+
+ * cacheExceptionHandlerFactory - Specifies a CacheExceptionHandler, which is called when
+ cache exceptions occur.
+
+ * cacheLoaderFactory - Specifies a CacheLoader, which can be used both asynchronously and
+ synchronously to load objects into a cache. More than one cacheLoaderFactory element
+ can be added, in which case the loaders form a chain which are executed in order. If a
+ loader returns null, the next in chain is called.
+
+ RMI Cache Replication
+ +++++++++++++++++++++
+
+ 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,
+ replicatePutsViaCopy=false,
+ replicateUpdates=true,
+ replicateUpdatesViaCopy=true,
+ replicateRemovals=true
+ asynchronousReplicationIntervalMillis=<number of milliseconds"
+ propertySeparator="," />
+
+ The RMICacheReplicatorFactory recognises the following properties:
+
+ * replicatePuts=true|false - whether new elements placed in a cache are
+ replicated to others. Defaults to true.
+
+ * replicatePutsViaCopy=true|false - whether the new elements are
+ copied to other caches (true), or whether a remove message is sent. 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
+
+
+ JGroups Replication
+ +++++++++++++++++++
+
+ For the Jgroups replication this is done with:
+ <cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
+ properties="replicateAsynchronously=true, replicatePuts=true,
+ replicateUpdates=true, replicateUpdatesViaCopy=false,
+ replicateRemovals=true,asynchronousReplicationIntervalMillis=1000"/>
+ This listener supports the same properties as the RMICacheReplicationFactory.
+
+
+ JMS Replication
+ +++++++++++++++
+
+ For JMS-based replication this is done with:
+ <cacheEventListenerFactory
+ class="net.sf.ehcache.distribution.jms.JMSCacheReplicatorFactory"
+ properties="replicateAsynchronously=true,
+ replicatePuts=true,
+ replicateUpdates=true,
+ replicateUpdatesViaCopy=true,
+ replicateRemovals=true,
+ asynchronousReplicationIntervalMillis=1000"
+ propertySeparator=","/>
+
+ This listener supports the same properties as the RMICacheReplicationFactory.
+
+ Cluster Bootstrapping
+ +++++++++++++++++++++
+ (RMI clusters only)
+
+ 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"
+ propertySeparator="," />
+
+ 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).
+
+
+ Cache Exception Handling
+
+ By default, most cache operations will propagate a runtime CacheException on failure. An
+ interceptor, using a dynamic proxy, may be configured so that a CacheExceptionHandler can
+ be configured to intercept Exceptions. Errors are not intercepted.
+
+ It is configured as per the following example:
+
+ <cacheExceptionHandlerFactory class="com.example.ExampleExceptionHandlerFactory"
+ properties="logLevel=FINE"/>
+
+ Caches with ExceptionHandling configured are not of type Cache, but are of type Ehcache only,
+ and are not available using CacheManager.getCache(), but using CacheManager.getEhcache().
+
+
+ Cache Loader
+
+ A default CacheLoader may be set which loads objects into the cache through asynchronous and
+ synchronous methods on Cache. This is different to the bootstrap cache loader, which is used
+ only in distributed caching.
+
+ It is configured as per the following example:
+
+ <cacheLoaderFactory class="com.example.ExampleCacheLoaderFactory"
+ properties="type=int,startCounter=10"/>
+
+ Cache Extension
+
+ CacheExtensions are a general purpose mechanism to allow generic extensions to a Cache.
+ CacheExtensions are tied into the Cache lifecycle.
+
+ CacheExtensions are created using the CacheExtensionFactory which has a
+ <code>createCacheCacheExtension()</code> method which takes as a parameter a
+ Cache and properties. It can thus call back into any public method on Cache, including, of
+ course, the load methods.
+
+ Extensions are added as per the following example:
+
+ <cacheExtensionFactory class="com.example.FileWatchingCacheRefresherExtensionFactory"
+ properties="refreshIntervalMillis=18000, loaderTimeout=3000,
+ flushPeriod=whatever, someOtherProperty=someValue ..."/>
+
+ -->
+
+
+ <!--
+ Mandatory Default Cache configuration. These settings will be applied to caches
+ created programmtically using CacheManager.add(String cacheName).
+
+ The defaultCache has an implicit name "default" which is a reserved cache name.
+ -->
+ <defaultCache
+ maxElementsInMemory="10000"
+ eternal="false"
+ timeToIdleSeconds="121"
+ timeToLiveSeconds="122"
+ overflowToDisk="true"
+ diskSpoolBufferSizeMB="30"
+ maxElementsOnDisk="10000000"
+ diskPersistent="false"
+ diskExpiryThreadIntervalSeconds="119"
+ memoryStoreEvictionPolicy="LRU"
+ />
+
+ <!--
+ Sample caches. Following are some example caches. Remove these before use.
+ -->
+
+ <!--
+ Sample cache named sampleCache1
+ This cache contains a maximum in memory of 10000 elements, and will expire
+ an element if it is idle for more than 5 minutes and lives for more than
+ 10 minutes.
+
+ If there are more than 10000 elements it will overflow to the
+ disk cache, which in this configuration will go to wherever java.io.tmp is
+ defined on your system. On a standard Linux system this will be /tmp"
+ -->
+ <cache name="sampleCache1"
+ maxElementsInMemory="10000"
+ maxElementsOnDisk="1000"
+ eternal="false"
+ overflowToDisk="true"
+ diskSpoolBufferSizeMB="20"
+ timeToIdleSeconds="300"
+ timeToLiveSeconds="600"
+ memoryStoreEvictionPolicy="LFU"
+ />
+
+
+ <!--
+ Sample cache named sampleCache2
+ This cache has a maximum of 1000 elements in memory. There is no overflow to disk, so 1000
+ is also the maximum cache size. Note that when a cache is eternal, timeToLive and
+ timeToIdle are not used and do not need to be specified.
+ -->
+ <cache name="sampleCache2"
+ maxElementsInMemory="1000"
+ eternal="true"
+ overflowToDisk="false"
+ memoryStoreEvictionPolicy="FIFO"
+ />
+
+
+ <!--
+ Sample cache named sampleCache3. This cache overflows to disk. The disk store is
+ persistent between cache and VM restarts. The disk expiry thread interval is set to 10
+ minutes, overriding the default of 2 minutes.
+ -->
+
+ <cache name="sampleCache3"
+ maxElementsInMemory="500"
+ eternal="false"
+ overflowToDisk="true"
+ timeToIdleSeconds="300"
+ timeToLiveSeconds="600"
+ diskPersistent="true"
+ diskExpiryThreadIntervalSeconds="1"
+ memoryStoreEvictionPolicy="LFU"
+ />
+
+
+ <!--
+ Sample distributed cache named sampleDistributedCache1.
+ This cache replicates using defaults.
+ It also bootstraps from the cluster, using default properties.
+ -->
+ <cache name="sampleDistributedCache1"
+ maxElementsInMemory="10"
+ eternal="false"
+ timeToIdleSeconds="100"
+ timeToLiveSeconds="100"
+ overflowToDisk="false">
+ <cacheEventListenerFactory
+ class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
+ <bootstrapCacheLoaderFactory
+ class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/>
+ </cache>
+
+
+ <!--
+ Sample distributed cache named sampleDistributedCache2.
+ This cache replicates using specific properties.
+ It only replicates updates and does so synchronously via copy
+ -->
+
+ <cache name="sampleDistributedCache2"
+ maxElementsInMemory="10"
+ eternal="false"
+ timeToIdleSeconds="102"
+ timeToLiveSeconds="101"
+ overflowToDisk="false">
+ <cacheEventListenerFactory
+ class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+ properties="replicateAsynchronously=false, replicatePuts=false,
+ replicatePutsViaCopy=false, replicateUpdates=true,
+ replicateUpdatesViaCopy=true, replicateRemovals=false"/>
+ </cache>
+
+ <!--
+ Sample distributed cache named sampleDistributedCache3.
+ This cache replicates using defaults except that the asynchronous replication
+ interval is set to 200ms.
+ -->
+ <cache name="sampleDistributedCache3"
+ maxElementsInMemory="10"
+ eternal="false"
+ timeToIdleSeconds="100"
+ timeToLiveSeconds="100"
+ overflowToDisk="false">
+ <cacheEventListenerFactory
+ class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+ properties="asynchronousReplicationIntervalMillis=200"/>
+ </cache>
+
+</ehcache>
Deleted: trunk/core/src/test/resources/configs/ehcache/ehcache-1.6RC1.xml
===================================================================
--- trunk/core/src/test/resources/configs/ehcache/ehcache-1.6RC1.xml 2010-02-19 14:53:10 UTC (rev 1524)
+++ trunk/core/src/test/resources/configs/ehcache/ehcache-1.6RC1.xml 2010-02-19 15:12:30 UTC (rev 1525)
@@ -1,584 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="ehcache-1.6.xsd" >
-
- <!--
- CacheManager Configuration
- ==========================
- An ehcache.xml corresponds to a single CacheManager.
-
- See instructions below or the ehcache schema (ehcache-1.6.xsd) on how to configure.
-
- System property tokens can be specified in this file which are replaced when the configuration
- is loaded. For example multicastGroupPort=${multicastGroupPort} can be replaced with the
- System property either from an environment variable or a system property specified with a
- command line switch such as -DmulticastGroupPort=4446.
-
- DiskStore configuration
- =======================
-
- The diskStore element is optional. To turn off disk store path creation, comment out the diskStore
- element below.
-
- Configure it if you have overflowToDisk or diskPersistent enabled for any cache.
-
- If it is not configured, and a cache is created which requires a disk store, a warning will be
- issued and java.io.tmpdir will automatically be used.
-
- diskStore has only one attribute - "path". It is the path to the directory where
- .data and .index files will be created.
-
- If the path is one of the following Java System Property it is replaced by its value in the
- running VM. For backward compatibility these are not specified without being enclosed in the ${token}
- replacement syntax.
-
- 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
- * ehcache.disk.store.dir - A system property you would normally specify on the command line
- e.g. java -Dehcache.disk.store.dir=/u01/myapp/diskdir ...
-
- Subdirectories can be specified below the property e.g. java.io.tmpdir/one
- -->
- <diskStore path="java.io.tmpdir"/>
-
- <!--
- CacheManagerEventListener
- =========================
- Specifies a CacheManagerEventListenerFactory 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=""/>
-
-
- <!--
- CacheManagerPeerProvider
- ========================
- (For distributed operation)
-
- Specifies a CacheManagerPeerProviderFactory which will be used to create a
- CacheManagerPeerProvider, which discovers other CacheManagers in the cluster.
-
- One or more providers can be configured. The first one in the ehcache.xml is the default, which is used
- for replication and bootstrapping.
-
- The attributes of cacheManagerPeerProviderFactory are:
- * class - a fully qualified factory class name
- * properties - comma separated properties having meaning only to the factory.
-
- Providers are available for RMI, JGroups and JMS as shown following.
-
- RMICacheManagerPeerProvider
- +++++++++++++++++++++++++++
-
- 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"
- propertySeparator="," />
-
- 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.
-
- JGroupsCacheManagerPeerProvider
- +++++++++++++++++++++++++++++++
- <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
- properties="connect=UDP(mcast_addr=231.12.21.132;mcast_port=45566;ip_ttl=32;
- mcast_send_buf_size=150000;mcast_recv_buf_size=80000):
- PING(timeout=2000;num_initial_members=6):
- MERGE2(min_interval=5000;max_interval=10000):
- FD_SOCK:VERIFY_SUSPECT(timeout=1500):
- pbcast.NAKACK(gc_lag=10;retransmit_timeout=3000):
- UNICAST(timeout=5000):
- pbcast.STABLE(desired_avg_gossip=20000):
- FRAG:
- pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=false)"
- propertySeparator="::"
- />
- The only property necessary is the connect String used by jgroups to configure itself. Refer to the Jgroups documentation for explanation
- of all the protocols. The example above uses UDP multicast. If the connect property is not specified the default JGroups connection will be
- used.
-
-
- JMSCacheManagerPeerProviderFactory
- ++++++++++++++++++++++++++++++++++
- <cacheManagerPeerProviderFactory
- class="net.sf.ehcache.distribution.jms.JMSCacheManagerPeerProviderFactory"
- properties="..."
- propertySeparator=","
- />
-
- The JMS PeerProviderFactory uses JNDI to maintain message queue independence. Refer to the manual for full configuration
- examples using ActiveMQ and Open Message Queue.
-
- Valid properties are:
- * initialContextFactoryName (mandatory) - the name of the factory used to create the message queue initial context.
- * providerURL (mandatory) - the JNDI configuration information for the service provider to use.
- * topicConnectionFactoryBindingName (mandatory) - the JNDI binding name for the TopicConnectionFactory
- * topicBindingName (mandatory) - the JNDI binding name for the topic name
- * getQueueBindingName (mandatory only if using jmsCacheLoader) - the JNDI binding name for the queue name
- * securityPrincipalName - the JNDI java.naming.security.principal
- * securityCredentials - the JNDI java.naming.security.credentials
- * urlPkgPrefixes - the JNDI java.naming.factory.url.pkgs
- * userName - the user name to use when creating the TopicConnection to the Message Queue
- * password - the password to use when creating the TopicConnection to the Message Queue
- * acknowledgementMode - the JMS Acknowledgement mode for both publisher and subscriber. The available choices are
- AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE and SESSION_TRANSACTED. The default is AUTO_ACKNOWLEDGE.
- -->
-
- <cacheManagerPeerProviderFactory
- class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
- properties="peerDiscovery=automatic,
- multicastGroupAddress=230.0.0.1,
- multicastGroupPort=4446, timeToLive=1"
- propertySeparator=","
- />
-
-
- <!--
- CacheManagerPeerListener
- ========================
- (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,
- remoteObjectPort=40002,
- socketTimeoutMillis=120000"
- propertySeparator="," />
-
- 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 RMI Registry listener listens on. This defaults to a free port if not specified.
- * remoteObjectPort - the port number on which the remote objects bound in the registry receive calls.
- 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 to 120000ms.
-
- -->
- <cacheManagerPeerListenerFactory
- class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>
-
-
- <!--
- 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 and elements 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.
-
- diskSpoolBufferSizeMB:
- This is the size to allocate the DiskStore for a spool buffer. Writes are made
- to this area and then asynchronously written to disk. The default size is 30MB.
- Each spool buffer is used only by its cache. If you get OutOfMemory errors consider
- lowering this value. To improve DiskStore performance consider increasing it. Trace level
- logging in the DiskStore will show if put back ups are occurring.
-
- 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.
-
- * cacheExtensionFactory - Specifies a CacheExtension, a generic mechansim to tie a class
- which holds a reference to a cache to the cache lifecycle.
-
- * cacheExceptionHandlerFactory - Specifies a CacheExceptionHandler, which is called when
- cache exceptions occur.
-
- * cacheLoaderFactory - Specifies a CacheLoader, which can be used both asynchronously and
- synchronously to load objects into a cache. More than one cacheLoaderFactory element
- can be added, in which case the loaders form a chain which are executed in order. If a
- loader returns null, the next in chain is called.
-
- RMI Cache Replication
- +++++++++++++++++++++
-
- 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,
- replicatePutsViaCopy=false,
- replicateUpdates=true,
- replicateUpdatesViaCopy=true,
- replicateRemovals=true
- asynchronousReplicationIntervalMillis=<number of milliseconds"
- propertySeparator="," />
-
- The RMICacheReplicatorFactory recognises the following properties:
-
- * replicatePuts=true|false - whether new elements placed in a cache are
- replicated to others. Defaults to true.
-
- * replicatePutsViaCopy=true|false - whether the new elements are
- copied to other caches (true), or whether a remove message is sent. 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
-
-
- JGroups Replication
- +++++++++++++++++++
-
- For the Jgroups replication this is done with:
- <cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
- properties="replicateAsynchronously=true, replicatePuts=true,
- replicateUpdates=true, replicateUpdatesViaCopy=false,
- replicateRemovals=true,asynchronousReplicationIntervalMillis=1000"/>
- This listener supports the same properties as the RMICacheReplicationFactory.
-
-
- JMS Replication
- +++++++++++++++
-
- For JMS-based replication this is done with:
- <cacheEventListenerFactory
- class="net.sf.ehcache.distribution.jms.JMSCacheReplicatorFactory"
- properties="replicateAsynchronously=true,
- replicatePuts=true,
- replicateUpdates=true,
- replicateUpdatesViaCopy=true,
- replicateRemovals=true,
- asynchronousReplicationIntervalMillis=1000"
- propertySeparator=","/>
-
- This listener supports the same properties as the RMICacheReplicationFactory.
-
- Cluster Bootstrapping
- +++++++++++++++++++++
- (RMI clusters only)
-
- 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"
- propertySeparator="," />
-
- 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).
-
-
- Cache Exception Handling
-
- By default, most cache operations will propagate a runtime CacheException on failure. An
- interceptor, using a dynamic proxy, may be configured so that a CacheExceptionHandler can
- be configured to intercept Exceptions. Errors are not intercepted.
-
- It is configured as per the following example:
-
- <cacheExceptionHandlerFactory class="com.example.ExampleExceptionHandlerFactory"
- properties="logLevel=FINE"/>
-
- Caches with ExceptionHandling configured are not of type Cache, but are of type Ehcache only,
- and are not available using CacheManager.getCache(), but using CacheManager.getEhcache().
-
-
- Cache Loader
-
- A default CacheLoader may be set which loads objects into the cache through asynchronous and
- synchronous methods on Cache. This is different to the bootstrap cache loader, which is used
- only in distributed caching.
-
- It is configured as per the following example:
-
- <cacheLoaderFactory class="com.example.ExampleCacheLoaderFactory"
- properties="type=int,startCounter=10"/>
-
- Cache Extension
-
- CacheExtensions are a general purpose mechanism to allow generic extensions to a Cache.
- CacheExtensions are tied into the Cache lifecycle.
-
- CacheExtensions are created using the CacheExtensionFactory which has a
- <code>createCacheCacheExtension()</code> method which takes as a parameter a
- Cache and properties. It can thus call back into any public method on Cache, including, of
- course, the load methods.
-
- Extensions are added as per the following example:
-
- <cacheExtensionFactory class="com.example.FileWatchingCacheRefresherExtensionFactory"
- properties="refreshIntervalMillis=18000, loaderTimeout=3000,
- flushPeriod=whatever, someOtherProperty=someValue ..."/>
-
- -->
-
-
- <!--
- Mandatory Default Cache configuration. These settings will be applied to caches
- created programmtically using CacheManager.add(String cacheName).
-
- The defaultCache has an implicit name "default" which is a reserved cache name.
- -->
- <defaultCache
- maxElementsInMemory="10000"
- eternal="false"
- timeToIdleSeconds="121"
- timeToLiveSeconds="122"
- overflowToDisk="true"
- diskSpoolBufferSizeMB="30"
- maxElementsOnDisk="10000000"
- diskPersistent="false"
- diskExpiryThreadIntervalSeconds="119"
- memoryStoreEvictionPolicy="LRU"
- />
-
- <!--
- Sample caches. Following are some example caches. Remove these before use.
- -->
-
- <!--
- Sample cache named sampleCache1
- This cache contains a maximum in memory of 10000 elements, and will expire
- an element if it is idle for more than 5 minutes and lives for more than
- 10 minutes.
-
- If there are more than 10000 elements it will overflow to the
- disk cache, which in this configuration will go to wherever java.io.tmp is
- defined on your system. On a standard Linux system this will be /tmp"
- -->
- <cache name="sampleCache1"
- maxElementsInMemory="10000"
- maxElementsOnDisk="1000"
- eternal="false"
- overflowToDisk="true"
- diskSpoolBufferSizeMB="20"
- timeToIdleSeconds="300"
- timeToLiveSeconds="600"
- memoryStoreEvictionPolicy="LFU"
- />
-
-
- <!--
- Sample cache named sampleCache2
- This cache has a maximum of 1000 elements in memory. There is no overflow to disk, so 1000
- is also the maximum cache size. Note that when a cache is eternal, timeToLive and
- timeToIdle are not used and do not need to be specified.
- -->
- <cache name="sampleCache2"
- maxElementsInMemory="1000"
- eternal="true"
- overflowToDisk="false"
- memoryStoreEvictionPolicy="FIFO"
- />
-
-
- <!--
- Sample cache named sampleCache3. This cache overflows to disk. The disk store is
- persistent between cache and VM restarts. The disk expiry thread interval is set to 10
- minutes, overriding the default of 2 minutes.
- -->
-
- <cache name="sampleCache3"
- maxElementsInMemory="500"
- eternal="false"
- overflowToDisk="true"
- timeToIdleSeconds="300"
- timeToLiveSeconds="600"
- diskPersistent="true"
- diskExpiryThreadIntervalSeconds="1"
- memoryStoreEvictionPolicy="LFU"
- />
-
-
- <!--
- Sample distributed cache named sampleDistributedCache1.
- This cache replicates using defaults.
- It also bootstraps from the cluster, using default properties.
- -->
- <cache name="sampleDistributedCache1"
- maxElementsInMemory="10"
- eternal="false"
- timeToIdleSeconds="100"
- timeToLiveSeconds="100"
- overflowToDisk="false">
- <cacheEventListenerFactory
- class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
- <bootstrapCacheLoaderFactory
- class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/>
- </cache>
-
-
- <!--
- Sample distributed cache named sampleDistributedCache2.
- This cache replicates using specific properties.
- It only replicates updates and does so synchronously via copy
- -->
-
- <cache name="sampleDistributedCache2"
- maxElementsInMemory="10"
- eternal="false"
- timeToIdleSeconds="102"
- timeToLiveSeconds="101"
- overflowToDisk="false">
- <cacheEventListenerFactory
- class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
- properties="replicateAsynchronously=false, replicatePuts=false,
- replicatePutsViaCopy=false, replicateUpdates=true,
- replicateUpdatesViaCopy=true, replicateRemovals=false"/>
- </cache>
-
- <!--
- Sample distributed cache named sampleDistributedCache3.
- This cache replicates using defaults except that the asynchronous replication
- interval is set to 200ms.
- -->
- <cache name="sampleDistributedCache3"
- maxElementsInMemory="10"
- eternal="false"
- timeToIdleSeconds="100"
- timeToLiveSeconds="100"
- overflowToDisk="false">
- <cacheEventListenerFactory
- class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
- properties="asynchronousReplicationIntervalMillis=200"/>
- </cache>
-
-</ehcache>
More information about the infinispan-commits
mailing list