<?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>
        -->
        <attribute name="TransactionManagerLookupClass">org.jboss.cache.JBossTransactionManagerLookup</attribute>

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

        <!--
            Node locking isolation level : 
            SERIALIZABLE
            REPEATABLE_READ (default)
            READ_COMMITTED
            READ_UNCOMMITTED
            NONE
            
            (ignored if NodeLockingScheme is OPTIMISTIC)
        -->
        <attribute name="IsolationLevel">NONE</attribute>

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

        <!--     Valid modes are LOCAL
            REPL_ASYNC
            REPL_SYNC
            INVALIDATION_ASYNC
            INVALIDATION_SYNC
        -->
        <attribute name="CacheMode">REPL_ASYNC</attribute>

        <!--  Whether each interceptor should have an mbean
            registered to capture and display its statistics.  -->
            <!--  BUG: This attribute is not yet available/active
        <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>  -->
        <attribute name="ClusterName">hrxsessions</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
                -->
                <!--  Default
                    <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" />
                -->
                <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="true" />
                <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.  Default 10000
        -->
        <attribute name="SyncReplTimeout">1000</attribute>

        <!--  Max number of milliseconds to wait for a lock acquisition.  Default: 15000 -->
        <attribute name="LockAcquisitionTimeout">1500</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.  Default: 120 -->
                    <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/hrx">
                    <attribute name="maxNodes">10000</attribute>
                    <attribute name="timeToLiveSeconds">240</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>true</passivation>
                <!--
                    <preload>/a/b, /allTempObjects, /some/specific/fqn</preload>
                -->
                <preload></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/hrx/sessions</properties>
                    <!-- whether the cache loader writes are asynchronous.  Default: false -->
                    <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>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>true</purgeOnStartup>
                </cacheloader>
                <!-- TODO: Switch to an embedded DB
                <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>
