2 Replies Latest reply on Aug 5, 2009 10:25 PM by snacker

    TreeCache Cluster problem (JBoss 4.2.3 and JBossCache 1.4.1

    servosimpson

      I'm trying to get a simple TreeCache cluster working. The first server comes up fine and data is inserted into the cache. Here is the code for the cache init called from a ServletContextListener:

       public void initCache() throws Exception {
      
       try {
       server = MBeanServerLocator.locateJBoss();
      
       cache = (TreeCacheMBean)MBeanProxyExt.create(TreeCacheMBean.class,
       new ObjectName("jboss.cache:service=TreeCache"),server);
      
       cache.registerClassLoader("/TestCache", Thread.currentThread().getContextClassLoader());
       cache.activateRegion("/TestCache");
       if (cache == null) {
       throw new Exception("...");
       }
       }
      
       catch (Exception e) {
       throw new Exception("...",e);
       }
       }
      


      The config is:


      <?xml version="1.0" encoding="UTF-8"?>
      <server>
       <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.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>
      
       <!-- 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">${jboss.partition.name:DefaultPartition}-TreeCache</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, e.g bind_addr="192.168.0.2"
       -->
       <!-- 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="${jboss.partition.udpGroup: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"
       up_thread="false" down_thread="false" />
       <MERGE2 min_interval="10000" max_interval="20000" />
       <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" 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.STATE_TRANSFER up_thread="true" down_thread="true" />
       </config>
       </attribute>
      
       <!-- Whether or not to fetch state on joining a cluster -->
       <attribute name="FetchInMemoryState">true</attribute>
       <attribute name="UseRegionBasedMarshalling">true</attribute>
       <attribute name="InactiveOnStartup">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>
      
       <!-- Name of the eviction policy class. -->
       <attribute name="EvictionPolicyClass" />
       </mbean>
      </server>
      


      Server A starts fine, and after it is up and running, I launch Server B. It gets to the int code above and throws the following exception:

      14:32:47,429 INFO [TreeCache] received the state (size=1024 bytes)
      14:32:47,445 ERROR [TreeCache] failed setting transient state
      java.lang.ClassCastException: org.jboss.cache.loader.NodeData cannot be cast to org.jboss.cache.loader.NodeData
       at org.jboss.cache.statetransfer.StateTransferIntegrator_140.integrateTransientState(StateTransferIntegrator_140.java:210)
       at org.jboss.cache.statetransfer.StateTransferIntegrator_140.integrateTransientState(StateTransferIntegrator_140.java:100)
       at org.jboss.cache.TreeCache._setState(TreeCache.java:2834)
       at org.jboss.cache.TreeCache._loadState(TreeCache.java:2214)
       at org.jboss.cache.TreeCache.loadState(TreeCache.java:2098)
       at org.jboss.cache.TreeCache.activateRegion(TreeCache.java:1986)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
       at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
       at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
       at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
       at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
       at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
       at $Proxy63.activateRegion(Unknown Source)
       at initCache(CacheMgr.java:65)
      
      


      I've tried searching for this exception but can not find anything. Any ideas?

      Thanks in advance.

        • 1. Re: TreeCache Cluster problem (JBoss 4.2.3 and JBossCache 1.
          servosimpson

          So no one has any ideas? I'm really stumped here. I've started from scratch and did the most basic thing and verified the same jboss files and same cluster jar files (just a copy of the "all" server). Except for adding my very small web app and config file listed above for the cache, it is just a straight jboss.

          I still the get the same exception.

          • 2. Re: TreeCache Cluster problem (JBoss 4.2.3 and JBossCache 1.
            snacker

            Let me start of by saying "I don't know what the problem/solution is".

            We don't use udp, so I'm not sure if there is a configuration issue there.
            I would check to see if any other non-4.2.3 jboss instances might be trying to connect... (that is just a guess).

            java.lang.ClassCastException: org.jboss.cache.loader.NodeData cannot be cast to org.jboss.cache.loader.NodeData


            It is usually a ClassLoader problem when the jvm says 'X' can't be cast to 'X'.
            Do you have the jboss cache jars in your application (war/ear)?

            We remove them from any war/ear/jar that is put in the deploy* and farm directories and always put them in the lib directory.

            This is just a guess though.

            (good luck)