|
From: <hib...@li...> - 2006-06-28 17:07:40
|
Author: ste...@jb...
Date: 2006-06-28 13:07:06 -0400 (Wed, 28 Jun 2006)
New Revision: 10068
Modified:
trunk/Hibernate3/src/org/hibernate/jdbc/JDBCContext.java
trunk/Hibernate3/src/org/hibernate/util/JTAHelper.java
Log:
HHH-1828 : Synchronization registration and rollback-only
Modified: trunk/Hibernate3/src/org/hibernate/jdbc/JDBCContext.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/jdbc/JDBCContext.java 2006-06-28 13:24:59 UTC (rev 10067)
+++ trunk/Hibernate3/src/org/hibernate/jdbc/JDBCContext.java 2006-06-28 17:07:06 UTC (rev 10068)
@@ -18,6 +18,7 @@
import org.hibernate.SessionException;
import org.hibernate.Transaction;
import org.hibernate.TransactionException;
+import org.hibernate.util.JTAHelper;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.exception.JDBCExceptionHelper;
import org.hibernate.transaction.CacheSynchronization;
@@ -161,10 +162,16 @@
}
else {
javax.transaction.Transaction tx = tm.getTransaction();
- tx.registerSynchronization( new CacheSynchronization(owner, this, tx, null) );
- isTransactionCallbackRegistered = true;
- log.debug("successfully registered Synchronization");
- return true;
+ if ( JTAHelper.isMarkedForRollback( tx ) ) {
+ log.debug( "Transaction is marked for rollback; skipping Synchronization registration" );
+ return false;
+ }
+ else {
+ tx.registerSynchronization( new CacheSynchronization(owner, this, tx, null) );
+ isTransactionCallbackRegistered = true;
+ log.debug("successfully registered Synchronization");
+ return true;
+ }
}
}
catch( HibernateException e ) {
Modified: trunk/Hibernate3/src/org/hibernate/util/JTAHelper.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/util/JTAHelper.java 2006-06-28 13:24:59 UTC (rev 10067)
+++ trunk/Hibernate3/src/org/hibernate/util/JTAHelper.java 2006-06-28 17:07:06 UTC (rev 10068)
@@ -43,4 +43,12 @@
public static boolean isTransactionInProgress(javax.transaction.Transaction tx) throws SystemException {
return tx != null && JTAHelper.isInProgress( tx.getStatus() );
}
+
+ public static boolean isMarkedForRollback(int status) {
+ return status == Status.STATUS_MARKED_ROLLBACK;
+ }
+
+ public static boolean isMarkedForRollback(javax.transaction.Transaction tx) throws SystemException {
+ return isMarkedForRollback( tx.getStatus() );
+ }
}
|