[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