[jboss-user] [JBossCache] - Apparently losing data

uuderzo do-not-reply at jboss.com
Tue Jun 26 13:05:00 EDT 2007


I'm using JBC to store user sessions in a rich client application, running with JBoss/OC4J ASs.

Cannot use right the JBC of JBoss installation because of the need to work also on OC4J so we installed the JBC jars as our application libraries.

Currently the cache is working in LOCAL mode. When a user logs on its session object is stored and every time this session object is requested it is retrieved from the cache, updated with the last access time, stored in the cache and returned to the caller.

This seems to work well BUT sometimes the mechanism seems to break and no more work until the AS (in my case JBoss) is shutdown and restarted. The problem is that the data is put into the cache but when retrieved it is NULL. No errors were reported, simply the data seems to disappear from the cache.

On some production environments this trouble can happen abount once a month.

There is no eviction policy configured, so I cannot guess what can be the trouble.

Here is how I access the cache:
  private static TreeCacheMBean getJBossCache() throws AutEXCSessionException {
  |     try {
  |       if( staticJBossCache != null ) return staticJBossCache;
  | 
  |       try {      
  |         InitialContext ctx   = new InitialContext();
  |         Object         value = ctx.lookup( "AutJBossCache" ); // se non lo trova, mi da un not bound!!!
  |         staticJBossCache     = (TreeCacheMBean)value;
  |         if( staticJBossCache != null ) {
  |           return staticJBossCache;
  |         }
  |       } catch( NamingException exc ) { /* non fa nulla, semplicemente ignora e tira dritto */ }
  | 
  |       staticJBossCache = new TreeCache(); 
  |   
  |       // Leggo le proprieta' di configurazione dal file.
  |       PropertyConfigurator config = new PropertyConfigurator(); // configure tree cache. Needs to be in the classpath 
  |       config.configure( 
  |         staticJBossCache, 
  |         CdtBLGPersistenceConfiguration.getInstallationPath() + "jbosscache-service.xml"
  |       ); 
  |       
  |       // Avvio il service
  |       staticJBossCache.createService();
  |       staticJBossCache.startService() ; // kick start tree cache
  |       return staticJBossCache;
  |     } 
  |     catch( ConfigureException exc ) { throw new AutEXCSessionException( new SagaException( exc )); }
  |     catch( Exception          exc ) { throw new AutEXCSessionException( new SagaException( exc )); }
  |   }

where staticJBossCache is a static member of my class.

Follows the configuration 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=AutJBossTreeCache">
  | 
  |         <depends>jboss:service=Naming</depends>
  |         <depends>jboss:service=TransactionManager</depends>
  | 
  |         <!-- Configure the TransactionManager -->
  |         <attribute name="TransactionManagerLookupClass">org.jboss.cache.GenericTransactionManagerLookup</attribute>
  | 
  |         <!--
  |             Isolation level : SERIALIZABLE
  |                               REPEATABLE_READ (default)
  |                               READ_COMMITTED
  |                               READ_UNCOMMITTED
  |                               NONE
  |         -->
  |         <attribute name="IsolationLevel">NONE</attribute>
  | 
  |         <!-- Valid modes are LOCAL, REPL_ASYNC and REPL_SYNC.
  |              Use REPL_SYNC for JBoss clustering -->
  | 				<attribute name="CacheMode">LOCAL</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">AutJBossTreeCache-DefaultCluster</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="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="true"/>
  |             <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="true" 
  |               down_thread="true"/>
  |           </config>
  |         </attribute>
  | 
  |         <!-- Whether or not to fetch state on joining a cluster -->
  |         <attribute name="FetchStateOnStartup">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">5000</attribute>
  | 
  |         <!-- Number of milliseconds to wait until all responses for a
  |              synchronous call have been received. -->
  |         <attribute name="SyncReplTimeout">10000</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>
  | 
  |        <!--
  |        <attribute name="CacheLoaderClass">org.jboss.cache.loader.bdbje.BdbjeCacheLoader</attribute>
  |        <attribute name="CacheLoaderConfig">
  |          location=c:\\tmp\\bdbje
  |        </attribute>
  |        <attribute name="CacheLoaderShared">true</attribute>
  |        <attribute name="CacheLoaderPreload">/</attribute>
  |        -->
  | 
  |        <!--
  |        <attribute name="CacheLoaderClass">org.jboss.cache.loader.FileCacheLoader</attribute>
  |        <attribute name="CacheLoaderConfig">
  |          location=c:\\tmp
  |        </attribute>
  |        <attribute name="CacheLoaderShared">true</attribute>
  |        <attribute name="CacheLoaderPreload">/</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>-->
  | 
  |     <!--mbean
  |       code="org.jboss.invocation.jrmp.server.JRMPProxyFactory"
  |       name="mydomain:service=proxyFactory,type=jrmp,target=factory"
  |     >
  |       <attribute name="InvokerName">jboss:service=invoker,type=jrmp</attribute>
  |       <attribute name="TargetName">jboss.cache:service=SicraCache</attribute>
  |       <attribute name="JndiName">AutJBossCache</attribute>
  |       <attribute name="InvokeTargetMethod">true</attribute>
  |       <attribute name="ExportedInterface">org.jboss.cache.TreeCacheMBean</attribute>
  |       <attribute name="ClientInterceptors">
  |         <iterceptors>
  |           <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>
  |           <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
  |           <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
  |         </iterceptors>
  |       </attribute>
  |       <depends>jboss:service=invoker,type=jrmp</depends>
  |       <depends>jboss.cache:service=AutJBossTreeCache</depends>
  |     </mbean-->
  | </server>

Can somebody give an hint to solve my headache?

Thanks in advance.

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

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



More information about the jboss-user mailing list