[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