4 Replies Latest reply on Jan 31, 2007 3:59 AM by balderman

    TreeCache - Does my cached objects must implement Serializab

    balderman

      Hi
      I am using the TreeCache version 1.4.1.
      I want the cache to notify other nodes that a cached object is invalid.
      So this is how I configure it:

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


      But when I remove the Serializable inferface from my Object I get a serialization exception.
      Under this configuration I do not expect that the object will be serialized...

      Here is full config file:
      <?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.JBossTransactionManagerLookup</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">INVALIDATION_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">20000</attribute>
      
       <!--
       Max number of elements which trigger replication
       -->
       <attribute name="ReplQueueMaxElements">5</attribute>
      
      
       <!-- Name of cluster. Needs to be the same for all clusters, in order
       to find each other
       -->
       <attribute name="ClusterName">TreeCache-Cluster</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="230.8.8.8" mcast_port="56677"
       ip_ttl="32" ip_mcast="true"
       mcast_send_buf_size="80000" mcast_recv_buf_size="150000"
       ucast_send_buf_size="80000" ucast_recv_buf_size="150000"
       loopback="false"/>
       <PING timeout="2000" num_initial_members="3"
       up_thread="false" down_thread="false"/>
       <MERGE2 min_interval="10000" max_interval="20000"/>
       <FD shun="true" up_thread="true" down_thread="true"/>
       <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.STATE_TRANSFER up_thread="false" down_thread="false"/>
       </config>
       </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">20000</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. Not supported now. -->
       <attribute name="EvictionPolicyClass"></attribute>
      
       <!--
       Whether or not to fetch state on joining a cluster
       NOTE this used to be called FetchStateOnStartup and has been renamed to be more descriptive.
       -->
       <attribute name="FetchInMemoryState">true</attribute>
      
       <!-- this is the OLD 1.2.x cache loader configuration block.
      
       <attribute name="CacheLoaderClass">org.jboss.cache.loader.FileCacheLoader</attribute>
       <attribute name="CacheLoaderConfig">
       location=c:\\tmp\\node1
       </attribute>
       <attribute name="CacheLoaderShared">false</attribute>
       <attribute name="CacheLoaderPreload">/</attribute>
       <attribute name="CacheLoaderFetchTransientState">false</attribute>
       <attribute name="CacheLoaderFetchPersistentState">true</attribute>
       <attribute name="CacheLoaderPassivation">false</attribute>
       -->
      
       <!-- New 1.3.x cache loader config block -->
       <attribute name="CacheLoaderConfiguration">
       <config>
       <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
       <passivation>false</passivation>
       <preload>/</preload>
       <shared>false</shared>
      
       <!-- we can now have multiple cache loaders, which get chained -->
       <cacheloader>
       <class>org.jboss.cache.loader.FileCacheLoader</class>
       <!-- same as the old CacheLoaderConfig attribute -->
       <properties>
       location=/tmp/node1
       </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>
       <!-- if set to true, purges the contents of this cache loader when the cache starts up.
       Defaults to false. -->
       <purgeOnStartup>false</purgeOnStartup>
       </cacheloader>
      
       </config>
       </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>



      Thanks
      Avishay

        • 1. Re: TreeCache - Does my cached objects must implement Serial
          manik

          Do you have a stack trace?

          • 2. Re: TreeCache - Does my cached objects must implement Serial
            balderman

            Here you are:

            l

            og4j:WARN No appenders could be found for logger (org.jboss.cache.PropertyConfigurator).
            log4j:WARN Please initialize the log4j system properly.
            
            -------------------------------------------------------
            GMS: address is 137.72.82.60:3983
            -------------------------------------------------------
            java.lang.RuntimeException: java.io.InvalidClassException: com.bmc.idm.common.cache.Person; class invalid for deserialization
             at org.jboss.cache.TreeCache.invokeMethod(TreeCache.java:5716)
             at org.jboss.cache.TreeCache.get(TreeCache.java:3573)
             at org.jboss.cache.TreeCache.get(TreeCache.java:3554)
             at org.jboss.cache.loader.CacheLoaderManager.preload(CacheLoaderManager.java:255)
             at org.jboss.cache.loader.CacheLoaderManager.preload(CacheLoaderManager.java:278)
             at org.jboss.cache.loader.CacheLoaderManager.preloadCache(CacheLoaderManager.java:235)
             at org.jboss.cache.TreeCache.startService(TreeCache.java:1509)
             at com.bmc.idm.common.cache.JBossTreeCacheService.<init>(JBossTreeCacheService.java:23)
             at com.bmc.idm.common.cache.CacheFactory.getCacheService(CacheFactory.java:7)
             at com.bmc.idm.common.cache.Gui.createAndShowGUI(Gui.java:181)
             at com.bmc.idm.common.cache.Gui.access$3(Gui.java:157)
             at com.bmc.idm.common.cache.Gui$5.run(Gui.java:265)
             at java.awt.event.InvocationEvent.dispatch(Unknown Source)
             at java.awt.EventQueue.dispatchEvent(Unknown Source)
             at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
             at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
             at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
             at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
             at java.awt.EventDispatchThread.run(Unknown Source)
            Caused by: java.io.InvalidClassException: com.bmc.idm.common.cache.Person; class invalid for deserialization
             at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
             at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
             at java.io.ObjectInputStream.readClassDesc(Unknown Source)
             at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
             at java.io.ObjectInputStream.readObject0(Unknown Source)
             at java.io.ObjectInputStream.readObject(Unknown Source)
             at java.util.HashMap.readObject(Unknown Source)
             at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
             at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
             at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
             at java.lang.reflect.Method.invoke(Unknown Source)
             at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
             at java.io.ObjectInputStream.readSerialData(Unknown Source)
             at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
             at java.io.ObjectInputStream.readObject0(Unknown Source)
             at java.io.ObjectInputStream.readObject(Unknown Source)
             at org.jboss.cache.loader.FileCacheLoader.loadAttributes(FileCacheLoader.java:486)
             at org.jboss.cache.loader.FileCacheLoader.get(FileCacheLoader.java:136)
             at org.jboss.cache.interceptors.CacheLoaderInterceptor.loadData(CacheLoaderInterceptor.java:443)
             at org.jboss.cache.interceptors.CacheLoaderInterceptor.loadNode(CacheLoaderInterceptor.java:353)
             at org.jboss.cache.interceptors.CacheLoaderInterceptor.invoke(CacheLoaderInterceptor.java:180)
             at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
             at org.jboss.cache.interceptors.UnlockInterceptor.invoke(UnlockInterceptor.java:32)
             at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
             at org.jboss.cache.interceptors.InvalidationInterceptor.invoke(InvalidationInterceptor.java:60)
             at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
             at org.jboss.cache.interceptors.TxInterceptor.handleNonTxMethod(TxInterceptor.java:364)
             at org.jboss.cache.interceptors.TxInterceptor.invoke(TxInterceptor.java:160)
             at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
             at org.jboss.cache.interceptors.CacheMgmtInterceptor.invoke(CacheMgmtInterceptor.java:138)
             at org.jboss.cache.TreeCache.invokeMethod(TreeCache.java:5710)
             ... 18 more
            


            • 3. Re: TreeCache - Does my cached objects must implement Serial
              manik

              Ah, this is because you have a cache loader that is serializing the objects to disk. Nothing to do with replication. So you will still need your data to be serializable (better still, externalizable) for this.

              • 4. Re: TreeCache - Does my cached objects must implement Serial
                balderman

                Thanks -- Avishay