diff --git a/hibernate-entitymanager/src/matrix/java/org/hibernate/ejb/test/transaction/TransactionJoiningTest.java b/hibernate-entitymanager/src/matrix/java/org/hibernate/ejb/test/transaction/TransactionJoiningTest.java index 3cfd5021a8..ec4f3079e5 100644 --- a/hibernate-entitymanager/src/matrix/java/org/hibernate/ejb/test/transaction/TransactionJoiningTest.java +++ b/hibernate-entitymanager/src/matrix/java/org/hibernate/ejb/test/transaction/TransactionJoiningTest.java @@ -25,6 +25,7 @@ package org.hibernate.ejb.test.transaction; import java.util.Map; import javax.persistence.EntityManager; +import javax.transaction.Synchronization; import org.junit.Test; @@ -108,4 +109,33 @@ public class TransactionJoiningTest extends BaseEntityManagerFunctionalTestCase TestingJtaPlatformImpl.INSTANCE.getTransactionManager().commit(); } + + + @Test + public void testImplicitJoiningWithExtraSynchronization() throws Exception { + assertFalse( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) ); + + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); + EntityManager entityManager = entityManagerFactory().createEntityManager(); + SessionImplementor session = entityManager.unwrap( SessionImplementor.class ); + Transaction hibernateTransaction = ( (Session) session ).getTransaction(); + assertTrue( CMTTransaction.class.isInstance( hibernateTransaction ) ); + assertTrue( session.getTransactionCoordinator().isSynchronizationRegistered() ); + assertTrue( hibernateTransaction.isParticipating() ); + + entityManager.close(); + + hibernateTransaction.registerSynchronization( + new Synchronization() { + public void beforeCompletion() { + // nothing to do + } + public void afterCompletion( int i ) { + // nothing to do + } + } + ); + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().commit(); + } + }