[hibernate-commits] Hibernate SVN: r10347 - trunk/Hibernate3/src/org/hibernate/transaction

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Aug 24 11:37:27 EDT 2006


Author: steve.ebersole at jboss.com
Date: 2006-08-24 11:37:11 -0400 (Thu, 24 Aug 2006)
New Revision: 10347

Modified:
   trunk/Hibernate3/src/org/hibernate/transaction/JTATransactionFactory.java
Log:
HHH-2023 : perf optimization in JTATransactionFactory.isTransactionInProgress()

Modified: trunk/Hibernate3/src/org/hibernate/transaction/JTATransactionFactory.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/transaction/JTATransactionFactory.java	2006-08-24 15:33:21 UTC (rev 10346)
+++ trunk/Hibernate3/src/org/hibernate/transaction/JTATransactionFactory.java	2006-08-24 15:37:11 UTC (rev 10347)
@@ -74,19 +74,34 @@
 	        Context transactionContext,
 	        Transaction transaction) {
 		try {
-			UserTransaction ut;
-			if ( transaction != null ) {
-				ut = ( ( JTATransaction ) transaction ).getUserTransaction();
-			}
-			else {
-				try {
-					ut = ( UserTransaction ) context.lookup( utName );
+            // Essentially:
+			// 1) If we have a local (Hibernate) transaction in progress
+			//      and it already has the UserTransaction cached, use that
+			//      UserTransaction to determine the status.
+			// 2) If a transaction manager has been located, use
+			//      that transaction manager to determine the status.
+			// 3) Finally, as the last resort, try to lookup the
+			//      UserTransaction via JNDI and use that to determine the
+			//      status.
+            if ( transaction != null ) {
+				UserTransaction ut = ( ( JTATransaction ) transaction ).getUserTransaction();
+                if ( ut != null ) {
+                    return JTAHelper.isInProgress( ut.getStatus() );
+                }
+            }
+
+            if ( jdbcContext.getFactory().getTransactionManager() != null ) {
+                return JTAHelper.isInProgress( jdbcContext.getFactory().getTransactionManager().getStatus() );
+            }
+            else {
+                try {
+					UserTransaction ut = ( UserTransaction ) context.lookup( utName );
+			        return ut != null && JTAHelper.isInProgress( ut.getStatus() );
 				}
 				catch ( NamingException ne ) {
 					throw new TransactionException( "Unable to locate UserTransaction to check status", ne );
 				}
-			}
-			return ut != null && JTAHelper.isInProgress( ut.getStatus() );
+            }
 		}
 		catch( SystemException se ) {
 			throw new TransactionException( "Unable to check transaction status", se );




More information about the hibernate-commits mailing list