1 Reply Latest reply on Jun 22, 2009 4:38 AM by Mircea Markus

    Dirty read even though configured as REPEATABLE_READ or READ

    Vishwanatha S Newbie

      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>