From ac5ef8108a25a8af605de0bef20ffa659f3da38a Mon Sep 17 00:00:00 2001 From: Gail Badner Date: Fri, 20 Apr 2012 17:21:45 -0700 Subject: [PATCH] HHH-7265 : Test case to repro ConcurrentModificationException --- .../transaction/TransactionJoiningTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) 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 8f88a0d402..ac7612573a 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 @@ -24,6 +24,7 @@ package org.hibernate.ejb.test.transaction; import javax.persistence.EntityManager; +import javax.transaction.Synchronization; import java.util.Map; import org.hibernate.Session; @@ -108,4 +109,34 @@ public class TransactionJoiningTest extends BaseEntityManagerFunctionalTestCase TestingJtaBootstrap.INSTANCE.getTransactionManager().commit(); } + + + @Test + public void testImplicitJoiningWithExtraSynchronization() throws Exception { + assertFalse( JtaStatusHelper.isActive( TestingJtaBootstrap.INSTANCE.getTransactionManager() ) ); + + TestingJtaBootstrap.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(); + + //assertTrue( entityManager.isOpen() ); + hibernateTransaction.registerSynchronization( + new Synchronization() { + public void beforeCompletion() { + // nothing to do + } + public void afterCompletion( int i ) { + // nothing to do + } + } + ); + TestingJtaBootstrap.INSTANCE.getTransactionManager().commit(); + } + }