<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Congrats on your first contribution, Christophe! &nbsp;The first of many, I hope.<br><div><br><div>Begin forwarded message:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Helvetica" size="3" color="#000000" style="font: 12.0px Helvetica; color: #000000"><b>From: </b></font><font face="Helvetica" size="3" style="font: 12.0px Helvetica"><a href="mailto:infinispan-commits@lists.jboss.org">infinispan-commits@lists.jboss.org</a></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Helvetica" size="3" color="#000000" style="font: 12.0px Helvetica; color: #000000"><b>Date: </b></font><font face="Helvetica" size="3" style="font: 12.0px Helvetica">9 June 2009 22:29:03 BST</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Helvetica" size="3" color="#000000" style="font: 12.0px Helvetica; color: #000000"><b>To: </b></font><font face="Helvetica" size="3" style="font: 12.0px Helvetica"><a href="mailto:infinispan-commits@lists.jboss.org">infinispan-commits@lists.jboss.org</a></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Helvetica" size="3" color="#000000" style="font: 12.0px Helvetica; color: #000000"><b>Subject: </b></font><font face="Helvetica" size="3" style="font: 12.0px Helvetica"><b>[infinispan-commits] Infinispan SVN: r420 - in trunk/core/src: main/resources/xslt and 2 other directories.</b></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Helvetica" size="3" color="#000000" style="font: 12.0px Helvetica; color: #000000"><b>Reply-To: </b></font><font face="Helvetica" size="3" style="font: 12.0px Helvetica"><a href="mailto:infinispan-commits@lists.jboss.org">infinispan-commits@lists.jboss.org</a></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div> </div><div>Author: chivert<br>Date: 2009-06-09 17:29:03 -0400 (Tue, 09 Jun 2009)<br>New Revision: 420<br><br>Added:<br> &nbsp;&nbsp;trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt<br> &nbsp;&nbsp;trunk/core/src/test/resources/configs/ehcache16/<br> &nbsp;&nbsp;trunk/core/src/test/resources/configs/ehcache16/ehcache-configuration.xml<br> &nbsp;&nbsp;trunk/core/src/test/resources/configs/ehcache16/ehcache.xsd<br>Modified:<br> &nbsp;&nbsp;trunk/core/src/main/java/org/infinispan/config/parsing/ConfigFilesConvertor.java<br>Log:<br>[ISPN-56] (Create migration script for EHCache) Adding style sheet for Ehcache configuration.<br>Changing ConfigFilesConvertor to use this stylesheet. <br>Adding Ehcache configuration examples and xsd for unit test. The unit test is not included in this change list though.<br><br><br>Modified: trunk/core/src/main/java/org/infinispan/config/parsing/ConfigFilesConvertor.java<br>===================================================================<br>--- trunk/core/src/main/java/org/infinispan/config/parsing/ConfigFilesConvertor.java<span class="Apple-tab-span" style="white-space:pre">        </span>2009-06-09 15:55:01 UTC (rev 419)<br>+++ trunk/core/src/main/java/org/infinispan/config/parsing/ConfigFilesConvertor.java<span class="Apple-tab-span" style="white-space:pre">        </span>2009-06-09 21:29:03 UTC (rev 420)<br>@@ -53,9 +53,9 @@<br> &nbsp;*/<br> public class ConfigFilesConvertor {<br><br>-<br> &nbsp;&nbsp;&nbsp;private static final String JBOSS_CACHE3X = "JBossCache3x";<br>- &nbsp;&nbsp;public static final String[] SUPPORTED_FORMATS = {JBOSS_CACHE3X};<br>+ &nbsp;&nbsp;private static final String EHCACHE_CACHE16X = "Ehcache16x";<br>+ &nbsp;&nbsp;public static final String[] SUPPORTED_FORMATS = {JBOSS_CACHE3X, EHCACHE_CACHE16X};<br><br> &nbsp;&nbsp;&nbsp;public void parse(InputStream is, OutputStream os, String xsltFile) throws Exception {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream xsltInStream = new FileLookup().lookupFile(xsltFile);<br>@@ -136,6 +136,8 @@<br><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (type.equals(JBOSS_CACHE3X)) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transformFromJbossCache3x(sourceName, destinationName);<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if (type.equals(EHCACHE_CACHE16X)) {<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transformFromEhcache16x(sourceName, destinationName);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("---");<br>@@ -143,6 +145,7 @@<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("---");<br> &nbsp;&nbsp;&nbsp;}<br><br>+<br> &nbsp;&nbsp;&nbsp;private static void mustExist(String sourceName, String what) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sourceName == null) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println("Missing '" + what + "', cannot proceed");<br>@@ -182,6 +185,28 @@<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;}<br><br>+ &nbsp;&nbsp;private static void transformFromEhcache16x(String sourceName, String destinationName) throws Exception {<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File oldConfig = new File(sourceName);<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!oldConfig.exists()) {<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println("File specified as input ('" + sourceName + ") does not exist.");<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(1);<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConfigFilesConvertor convertor = new ConfigFilesConvertor();<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream is = new FileInputStream(oldConfig);<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File destination = new File(destinationName);<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!destination.exists()) {<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destination.createNewFile();<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream fos = new FileOutputStream(destinationName);<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convertor.parse(is, fos, "xslt/ehcache16x2infinispan4x.xslt");<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} finally {<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close();<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is.close();<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>+ &nbsp;&nbsp;}<br>+<br> &nbsp;&nbsp;&nbsp;private Transformer getTransformer(InputStream xsltInStream) throws TransformerConfigurationException {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransformerFactory tFactory = TransformerFactory.newInstance();<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamSource stylesource = new StreamSource(xsltInStream);<br><br>Added: trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt<br>===================================================================<br>--- trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt<span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(rev 0)<br>+++ trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt<span class="Apple-tab-span" style="white-space:pre">        </span>2009-06-09 21:29:03 UTC (rev 420)<br>@@ -0,0 +1,145 @@<br>+&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>+<br>+&lt;xsl:stylesheet xmlns="urn:infinispan:config:4.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform">http://www.w3.org/1999/XSL/Transform</a>" version="1.0"&gt;<br>+ &nbsp;&nbsp;&lt;xsl:output method="xml" indent="yes" version="1.0" encoding="UTF-8" omit-xml-declaration="no"/&gt;<br>+ &nbsp;&nbsp;&lt;xsl:template match="/ehcache"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:comment&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This XSL stylesheet is used to convert an Ehcache 1.6.x configuration into an Infinispan 4.0.x configuration.<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Note that Infinispan supports JGroups only, caches are migrated to using JGroups.<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Peer discovery will also be using JGroups. Eviction policies are translated to LRU, FIFO or NONE.<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:comment&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="infinispan"&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="global"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="asyncListenerExecutor"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="factory"&gt;org.infinispan.executors.DefaultExecutorFactory&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="threadNamePrefix" value="AsyncListenerThread"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="asyncSerializationExecutor"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="factory"&gt;org.infinispan.executors.DefaultExecutorFactory&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="threadNamePrefix" value="AsyncSerializationThread"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;evictionScheduledExecutor factory="org.infinispan.executors.DefaultScheduledExecutorFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="threadNamePrefix" value="EvictionThread"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/evictionScheduledExecutor&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;replicationQueueScheduledExecutor factory="org.infinispan.executors.DefaultScheduledExecutorFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="threadNamePrefix" value="ReplicationQueueThread"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/replicationQueueScheduledExecutor&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="globalJmxStatistics"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="jmxDomain"&gt;infinispan&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="enabled"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;true&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="shutdown"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="hookBehavior"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;DEFAULT&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="default"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:if test="defaultCache[@memoryStoreEvictionPolicy]"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:if test="contains(defaultCache[@memoryStoreEvictionPolicy], 'LRU')"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="eviction"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="strategy"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of select="defaultCache/@memoryStoreEvictionPolicy"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:if&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:if test="contains(defaultCache[@memoryStoreEvictionPolicy], 'FIFO')"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="eviction"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="strategy"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of select="defaultCache/@memoryStoreEvictionPolicy"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:if&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:if test="contains(defaultCache[@memoryStoreEvictionPolicy], 'LFU')"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:message terminate="no"&gt;WARNING!!! Infinispan does not support LFU eviction. Using LRU instead.<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:message&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="eviction"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="strategy"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;LRU&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:if&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:if&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:for-each select="cache"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="namedCache"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="name"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of select="@name"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="eviction"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="strategy"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:choose&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:when test="contains(@memoryStoreEvictionPolicy, 'LRU')"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;LRU&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:when&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:otherwise&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:choose&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:when test="contains(@memoryStoreEvictionPolicy, 'FIFO')"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;FIFO&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:when&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:otherwise&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:choose&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:when test="contains(@memoryStoreEvictionPolicy, 'LFU')"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;LRU&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:when&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:otherwise&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;NONE&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:otherwise&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:choose&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:otherwise&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:choose&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:otherwise&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:choose&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- &lt;expiration lifespan="60000" maxIdle="1000" /&gt; --&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="expiration"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:if test="cacheEventListenerFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="clustering"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:if test="cacheEventListenerFactory/@properties"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="mode"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- Replication, Invalidation, Distribution--&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;distribution&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- TODO remove spaces --&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:choose&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:when test="contains(cacheEventListenerFactory/@properties, 'replicateAsynchronously=false')"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="sync"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- replQueueInterval="100" replQueueMaxElements="200" ?? --&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="useReplQueue"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;true&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:when&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:otherwise&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:element name="async"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- replQueueInterval="100" replQueueMaxElements="200" ?? --&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name="useReplQueue"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;true&lt;/xsl:text&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:otherwise&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:choose&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:if&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:if&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:for-each&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:element&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&lt;/xsl:template&gt;<br>+&lt;/xsl:stylesheet&gt;<br><br>Added: trunk/core/src/test/resources/configs/ehcache16/ehcache-configuration.xml<br>===================================================================<br>--- trunk/core/src/test/resources/configs/ehcache16/ehcache-configuration.xml<span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(rev 0)<br>+++ trunk/core/src/test/resources/configs/ehcache16/ehcache-configuration.xml<span class="Apple-tab-span" style="white-space:pre">        </span>2009-06-09 21:29:03 UTC (rev 420)<br>@@ -0,0 +1,584 @@<br>+&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>+<br>+&lt;ehcache xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsi:noNamespaceSchemaLocation="ehcache.xsd" &gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;CacheManager Configuration<br>+ &nbsp;&nbsp;&nbsp;==========================<br>+ &nbsp;&nbsp;&nbsp;An ehcache.xml corresponds to a single CacheManager.<br>+<br>+ &nbsp;&nbsp;&nbsp;See instructions below or the ehcache schema (ehcache.xsd) on how to configure.<br>+<br>+ &nbsp;&nbsp;&nbsp;System property tokens can be specified in this file which are replaced when the configuration<br>+ &nbsp;&nbsp;&nbsp;is loaded. For example multicastGroupPort=${multicastGroupPort} can be replaced with the<br>+ &nbsp;&nbsp;&nbsp;System property either from an environment variable or a system property specified with a<br>+ &nbsp;&nbsp;&nbsp;command line switch such as -DmulticastGroupPort=4446.<br>+<br>+ &nbsp;&nbsp;&nbsp;DiskStore configuration<br>+ &nbsp;&nbsp;&nbsp;=======================<br>+<br>+ &nbsp;&nbsp;&nbsp;The diskStore element is optional. To turn off disk store path creation, comment out the diskStore<br>+ &nbsp;&nbsp;&nbsp;element below.<br>+<br>+ &nbsp;&nbsp;&nbsp;Configure it if you have overflowToDisk or diskPersistent enabled for any cache.<br>+<br>+ &nbsp;&nbsp;&nbsp;If it is not configured, and a cache is created which requires a disk store, a warning will be<br>+ &nbsp;&nbsp;&nbsp;&nbsp;issued and java.io.tmpdir will automatically be used.<br>+<br>+ &nbsp;&nbsp;&nbsp;diskStore has only one attribute - "path". It is the path to the directory where<br>+ &nbsp;&nbsp;&nbsp;.data and .index files will be created.<br>+<br>+ &nbsp;&nbsp;&nbsp;If the path is one of the following Java System Property it is replaced by its value in the<br>+ &nbsp;&nbsp;&nbsp;running VM. For backward compatibility these are not specified without being enclosed in the ${token}<br>+ &nbsp;&nbsp;&nbsp;replacement syntax.<br>+<br>+ &nbsp;&nbsp;&nbsp;The following properties are translated:<br>+ &nbsp;&nbsp;&nbsp;* user.home - User's home directory<br>+ &nbsp;&nbsp;&nbsp;* user.dir - User's current working directory<br>+ &nbsp;&nbsp;&nbsp;* java.io.tmpdir - Default temp file path<br>+ &nbsp;&nbsp;&nbsp;* ehcache.disk.store.dir - A system property you would normally specify on the command line<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.g. java -Dehcache.disk.store.dir=/u01/myapp/diskdir ...<br>+<br>+ &nbsp;&nbsp;&nbsp;Subdirectories can be specified below the property e.g. java.io.tmpdir/one<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;diskStore path="java.io.tmpdir"/&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;CacheManagerEventListener<br>+ &nbsp;&nbsp;&nbsp;=========================<br>+ &nbsp;&nbsp;&nbsp;Specifies a CacheManagerEventListenerFactory which is notified when Caches are added<br>+ &nbsp;&nbsp;&nbsp;or removed from the CacheManager.<br>+<br>+ &nbsp;&nbsp;&nbsp;The attributes of CacheManagerEventListenerFactory are:<br>+ &nbsp;&nbsp;&nbsp;* class - a fully qualified factory class name<br>+ &nbsp;&nbsp;&nbsp;* properties - comma separated properties having meaning only to the factory.<br>+<br>+ &nbsp;&nbsp;&nbsp;Sets the fully qualified class name to be registered as the CacheManager event listener.<br>+<br>+ &nbsp;&nbsp;&nbsp;The events include:<br>+ &nbsp;&nbsp;&nbsp;* adding a Cache<br>+ &nbsp;&nbsp;&nbsp;* removing a Cache<br>+<br>+ &nbsp;&nbsp;&nbsp;Callbacks to listener methods are synchronous and unsynchronized. It is the responsibility<br>+ &nbsp;&nbsp;&nbsp;of the implementer to safely handle the potential performance and thread safety issues<br>+ &nbsp;&nbsp;&nbsp;depending on what their listener is doing.<br>+<br>+ &nbsp;&nbsp;&nbsp;If no class is specified, no listener is created. There is no default.<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheManagerEventListenerFactory class="" properties=""/&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;CacheManagerPeerProvider<br>+ &nbsp;&nbsp;&nbsp;========================<br>+ &nbsp;&nbsp;&nbsp;(For distributed operation)<br>+<br>+ &nbsp;&nbsp;&nbsp;Specifies a CacheManagerPeerProviderFactory which will be used to create a<br>+ &nbsp;&nbsp;&nbsp;CacheManagerPeerProvider, which discovers other CacheManagers in the cluster.<br>+<br>+ &nbsp;&nbsp;&nbsp;One or more providers can be configured. The first one in the ehcache.xml is the default, which is used<br>+ &nbsp;&nbsp;&nbsp;for replication and bootstrapping.<br>+<br>+ &nbsp;&nbsp;&nbsp;The attributes of cacheManagerPeerProviderFactory are:<br>+ &nbsp;&nbsp;&nbsp;* class - a fully qualified factory class name<br>+ &nbsp;&nbsp;&nbsp;* properties - comma separated properties having meaning only to the factory.<br>+<br>+ &nbsp;&nbsp;&nbsp;Providers are available for RMI, JGroups and JMS as shown following.<br>+<br>+ &nbsp;&nbsp;&nbsp;RMICacheManagerPeerProvider<br>+ &nbsp;&nbsp;&nbsp;+++++++++++++++++++++++++++<br>+<br>+ &nbsp;&nbsp;&nbsp;Ehcache comes with a built-in RMI-based distribution system with two means of discovery of<br>+ &nbsp;&nbsp;&nbsp;CacheManager peers participating in the cluster:<br>+ &nbsp;&nbsp;&nbsp;* automatic, using a multicast group. This one automatically discovers peers and detects<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changes such as peers entering and leaving the group<br>+ &nbsp;&nbsp;&nbsp;* manual, using manual rmiURL configuration. A hardcoded list of peers is provided at<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configuration time.<br>+<br>+ &nbsp;&nbsp;&nbsp;Configuring Automatic Discovery:<br>+ &nbsp;&nbsp;&nbsp;Automatic discovery is configured as per the following example:<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheManagerPeerProviderFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multicastGroupPort=4446, timeToLive=32"/&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;Valid properties are:<br>+ &nbsp;&nbsp;&nbsp;* peerDiscovery (mandatory) - specify "automatic"<br>+ &nbsp;&nbsp;&nbsp;* multicastGroupAddress (mandatory) - specify a valid multicast group address<br>+ &nbsp;&nbsp;&nbsp;* multicastGroupPort (mandatory) - specify a dedicated port for the multicast heartbeat<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;traffic<br>+ &nbsp;&nbsp;&nbsp;* timeToLive - specify a value between 0 and 255 which determines how far the packets will<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propagate.<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By convention, the restrictions are:<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 &nbsp;&nbsp;- the same host<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;- the same subnet<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32 &nbsp;- the same site<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64 &nbsp;- the same region<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;128 - the same continent<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;255 - unrestricted<br>+<br>+ &nbsp;&nbsp;&nbsp;Configuring Manual Discovery:<br>+ &nbsp;&nbsp;&nbsp;Manual discovery is configured as per the following example:<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheManagerPeerProviderFactory class=<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="peerDiscovery=manual,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //server1:40000/sampleCache2|//server2:40000/sampleCache2"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertySeparator="," /&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;Valid properties are:<br>+ &nbsp;&nbsp;&nbsp;* peerDiscovery (mandatory) - specify "manual"<br>+ &nbsp;&nbsp;&nbsp;* rmiUrls (mandatory) - specify a pipe separated list of rmiUrls, in the form<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//hostname:port<br>+<br>+ &nbsp;&nbsp;&nbsp;The hostname is the hostname of the remote CacheManager peer. The port is the listening<br>+ &nbsp;&nbsp;&nbsp;port of the RMICacheManagerPeerListener of the remote CacheManager peer.<br>+<br>+ &nbsp;&nbsp;&nbsp;JGroupsCacheManagerPeerProvider<br>+ &nbsp;&nbsp;&nbsp;+++++++++++++++++++++++++++++++<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="connect=UDP(mcast_addr=231.12.21.132;mcast_port=45566;ip_ttl=32;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mcast_send_buf_size=150000;mcast_recv_buf_size=80000):<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PING(timeout=2000;num_initial_members=6):<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERGE2(min_interval=5000;max_interval=10000):<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_SOCK:VERIFY_SUSPECT(timeout=1500):<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pbcast.NAKACK(gc_lag=10;retransmit_timeout=3000):<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNICAST(timeout=5000):<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pbcast.STABLE(desired_avg_gossip=20000):<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FRAG:<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=false)"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertySeparator="::"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;The only property necessary is the connect String used by jgroups to configure itself. Refer to the Jgroups documentation for explanation<br>+ &nbsp;&nbsp;&nbsp;&nbsp;of all the protocols. The example above uses UDP multicast. If the connect property is not specified the default JGroups connection will be<br>+ &nbsp;&nbsp;&nbsp;&nbsp;used.<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;JMSCacheManagerPeerProviderFactory<br>+ &nbsp;&nbsp;&nbsp;++++++++++++++++++++++++++++++++++<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheManagerPeerProviderFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.jms.JMSCacheManagerPeerProviderFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="..."<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertySeparator=","<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;The JMS PeerProviderFactory uses JNDI to maintain message queue independence. Refer to the manual for full configuration<br>+ &nbsp;&nbsp;&nbsp;examples using ActiveMQ and Open Message Queue.<br>+<br>+ &nbsp;&nbsp;&nbsp;Valid properties are:<br>+ &nbsp;&nbsp;&nbsp;* initialContextFactoryName (mandatory) - the name of the factory used to create the message queue initial context.<br>+ &nbsp;&nbsp;&nbsp;* providerURL (mandatory) - the JNDI configuration information for the service provider to use.<br>+ &nbsp;&nbsp;&nbsp;* topicConnectionFactoryBindingName (mandatory) - the JNDI binding name for the TopicConnectionFactory<br>+ &nbsp;&nbsp;&nbsp;* topicBindingName (mandatory) - the JNDI binding name for the topic name<br>+ &nbsp;&nbsp;&nbsp;* getQueueBindingName (mandatory only if using jmsCacheLoader) - the JNDI binding name for the queue name<br>+ &nbsp;&nbsp;&nbsp;* securityPrincipalName - the JNDI java.naming.security.principal<br>+ &nbsp;&nbsp;&nbsp;* securityCredentials - the JNDI java.naming.security.credentials<br>+ &nbsp;&nbsp;&nbsp;* urlPkgPrefixes - the JNDI java.naming.factory.url.pkgs<br>+ &nbsp;&nbsp;&nbsp;* userName - the user name to use when creating the TopicConnection to the Message Queue<br>+ &nbsp;&nbsp;&nbsp;* password - the password to use when creating the TopicConnection to the Message Queue<br>+ &nbsp;&nbsp;&nbsp;* acknowledgementMode - the JMS Acknowledgement mode for both publisher and subscriber. The available choices are<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE and SESSION_TRANSACTED. The default is AUTO_ACKNOWLEDGE.<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheManagerPeerProviderFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="peerDiscovery=automatic,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multicastGroupAddress=230.0.0.1,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multicastGroupPort=4446, timeToLive=1"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertySeparator=","<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;CacheManagerPeerListener<br>+ &nbsp;&nbsp;&nbsp;========================<br>+ &nbsp;&nbsp;&nbsp;(Enable for distributed operation)<br>+<br>+ &nbsp;&nbsp;&nbsp;Specifies a CacheManagerPeerListenerFactory which will be used to create a<br>+ &nbsp;&nbsp;&nbsp;CacheManagerPeerListener, which<br>+ &nbsp;&nbsp;&nbsp;listens for messages from cache replicators participating in the cluster.<br>+<br>+ &nbsp;&nbsp;&nbsp;The attributes of cacheManagerPeerListenerFactory are:<br>+ &nbsp;&nbsp;&nbsp;class - a fully qualified factory class name<br>+ &nbsp;&nbsp;&nbsp;properties - comma separated properties having meaning only to the factory.<br>+<br>+ &nbsp;&nbsp;&nbsp;Ehcache comes with a built-in RMI-based distribution system. The listener component is<br>+ &nbsp;&nbsp;&nbsp;RMICacheManagerPeerListener which is configured using<br>+ &nbsp;&nbsp;&nbsp;RMICacheManagerPeerListenerFactory. It is configured as per the following example:<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheManagerPeerListenerFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="hostName=fully_qualified_hostname_or_ip,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port=40001,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remoteObjectPort=40002,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socketTimeoutMillis=120000"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertySeparator="," /&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;All properties are optional. They are:<br>+ &nbsp;&nbsp;&nbsp;* hostName - the hostName of the host the listener is running on. Specify<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where the host is multihomed and you want to control the interface over which cluster<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messages are received. Defaults to the host name of the default interface if not<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specified.<br>+ &nbsp;&nbsp;&nbsp;* port - the port the RMI Registry listener listens on. This defaults to a free port if not specified.<br>+ &nbsp;&nbsp;&nbsp;* remoteObjectPort - the port number on which the remote objects bound in the registry receive calls.<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This defaults to a free port if not specified.<br>+ &nbsp;&nbsp;&nbsp;* socketTimeoutMillis - the number of ms client sockets will stay open when sending<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messages to the listener. This should be long enough for the slowest message.<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If not specified it defaults to 120000ms.<br>+<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheManagerPeerListenerFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Cache configuration<br>+ &nbsp;&nbsp;&nbsp;===================<br>+<br>+ &nbsp;&nbsp;&nbsp;The following attributes are required.<br>+<br>+ &nbsp;&nbsp;&nbsp;name:<br>+ &nbsp;&nbsp;&nbsp;Sets the name of the cache. This is used to identify the cache. It must be unique.<br>+<br>+ &nbsp;&nbsp;&nbsp;maxElementsInMemory:<br>+ &nbsp;&nbsp;&nbsp;Sets the maximum number of objects that will be created in memory<br>+<br>+<span class="Apple-tab-span" style="white-space:pre">        </span>maxElementsOnDisk:<br>+ &nbsp;&nbsp;&nbsp;Sets the maximum number of objects that will be maintained in the DiskStore<br>+<span class="Apple-tab-span" style="white-space:pre">        </span>The default value is zero, meaning unlimited.<br>+<br>+ &nbsp;&nbsp;&nbsp;eternal:<br>+ &nbsp;&nbsp;&nbsp;Sets whether elements are eternal. If eternal, &nbsp;timeouts are ignored and the<br>+ &nbsp;&nbsp;&nbsp;element is never expired.<br>+<br>+ &nbsp;&nbsp;&nbsp;overflowToDisk:<br>+ &nbsp;&nbsp;&nbsp;Sets whether elements can overflow to disk when the memory store<br>+ &nbsp;&nbsp;&nbsp;has reached the maxInMemory limit.<br>+<br>+ &nbsp;&nbsp;&nbsp;The following attributes and elements are optional.<br>+<br>+ &nbsp;&nbsp;&nbsp;timeToIdleSeconds:<br>+ &nbsp;&nbsp;&nbsp;Sets the time to idle for an element before it expires.<br>+ &nbsp;&nbsp;&nbsp;i.e. The maximum amount of time between accesses before an element expires<br>+ &nbsp;&nbsp;&nbsp;Is only used if the element is not eternal.<br>+ &nbsp;&nbsp;&nbsp;Optional attribute. A value of 0 means that an Element can idle for infinity.<br>+ &nbsp;&nbsp;&nbsp;The default value is 0.<br>+<br>+ &nbsp;&nbsp;&nbsp;timeToLiveSeconds:<br>+ &nbsp;&nbsp;&nbsp;Sets the time to live for an element before it expires.<br>+ &nbsp;&nbsp;&nbsp;i.e. The maximum time between creation time and when an element expires.<br>+ &nbsp;&nbsp;&nbsp;Is only used if the element is not eternal.<br>+ &nbsp;&nbsp;&nbsp;Optional attribute. A value of 0 means that and Element can live for infinity.<br>+ &nbsp;&nbsp;&nbsp;The default value is 0.<br>+<br>+ &nbsp;&nbsp;&nbsp;diskPersistent:<br>+ &nbsp;&nbsp;&nbsp;Whether the disk store persists between restarts of the Virtual Machine.<br>+ &nbsp;&nbsp;&nbsp;The default value is false.<br>+<br>+ &nbsp;&nbsp;&nbsp;diskExpiryThreadIntervalSeconds:<br>+ &nbsp;&nbsp;&nbsp;The number of seconds between runs of the disk expiry thread. The default value<br>+ &nbsp;&nbsp;&nbsp;is 120 seconds.<br>+<br>+ &nbsp;&nbsp;&nbsp;diskSpoolBufferSizeMB:<br>+ &nbsp;&nbsp;&nbsp;This is the size to allocate the DiskStore for a spool buffer. Writes are made<br>+ &nbsp;&nbsp;&nbsp;to this area and then asynchronously written to disk. The default size is 30MB.<br>+ &nbsp;&nbsp;&nbsp;Each spool buffer is used only by its cache. If you get OutOfMemory errors consider<br>+ &nbsp;&nbsp;&nbsp;lowering this value. To improve DiskStore performance consider increasing it. Trace level<br>+ &nbsp;&nbsp;&nbsp;logging in the DiskStore will show if put back ups are occurring.<br>+<br>+ &nbsp;&nbsp;&nbsp;memoryStoreEvictionPolicy:<br>+ &nbsp;&nbsp;&nbsp;Policy would be enforced upon reaching the maxElementsInMemory limit. Default<br>+ &nbsp;&nbsp;&nbsp;policy is Least Recently Used (specified as LRU). Other policies available -<br>+ &nbsp;&nbsp;&nbsp;First In First Out (specified as FIFO) and Less Frequently Used<br>+ &nbsp;&nbsp;&nbsp;(specified as LFU)<br>+<br>+ &nbsp;&nbsp;&nbsp;Cache elements can also contain sub elements which take the same format of a factory class<br>+ &nbsp;&nbsp;&nbsp;and properties. Defined sub-elements are:<br>+<br>+ &nbsp;&nbsp;&nbsp;* cacheEventListenerFactory - Enables registration of listeners for cache events, such as<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;put, remove, update, and expire.<br>+<br>+ &nbsp;&nbsp;&nbsp;* bootstrapCacheLoaderFactory - Specifies a BootstrapCacheLoader, which is called by a<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache on initialisation to prepopulate itself.<br>+<br>+ &nbsp;&nbsp;&nbsp;* cacheExtensionFactory - Specifies a CacheExtension, a generic mechansim to tie a class<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which holds a reference to a cache to the cache lifecycle.<br>+<br>+ &nbsp;&nbsp;&nbsp;* cacheExceptionHandlerFactory - Specifies a CacheExceptionHandler, which is called when<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache exceptions occur.<br>+<br>+ &nbsp;&nbsp;&nbsp;* cacheLoaderFactory - Specifies a CacheLoader, which can be used both asynchronously and<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;synchronously to load objects into a cache. More than one cacheLoaderFactory element<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;can be added, in which case the loaders form a chain which are executed in order. If a<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader returns null, the next in chain is called.<br>+<br>+ &nbsp;&nbsp;&nbsp;RMI Cache Replication<br>+ &nbsp;&nbsp;&nbsp;+++++++++++++++++++++<br>+<br>+ &nbsp;&nbsp;&nbsp;Each cache that will be distributed needs to set a cache event listener which replicates<br>+ &nbsp;&nbsp;&nbsp;messages to the other CacheManager peers. For the built-in RMI implementation this is done<br>+ &nbsp;&nbsp;&nbsp;by adding a cacheEventListenerFactory element of type RMICacheReplicatorFactory to each<br>+ &nbsp;&nbsp;&nbsp;distributed cache's configuration as per the following example:<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="replicateAsynchronously=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicatePuts=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicatePutsViaCopy=false,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicateUpdates=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicateUpdatesViaCopy=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicateRemovals=true<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asynchronousReplicationIntervalMillis=&lt;number of milliseconds"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertySeparator="," /&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;The RMICacheReplicatorFactory recognises the following properties:<br>+<br>+ &nbsp;&nbsp;&nbsp;* replicatePuts=true|false - whether new elements placed in a cache are<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicated to others. Defaults to true.<br>+<br>+ &nbsp;&nbsp;&nbsp;* replicatePutsViaCopy=true|false - whether the new elements are<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copied to other caches (true), or whether a remove message is sent. Defaults to true.<br>+<br>+ &nbsp;&nbsp;&nbsp;* replicateUpdates=true|false - whether new elements which override an<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element already existing with the same key are replicated. Defaults to true.<br>+<br>+ &nbsp;&nbsp;&nbsp;* replicateRemovals=true - whether element removals are replicated. Defaults to true.<br>+<br>+ &nbsp;&nbsp;&nbsp;* replicateAsynchronously=true | false - whether replications are<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asynchronous (true) or synchronous (false). Defaults to true.<br>+<br>+ &nbsp;&nbsp;&nbsp;* replicateUpdatesViaCopy=true | false - whether the new elements are<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copied to other caches (true), or whether a remove message is sent. Defaults to true.<br>+<br>+ &nbsp;&nbsp;&nbsp;* asynchronousReplicationIntervalMillis=&lt;number of milliseconds&gt; - The asynchronous<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicator runs at a set interval of milliseconds. The default is 1000. The minimum<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is 10. This property is only applicable if replicateAsynchronously=true<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;JGroups Replication<br>+ &nbsp;&nbsp;&nbsp;+++++++++++++++++++<br>+<br>+<span class="Apple-tab-span" style="white-space:pre">        </span>For the Jgroups replication this is done with:<br>+<span class="Apple-tab-span" style="white-space:pre">        </span>&lt;cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="replicateAsynchronously=true, replicatePuts=true,<br>+ <span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>replicateUpdates=true, replicateUpdatesViaCopy=false,<br>+ <span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>replicateRemovals=true,asynchronousReplicationIntervalMillis=1000"/&gt;<br>+ &nbsp;&nbsp;&nbsp;This listener supports the same properties as the RMICacheReplicationFactory.<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;JMS Replication<br>+ &nbsp;&nbsp;&nbsp;+++++++++++++++<br>+<br>+<span class="Apple-tab-span" style="white-space:pre">        </span>For JMS-based replication this is done with:<br>+<span class="Apple-tab-span" style="white-space:pre">        </span>&lt;cacheEventListenerFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.jms.JMSCacheReplicatorFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="replicateAsynchronously=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicatePuts=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicateUpdates=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicateUpdatesViaCopy=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicateRemovals=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asynchronousReplicationIntervalMillis=1000"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertySeparator=","/&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;This listener supports the same properties as the RMICacheReplicationFactory.<br>+<br>+ &nbsp;&nbsp;&nbsp;Cluster Bootstrapping<br>+ &nbsp;&nbsp;&nbsp;+++++++++++++++++++++<br>+ &nbsp;&nbsp;&nbsp;(RMI clusters only)<br>+<br>+ &nbsp;&nbsp;&nbsp;The RMIBootstrapCacheLoader bootstraps caches in clusters where RMICacheReplicators are<br>+ &nbsp;&nbsp;&nbsp;used. It is configured as per the following example:<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;bootstrapCacheLoaderFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertySeparator="," /&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;The RMIBootstrapCacheLoaderFactory recognises the following optional properties:<br>+<br>+ &nbsp;&nbsp;&nbsp;* bootstrapAsynchronously=true|false - whether the bootstrap happens in the background<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;after the cache has started. If false, bootstrapping must complete before the cache is<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;made available. The default value is true.<br>+<br>+ &nbsp;&nbsp;&nbsp;* maximumChunkSizeBytes=&lt;integer&gt; - Caches can potentially be very large, larger than the<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memory limits of the VM. This property allows the bootstraper to fetched elements in<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chunks. The default chunk size is 5000000 (5MB).<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;Cache Exception Handling<br>+<br>+ &nbsp;&nbsp;&nbsp;By default, most cache operations will propagate a runtime CacheException on failure. An<br>+ &nbsp;&nbsp;&nbsp;interceptor, using a dynamic proxy, may be configured so that a CacheExceptionHandler can<br>+ &nbsp;&nbsp;&nbsp;be configured to intercept Exceptions. Errors are not intercepted.<br>+<br>+ &nbsp;&nbsp;&nbsp;It is configured as per the following example:<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cacheExceptionHandlerFactory class="com.example.ExampleExceptionHandlerFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="logLevel=FINE"/&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;Caches with ExceptionHandling configured are not of type Cache, but are of type Ehcache only,<br>+ &nbsp;&nbsp;&nbsp;and are not available using CacheManager.getCache(), but using CacheManager.getEhcache().<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;Cache Loader<br>+<br>+ &nbsp;&nbsp;&nbsp;A default CacheLoader may be set which loads objects into the cache through asynchronous and<br>+ &nbsp;&nbsp;&nbsp;synchronous methods on Cache. This is different to the bootstrap cache loader, which is used<br>+ &nbsp;&nbsp;&nbsp;only in distributed caching.<br>+<br>+ &nbsp;&nbsp;&nbsp;It is configured as per the following example:<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cacheLoaderFactory class="com.example.ExampleCacheLoaderFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="type=int,startCounter=10"/&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;Cache Extension<br>+<br>+ &nbsp;&nbsp;&nbsp;CacheExtensions are a general purpose mechanism to allow generic extensions to a Cache.<br>+ &nbsp;&nbsp;&nbsp;CacheExtensions are tied into the Cache lifecycle.<br>+<br>+ &nbsp;&nbsp;&nbsp;CacheExtensions are created using the CacheExtensionFactory which has a<br>+ &nbsp;&nbsp;&nbsp;&lt;code&gt;createCacheCacheExtension()&lt;/code&gt; method which takes as a parameter a<br>+ &nbsp;&nbsp;&nbsp;Cache and properties. It can thus call back into any public method on Cache, including, of<br>+ &nbsp;&nbsp;&nbsp;course, the load methods.<br>+<br>+ &nbsp;&nbsp;&nbsp;Extensions are added as per the following example:<br>+<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cacheExtensionFactory class="com.example.FileWatchingCacheRefresherExtensionFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="refreshIntervalMillis=18000, loaderTimeout=3000,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flushPeriod=whatever, someOtherProperty=someValue ..."/&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Mandatory Default Cache configuration. These settings will be applied to caches<br>+ &nbsp;&nbsp;&nbsp;created programmtically using CacheManager.add(String cacheName).<br>+<br>+ &nbsp;&nbsp;&nbsp;The defaultCache has an implicit name "default" which is a reserved cache name.<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;defaultCache<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsInMemory="10000"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eternal="false"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToIdleSeconds="120"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToLiveSeconds="120"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflowToDisk="true"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diskSpoolBufferSizeMB="30"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsOnDisk="10000000"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diskPersistent="false"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diskExpiryThreadIntervalSeconds="120"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memoryStoreEvictionPolicy="LRU"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Sample caches. Following are some example caches. Remove these before use.<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Sample cache named sampleCache1<br>+ &nbsp;&nbsp;&nbsp;This cache contains a maximum in memory of 10000 elements, and will expire<br>+ &nbsp;&nbsp;&nbsp;an element if it is idle for more than 5 minutes and lives for more than<br>+ &nbsp;&nbsp;&nbsp;10 minutes.<br>+<br>+ &nbsp;&nbsp;&nbsp;If there are more than 10000 elements it will overflow to the<br>+ &nbsp;&nbsp;&nbsp;disk cache, which in this configuration will go to wherever java.io.tmp is<br>+ &nbsp;&nbsp;&nbsp;defined on your system. On a standard Linux system this will be /tmp"<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;cache name="sampleCache1"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsInMemory="10000"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsOnDisk="1000"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eternal="false"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflowToDisk="true"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diskSpoolBufferSizeMB="20"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToIdleSeconds="300"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToLiveSeconds="600"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memoryStoreEvictionPolicy="LFU"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Sample cache named sampleCache2<br>+ &nbsp;&nbsp;&nbsp;This cache has a maximum of 1000 elements in memory. There is no overflow to disk, so 1000<br>+ &nbsp;&nbsp;&nbsp;is also the maximum cache size. Note that when a cache is eternal, timeToLive and<br>+ &nbsp;&nbsp;&nbsp;timeToIdle are not used and do not need to be specified.<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;cache name="sampleCache2"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsInMemory="1000"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eternal="true"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflowToDisk="false"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memoryStoreEvictionPolicy="FIFO"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Sample cache named sampleCache3. This cache overflows to disk. The disk store is<br>+ &nbsp;&nbsp;&nbsp;persistent between cache and VM restarts. The disk expiry thread interval is set to 10<br>+ &nbsp;&nbsp;&nbsp;minutes, overriding the default of 2 minutes.<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;cache name="sampleCache3"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsInMemory="500"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eternal="false"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflowToDisk="true"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToIdleSeconds="300"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToLiveSeconds="600"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diskPersistent="true"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diskExpiryThreadIntervalSeconds="1"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memoryStoreEvictionPolicy="LFU"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Sample distributed cache named sampleDistributedCache1.<br>+ &nbsp;&nbsp;&nbsp;This cache replicates using defaults.<br>+ &nbsp;&nbsp;&nbsp;It also bootstraps from the cluster, using default properties.<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;cache name="sampleDistributedCache1"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsInMemory="10"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eternal="false"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToIdleSeconds="100"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToLiveSeconds="100"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflowToDisk="false"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cacheEventListenerFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bootstrapCacheLoaderFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/cache&gt;<br>+<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Sample distributed cache named sampleDistributedCache2.<br>+ &nbsp;&nbsp;&nbsp;This cache replicates using specific properties.<br>+ &nbsp;&nbsp;&nbsp;It only replicates updates and does so synchronously via copy<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;cache name="sampleDistributedCache2"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsInMemory="10"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eternal="false"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToIdleSeconds="100"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToLiveSeconds="100"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflowToDisk="false"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cacheEventListenerFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="replicateAsynchronously=false, replicatePuts=false,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicatePutsViaCopy=false, replicateUpdates=true,<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replicateUpdatesViaCopy=true, replicateRemovals=false"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/cache&gt;<br>+<br>+ &nbsp;&nbsp;&nbsp;&lt;!--<br>+ &nbsp;&nbsp;&nbsp;Sample distributed cache named sampleDistributedCache3.<br>+ &nbsp;&nbsp;&nbsp;This cache replicates using defaults except that the asynchronous replication<br>+ &nbsp;&nbsp;&nbsp;interval is set to 200ms.<br>+ &nbsp;&nbsp;&nbsp;--&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;cache name="sampleDistributedCache3"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxElementsInMemory="10"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eternal="false"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToIdleSeconds="100"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeToLiveSeconds="100"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflowToDisk="false"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cacheEventListenerFactory<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties="asynchronousReplicationIntervalMillis=200"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/cache&gt;<br>+<br>+&lt;/ehcache&gt;<br><br>Added: trunk/core/src/test/resources/configs/ehcache16/ehcache.xsd<br>===================================================================<br>--- trunk/core/src/test/resources/configs/ehcache16/ehcache.xsd<span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(rev 0)<br>+++ trunk/core/src/test/resources/configs/ehcache16/ehcache.xsd<span class="Apple-tab-span" style="white-space:pre">        </span>2009-06-09 21:29:03 UTC (rev 420)<br>@@ -0,0 +1,122 @@<br>+&lt;xs:schema xmlns:xs="<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>" elementFormDefault="qualified" version="1.6"&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="ehcache" &gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:sequence&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="1" ref="diskStore"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="1"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref="cacheManagerEventListenerFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref="cacheManagerPeerProviderFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded"<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref="cacheManagerPeerListenerFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element ref="defaultCache"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="cache"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:sequence&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="diskStore"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="path" use="optional" /&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="cacheManagerEventListenerFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="class" use="required"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="properties" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="propertySeparator" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="cacheManagerPeerProviderFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="class" use="required"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="properties" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="propertySeparator" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="cacheManagerPeerListenerFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="class" use="required"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="properties" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="propertySeparator" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;!-- add clone support for addition of cacheExceptionHandler. Important! --&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="defaultCache"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:sequence&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheEventListenerFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheExtensionFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheLoaderFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="1" ref="bootstrapCacheLoaderFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="1" ref="cacheExceptionHandlerFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:sequence&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="diskExpiryThreadIntervalSeconds" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="diskSpoolBufferSizeMB" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="diskPersistent" use="optional" type="xs:boolean"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="eternal" use="required" type="xs:boolean"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="maxElementsInMemory" use="required" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="memoryStoreEvictionPolicy" use="optional" type="xs:string"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="overflowToDisk" use="required" type="xs:boolean"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="timeToIdleSeconds" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="timeToLiveSeconds" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="maxElementsOnDisk" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="cache"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:sequence &gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheEventListenerFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheExtensionFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheLoaderFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="1" ref="bootstrapCacheLoaderFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element minOccurs="0" maxOccurs="1" ref="cacheExceptionHandlerFactory"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:sequence&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="diskExpiryThreadIntervalSeconds" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="diskSpoolBufferSizeMB" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="diskPersistent" use="optional" type="xs:boolean"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="eternal" use="required" type="xs:boolean"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="maxElementsInMemory" use="required" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="memoryStoreEvictionPolicy" use="optional" type="xs:string"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="name" use="required" type="xs:string"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="overflowToDisk" use="required" type="xs:boolean"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="timeToIdleSeconds" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="timeToLiveSeconds" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="maxElementsOnDisk" use="optional" type="xs:integer"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="cacheEventListenerFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="class" use="required"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="properties" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="propertySeparator" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="bootstrapCacheLoaderFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="class" use="required"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="properties" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="propertySeparator" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="cacheExtensionFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="class" use="required"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="properties" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="propertySeparator" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="cacheExceptionHandlerFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="class" use="required"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="properties" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="propertySeparator" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;xs:element name="cacheLoaderFactory"&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="class" use="required"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="properties" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="propertySeparator" use="optional"/&gt;<br>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<br>+ &nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<br>+&lt;/xs:schema&gt;<br><br>_______________________________________________<br>infinispan-commits mailing list<br><a href="mailto:infinispan-commits@lists.jboss.org">infinispan-commits@lists.jboss.org</a><br>https://lists.jboss.org/mailman/listinfo/infinispan-commits<br></div></blockquote></div><br><div apple-content-edited="true"> <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>--</div><div>Manik Surtani</div><div><a href="mailto:manik@jboss.org">manik@jboss.org</a></div><div>Lead, Infinispan</div><div>Lead, JBoss Cache</div><div><a href="http://www.infinispan.org">http://www.infinispan.org</a></div><div><a href="http://www.jbosscache.org">http://www.jbosscache.org</a></div><div><br></div></div></span><br class="Apple-interchange-newline"></div></span><br class="Apple-interchange-newline"> </div><br></body></html>