Dirty read even though configured as REPEATABLE_READ or READ
vishwasoft Jun 19, 2009 6:09 PMI'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>