[jboss-user] [JBossCache] - Multiple JVM distributed cache How To ?

richiesgr do-not-reply at jboss.com
Mon Dec 3 11:43:29 EST 2007


Hi

I've really search and read but I can't understand what's wrong with this :

I've 2 JVM on the same or differente machine:

My configuration (from jboss sample without any modification) :

  | <?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.jmx.CacheJmxWrapper"
  |           name="jboss.cache:service=testTreeCache">
  | 
  |       <depends>jboss:service=Naming</depends>
  |       <depends>jboss:service=TransactionManager</depends>
  | 
  |       <!--
  |           Configure the TransactionManager
  |       -->
  |       <attribute name="TransactionManagerLookupClass">org.jboss.cache.transaction.GenericTransactionManagerLookup
  |       </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
  |                            INVALIDATION_ASYNC
  |                            INVALIDATION_SYNC
  |       -->
  |       <attribute name="CacheMode">REPL_SYNC</attribute>
  | 
  |       <!-- Name of cluster. Needs to be the same for all TreeCache nodes in a
  |            cluster in order to find each other.
  |       -->
  |       <attribute name="ClusterName">JBossCache-Cluster</attribute>
  | 
  |       <!--Uncomment next three statements to enable JGroups multiplexer.
  | This configuration is dependent on the JGroups multiplexer being
  | registered in an MBean server such as JBossAS.  -->
  |       <!--
  |       <depends>jgroups.mux:name=Multiplexer</depends>
  |       <attribute name="MultiplexerService">jgroups.mux:name=Multiplexer</attribute>
  |       <attribute name="MultiplexerStack">fc-fast-minimalthreads</attribute>
  |       -->
  | 
  |       <!-- JGroups protocol stack properties.
  |          ClusterConfig isn't used if the multiplexer is enabled and successfully initialized.
  |       -->
  |       <attribute name="ClusterConfig">
  |          <config>
  |             <UDP mcast_addr="228.10.10.10"
  |                  mcast_port="45588"
  |                  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="2"
  |                  enable_bundling="false"
  |                  enable_diagnostics="true"
  | 
  |                  use_concurrent_stack="true"
  | 
  |                  thread_naming_pattern="pl"
  | 
  |                  thread_pool.enabled="true"
  |                  thread_pool.min_threads="1"
  |                  thread_pool.max_threads="25"
  |                  thread_pool.keep_alive_time="30000"
  |                  thread_pool.queue_enabled="true"
  |                  thread_pool.queue_max_size="10"
  |                  thread_pool.rejection_policy="Run"
  | 
  |                  oob_thread_pool.enabled="true"
  |                  oob_thread_pool.min_threads="1"
  |                  oob_thread_pool.max_threads="4"
  |                  oob_thread_pool.keep_alive_time="10000"
  |                  oob_thread_pool.queue_enabled="true"
  |                  oob_thread_pool.queue_max_size="10"
  |                  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"/>
  |             <pbcast.NAKACK max_xmit_size="60000"
  |                            use_mcast_xmit="false" gc_lag="0"
  |                            retransmit_timeout="300,600,1200,2400,4800"
  |                            discard_delivered_msgs="true"/>
  |             <UNICAST timeout="300,600,1200,2400,3600"/>
  |             <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
  |                            max_bytes="400000"/>
  |             <pbcast.GMS print_local_addr="true" join_timeout="5000"
  |                         join_retry_timeout="2000" shun="false"
  |                         view_bundling="true" view_ack_collection_timeout="5000"/>
  |             <FRAG2 frag_size="60000"/>
  |             <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
  |             <!-- <pbcast.STATE_TRANSFER/> -->
  |             <pbcast.FLUSH timeout="0"/>
  |          </config>
  |       </attribute>
  | 
  | 
  |       <!--
  |           The max amount of time (in milliseconds) we wait until the
  |           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">15000</attribute>
  | 
  |       <!-- Max number of milliseconds to wait for a lock acquisition -->
  |       <attribute name="LockAcquisitionTimeout">10000</attribute>
  | 
  | 
  |       <!-- Buddy Replication config -->
  |       <attribute name="BuddyReplicationConfig">
  |          <config>
  |             <buddyReplicationEnabled>true</buddyReplicationEnabled>
  |             <!-- these are the default values anyway -->
  |             <buddyLocatorClass>org.jboss.cache.buddyreplication.NextMemberBuddyLocator</buddyLocatorClass>
  |             <!-- numBuddies is the number of backup nodes each node maintains.  ignoreColocatedBuddies means that
  |      each node will *try* to select a buddy on a different physical host.  If not able to do so though,
  |      it will fall back to colocated nodes. -->
  |             <buddyLocatorProperties>
  |                numBuddies = 1
  |                ignoreColocatedBuddies = true
  |             </buddyLocatorProperties>
  | 
  |             <!-- A way to specify a preferred replication group.  If specified, we try and pick a buddy why shares
  |     the same pool name (falling back to other buddies if not available).  This allows the sysdmin to hint at
  |     backup buddies are picked, so for example, nodes may be hinted topick buddies on a different physical rack
  |     or power supply for added fault tolerance.  -->
  |             <buddyPoolName>myBuddyPoolReplicationGroup</buddyPoolName>
  |             <!-- communication timeout for inter-buddy group organisation messages (such as assigning to and removing
  |           from groups -->
  |             <buddyCommunicationTimeout>2000</buddyCommunicationTimeout>
  | 
  |             <!-- the following three elements, all relating to data gravitation, default to false -->
  |             <!-- Should data gravitation be attempted whenever there is a cache miss on finding a node?
  | If false, data will only be gravitated if an Option is set enabling it -->
  |             <autoDataGravitation>false</autoDataGravitation>
  |             <!-- removes data on remote caches' trees and backup subtrees when gravitated to a new data owner -->
  |             <dataGravitationRemoveOnFind>true</dataGravitationRemoveOnFind>
  |             <!-- search backup subtrees as well for data when gravitating.  Results in backup nodes being able to
  |         answer data gravitation requests. -->
  |             <dataGravitationSearchBackupTrees>true</dataGravitationSearchBackupTrees>
  | 
  |          </config>
  |       </attribute>
  |    </mbean>
  | 
  | 
  | </server>
  | 


My first class put something in the cache like this :

  |                 CacheFactory factory = DefaultCacheFactory.getInstance();
  | 		Cache cache = factory.createCache("/home/rgrossman2/workspace/jbossCache/jbossconfig.xml");
  | 
  | 		Node rootNode = cache.getRoot();
  | 		Fqn xmlNodeKey = Fqn.fromString("/cluster/12345");
  | 		
  | 		Node xmlNode = rootNode.addChild(xmlNodeKey);
  | 		xmlNode.put("data", xml);
  | 		
  | 		System.out.println("Get data from cache local");
  | 		String xml = (String) xmlNode.get("data");
  | 		
  | 		System.out.println("Data In cache:" + xml);
  | 		
  | 		try {
  | 			Thread.sleep(100000);
  | 		} catch (InterruptedException e) {
  | 			// TODO Auto-generated catch block
  | 			e.printStackTrace();
  | 		}
  | 

The second client try to get the data from the cache

  | 		CacheFactory factory = DefaultCacheFactory.getInstance();
  | 		Cache cache = factory.createCache("/home/rgrossman2/workspace/jbossCache/jbossconfig.xml");
  | 
  | 		try {
  | 			Thread.sleep(100000);
  | 		} catch (InterruptedException e) {
  | 			// TODO Auto-generated catch block
  | 			e.printStackTrace();
  | 		}
  | 
  | 		Node rootNode = cache.getRoot();
  | 		Fqn xmlNodeKey = Fqn.fromString("/cluster/12345");
  | 		
  | 		Node xmlNode = rootNode.getChild(xmlNodeKey);
  | 		String xml = (String) xmlNode.get("data");
  | 

The trace show me that the cluster is ok but I get always null on  client2 : Node xmlNode = rootNode.getChild(xmlNodeKey);

seems that the object is not visible for the second VM

I use the same configuration for both client

Thanks for any help


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4109920#4109920

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4109920



More information about the jboss-user mailing list