0 Replies Latest reply on Jul 27, 2011 6:09 AM by vdeminico

    Clustered JBoss Cache and JDBCCacheLoader

    vdeminico

      Hi all,

      I'm clustering an app which uses a jboss cache to cache data. For JBoss Cache I use a JDBCCacheLoader and mysql as DBMS. My question is how clusterize this scenario??? I should have a shared mysql instance or an instance on all machines????? I use JBoss Cache 3.1.0.GA (bundled in JBoss AS 5.1.0.GA).

       

      Here my *-service.xml file:

       

       

      <mbean code="org.jboss.cache.pojo.jmx.PojoCacheJmxWrapper" 
                name="jboss.cache:service=PojoCache">
            
            <depends>jboss:service=TransactionManager</depends>
      
      
            <!-- Configure the TransactionManager (test only!)-->
                  <!--
            <attribute name="TransactionManagerLookupClass">
               org.jboss.cache.transaction.DummyTransactionManagerLookup
            </attribute>
                  -->
                  
            <!-- Isolation level : SERIALIZABLE
                                   REPEATABLE_READ (default)
                                   READ_COMMITTED
                                   READ_UNCOMMITTED
                                   NONE
            -->
            <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
      
      
            <!-- Valid modes are LOCAL, REPL_ASYNC and REPL_SYNC -->
            <attribute name="CacheMode">REPL_SYNC</attribute>
      
      
            <!-- Name of cluster. Needs to be the same for all caches, 
                 in order for them to find each other
            -->
            <attribute name="ClusterName">PojoCacheCluster</attribute>
      
      
                     <!-- JGroups protocol stack properties. -->
            <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="48866"
                       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"/>
                  <FD_SOCK/>
                  <VERIFY_SUSPECT timeout="1500"/>
                  <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
                                 max_xmit_size="8192"/>
                  <UNICAST timeout="600,1200,2400,4800"/>
                  <pbcast.STABLE desired_avg_gossip="400000"/>
                  <FC max_credits="2000000" min_threshold="0.10"/>
                  <FRAG2 frag_size="8192"/>
                  <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
                              shun="true" print_local_addr="true"/>
                  <pbcast.STATE_TRANSFER/>
               </config>
            </attribute>
      
      
      <attribute name="EvictionPolicyConfig">
         <config>
            <attribute name="wakeUpIntervalSeconds">5</attribute>
            <attribute name="policyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
            <!-- Cache wide default -->
            <region name="/profile">
                <attribute name="maxNodes">5000</attribute>
                <attribute name="timeToLiveSeconds">3</attribute>
            </region>
         </config>
      </attribute>
      
      
      
      
            <!-- CacheLoaderConfiguration -->
      <attribute name="CacheLoaderConfig">
         <config>
            <passivation>true</passivation>
            <preload>/profile</preload>
            <shared>false</shared>
      
      
            <!-- we can now have multiple cache loaders, which get chained -->
            <cacheloader>
               <class>org.jboss.cache.loader.JDBCCacheLoader</class>
                <properties>
                                      cache.jdbc.driver=com.mysql.jdbc.Driver
                                cache.jdbc.url=jdbc:mysql://localhost:3306/db_cache
                                      cache.jdbc.user=root
                                  cache.jdbc.password=admin
                                    cache.jdbc.node.type=LONGBLOB
                                    cache.jdbc.table.drop=false
                                    cache.jdbc.table.create=false
               </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>
            </cacheloader>
         </config>
      </attribute>
      
      
      
      
            <!-- Whether or not to fetch state on joining a cluster -->
            <attribute name="FetchInMemoryState">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="InitialStateRetrievalTimeout">15000</attribute>
      
      
            <!-- Number of milliseconds to wait until all responses for a
                 synchronous call have been received.
            -->
            <attribute name="SyncReplTimeout">15000</attribute>
      
      
            <!--  Max number of milliseconds to wait for a lock acquisition -->
            <attribute name="LockAcquisitionTimeout">10000</attribute>
         
         </mbean>
      
      
      </server>
      
      

       

       

      Thanks,

      Valerio.