From: <hib...@li...> - 2006-03-27 15:49:19
|
Author: epbernard Date: 2006-03-27 10:48:23 -0500 (Mon, 27 Mar 2006) New Revision: 9685 Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java Log: Fix some nasty bugs regarding transaction joining and postponned closing Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-03-27 08:51:36 UTC (rev 9684) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-03-27 15:48:23 UTC (rev 9685) @@ -446,7 +446,7 @@ boolean flush = false; TransactionFactory.Context ctx = null; try { - ctx = (TransactionFactory.Context) getSession(); + ctx = (TransactionFactory.Context) session; JoinableCMTTransaction joinable = (JoinableCMTTransaction) session.getTransaction(); flush = !ctx.isFlushModeNever() && //ctx.isFlushBeforeCompletionEnabled() && Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java 2006-03-27 08:51:36 UTC (rev 9684) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java 2006-03-27 15:48:23 UTC (rev 9685) @@ -20,14 +20,25 @@ private JoinStatus status; public JoinableCMTTransaction( JDBCContext jdbcContext, TransactionFactory.Context transactionContext ) { super( jdbcContext, transactionContext ); - status = JoinStatus.MARKED_FOR_JOINED; - tryJoiningTransaction(); + //status = JoinStatus.MARKED_FOR_JOINED; + //tryJoiningTransaction(); } public boolean isTransactionInProgress( JDBCContext jdbcContext, TransactionFactory.Context transactionContext) { try { + return status == JoinStatus.JOINED && JTAHelper.isTransactionInProgress( + transactionContext.getFactory().getTransactionManager().getTransaction() + ); + } + catch( SystemException se ) { + throw new TransactionException( "Unable to check transaction status", se ); + } + } + + private boolean isTransactionInProgress() { + try { return JTAHelper.isTransactionInProgress( transactionContext.getFactory().getTransactionManager().getTransaction() ); @@ -39,7 +50,7 @@ void tryJoiningTransaction() { if (status == JoinStatus.MARKED_FOR_JOINED) { - if ( isTransactionInProgress(jdbcContext, transactionContext) ) { + if ( isTransactionInProgress() ) { status = JoinStatus.JOINED; } else { |