<?xml version="1.0" encoding="UTF-8"?>

<!--
  ~ Hibernate, Relational Persistence for Idiomatic Java
  ~
  ~ Copyright (c) 2007, Red Hat Middleware LLC or third-party contributors as
  ~ indicated by the @author tags or express copyright attribution
  ~ statements applied by the authors.  All third-party contributions are
  ~ distributed under license by Red Hat Middleware LLC.
  ~
  ~ This copyrighted material is made available to anyone wishing to use, modify,
  ~ copy, or redistribute it subject to the terms and conditions of the GNU
  ~ Lesser General Public License, as published by the Free Software Foundation.
  ~
  ~ This program is distributed in the hope that it will be useful,
  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  ~ or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
  ~ for more details.
  ~
  ~ You should have received a copy of the GNU Lesser General Public License
  ~ along with this distribution; if not, write to:
  ~ Free Software Foundation, Inc.
  ~ 51 Franklin Street, Fifth Floor
  ~ Boston, MA  02110-1301  USA
  -->

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Sample TreeCache Service Configuration                               -->
<!--                                                                       -->
<!-- ===================================================================== -->

<server>

    <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>


    <!-- ==================================================================== -->
    <!-- Defines TreeCache configuration                                      -->
    <!-- ==================================================================== -->

    <mbean code="org.jboss.cache.jmx.CacheJmxWrapper"
        name="jboss.cache:service=TreeCache">

        <depends>jboss:service=Naming</depends>
        <depends>jboss:service=TransactionManager</depends>

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

        <!--
            TransactionManager configuration not required for Hibernate!
            Hibernate will plug in its own transaction manager integration.
        -->

        <attribute name="IsolationLevel">READ_COMMITTED</attribute>

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

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

        <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"/>
                <MERGE2 min_interval="10000" max_interval="20000"/>
                <FD shun="true"/>
                <VERIFY_SUSPECT timeout="1500"/>
                <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"/>
                <pbcast.STABLE desired_avg_gossip="20000"/>
                <UNICAST timeout="600,1200,2400" min_threshold="10"/>
                <FRAG frag_size="8192"/>
                <pbcast.GMS join_timeout="5000" shun="true" print_local_addr="true"/>
                <pbcast.STATE_TRANSFER/>
            </config>
        </attribute>
      
      <!-- Must be true if any entity deployment uses a scoped classloader -->
      <attribute name="UseRegionBasedMarshalling">true</attribute>
      <!-- Must match the value of "useRegionBasedMarshalling" -->
      <attribute name="InactiveOnStartup">true</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="StateRetrievalTimeout">20000</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">5000</attribute>

        <!-- For now. disable asynchronous RPC marshalling/sending -->
        <attribute name="SerializationExecutorPoolSize">0</attribute>
        
        <attribute name="UseLockStriping">false</attribute>

      <!--  Specific eviction policy configurations. This is LRU -->
      <attribute name="EvictionPolicyConfig">
        <config>
          <attribute name="wakeUpIntervalSeconds">5</attribute>
          <!-- Name of the DEFAULT eviction policy class. -->
          <attribute name="policyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
          <!--  Cache wide default -->
          <region name="/_default_">
            <attribute name="maxNodes">5000</attribute>
            <attribute name="timeToLiveSeconds">1000</attribute>
          </region>
          <!--  Don't ever evict modification timestamps -->
          <region name="/TS">
            <attribute name="maxNodes">0</attribute>
            <attribute name="timeToLiveSeconds">0</attribute>
          </region>
        </config>
     </attribute>
  </mbean>


</server>
