[infinispan-dev] Christophe's contributions Fwd: [infinispan-commits] Infinispan SVN: r420 - in trunk/core/src: main/resources/xslt and 2 other directories.

Manik Surtani manik at jboss.org
Wed Jun 10 17:42:28 EDT 2009


Congrats on your first contribution, Christophe!  The first of many, I  
hope.

Begin forwarded message:

> From: infinispan-commits at lists.jboss.org
> Date: 9 June 2009 22:29:03 BST
> To: infinispan-commits at lists.jboss.org
> Subject: [infinispan-commits] Infinispan SVN: r420 - in trunk/core/ 
> src: main/resources/xslt and 2 other directories.
> Reply-To: infinispan-commits at lists.jboss.org
>
> Author: chivert
> Date: 2009-06-09 17:29:03 -0400 (Tue, 09 Jun 2009)
> New Revision: 420
>
> Added:
>   trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt
>   trunk/core/src/test/resources/configs/ehcache16/
>   trunk/core/src/test/resources/configs/ehcache16/ehcache- 
> configuration.xml
>   trunk/core/src/test/resources/configs/ehcache16/ehcache.xsd
> Modified:
>   trunk/core/src/main/java/org/infinispan/config/parsing/ 
> ConfigFilesConvertor.java
> Log:
> [ISPN-56] (Create migration script for EHCache) Adding style sheet  
> for Ehcache configuration.
> Changing ConfigFilesConvertor to use this stylesheet.
> Adding Ehcache configuration examples and xsd for unit test. The  
> unit test is not included in this change list though.
>
>
> Modified: trunk/core/src/main/java/org/infinispan/config/parsing/ 
> ConfigFilesConvertor.java
> ===================================================================
> --- trunk/core/src/main/java/org/infinispan/config/parsing/ 
> ConfigFilesConvertor.java	2009-06-09 15:55:01 UTC (rev 419)
> +++ trunk/core/src/main/java/org/infinispan/config/parsing/ 
> ConfigFilesConvertor.java	2009-06-09 21:29:03 UTC (rev 420)
> @@ -53,9 +53,9 @@
>  */
> public class ConfigFilesConvertor {
>
> -
>    private static final String JBOSS_CACHE3X = "JBossCache3x";
> -   public static final String[] SUPPORTED_FORMATS = {JBOSS_CACHE3X};
> +   private static final String EHCACHE_CACHE16X = "Ehcache16x";
> +   public static final String[] SUPPORTED_FORMATS = {JBOSS_CACHE3X,  
> EHCACHE_CACHE16X};
>
>    public void parse(InputStream is, OutputStream os, String  
> xsltFile) throws Exception {
>       InputStream xsltInStream = new  
> FileLookup().lookupFile(xsltFile);
> @@ -136,6 +136,8 @@
>
>       if (type.equals(JBOSS_CACHE3X)) {
>          transformFromJbossCache3x(sourceName, destinationName);
> +      } else if (type.equals(EHCACHE_CACHE16X)) {
> +         transformFromEhcache16x(sourceName, destinationName);
>       }
>
>       System.out.println("---");
> @@ -143,6 +145,7 @@
>       System.out.println("---");
>    }
>
> +
>    private static void mustExist(String sourceName, String what) {
>       if (sourceName == null) {
>          System.err.println("Missing '" + what + "', cannot proceed");
> @@ -182,6 +185,28 @@
>       }
>    }
>
> +   private static void transformFromEhcache16x(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();
> +      FileInputStream is = new FileInputStream(oldConfig);
> +      File destination = new File(destinationName);
> +      if (!destination.exists()) {
> +         destination.createNewFile();
> +      }
> +
> +      FileOutputStream fos = new FileOutputStream(destinationName);
> +      try {
> +         convertor.parse(is, fos, "xslt/ 
> ehcache16x2infinispan4x.xslt");
> +      } finally {
> +         fos.close();
> +         is.close();
> +      }
> +   }
> +
>    private Transformer getTransformer(InputStream xsltInStream)  
> throws TransformerConfigurationException {
>       TransformerFactory tFactory = TransformerFactory.newInstance();
>       StreamSource stylesource = new StreamSource(xsltInStream);
>
> Added: trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt
> ===================================================================
> --- trunk/core/src/main/resources/xslt/ 
> ehcache16x2infinispan4x.xslt	                        (rev 0)
> +++ trunk/core/src/main/resources/xslt/ehcache16x2infinispan4x.xslt	 
> 2009-06-09 21:29:03 UTC (rev 420)
> @@ -0,0 +1,145 @@
> +<?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.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">
> +            <xsl:element name="asyncListenerExecutor">
> +               <xsl:attribute  
> name="factory">org.infinispan.executors.DefaultExecutorFactory</ 
> xsl:attribute>
> +               <property name="threadNamePrefix"  
> value="AsyncListenerThread"/>
> +            </xsl:element>
> +
> +            <xsl:element name="asyncSerializationExecutor">
> +               <xsl:attribute  
> name="factory">org.infinispan.executors.DefaultExecutorFactory</ 
> xsl:attribute>
> +               <property name="threadNamePrefix"  
> value="AsyncSerializationThread"/>
> +            </xsl:element>
> +
> +            <evictionScheduledExecutor  
> factory="org.infinispan.executors.DefaultScheduledExecutorFactory">
> +               <property name="threadNamePrefix"  
> value="EvictionThread"/>
> +            </evictionScheduledExecutor>
> +
> +            <replicationQueueScheduledExecutor  
> factory="org.infinispan.executors.DefaultScheduledExecutorFactory">
> +               <property name="threadNamePrefix"  
> value="ReplicationQueueThread"/>
> +            </replicationQueueScheduledExecutor>
> +
> +            <xsl:element name="globalJmxStatistics">
> +               <xsl:attribute name="jmxDomain">infinispan</ 
> xsl:attribute>
> +               <xsl:attribute name="enabled">
> +                  <xsl:text>true</xsl:text>
> +               </xsl:attribute>
> +            </xsl:element>
> +
> +            <xsl:element name="shutdown">
> +               <xsl:attribute name="hookBehavior">
> +                  <xsl:text>DEFAULT</xsl:text>
> +               </xsl:attribute>
> +            </xsl:element>
> +         </xsl:element>
> +
> +         <xsl:element name="default">
> +            <xsl:if test="defaultCache[@memoryStoreEvictionPolicy]">
> +               <xsl:if  
> test="contains(defaultCache[@memoryStoreEvictionPolicy], 'LRU')">
> +                  <xsl:element name="eviction">
> +                     <xsl:attribute name="strategy">
> +                        <xsl:value-of select="defaultCache/ 
> @memoryStoreEvictionPolicy"/>
> +                     </xsl:attribute>
> +                  </xsl:element>
> +               </xsl:if>
> +               <xsl:if  
> test="contains(defaultCache[@memoryStoreEvictionPolicy], 'FIFO')">
> +                  <xsl:element name="eviction">
> +                     <xsl:attribute name="strategy">
> +                        <xsl:value-of select="defaultCache/ 
> @memoryStoreEvictionPolicy"/>
> +                     </xsl:attribute>
> +                  </xsl:element>
> +               </xsl:if>
> +               <xsl:if  
> test="contains(defaultCache[@memoryStoreEvictionPolicy], 'LFU')">
> +                  <xsl:message terminate="no">WARNING!!! Infinispan  
> does not support LFU eviction. Using LRU instead.
> +                  </xsl:message>
> +                  <xsl:element name="eviction">
> +                     <xsl:attribute name="strategy">
> +                        <xsl:text>LRU</xsl:text>
> +                     </xsl:attribute>
> +                  </xsl:element>
> +               </xsl:if>
> +            </xsl:if>
> +
> +         </xsl:element>
> +         <xsl:for-each select="cache">
> +            <xsl:element name="namedCache">
> +               <xsl:attribute name="name">
> +                  <xsl:value-of select="@name"/>
> +               </xsl:attribute>
> +               <xsl:element name="eviction">
> +                  <xsl:attribute name="strategy">
> +                     <xsl:choose>
> +                        <xsl:when  
> test="contains(@memoryStoreEvictionPolicy, 'LRU')">
> +                           <xsl:text>LRU</xsl:text>
> +                        </xsl:when>
> +                        <xsl:otherwise>
> +                           <xsl:choose>
> +                              <xsl:when  
> test="contains(@memoryStoreEvictionPolicy, 'FIFO')">
> +                                 <xsl:text>FIFO</xsl:text>
> +                              </xsl:when>
> +                              <xsl:otherwise>
> +                                 <xsl:choose>
> +                                    <xsl:when  
> test="contains(@memoryStoreEvictionPolicy, 'LFU')">
> +                                       <xsl:text>LRU</xsl:text>
> +                                    </xsl:when>
> +                                    <xsl:otherwise>
> +                                       <xsl:text>NONE</xsl:text>
> +                                    </xsl:otherwise>
> +                                 </xsl:choose>
> +                              </xsl:otherwise>
> +                           </xsl:choose>
> +                        </xsl:otherwise>
> +                     </xsl:choose>
> +                  </xsl:attribute>
> +               </xsl:element>
> +               <!-- <expiration lifespan="60000" maxIdle="1000" />  
> -->
> +               <xsl:element name="expiration">
> +
> +               </xsl:element>
> +
> +               <xsl:if test="cacheEventListenerFactory">
> +                  <xsl:element name="clustering">
> +                     <xsl:if test="cacheEventListenerFactory/ 
> @properties">
> +                        <xsl:attribute name="mode">
> +                           <!-- Replication, Invalidation,  
> Distribution-->
> +                           <xsl:text>distribution</xsl:text>
> +                        </xsl:attribute>
> +                        <!-- TODO remove spaces -->
> +                        <xsl:choose>
> +                           <xsl:when  
> test="contains(cacheEventListenerFactory/@properties,  
> 'replicateAsynchronously=false')">
> +                              <xsl:element name="sync">
> +                                 <!-- replQueueInterval="100"  
> replQueueMaxElements="200" ?? -->
> +                                 <xsl:attribute name="useReplQueue">
> +                                    <xsl:text>true</xsl:text>
> +                                 </xsl:attribute>
> +                              </xsl:element>
> +                           </xsl:when>
> +                           <xsl:otherwise>
> +                              <xsl:element name="async">
> +                                 <!-- replQueueInterval="100"  
> replQueueMaxElements="200" ?? -->
> +                                 <xsl:attribute name="useReplQueue">
> +                                    <xsl:text>true</xsl:text>
> +                                 </xsl:attribute>
> +                              </xsl:element>
> +                           </xsl:otherwise>
> +                        </xsl:choose>
> +                     </xsl:if>
> +                  </xsl:element>
> +               </xsl:if>
> +            </xsl:element>
> +         </xsl:for-each>
> +      </xsl:element>
> +
> +
> +   </xsl:template>
> +</xsl:stylesheet>
>
> Added: trunk/core/src/test/resources/configs/ehcache16/ehcache- 
> configuration.xml
> ===================================================================
> --- trunk/core/src/test/resources/configs/ehcache16/ehcache- 
> configuration.xml	                        (rev 0)
> +++ trunk/core/src/test/resources/configs/ehcache16/ehcache- 
> configuration.xml	2009-06-09 21:29:03 UTC (rev 420)
> @@ -0,0 +1,584 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +
> +<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> +         xsi:noNamespaceSchemaLocation="ehcache.xsd" >
> +
> +    <!--
> +    CacheManager Configuration
> +    ==========================
> +    An ehcache.xml corresponds to a single CacheManager.
> +
> +    See instructions below or the ehcache schema (ehcache.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="120"
> +            timeToLiveSeconds="120"
> +            overflowToDisk="true"
> +            diskSpoolBufferSizeMB="30"
> +            maxElementsOnDisk="10000000"
> +            diskPersistent="false"
> +            diskExpiryThreadIntervalSeconds="120"
> +            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="100"
> +           timeToLiveSeconds="100"
> +           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>
>
> Added: trunk/core/src/test/resources/configs/ehcache16/ehcache.xsd
> ===================================================================
> --- trunk/core/src/test/resources/configs/ehcache16/ 
> ehcache.xsd	                        (rev 0)
> +++ trunk/core/src/test/resources/configs/ehcache16/ehcache.xsd	 
> 2009-06-09 21:29:03 UTC (rev 420)
> @@ -0,0 +1,122 @@
> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
> elementFormDefault="qualified" version="1.6">
> +    <xs:element name="ehcache" >
> +        <xs:complexType>
> +            <xs:sequence>
> +                <xs:element minOccurs="0" maxOccurs="1"  
> ref="diskStore"/>
> +                <xs:element minOccurs="0" maxOccurs="1"
> +                            ref="cacheManagerEventListenerFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded"
> +                            ref="cacheManagerPeerProviderFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded"
> +                            ref="cacheManagerPeerListenerFactory"/>
> +                <xs:element ref="defaultCache"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded"  
> ref="cache"/>
> +            </xs:sequence>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="diskStore">
> +        <xs:complexType>
> +            <xs:attribute name="path" use="optional" />
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="cacheManagerEventListenerFactory">
> +        <xs:complexType>
> +            <xs:attribute name="class" use="required"/>
> +            <xs:attribute name="properties" use="optional"/>
> +            <xs:attribute name="propertySeparator" use="optional"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="cacheManagerPeerProviderFactory">
> +        <xs:complexType>
> +            <xs:attribute name="class" use="required"/>
> +            <xs:attribute name="properties" use="optional"/>
> +            <xs:attribute name="propertySeparator" use="optional"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="cacheManagerPeerListenerFactory">
> +        <xs:complexType>
> +            <xs:attribute name="class" use="required"/>
> +            <xs:attribute name="properties" use="optional"/>
> +            <xs:attribute name="propertySeparator" use="optional"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <!-- add clone support for addition of cacheExceptionHandler.  
> Important! -->
> +    <xs:element name="defaultCache">
> +        <xs:complexType>
> +            <xs:sequence>
> +                <xs:element minOccurs="0" maxOccurs="unbounded"  
> ref="cacheEventListenerFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded"  
> ref="cacheExtensionFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded"  
> ref="cacheLoaderFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="1"  
> ref="bootstrapCacheLoaderFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="1"  
> ref="cacheExceptionHandlerFactory"/>
> +            </xs:sequence>
> +            <xs:attribute name="diskExpiryThreadIntervalSeconds"  
> use="optional" type="xs:integer"/>
> +            <xs:attribute name="diskSpoolBufferSizeMB"  
> use="optional" type="xs:integer"/>
> +            <xs:attribute name="diskPersistent" use="optional"  
> type="xs:boolean"/>
> +            <xs:attribute name="eternal" use="required"  
> type="xs:boolean"/>
> +            <xs:attribute name="maxElementsInMemory" use="required"  
> type="xs:integer"/>
> +            <xs:attribute name="memoryStoreEvictionPolicy"  
> use="optional" type="xs:string"/>
> +            <xs:attribute name="overflowToDisk" use="required"  
> type="xs:boolean"/>
> +            <xs:attribute name="timeToIdleSeconds" use="optional"  
> type="xs:integer"/>
> +            <xs:attribute name="timeToLiveSeconds" use="optional"  
> type="xs:integer"/>
> +            <xs:attribute name="maxElementsOnDisk" use="optional"  
> type="xs:integer"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="cache">
> +        <xs:complexType>
> +            <xs:sequence >
> +                <xs:element minOccurs="0" maxOccurs="unbounded"  
> ref="cacheEventListenerFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded"  
> ref="cacheExtensionFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded"  
> ref="cacheLoaderFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="1"  
> ref="bootstrapCacheLoaderFactory"/>
> +                <xs:element minOccurs="0" maxOccurs="1"  
> ref="cacheExceptionHandlerFactory"/>
> +            </xs:sequence>
> +            <xs:attribute name="diskExpiryThreadIntervalSeconds"  
> use="optional" type="xs:integer"/>
> +            <xs:attribute name="diskSpoolBufferSizeMB"  
> use="optional" type="xs:integer"/>
> +            <xs:attribute name="diskPersistent" use="optional"  
> type="xs:boolean"/>
> +            <xs:attribute name="eternal" use="required"  
> type="xs:boolean"/>
> +            <xs:attribute name="maxElementsInMemory" use="required"  
> type="xs:integer"/>
> +            <xs:attribute name="memoryStoreEvictionPolicy"  
> use="optional" type="xs:string"/>
> +            <xs:attribute name="name" use="required"  
> type="xs:string"/>
> +            <xs:attribute name="overflowToDisk" use="required"  
> type="xs:boolean"/>
> +            <xs:attribute name="timeToIdleSeconds" use="optional"  
> type="xs:integer"/>
> +            <xs:attribute name="timeToLiveSeconds" use="optional"  
> type="xs:integer"/>
> +            <xs:attribute name="maxElementsOnDisk" use="optional"  
> type="xs:integer"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="cacheEventListenerFactory">
> +        <xs:complexType>
> +            <xs:attribute name="class" use="required"/>
> +            <xs:attribute name="properties" use="optional"/>
> +            <xs:attribute name="propertySeparator" use="optional"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="bootstrapCacheLoaderFactory">
> +        <xs:complexType>
> +            <xs:attribute name="class" use="required"/>
> +            <xs:attribute name="properties" use="optional"/>
> +            <xs:attribute name="propertySeparator" use="optional"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="cacheExtensionFactory">
> +        <xs:complexType>
> +            <xs:attribute name="class" use="required"/>
> +            <xs:attribute name="properties" use="optional"/>
> +            <xs:attribute name="propertySeparator" use="optional"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="cacheExceptionHandlerFactory">
> +        <xs:complexType>
> +            <xs:attribute name="class" use="required"/>
> +            <xs:attribute name="properties" use="optional"/>
> +            <xs:attribute name="propertySeparator" use="optional"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:element name="cacheLoaderFactory">
> +        <xs:complexType>
> +            <xs:attribute name="class" use="required"/>
> +            <xs:attribute name="properties" use="optional"/>
> +            <xs:attribute name="propertySeparator" use="optional"/>
> +        </xs:complexType>
> +    </xs:element>
> +</xs:schema>
>
> _______________________________________________
> infinispan-commits mailing list
> infinispan-commits at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-commits

--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/infinispan-dev/attachments/20090610/f6863946/attachment-0001.html 


More information about the infinispan-dev mailing list