0 Replies Latest reply on Jun 23, 2010 2:18 PM by rajsoni

    Jboss 1.2.4 Cache not replicated...

    rajsoni Novice

      Hi,

       

      Am trying to use JbossCache with java 1.4.2_13.That's the java version our application is currently using so based on the compatibility matrix specified in the link below,we tried using the Jboss cache 1.2.4 SP2 version:

      JDK compatibility:

      http://community.jboss.org/wiki/jbosscache

       

      I need to be able to run the cache as standalone Java programs and any other node that joins the cluster should be able to read the data put in the cache by any node.I had got that working with the latest version of Jboss cache.However with 1.2.4 version I see that the node2 is not able to get the data put in the cache by node1.

       

      Would really appreciate any help for this.From the logs I see that the clustering is working fine and node2 joins the cluster first created just with node1.The message communication is happening between the nodes as well

       

      Here's how my replicationconfig xml file and the code for the nodes looks like:

       

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

      <!-- ===================================================================== -->

      <!--                                                                       -->

      <!--  Sample TreeCache Service Configuration                               -->

      <!--                                                                       -->

      <!-- ===================================================================== -->

      <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.GenericTransactionManagerLookup</attribute>-->

               <!--

                   Isolation level : SERIALIZABLE

                   REPEATABLE_READ (default)

                   READ_COMMITTED

                   READ_UNCOMMITTED

                   NONE

               -->

               <!--<attribute name="IsolationLevel">REPEATABLE_READ</attribute>-->

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

               <!--

                   Valid modes are LOCAL, REPL_ASYNC and REPL_SYNC

               -->

               <attribute name="CacheMode">REPL_ASYNC</attribute>

               <!--

               Just used for async repl: use a replication queue

               -->

               <attribute name="UseReplQueue">false</attribute>

               <!--

                   Replication interval for replication queue (in ms)

               -->

               <attribute name="ReplQueueInterval">0</attribute>

               <!--

                   Max number of elements which trigger replication

               -->

               <attribute name="ReplQueueMaxElements">0</attribute>

               <!-- Name of cluster. Needs to be the same for all clusters, in order

                    to find each other

               -->

               <attribute name="ClusterName">insurancecluster</attribute>

               <!-- JGroups protocol stack properties. Can also be a URL,

                    e.g. file:/home/bela/default.xml

                  <attribute name="ClusterProperties"></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="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"

                            bind_addr="10.9.10.164"/>

                       <PING timeout="10000" num_initial_members="3"

                             up_thread="false" down_thread="false"/>

                       <!--<PING -->

                             <!--timeout="10000" -->

                             <!--num_initial_members="3"-->

                             <!--up_thread="false" -->

                             <!--down_thread="false"-->

                       <!--/>-->

                       <MERGE2 min_interval="10000" max_interval="20000"/>

                       <!-- NOTE: this was commented off in the example config file -->

                       <!--<FD shun="true" up_thread="true" down_thread="true" />-->

                       <FD

                           shun="false"

                           up_thread="true"

                           down_thread="true"

                       />

                       <FD_SOCK/>

                       <VERIFY_SUSPECT timeout="1500"

                                       up_thread="false" down_thread="false"/>

                       <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"

                                      max_xmit_size="8192" 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.GMS

                               join_timeout="5000"

                               join_retry_timeout="2000"

                               shun="false"

                               print_local_addr="true"

                           disable_initial_coord="false"

                   />

                       <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>

                   </config>

               </attribute>

               <!--

               Whether or not to fetch state on joining a cluster

               'true' (default)

              -->

               <attribute name="FetchStateOnStartup">true</attribute>

               <attribute name="FetchInMemoryState">true</attribute>

               <attribute name="StateRetrievalTimeout">60000</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.

               -->

               <attribute name="SyncReplTimeout">20000</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"></attribute>

              <!--

                         Indicate whether to use marshalling or not. Set this to true if you are running under a scoped

                         class loader, e.g., inside an application server. Default is "false".

                      -->

               <attribute name="UseMarshalling">false</attribute>

          </mbean>

          <!--  Uncomment to get a graphical view of the TreeCache MBean above -->

             <!--<mbean code="org.jboss.cache.TreeCacheView" name="jboss.cache:service=TreeCacheView">-->

                <!--<depends>jboss.cache:service=TreeCache</depends>-->

                <!--<attribute name="CacheService">jboss.cache:service=TreeCache</attribute>-->

             <!--</mbean>-->

      </server>

       

      Code Node1 :

       

               Fqn insuranceFqn = Fqn.fromString("/com/themunicenter/insurance");

               cache = new TreeCache();
               PropertyConfigurator config = new PropertyConfigurator();
               config.configure(cache, "/usr/local/tmc/replication-configuration.xml");

               cache.createService();
               cache.startService();

               HashMap map = new HashMap();
               map.put("abc", "ValueToBeShown");
               cache.put(insuranceFqn, map);

       

      Code Node 2:

       

               cache = new TreeCache();
               PropertyConfigurator config = new PropertyConfigurator();
               config.configure(cache, "/usr/local/tmc/MuniCenter/properties/replication-configuration.xml");
               cache.createService();
               cache.startService();
               Fqn insuranceFqn = Fqn.fromString("/com/themunicenter/insurance");
               String testData = (String) cache.get(insuranceFqn,"abc");
               System.out.println("THE CACHE NOW IS"+testData);

       

      The cache shows as NULL when node2 code runs:

       

      Log from Server is attached here(showing the communication is happening fine between the nodes):

      I say server here,since the progams put and pick messages in Jboss cache based on inflow of a JMS message on weblogic JMS queue.

       

      Will really appreciate any pointers...thanks for taking time to look into this issue!!

       

      The last few lines in server log shows:

      2010-06-23 14:12:56,207 -  WARN (STATE_TRANSFER.java:283:[UpHandler (STATE_TRANSFER)]) - state received from 10.9.10.164:44127 is null, will return null state to application

       

      2010-06-23 14:12:56,207 -  INFO (TreeCache.java:2632:[main]) - state could not be retrieved (must be first member in group)

      2010-06-23 14:12:56,207 -  INFO (TreeCache.java:4010:[Thread-10]) - new cache is null (may be first member in cluster)

      2010-06-23 14:12:56,207 -  INFO (TreeCache.java:1281:[main]) - Cache is started!!

      2010-06-23 14:12:56,208 - DEBUG (PessimisticLockInterceptor.java:217:[main]) - failed to find or create child com of node /

      2010-06-23 14:12:56,208 - DEBUG (TreeCache.java:2716:[main]) - _get("/com/themunicenter/insurance", 010824FU9, "true")