[jbpm-commits] JBoss JBPM SVN: r1937 - in jbpm3/trunk/modules/jpdl/core/src: main/java/org/jbpm/svc and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Aug 19 20:20:43 EDT 2008


Author: alex.guizar at jboss.com
Date: 2008-08-19 20:20:43 -0400 (Tue, 19 Aug 2008)
New Revision: 1937

Modified:
   jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/persistence/db/DbPersistenceService.java
   jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/svc/Services.java
   jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/MockSession.java
   jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/MockSessionFactory.java
   jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/PersistenceDbServiceNoTxTest.java
Log:
removed bogus NPE trace caused by redundant rollback() call when a flush exception occurs: JBPM-1465

Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/persistence/db/DbPersistenceService.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/persistence/db/DbPersistenceService.java	2008-08-19 23:22:38 UTC (rev 1936)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/persistence/db/DbPersistenceService.java	2008-08-20 00:20:43 UTC (rev 1937)
@@ -235,7 +235,10 @@
     
     Exception flushException = flushSession();
     if (flushException!=null) {
-      rollback();
+      // JBPM-1465 transaction has been either committed or rolled back at this point
+      // on the other hand, it is possible that no transaction is underway
+      // rolling back here is redundant and possibly dangerous
+      // rollback();
       closeSession();
       closeConnection();
       throw new JbpmPersistenceException("hibernate flush failed", flushException);

Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/svc/Services.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/svc/Services.java	2008-08-19 23:22:38 UTC (rev 1936)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/svc/Services.java	2008-08-20 00:20:43 UTC (rev 1937)
@@ -257,9 +257,8 @@
       if (firstException != null) {
         if (firstException instanceof JbpmException) {
           throw (JbpmException) firstException;
-        } else {
-          throw new JbpmException("problem closing services", firstException);
         }
+        throw new JbpmException("problem closing services", firstException);
       }
     }
   }

Modified: jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/MockSession.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/MockSession.java	2008-08-19 23:22:38 UTC (rev 1936)
+++ jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/MockSession.java	2008-08-20 00:20:43 UTC (rev 1937)
@@ -18,6 +18,7 @@
 import org.hibernate.SQLQuery;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
+import org.hibernate.StaleStateException;
 import org.hibernate.Transaction;
 import org.hibernate.stat.SessionStatistics;
 import org.hibernate.type.Type;
@@ -31,6 +32,9 @@
   boolean isFlushed = false;
   boolean isClosed = false;
 
+  boolean failOnFlush;
+  boolean failOnClose;
+
   public MockSession() {
   }
 
@@ -38,6 +42,14 @@
     this.connection = connection;
   }
 
+  public void setFailOnFlush(boolean fail) {
+    failOnFlush = fail;
+  }
+
+  public void setFailOnClose(boolean fail) {
+    failOnClose = fail;
+  }
+
   public Transaction beginTransaction() throws HibernateException {
     transaction = new MockTransaction();
     return transaction;
@@ -52,11 +64,17 @@
   }
 
   public Connection close() throws HibernateException {
+    if (failOnClose)
+      throw new HibernateException("simulated close exception");
+
     isClosed = true;
     return connection;
   }
 
   public void flush() throws HibernateException {
+    if (failOnFlush) 
+      throw new HibernateException("simulated flush exception");
+
     isFlushed = true;
   }
 
@@ -64,8 +82,6 @@
     return ! isClosed;
   }
 
-
-  
   public EntityMode getEntityMode() {
     throw new UnsupportedOperationException();
   }

Modified: jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/MockSessionFactory.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/MockSessionFactory.java	2008-08-19 23:22:38 UTC (rev 1936)
+++ jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/MockSessionFactory.java	2008-08-20 00:20:43 UTC (rev 1937)
@@ -20,14 +20,31 @@
 
 public class MockSessionFactory implements SessionFactory {
 
+  private boolean failOnFlush;
+  private boolean failOnClose;
+
   private static final long serialVersionUID = 1L;
-  
+
+  public void setFailOnFlush(boolean fail) {
+    failOnFlush = fail;
+  }
+
+  public void setFailOnClose(boolean fail) {
+    failOnClose = fail;
+  }
+
   public Session openSession(Connection connection) {
-    return new MockSession(connection);
+    MockSession session = new MockSession(connection);
+    session.setFailOnFlush(failOnFlush);
+    session.setFailOnClose(failOnClose);
+    return session;
   }
 
   public Session openSession() throws HibernateException {
-    return new MockSession();
+    MockSession session = new MockSession();
+    session.setFailOnFlush(failOnFlush);
+    session.setFailOnClose(failOnClose);
+    return session;
   }
 
   public Session getCurrentSession() throws HibernateException {

Modified: jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/PersistenceDbServiceNoTxTest.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/PersistenceDbServiceNoTxTest.java	2008-08-19 23:22:38 UTC (rev 1936)
+++ jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/persistence/db/PersistenceDbServiceNoTxTest.java	2008-08-20 00:20:43 UTC (rev 1937)
@@ -7,6 +7,7 @@
 import org.jbpm.JbpmConfiguration;
 import org.jbpm.JbpmContext;
 import org.jbpm.JbpmException;
+import org.jbpm.persistence.JbpmPersistenceException;
 
 public class PersistenceDbServiceNoTxTest extends TestCase {
 
@@ -14,7 +15,7 @@
   JbpmContext jbpmContext = null;
   MockSessionFactory mockSessionFactory = null;
   
-  public void setUp() {
+  protected void setUp() {
     // for all of these tests, the default configuration is used
     jbpmConfiguration = JbpmConfiguration.parseXmlString(
       "<jbpm-configuration>" +
@@ -38,8 +39,8 @@
     mockSessionFactory = new MockSessionFactory();
     jbpmContext.setSessionFactory(mockSessionFactory);
   }
-  
-  public void tearDown() {
+
+  protected void tearDown() {
     jbpmConfiguration = null;
     jbpmContext = null;
     mockSessionFactory = null;
@@ -170,4 +171,28 @@
       // OK
     }
   }
+
+  public void testFlushException() {
+    mockSessionFactory.setFailOnFlush(true);
+    MockSession mockSession = (MockSession) jbpmContext.getSession();
+    try {
+      jbpmContext.close();      
+      fail("expected exception");
+    } catch (JbpmPersistenceException e) {
+      assertFalse(mockSession.isFlushed);
+      assertTrue(mockSession.isClosed);
+    }
+  }
+
+  public void testCloseException() {
+    mockSessionFactory.setFailOnClose(true);
+    MockSession mockSession = (MockSession) jbpmContext.getSession();
+    try {
+      jbpmContext.close();      
+      fail("expected exception");
+    } catch (JbpmPersistenceException e) {
+      assertTrue(mockSession.isFlushed);
+      assertFalse(mockSession.isClosed);
+    }
+  }
 }




More information about the jbpm-commits mailing list