[hibernate-commits] Hibernate SVN: r11410 - in trunk/HibernateExt/shards/src: test/org/hibernate/shards/transaction and 1 other directory.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Tue Apr 17 02:00:45 EDT 2007
Author: max.ross
Date: 2007-04-17 02:00:45 -0400 (Tue, 17 Apr 2007)
New Revision: 11410
Modified:
trunk/HibernateExt/shards/src/java/org/hibernate/shards/transaction/ShardedTransactionImpl.java
trunk/HibernateExt/shards/src/test/org/hibernate/shards/transaction/ShardedTransactionImplTest.java
Log:
Transaction error reporting
Modified: trunk/HibernateExt/shards/src/java/org/hibernate/shards/transaction/ShardedTransactionImpl.java
===================================================================
--- trunk/HibernateExt/shards/src/java/org/hibernate/shards/transaction/ShardedTransactionImpl.java 2007-04-17 05:54:37 UTC (rev 11409)
+++ trunk/HibernateExt/shards/src/java/org/hibernate/shards/transaction/ShardedTransactionImpl.java 2007-04-17 06:00:45 UTC (rev 11410)
@@ -18,23 +18,22 @@
package org.hibernate.shards.transaction;
-import org.hibernate.shards.Shard;
-import org.hibernate.shards.ShardedTransaction;
-import org.hibernate.shards.util.Lists;
-import org.hibernate.shards.engine.ShardedSessionImplementor;
-import org.hibernate.shards.session.OpenSessionEvent;
-import org.hibernate.shards.session.SetupTransactionOpenSessionEvent;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.TransactionException;
+import org.hibernate.shards.Shard;
+import org.hibernate.shards.ShardedTransaction;
+import org.hibernate.shards.engine.ShardedSessionImplementor;
+import org.hibernate.shards.session.OpenSessionEvent;
+import org.hibernate.shards.session.SetupTransactionOpenSessionEvent;
+import org.hibernate.shards.util.Lists;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-import java.util.Collections;
-import java.util.ArrayList;
import javax.transaction.Status;
import javax.transaction.Synchronization;
@@ -47,7 +46,6 @@
private final Log log = LogFactory.getLog(getClass());
private final List<Transaction> transactions;
- private final OpenSessionEvent osEvent;
private boolean begun;
private boolean rolledBack;
@@ -59,7 +57,7 @@
public ShardedTransactionImpl(ShardedSessionImplementor ssi) {
- osEvent = new SetupTransactionOpenSessionEvent(this);
+ OpenSessionEvent osEvent = new SetupTransactionOpenSessionEvent(this);
transactions = Collections.synchronizedList(new ArrayList<Transaction>());
for(Shard shard : ssi.getShards()) {
if (shard.getSession() != null) {
@@ -122,18 +120,23 @@
log.debug("Starting transaction commit");
beforeTransactionCompletion();
boolean commitException = false;
+ HibernateException firstCommitException = null;
for(Transaction t : transactions) {
try {
t.commit();
} catch (HibernateException he) {
log.warn("exception commiting underlying transaction", he);
commitException = true;
+ // we're only going to rethrow the first commit exception we receive
+ if(firstCommitException == null) {
+ firstCommitException = he;
+ }
}
}
if (commitException) {
commitFailed = true;
afterTransactionCompletion(Status.STATUS_UNKNOWN);
- throw new TransactionException("Commit failed");
+ throw new TransactionException("Commit failed", firstCommitException);
}
afterTransactionCompletion(Status.STATUS_COMMITTED);
committed = true;
@@ -144,6 +147,7 @@
throw new TransactionException("Transaction not successfully started");
}
boolean rollbackException = false;
+ HibernateException firstRollbackException = null;
for(Transaction t : transactions) {
if (t.wasCommitted()) {
continue;
@@ -153,10 +157,14 @@
} catch (HibernateException he) {
log.warn("exception rolling back underlying transaction", he);
rollbackException = true;
+ if(firstRollbackException == null) {
+ firstRollbackException = he;
+ }
}
}
if (rollbackException) {
- throw new TransactionException("Rollback failed");
+ // we're only going to rethrow the first rollback exception
+ throw new TransactionException("Rollback failed", firstRollbackException);
}
rolledBack = true;
}
Modified: trunk/HibernateExt/shards/src/test/org/hibernate/shards/transaction/ShardedTransactionImplTest.java
===================================================================
--- trunk/HibernateExt/shards/src/test/org/hibernate/shards/transaction/ShardedTransactionImplTest.java 2007-04-17 05:54:37 UTC (rev 11409)
+++ trunk/HibernateExt/shards/src/test/org/hibernate/shards/transaction/ShardedTransactionImplTest.java 2007-04-17 06:00:45 UTC (rev 11410)
@@ -18,19 +18,18 @@
package org.hibernate.shards.transaction;
-import org.hibernate.shards.defaultmock.SessionDefaultMock;
-import org.hibernate.shards.Shard;
-import org.hibernate.shards.ShardDefaultMock;
-import org.hibernate.shards.ShardedTransactionDefaultMock;
-import org.hibernate.shards.util.Lists;
-import org.hibernate.shards.engine.ShardedSessionImplementorDefaultMock;
-
import junit.framework.TestCase;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;
import org.hibernate.TransactionException;
import org.hibernate.classic.Session;
+import org.hibernate.shards.Shard;
+import org.hibernate.shards.ShardDefaultMock;
+import org.hibernate.shards.ShardedTransactionDefaultMock;
+import org.hibernate.shards.defaultmock.SessionDefaultMock;
+import org.hibernate.shards.engine.ShardedSessionImplementorDefaultMock;
+import org.hibernate.shards.util.Lists;
import java.util.List;
@@ -157,7 +156,10 @@
transaction1.fail = true;
try {
sti.commit();
- } catch (HibernateException he) {}
+ fail();
+ } catch (HibernateException he) {
+ // good
+ }
transaction1.fail = false;
try {
sti.begin();
@@ -205,6 +207,7 @@
fail();
} catch (HibernateException he) {
assertFalse(sti.wasCommitted());
+ assertTrue(he.getCause() instanceof HibernateException);
}
}
@@ -212,8 +215,9 @@
try {
sti.rollback();
fail();
- } catch (HibernateException hel) {
+ } catch (HibernateException he) {
// good
+ assertFalse(sti.wasRolledBack());
}
sti.begin();
@@ -226,6 +230,7 @@
fail();
} catch (HibernateException he) {
// good
+ assertTrue(sti.wasRolledBack());
}
sti.begin();
@@ -233,6 +238,8 @@
try {
sti.commit();
} catch (HibernateException he) {
+ assertFalse(sti.wasRolledBack());
+ assertTrue(he.getCause() instanceof HibernateException);
sti.rollback();
assertTrue(sti.wasRolledBack());
}
@@ -245,6 +252,7 @@
sti.rollback();
} catch (HibernateException he) {
assertFalse(sti.wasRolledBack());
+ assertTrue(he.getCause() instanceof HibernateException);
}
}
More information about the hibernate-commits
mailing list