From d55ade52b23797de7579b9b730dbc31b970eed52 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Tue, 12 Jul 2016 12:40:38 +0200 Subject: [PATCH] HHH-10942 - Add test for issue --- ...ntityManagerWithActiveTransactionTest.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 hibernate-core/src/test/java/org/hibernate/jpa/test/transaction/CloseEntityManagerWithActiveTransactionTest.java diff --git a/hibernate-core/src/test/java/org/hibernate/jpa/test/transaction/CloseEntityManagerWithActiveTransactionTest.java b/hibernate-core/src/test/java/org/hibernate/jpa/test/transaction/CloseEntityManagerWithActiveTransactionTest.java new file mode 100644 index 0000000000..c7987c169b --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/jpa/test/transaction/CloseEntityManagerWithActiveTransactionTest.java @@ -0,0 +1,77 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later. + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.jpa.test.transaction; + +import javax.persistence.EntityManager; +import javax.transaction.Status; +import javax.transaction.TransactionManager; +import java.util.List; +import java.util.Map; + +import org.hibernate.jpa.AvailableSettings; +import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; + +import org.junit.Test; + +import org.hibernate.testing.TestForIssue; +import org.hibernate.testing.jta.TestingJtaBootstrap; +import org.hibernate.testing.jta.TestingJtaPlatformImpl; + +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + +/** + * @author Andrea Boriero + */ +@TestForIssue(jiraKey = "HHH-10942") +public class CloseEntityManagerWithActiveTransactionTest extends BaseEntityManagerFunctionalTestCase { + @Override + protected void addConfigOptions(Map options) { + super.addConfigOptions( options ); + TestingJtaBootstrap.prepare( options ); + options.put( AvailableSettings.TRANSACTION_TYPE, "JTA" ); + } + + @Override + public Class[] getAnnotatedClasses() { + return new Class[] { + Book.class + }; + } + + @Test + public void testCloseWithAnActiveTransaction() throws Exception { + Book book = new Book(); + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); + EntityManager em = getOrCreateEntityManager(); + try { + em.persist( book ); + em.close(); + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().commit(); + } + catch (Exception e) { + final TransactionManager transactionManager = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); + if(transactionManager.getTransaction().getStatus() == Status.STATUS_ACTIVE ) { + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().rollback(); + } + throw e; + } + finally { + if ( em.isOpen() ) { + em.close(); + } + } + em = getOrCreateEntityManager(); + try { + final List results = em.createQuery( "from Book" ).getResultList(); + assertThat( results.size(), is( 1 ) ); + } + finally { + em.close(); + } + } +}