11.1. Sample XML-Based Configuration

11.1. Sample XML-Based Configuration

A sample XML configuration file is shown below:

<?xml version="1.0" encoding="UTF-8" ?>
<server>
  <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar" />

  <!--  ====================================================================  -->
  <!--  Defines TreeCache configuration                                       -->
  <!--  ====================================================================  -->
  <mbean code="org.jboss.cache.TreeCache" name="jboss.cache:service=TreeCache">
    <depends>jboss:service=Naming</depends>
    <depends>jboss:service=TransactionManager</depends>


    <!-- Configure the TransactionManager -->
    <attribute name="TransactionManagerLookupClass">
        org.jboss.cache.DummyTransactionManagerLookup
    </attribute>

<!-- 
Node locking scheme : 
PESSIMISTIC (default)
OPTIMISTIC 
-->
<attribute name="NodeLockingScheme">PESSIMISTIC</attribute>

    <!--
            Node locking isolation level : 
 SERIALIZABLE
                                 REPEATABLE_READ (default)
                                 READ_COMMITTED
                                 READ_UNCOMMITTED
                                 NONE

(ignored if NodeLockingScheme is OPTIMISTIC)
    -->
    <attribute name="IsolationLevel">REPEATABLE_READ</attribute>

    <!-- Lock parent before doing node additions/removes -->
    <attribute name="LockParentForChildInsertRemove">true</attribute>

    <!--     Valid modes are LOCAL
                             REPL_ASYNC
                             REPL_SYNC
                             INVALIDATION_ASYNC
                             INVALIDATION_SYNC
    -->
    <attribute name="CacheMode">LOCAL</attribute>
    
    <!--  Whether each interceptor should have an mbean
        registered to capture and display its statistics.  -->
    <attribute name="UseInterceptorMbeans">true</attribute>

    <!-- Name of cluster. Needs to be the same for all TreeCache nodes in a
    cluster, in order to find each other -->
    <attribute name="ClusterName">JBoss-Cache-Cluster</attribute>

    <!-- Uncomment next three statements to enable JGroups multiplexer.
         This configuration is dependent on the JGroups multiplexer being
         registered in an MBean server such as JBossAS. -->
    <!--
    <depends>jgroups.mux:name=Multiplexer</depends>
    <attribute name="MultiplexerService">jgroups.mux:name=Multiplexer</attribute>
    <attribute name="MultiplexerStack">udp</attribute>
    -->

    <!-- JGroups protocol stack properties. ClusterConfig isn't used if the
     multiplexer is enabled and successfully initialized. -->
    <attribute name="ClusterConfig">
      <config>
        <!-- UDP: if you have a multihomed machine,
                set the bind_addr attribute to the appropriate NIC IP address
        -->
        <!-- UDP: On Windows machines, because of the media sense feature
                 being broken with multicast (even after disabling media sense)
                 set the loopback attribute to true
        -->
        <UDP mcast_addr="228.1.2.3" mcast_port="45566" ip_ttl="64" ip_mcast="true"
           mcast_send_buf_size="150000" mcast_recv_buf_size="80000" 
	   ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
	   loopback="false" />
        <PING timeout="2000" num_initial_members="3" up_thread="false" 
	    down_thread="false" />
        <MERGE2 min_interval="10000" max_interval="20000" />
        <FD shun="true" up_thread="true" down_thread="true" />
        <VERIFY_SUSPECT timeout="1500" up_thread="false" down_thread="false" />
        <pbcast.NAKACK gc_lag="50" max_xmit_size="8192" 
	   retransmit_timeout="600,1200,2400,4800" up_thread="false"
           down_thread="false" />
        <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10" 
	    down_thread="false" />
        <pbcast.STABLE desired_avg_gossip="20000" up_thread="false" down_thread="false" />
        <FRAG frag_size="8192" down_thread="false" up_thread="false" />
        <pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="true" 
	    print_local_addr="true" />
        <pbcast.STATE_TRANSFER up_thread="false" down_thread="false" />
      </config>
    </attribute>

    <!--    The max amount of time (in milliseconds) we wait until the
            initial state (ie. the contents of the cache) are retrieved from
            existing members in a clustered environment
    -->
    <attribute name="InitialStateRetrievalTimeout">5000</attribute>

    <!--    Number of milliseconds to wait until all responses for a
            synchronous call have been received.
    -->
    <attribute name="SyncReplTimeout">10000</attribute>

    <!--  Max number of milliseconds to wait for a lock acquisition -->
    <attribute name="LockAcquisitionTimeout">15000</attribute>

    <!--  Name of the eviction policy class. -->
    <attribute name="EvictionPolicyClass">org.jboss.cache.eviction.LRUPolicy</attribute>

    <!--  Specific eviction policy configurations. This is LRU -->
    <attribute name="EvictionPolicyConfig">
      <config>
        <attribute name="wakeUpIntervalSeconds">5</attribute>
        <!--  Cache wide default -->
        <region name="/_default_">
         <attribute name="maxNodes">5000</attribute>
         <attribute name="timeToLiveSeconds">1000</attribute>
         <!-- Maximum time an object is kept in cache regardless of idle time -->
         <attribute name="maxAgeSeconds">120</attribute>
       </region>

       <region name="/org/jboss/data">
         <attribute name="maxNodes">5000</attribute>
         <attribute name="timeToLiveSeconds">1000</attribute>
       </region>

       <region name="/org/jboss/test/data">
         <attribute name="maxNodes">5</attribute>
         <attribute name="timeToLiveSeconds">4</attribute>
       </region>
      </config>
    </attribute>

        <!-- New 1.3.x cache loader config block -->
        <attribute name="CacheLoaderConfiguration">
            <config>
                <!-- if passivation is true, only the first cache loader is used; 
		    the rest are ignored -->
                <passivation>false</passivation>
                <preload>/a/b, /allTempObjects, /some/specific/fqn</preload>
                <shared>false</shared>

                <!-- we can now have multiple cache loaders, which get chained -->
                <cacheloader>
                    <class>org.jboss.cache.loader.FileCacheLoader</class>
                    <!-- same as the old CacheLoaderConfig attribute -->
                    <properties>
                        location=/tmp/myFileStore
                    </properties>
                    <!-- whether the cache loader writes are asynchronous -->
                    <async>false</async>
                    <!-- only one cache loader in the chain may set 
		        fetchPersistentState 
			to true.
                        An exception is thrown if more than one cache loader 
			sets this to 
			true. -->
                    <fetchPersistentState>true</fetchPersistentState>
                    <!-- determines whether this cache loader ignores writes - 
		        defaults to 
			false. -->
                    <ignoreModifications>false</ignoreModifications>
                    <!-- if set to true, purges the contents of this cache loader 
		          when the cache starts up. Defaults to false.  -->
                    <purgeOnStartup>false</purgeOnStartup>
                </cacheloader>

                <cacheloader>
                    <class>org.jboss.cache.loader.JDBCCacheLoader</class>
                    <!-- same as the old CacheLoaderConfig attribute -->
                    <properties>
                        cache.jdbc.driver=com.mysql.jdbc.Driver
                        cache.jdbc.url=jdbc:mysql://localhost:3306/jbossdb
                        cache.jdbc.user=root
                        cache.jdbc.password=
                    </properties>
                    <!-- whether the cache loader writes are asynchronous -->
                    <async>true</async>
                    <!-- only one cache loader in the chain may set fetchPersistentState
		        to true. An exception is thrown if more than one cache loader 
			sets this to true. -->
                    <fetchPersistentState>false</fetchPersistentState>
                    <!-- determines whether this cache loader ignores writes - defaults 
		        to false. -->
                    <ignoreModifications>true</ignoreModifications>
                    <!-- if set to true, purges the contents of this cache loader when the 
		        cache starts up. Defaults to false.  -->
                    <purgeOnStartup>false</purgeOnStartup>
                </cacheloader>

            </config>
        </attribute>


  </mbean>
</server>     

The PropertyConfigurator.configure() method needs to have as argument a filename which is located on the classpath; it will use be used to configure JBoss Cache from the properties defined in it. Note that this configuration file is used to configure JBoss Cache both as a standalone cache, and as an MBean if run inside the JBoss container.[8]



[8] We will switch to using an XMBean in a future release.