[jboss-cvs] JBossAS SVN: r71624 - projects/ejb3/branches/cluster-dev/cache/src/test/java/org/jboss/ejb3/test/cache/integrated.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 2 11:38:16 EDT 2008


Author: bstansberry at jboss.com
Date: 2008-04-02 11:38:16 -0400 (Wed, 02 Apr 2008)
New Revision: 71624

Modified:
   projects/ejb3/branches/cluster-dev/cache/src/test/java/org/jboss/ejb3/test/cache/integrated/TransactionalCacheUnitTestCase.java
Log:
[EJBTHREE-1026] Add test of concurrent access by two transactions

Modified: projects/ejb3/branches/cluster-dev/cache/src/test/java/org/jboss/ejb3/test/cache/integrated/TransactionalCacheUnitTestCase.java
===================================================================
--- projects/ejb3/branches/cluster-dev/cache/src/test/java/org/jboss/ejb3/test/cache/integrated/TransactionalCacheUnitTestCase.java	2008-04-02 15:24:43 UTC (rev 71623)
+++ projects/ejb3/branches/cluster-dev/cache/src/test/java/org/jboss/ejb3/test/cache/integrated/TransactionalCacheUnitTestCase.java	2008-04-02 15:38:16 UTC (rev 71624)
@@ -22,6 +22,7 @@
 package org.jboss.ejb3.test.cache.integrated;
 
 import javax.ejb.NoSuchEJBException;
+import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 
 import org.jboss.ejb3.cache.api.Cache;
@@ -202,4 +203,58 @@
          }
       }
    }
+   
+   public void testConcurrentTransactionalAccess() throws Exception
+   {      
+      log.info("testConcurrentTransactionalAccess()");
+      
+      Cache<MockBeanContext> cache = createCache();
+      
+      tm.begin();
+      
+      Object key = cache.create(null, null);
+      MockBeanContext object = cache.get(key);
+      
+      assertNotNull(object);
+      
+      Transaction tx1 = tm.suspend();
+      
+      tm.begin();
+      
+      try
+      {
+         cache.get(key);
+         fail("Ongoing transaction should have prevent get() by second tx");
+      }
+      catch (IllegalStateException good) {}
+      
+      // tx1 calling finished isn't sufficient to release item
+      Transaction tx2 = tm.suspend();      
+      tm.resume(tx1);
+      
+      cache.finished(object);      
+
+      tm.suspend();
+      tm.resume(tx2);
+      
+      try
+      {
+         cache.get(key);
+         fail("Ongoing transaction should have prevent get() by second tx");
+      }
+      catch (IllegalStateException good) {}
+      
+      // Committing tx1 releases the locks
+      tm.suspend();
+      tm.resume(tx1);
+      tm.commit();
+      
+      tm.resume(tx2);
+      MockBeanContext object2 = cache.get(key);
+      assertSame(object, object2);
+      
+      cache.finished(object2);
+      
+      tm.commit();
+   }
 }




More information about the jboss-cvs-commits mailing list