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() ); + } } |