[jboss-user] [JBoss Cache: Core Edition] - Dirty read even though configured as REPEATABLE_READ or READ

vishwasoft do-not-reply at jboss.com
Fri Jun 19 18:09:14 EDT 2009


I'm trying to evaluate the JBossCache for our application
I'm getting dirty read even though I rollback transaction. I tried this with EJB3 Stateless session bean BMT.

Could you please anyone help me on this problem, Am I making anything wrong? please let me know if you need additional info

JBosscache : jbosscache-core-3.1.0.GA
JBoss As: jboss-5.0.0.GA
JDK: 1.5.0_07


Here is the code

  | public class TestEntity {
  |     
  |     private int array[] = new int[100000];
  |     
  |     public void update(int value) {
  |     
  |         for (int i = 0; i < array.length; i++) {
  |             array [ i ]=value;
  |         }
  |         
  |     }
  | 
  |     public int[] getArray() {
  |         return array;
  |     }
  | }

Stateless Bean1 code to modify cache

Stateless Bean 1

  |     public void updateArray(int value) {
  |         TransactionManager tm = cache.getConfiguration().getRuntimeConfig().getTransactionManager();
  |         try {
  |             tm.begin();
  |                 String key = node.getFqn().toString();
  |                 TestEntity t = (TestEntity) node.get(key);
  |                 if(t != null) {
  |                     t.update(value);
  |                     node.put(key, t);
  |                 }
  |             tm.rollback();
  |         } catch (Exception e) {
  |             try {
  |                 tm.rollback();
  |             }catch(Exception ex1) {
  |                 ex1.printStackTrace();
  |             }
  |             e.printStackTrace();
  |         }
  |     }
  | 

Stateless Bean 2 to read and validating array

  |         public boolean validateArray() {
  |             TransactionManager tm = cache.getConfiguration().getRuntimeConfig().getTransactionManager();
  |             try {
  |                 tm.begin();
  |                 int a[] = readArray();
  |                 int value = a[0];
  |                 for (int i = 0; i < a.length; i++) {
  |                     if(a != value) {
  |                         System.out.println(a+":"+value);
  |                         sctx.getUserTransaction().rollback();
  |                         return false;
  |                     }
  |                 }
  |                 tm.commit();
  |             }catch(Exception ex) {
  |                 try {
  |                     tm.rollback();
  |                 }catch(Exception ex1) {
  |                     ex1.printStackTrace();
  |                 }
  |                 ex.printStackTrace();
  |             }
  |             return true;
  |         }
Configuration file:
I have used configuration file example for cache configuration

  | <locking isolationLevel="REPEATABLE_READ"
  |         lockParentForChildInsertRemove="false" lockAcquisitionTimeout="50000"
  |         nodeLockingScheme="mvcc" writeSkewCheck="true" concurrencyLevel="500"
  |         useLockStriping="false" />
  | 
  |     <transaction       transactionManagerLookupClass="org.jboss.cache.transaction.DummyTransactionManagerLookup"
  |         syncRollbackPhase="true" syncCommitPhase="true" />
  | 
  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  |     xmlns="urn:jboss:jbosscache-core:config:3.1">
  |     <locking isolationLevel="REPEATABLE_READ"
  |         lockParentForChildInsertRemove="false" lockAcquisitionTimeout="50000"
  |         nodeLockingScheme="mvcc" writeSkewCheck="true" concurrencyLevel="500"
  |         useLockStriping="false" />
  | 
  |     <transaction       transactionManagerLookupClass="org.jboss.cache.transaction.DummyTransactionManagerLookup"
  |         syncRollbackPhase="true" syncCommitPhase="true" />
  | 
  |     <jmxStatistics enabled="true" />
  | 
  |     <shutdown hookBehavior="REGISTER" />
  | 
  |     <listeners asyncPoolSize="1" asyncQueueSize="1000000" />
  | 
  |     <serialization objectInputStreamPoolSize="50"
  |         objectOutputStreamPoolSize="50" version="3.0.0"
  |         marshallerClass="org.jboss.cache.marshall.VersionAwareMarshaller"
  |         useLazyDeserialization="false" useRegionBasedMarshalling="false" />
  | 
  |     <loaders passivation="true" shared="false">
  |         <preload>
  |             <node fqn="/" />
  |         </preload>
  |         <loader class="org.jboss.cache.loader.bdbje.BdbjeCacheLoader" async="false"
  |             fetchPersistentState="true" ignoreModifications="false"
  |             purgeOnStartup="false">
  |             <properties>location=c:/JavaTools/tmp</properties>
  |         </loader>
  |     </loaders>
  | </jbosscache>

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

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



More information about the jboss-user mailing list