[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