1 Reply Latest reply: May 30, 2010 7:40 PM by Oliver Yang RSS

Remote node did not update when modifying a node

Oliver Yang Newbie

Hi, every one

 

I have two jboss instances with a pojocache each are running in different server and share one database, I cluster the cache in a group. The cache mode is REPL_SYNC and my cache loader is JDBC cache loader.When I attach a node and detach a cache, they both work fine, when I use following codes to modify a cache, only local cache is modified and remote cache still remain same.

     MyObject obj = (MyObject)pojoCache.find("theKey");

     obj.setValue("newValue");

     //that all

If I should use attach() to attach the modified object again, the remote cache will be changed. Can any one knows the issue?

 

I have a cache listener added to the cache to debug all events, but FieldModifiedEvent event never happened. my cached configuration is:

 

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

 

<server>
   <mbean code="org.jboss.cache.pojo.jmx.PojoCacheJmxWrapper"
          name="jboss.cache:service=PojoCache">

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

 

      <attribute name="TransactionManagerLookupClass">
         org.jboss.cache.transaction.JBossTransactionManagerLookup
      </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>
     
        <!--  Specific eviction policy configurations. This is LRU -->
        <attribute name="EvictionPolicyConfig">
          <attribute name="EvictionPolicyClass">org.jboss.cache.aop.eviction.AopLRUPolicy</attribute>
          <config>
                    <attribute name="wakeUpIntervalSeconds">10</attribute>
                    <!--  Cache wide default -->
                    <region name="/_default_">
                      <!-- <attribute name="policyClass">org.jboss.cache.aop.eviction.AopLRUPolicy</attribute> -->
                      <attribute name="maxNodes">5000</attribute>
                      <attribute name="timeToLiveSeconds">3600</attribute>
                    </region>
                   
                    <region name="/user">
                      <attribute name="maxNodes">5000</attribute>
                      <attribute name="timeToLiveSeconds">3600</attribute>
                      <attribute name="maxAgeSeconds">86400</attribute>
                    </region>
                   
                    <region name="/user_attribute">
            <attribute name="maxNodes">5000</attribute>
            <attribute name="timeToLiveSeconds">3600</attribute>
            <attribute name="maxAgeSeconds">86400</attribute>
          </region>
        </config>
        </attribute>
     
      <attribute name="CacheLoaderConfiguration">
         <config>
            <!-- if passivation is true, only the first cache loader is used;
    the rest are ignored -->
            <passivation>false</passivation>
            <!-- comma delimited FQNs to preload -->
            <!-- are the cache loaders shared in a cluster? -->
            <shared>true</shared>
   
            <!-- we can now have multiple cache loaders, which get chained -->
            <!-- the 'cacheloader' element may be repeated -->
            <cacheloader>
            <class>org.jboss.cache.loader.JDBCCacheLoader</class>
            <!-- same as the old CacheLoaderConfig attribute -->
            <properties>
                cache.jdbc.driver=org.postgresql.Driver
                cache.jdbc.url=jdbc:postgresql://dev/devdb
                cache.jdbc.user=devrole1
                cache.jdbc.password=password
                cache.jdbc.node.type=VARBINARY
            </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>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>
        </config>
      </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
                        mcast_addr="${jgroups.udp.mcast_addr:228.1.2.3}"
                        mcast_port="${jgroups.udp.mcast_port:48866}"
                        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"
                        max_bundle_size="64000"
                        max_bundle_timeout="30"
                        use_incoming_packet_handler="true"
                        ip_ttl="${jgroups.udp.ip_ttl:2}"
                        enable_bundling="true"
                        enable_diagnostics="true"
                        thread_naming_pattern="cl"
                       
                        use_concurrent_stack="true"
                       
                        thread_pool.enabled="true"
                        thread_pool.min_threads="2"
                        thread_pool.max_threads="8"
                        thread_pool.keep_alive_time="5000"
                        thread_pool.queue_enabled="true"
                        thread_pool.queue_max_size="1000"
                        thread_pool.rejection_policy="discard"
                       
                        oob_thread_pool.enabled="true"
                        oob_thread_pool.min_threads="1"
                        oob_thread_pool.max_threads="8"
                        oob_thread_pool.keep_alive_time="5000"
                        oob_thread_pool.queue_enabled="false"
                        oob_thread_pool.queue_max_size="100"
                        oob_thread_pool.rejection_policy="Run"/>

 

                <PING timeout="2000"
                        num_initial_members="3"/>
                <MERGE2 max_interval="30000"
                        min_interval="10000"/>
                <FD_SOCK/>
                <FD timeout="10000" max_tries="5"   shun="true"/>
                <VERIFY_SUSPECT timeout="1500"  />
                <BARRIER />
                <pbcast.NAKACK use_stats_for_retransmission="false"
                               exponential_backoff="150"
                               use_mcast_xmit="true" gc_lag="0"
                               retransmit_timeout="50,300,600,1200"
                               discard_delivered_msgs="true"/>
                <UNICAST timeout="300,600,1200"/>
                <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                               max_bytes="1000000"/>
                <VIEW_SYNC avg_send_interval="60000"   />
                <pbcast.GMS print_local_addr="true" join_timeout="3000"
                            shun="false"
                            view_bundling="true"/>
                <FC max_credits="500000"
                                min_threshold="0.20"/>
                <FRAG2 frag_size="60000"  />
                <!--pbcast.STREAMING_STATE_TRANSFER /-->
                <pbcast.STATE_TRANSFER  />
                <!-- pbcast.FLUSH  /-->
        </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 in advance.

 

Oliver