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

   <!-- ========================================================== -->
   <!-- Clustered SFSB cache config for use with JBoss Cache 1.4.x --> 
   <!-- ========================================================== -->
   <mbean code="org.jboss.cache.TreeCache" 
          name="jboss.cache:service=EJB3SFSBClusteredCache">
        
      <attribute name="ClusterName">${jboss.partition.name:DefaultPartition}-SFSBCache</attribute>
      
      <!--
              Node locking level : SERIALIZABLE
                                   REPEATABLE_READ (default)
                                   READ_COMMITTED
                                   READ_UNCOMMITTED
                                   NONE
      -->
      <attribute name="IsolationLevel">REPEATABLE_READ</attribute>

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

	  <!-- We want to activate/inactivate regions as beans are deployed -->
      <attribute name="UseRegionBasedMarshalling">true</attribute>
      <!-- Must match the value of "useRegionBasedMarshalling" -->
      <attribute name="InactiveOnStartup">true</attribute>

	  <!-- 
	       JGroups protocol stack config in XML format.
		   If your CacheMode is set to REPL_SYNC we recommend you comment
           out the FC (flow control) protocol
			 
           On Windows machines, because of the media sense feature
           being broken with multicast (even after disabling media sense)
           set the UDP.loopback attribute to true
	  -->     
      <attribute name="ClusterConfig">
         <config>
            <UDP mcast_addr="${jboss.partition.udpGroup:229.1.2.3}" 
             mcast_port="${jboss.ejb3sfsbpartition.mcast_port:45551}"
             tos="8"
             ucast_recv_buf_size="20000000"
             ucast_send_buf_size="640000"
             mcast_recv_buf_size="25000000"
             mcast_send_buf_size="640000"
             loopback="false"
             discard_incompatible_packets="true"
             enable_bundling="false"
             max_bundle_size="64000"
             max_bundle_timeout="30"
             use_incoming_packet_handler="true"
             use_outgoing_packet_handler="false"
             ip_ttl="${jgroups.udp.ip_ttl:2}"
             down_thread="false" up_thread="false"/>
          <PING timeout="2000"
             down_thread="false" up_thread="false" num_initial_members="3"/>
          <MERGE2 max_interval="100000"
             down_thread="false" up_thread="false" min_interval="20000"/>
          <FD_SOCK down_thread="false" up_thread="false"/>
          <FD timeout="10000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
          <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
          <pbcast.NAKACK max_xmit_size="60000"
                   use_mcast_xmit="false" gc_lag="0"
                   retransmit_timeout="300,600,1200,2400,4800"
                   down_thread="false" up_thread="false"
                   discard_delivered_msgs="true"/>
          <UNICAST timeout="300,600,1200,2400,3600"
             down_thread="false" up_thread="false"/>
          <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                   down_thread="false" up_thread="false"
                   max_bytes="400000"/>
          <pbcast.GMS print_local_addr="true" join_timeout="3000"
                   down_thread="false" up_thread="false"
                   join_retry_timeout="2000" shun="true"
                   view_bundling="true"
                   view_ack_collection_timeout="5000"/>
          <FC max_credits="2000000" down_thread="false" up_thread="false"
              min_threshold="0.10"/>
          <FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
          <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="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.
      -->
      <attribute name="InitialStateRetrievalTimeout">17500</attribute>

      <!--    Number of milliseconds to wait until all responses for a
              synchronous call have been received.
      -->
      <attribute name="SyncReplTimeout">17500</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. -->
      <attribute name="EvictionPolicyConfig">
         <config>
            <attribute name="wakeUpIntervalSeconds">5</attribute>
            <name>statefulClustered</name>
            <!-- So default region would never timeout -->
            <region name="/_default_">
               <attribute name="maxNodes">0</attribute>
               <attribute name="timeToIdleSeconds">0</attribute>
            </region>

         </config>
      </attribute>

      <!-- Store passivated sessions to the file system -->
      <attribute name="CacheLoaderConfiguration">
          <config>
              
              <passivation>true</passivation>
              <shared>false</shared>

              <cacheloader>
                  <class>org.jboss.cache.loader.FileCacheLoader</class>
                  <!-- Passivate to the server data dir -->
                  <properties>
                       location=${jboss.server.data.dir}${/}sfsb 
                  </properties>
                  <async>false</async>
                  <fetchPersistentState>true</fetchPersistentState>
                  <ignoreModifications>false</ignoreModifications>
              </cacheloader>

          </config>
      </attribute>
   </mbean>

</server>

