HHH-7266 - Move away from use of Enhydra developed DataSource for JTA testing

This commit is contained in:
Steve Ebersole 2012-04-20 18:59:06 -05:00
parent 70847a2331
commit 3cd58b6e79
7 changed files with 70 additions and 44 deletions

View File

@ -36,6 +36,7 @@ import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.engine.transaction.internal.jta.CMTTransaction;
import org.hibernate.engine.transaction.internal.jta.JtaStatusHelper;
import org.hibernate.testing.jta.TestingJtaBootstrap;
import org.hibernate.testing.jta.TestingJtaPlatformImpl;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@ -55,7 +56,7 @@ public class TransactionJoiningTest extends BaseEntityManagerFunctionalTestCase
@Test
public void testExplicitJoining() throws Exception {
assertFalse( JtaStatusHelper.isActive( TestingJtaBootstrap.INSTANCE.getTransactionManager() ) );
assertFalse( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) );
EntityManager entityManager = entityManagerFactory().createEntityManager();
SessionImplementor session = entityManager.unwrap( SessionImplementor.class );
@ -68,34 +69,34 @@ public class TransactionJoiningTest extends BaseEntityManagerFunctionalTestCase
assertFalse( session.getTransactionCoordinator().isSynchronizationRegistered() );
assertFalse( hibernateTransaction.isParticipating() );
TestingJtaBootstrap.INSTANCE.getTransactionManager().begin();
assertTrue( JtaStatusHelper.isActive( TestingJtaBootstrap.INSTANCE.getTransactionManager() ) );
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin();
assertTrue( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) );
assertTrue( hibernateTransaction.isActive() );
assertFalse( hibernateTransaction.isParticipating() );
assertFalse( session.getTransactionCoordinator().isSynchronizationRegistered() );
session.getFlushMode();
assertTrue( JtaStatusHelper.isActive( TestingJtaBootstrap.INSTANCE.getTransactionManager() ) );
assertTrue( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) );
assertTrue( hibernateTransaction.isActive() );
assertFalse( session.getTransactionCoordinator().isSynchronizationRegistered() );
assertFalse( hibernateTransaction.isParticipating() );
entityManager.joinTransaction();
assertTrue( JtaStatusHelper.isActive( TestingJtaBootstrap.INSTANCE.getTransactionManager() ) );
assertTrue( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) );
assertTrue( hibernateTransaction.isActive() );
assertTrue( session.getTransactionCoordinator().isSynchronizationRegistered() );
assertTrue( hibernateTransaction.isParticipating() );
entityManager.close();
TestingJtaBootstrap.INSTANCE.getTransactionManager().commit();
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().commit();
}
@Test
public void testImplicitJoining() throws Exception {
assertFalse( JtaStatusHelper.isActive( TestingJtaBootstrap.INSTANCE.getTransactionManager() ) );
assertFalse( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) );
TestingJtaBootstrap.INSTANCE.getTransactionManager().begin();
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin();
EntityManager entityManager = entityManagerFactory().createEntityManager();
SessionImplementor session = entityManager.unwrap( SessionImplementor.class );
Transaction hibernateTransaction = ( (Session) session ).getTransaction();
@ -105,6 +106,6 @@ public class TransactionJoiningTest extends BaseEntityManagerFunctionalTestCase
entityManager.close();
TestingJtaBootstrap.INSTANCE.getTransactionManager().commit();
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().commit();
}
}

View File

@ -1,15 +1,37 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2012, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.hibernate.envers.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.transaction.SystemException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.transaction.SystemException;
import org.jboss.logging.Logger;
import org.junit.After;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
@ -26,9 +48,12 @@ import org.hibernate.internal.util.StringHelper;
import org.hibernate.service.BootstrapServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.service.internal.StandardServiceRegistryImpl;
import org.junit.After;
import org.hibernate.testing.AfterClassOnce;
import org.hibernate.testing.BeforeClassOnce;
import org.hibernate.testing.jta.TestingJtaBootstrap;
import org.hibernate.testing.jta.TestingJtaPlatformImpl;
/**
* @author Strong Liu (stliu@hibernate.org)
@ -222,10 +247,10 @@ public abstract class BaseEnversJPAFunctionalTestCase extends AbstractEnversTest
em = null;
return;
}
if ( JtaStatusHelper.isActive( TestingJtaBootstrap.INSTANCE.getTransactionManager() ) ) {
if ( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) ) {
log.warn( "Cleaning up unfinished transaction" );
try {
TestingJtaBootstrap.INSTANCE.getTransactionManager().rollback();
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().rollback();
}
catch (SystemException ignored) {
}

View File

@ -37,6 +37,7 @@ import org.hibernate.envers.test.entities.StrTestEntity;
import org.hibernate.envers.test.integration.reventity.ExceptionListenerRevEntity;
import org.hibernate.testing.jta.TestingJtaBootstrap;
import org.hibernate.testing.jta.TestingJtaPlatformImpl;
/**
* Same as {@link org.hibernate.envers.test.integration.reventity.ExceptionListener}, but in a JTA environment.
@ -56,7 +57,7 @@ public class JtaExceptionListener extends BaseEnversJPAFunctionalTestCase {
@Test(expected = RollbackException.class)
@Priority(5) // must run before testDataNotPersisted()
public void testTransactionRollback() throws Exception {
TestingJtaBootstrap.INSTANCE.getTransactionManager().begin();
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin();
try {
EntityManager em = getEntityManager();
@ -66,13 +67,13 @@ public class JtaExceptionListener extends BaseEnversJPAFunctionalTestCase {
StrTestEntity te = new StrTestEntity("x");
em.persist(te);
} finally {
TestingJtaBootstrap.tryCommit();
TestingJtaPlatformImpl.tryCommit();
}
}
@Test
public void testDataNotPersisted() throws Exception {
TestingJtaBootstrap.INSTANCE.getTransactionManager().begin();
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin();
try {
// Checking if the entity became persisted
@ -80,7 +81,7 @@ public class JtaExceptionListener extends BaseEnversJPAFunctionalTestCase {
long count = em.createQuery("from StrTestEntity s where s.str = 'x'").getResultList().size();
Assert.assertEquals( 0, count );
} finally {
TestingJtaBootstrap.tryCommit();
TestingJtaPlatformImpl.tryCommit();
}
}
}

View File

@ -12,6 +12,7 @@ import org.junit.Assert;
import org.junit.Test;
import org.hibernate.testing.jta.TestingJtaBootstrap;
import org.hibernate.testing.jta.TestingJtaPlatformImpl;
/**
* Same as {@link org.hibernate.envers.test.integration.basic.Simple}, but in a JTA environment.
@ -33,7 +34,7 @@ public class JtaTransaction extends BaseEnversJPAFunctionalTestCase {
@Test
@Priority(10)
public void initData() throws Exception {
TestingJtaBootstrap.INSTANCE.getTransactionManager().begin();
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin();
EntityManager em;
IntTestEntity ite;
@ -43,18 +44,18 @@ public class JtaTransaction extends BaseEnversJPAFunctionalTestCase {
em.persist(ite);
id1 = ite.getId();
} finally {
TestingJtaBootstrap.tryCommit();
TestingJtaPlatformImpl.tryCommit();
}
em.close();
TestingJtaBootstrap.INSTANCE.getTransactionManager().begin();
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin();
try {
em = getEntityManager();
ite = em.find(IntTestEntity.class, id1);
ite.setNumber(20);
} finally {
TestingJtaBootstrap.tryCommit();
TestingJtaPlatformImpl.tryCommit();
}
em.close();
}

View File

@ -73,6 +73,7 @@ public class JtaAwareConnectionProviderImpl implements ConnectionProvider, Confi
transferSetting( Environment.CONNECTION_PREFIX + '.' + setting, configurationValues, connectionSettings );
}
}
connectionSettings.setProperty( Environment.AUTOCOMMIT, "false" );
delegate = new DriverManagerConnectionProviderImpl();
delegate.configure( connectionSettings );

View File

@ -23,24 +23,17 @@
*/
package org.hibernate.testing.jta;
import javax.sql.DataSource;
import javax.transaction.Status;
import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;
import java.util.Map;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Environment;
/**
* Manages the {@link TransactionManager}, {@link UserTransaction} and {@link DataSource} instances used for testing.
*
* @author Steve Ebersole
*/
public class TestingJtaBootstrap {
public static final TestingJtaBootstrap INSTANCE = new TestingJtaBootstrap();
@SuppressWarnings("unchecked")
public static void prepare(Map configValues) {
configValues.put( AvailableSettings.JTA_PLATFORM, TestingJtaPlatformImpl.INSTANCE );
@ -48,15 +41,4 @@ public class TestingJtaBootstrap {
configValues.put( "javax.persistence.transactionType", "JTA" );
}
/**
* Used by envers...
*/
public static void tryCommit() throws Exception {
if ( TestingJtaPlatformImpl.transactionManager().getStatus() == Status.STATUS_MARKED_ROLLBACK ) {
TestingJtaPlatformImpl.transactionManager().rollback();
}
else {
TestingJtaPlatformImpl.transactionManager().commit();
}
}
}

View File

@ -23,6 +23,7 @@
*/
package org.hibernate.testing.jta;
import javax.transaction.Status;
import javax.transaction.TransactionManager;
import javax.transaction.TransactionSynchronizationRegistry;
import javax.transaction.UserTransaction;
@ -37,8 +38,10 @@ import org.hibernate.service.jta.platform.internal.SynchronizationRegistryAccess
import org.hibernate.service.jta.platform.internal.SynchronizationRegistryBasedSynchronizationStrategy;
/**
* @author Steve Ebersole
*/
* A test-specific implementation of the JtaPlatform contract for testing JTA-based functionality.
*
* @author Steve Ebersole
*/
public class TestingJtaPlatformImpl extends AbstractJtaPlatform {
public static final TestingJtaPlatformImpl INSTANCE = new TestingJtaPlatformImpl();
@ -88,6 +91,18 @@ public class TestingJtaPlatformImpl extends AbstractJtaPlatform {
return INSTANCE.synchronizationRegistry;
}
/**
* Used by envers...
*/
public static void tryCommit() throws Exception {
if ( transactionManager().getStatus() == Status.STATUS_MARKED_ROLLBACK ) {
transactionManager().rollback();
}
else {
transactionManager().commit();
}
}
@Override
protected TransactionManager locateTransactionManager() {
return transactionManager;