[jboss-svn-commits] JBL Code SVN: r30986 - labs/jbosstm/workspace/whitingjr/trunk/performance/src/test/java/org/jboss/jbossts/performance/resource.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jan 8 12:22:58 EST 2010


Author: whitingjr
Date: 2010-01-08 12:22:57 -0500 (Fri, 08 Jan 2010)
New Revision: 30986

Modified:
   labs/jbosstm/workspace/whitingjr/trunk/performance/src/test/java/org/jboss/jbossts/performance/resource/SynchronizeTask.java
Log:
Modified slightly to fail gracefully.


Modified: labs/jbosstm/workspace/whitingjr/trunk/performance/src/test/java/org/jboss/jbossts/performance/resource/SynchronizeTask.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/performance/src/test/java/org/jboss/jbossts/performance/resource/SynchronizeTask.java	2010-01-08 17:22:05 UTC (rev 30985)
+++ labs/jbosstm/workspace/whitingjr/trunk/performance/src/test/java/org/jboss/jbossts/performance/resource/SynchronizeTask.java	2010-01-08 17:22:57 UTC (rev 30986)
@@ -1,6 +1,7 @@
 package org.jboss.jbossts.performance.resource;
 
- import java.util.concurrent.CyclicBarrier;
+ import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.CyclicBarrier;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
@@ -33,7 +34,7 @@
    private final static Logger logger = Logger.getLogger(SynchronizeTask.class);
    private final CyclicBarrier completionBarrier;
    private final Long threadId;
-   
+   private final CountDownLatch latch;
    public SynchronizeTask(final EntityManagerFactory factoryA, final EntityManagerFactory factoryB, final int count, final CyclicBarrier barrier, final int id, final boolean isWEnabled)
    {
       this.emfA = factoryA;
@@ -42,12 +43,26 @@
       this.completionBarrier = barrier;
       this.threadId = new Long(id);
       this.isOptionalWriteEnabled = isWEnabled;
+      this.latch = null;
    }
+   
+   public SynchronizeTask(final EntityManagerFactory factoryA, final EntityManagerFactory factoryB, final int count, final CyclicBarrier barrier, final int id, final boolean isWEnabled, final CountDownLatch countDown)
+   {
+      this.emfA = factoryA;
+      this.emfB = factoryB;
+      this.recurseCount = count;
+      this.completionBarrier = barrier;
+      this.threadId = new Long(id);
+      this.isOptionalWriteEnabled = isWEnabled;
+      this.latch = countDown;
+   }
    @Override
    public void run()
    {
       try
-      {
+      {/* use the barrier to wait for all concurrent threads, when finished decrement the latch and fall out of 
+      method. Means the profiler does not 
+      */
          this.completionBarrier.await();// await all threads ready to start
          recurse(this.recurseCount);
          if (!this.completionBarrier.isBroken())
@@ -58,69 +73,61 @@
       catch (Exception e)
       {
          logger.error(e.getMessage(), e);
+         this.completionBarrier.reset();
+         Assert.fail(e.getMessage());
       }
+      finally
+      {
+         
+         //this.latch.countDown();
+      }
    }
    
    public void task()
+      throws Exception
    {
       EntityManagerImpl emA = null;
       EntityManagerImpl emB = null;
-      try
-      {
-         emA = (EntityManagerImpl) getEMFactoryA().createEntityManager();
-         emB = (EntityManagerImpl) getEMFactoryB().createEntityManager();
-         Transaction transaction =emA.getSession().beginTransaction();
-         TransactionLocal session = new TransactionLocal();
-         
-         transaction.registerSynchronization(new SessionSynchronization(emA, transaction, true));
-         transaction.registerSynchronization(new SessionSynchronization( emB, transaction, true  ) );
-         
-         //emB.joinTransaction();
+      emA = (EntityManagerImpl) getEMFactoryA().createEntityManager();
+      emB = (EntityManagerImpl) getEMFactoryB().createEntityManager();
+      Transaction transaction =emA.getSession().beginTransaction();
+      TransactionLocal session = new TransactionLocal();
+      
+      transaction.registerSynchronization(new SessionSynchronization(emA, transaction, true));
+      transaction.registerSynchronization(new SessionSynchronization( emB, transaction, true  ) );
+      
+      //emB.joinTransaction();
 
-         /**
-          * A read
-          * A [write]
-          * B write
-          */
-         UserDAOBeanMultiResource userDAO_A = new UserDAOBeanMultiResource();
-         userDAO_A.setEntityManagerA(emA);
-         UserDAOBeanMultiResource  userDAO_B = new UserDAOBeanMultiResource ();
-         userDAO_B.setEntityManagerB(emB);
-   
-         // Prepare a user object
-         User user = userDAO_A.findById(this.threadId, false); 
-   
-         long time = System.currentTimeMillis();
-         session.set(emA);
-         if (this.isOptionalWriteEnabled)
-         {
-            user.setFirstname("Ben"+time);
-         }
-         session.set(emB);
-         // Don't forget to take the return value, this is basically a merge()
-         User userB = userDAO_B.findById(this.threadId, false);
-         userB.setFirstname("Ben"+time);
-         emA.flush();
-         emB.flush();
-         
-         emA.getSession().getTransaction().commit();
-         Assert.assertFalse(emA.isOpen());
-         Assert.assertFalse(emB.isOpen());
-      }
-      catch (HibernateException e) {
-         Assert.fail(e.getMessage());
-         this.completionBarrier.reset();
-         throw e;
-      }
-      catch (PersistenceException pe)
+      /**
+       * A read
+       * A [write]
+       * B write
+       */
+      UserDAOBeanMultiResource userDAO_A = new UserDAOBeanMultiResource();
+      userDAO_A.setEntityManagerA(emA);
+      UserDAOBeanMultiResource  userDAO_B = new UserDAOBeanMultiResource ();
+      userDAO_B.setEntityManagerB(emB);
+
+      // Prepare a user object
+      //User user = userDAO_A.findById(this.threadId, false);
+      User user = findUsingResourceA(userDAO_A);
+
+      long time = System.currentTimeMillis();
+      session.set(emA);
+      if (this.isOptionalWriteEnabled)
       {
-         Assert.fail(pe.getMessage());
-         this.completionBarrier.reset();
-         throw pe;
+         user.setFirstname("Ben"+time);
       }
-      finally 
-      {
-      }
+      session.set(emB);
+      // Don't forget to take the return value, this is basically a merge()
+      User userB = findUsingResourceB(userDAO_B);
+      userB.setFirstname("Ben"+time);
+      resourceAFlush(emA);
+      resourceBFlush(emB);
+      //emA.flush();
+      //emB.flush();
+      
+      emA.getSession().getTransaction().commit();
    }
    /**
     * Run the test sequentially.
@@ -182,4 +189,26 @@
       }
    }
    
+   /**
+    * This method exists purely for the profiler to separate resource duration 
+    *
+    */
+   private void resourceAFlush(EntityManager entityManager)
+   {
+      entityManager.flush();
+   }
+   private void resourceBFlush(EntityManager entityManager)
+   {
+      entityManager.flush();
+   }
+   private User findUsingResourceA(UserDAOBeanMultiResource daoBean)
+   {
+      return daoBean.findById(this.threadId, false);
+   }
+   private User findUsingResourceB(final UserDAOBeanMultiResource daoBean)
+   {
+      return daoBean.findById(this.threadId, false);
+   }
+   
+   
 }



More information about the jboss-svn-commits mailing list