From 8c233312ce103bc6157368f1fc126ea5aaa38ee4 Mon Sep 17 00:00:00 2001 From: adamw Date: Sat, 2 Apr 2011 09:03:46 +0200 Subject: [PATCH] HHH-6020: some refactoring on how the JTA tests are done. All hibernate config is in the AbstractEntityTest now, instead of loading an xml file. --- .../envers/test/AbstractEntityTest.java | 45 ++++++++----------- .../test/EnversTestingJtaBootstrap.java | 19 ++++++-- .../integration/jta/JtaExceptionListener.java | 40 ++++++++++------- .../test/integration/jta/JtaTransaction.java | 38 +++++++++------- .../src/test/resources/hibernate.test.cfg.xml | 30 ------------- 5 files changed, 81 insertions(+), 91 deletions(-) delete mode 100644 hibernate-envers/src/test/resources/hibernate.test.cfg.xml diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/AbstractEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/AbstractEntityTest.java index c079197d23..9efe6afc6b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/AbstractEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/AbstractEntityTest.java @@ -23,26 +23,20 @@ */ package org.hibernate.envers.test; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.transaction.TransactionManager; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -import org.hibernate.ejb.AvailableSettings; -import org.hibernate.testing.AfterClassOnce; -import org.hibernate.testing.BeforeClassOnce; -import org.junit.Before; -import org.junit.runner.RunWith; - import org.hibernate.cfg.Environment; import org.hibernate.ejb.Ejb3Configuration; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.event.EnversIntegrator; import org.hibernate.service.internal.BasicServiceRegistryImpl; -import org.junit.runners.Parameterized; +import org.hibernate.testing.AfterClassOnce; +import org.hibernate.testing.BeforeClassOnce; +import org.junit.Before; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import java.io.IOException; +import java.util.Properties; /** * @author Adam Warski (adam at warski dot org) @@ -84,22 +78,26 @@ protected void init(boolean audited, String auditStrategy) throws IOException { this.audited = audited; cfg = new Ejb3Configuration(); - if ( ! audited ) { - cfg.setProperty( EnversIntegrator.AUTO_REGISTER, "false" ); + Properties configValues = cfg.getProperties(); + if (!audited) { + configValues.setProperty(EnversIntegrator.AUTO_REGISTER, "false"); } - cfg.configure( "hibernate.test.cfg.xml" ); + configValues.setProperty(Environment.HBM2DDL_AUTO, "create-drop"); + configValues.setProperty(Environment.DIALECT, "org.hibernate.dialect.H2Dialect"); + configValues.setProperty(Environment.DRIVER, "org.h2.Driver"); + configValues.setProperty(Environment.USER, "sa"); + + // Separate database for each test class + configValues.setProperty(Environment.URL, "jdbc:h2:mem:" + this.getClass().getName()); if (auditStrategy != null && !"".equals(auditStrategy)) { cfg.setProperty("org.hibernate.envers.audit_strategy", auditStrategy); } - // Separate database for each test class - cfg.setProperty( Environment.URL, "jdbc:h2:mem:" + this.getClass().getName() ); - configure( cfg ); - serviceRegistry = new BasicServiceRegistryImpl( cfg.getProperties() ); + serviceRegistry = new BasicServiceRegistryImpl(configValues); emf = cfg.buildEntityManagerFactory( serviceRegistry ); @@ -124,9 +122,4 @@ public AuditReader getAuditReader() { public Ejb3Configuration getCfg() { return cfg; } - - protected TransactionManager addJTAConfig(Ejb3Configuration cfg) { - cfg.getProperties().put(AvailableSettings.TRANSACTION_TYPE, "JTA"); - return EnversTestingJtaBootstrap.updateConfigAndCreateTM(cfg.getProperties()); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/EnversTestingJtaBootstrap.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/EnversTestingJtaBootstrap.java index 027030bd29..d738b3db43 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/EnversTestingJtaBootstrap.java +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/EnversTestingJtaBootstrap.java @@ -5,16 +5,15 @@ import com.arjuna.common.internal.util.propertyservice.BeanPopulator; import org.enhydra.jdbc.standard.StandardXADataSource; import org.hibernate.cfg.Environment; +import org.hibernate.ejb.AvailableSettings; import org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl; import org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform; import org.hibernate.service.jta.platform.internal.JtaPlatformInitiator; -import javax.sql.DataSource; +import javax.transaction.Status; import javax.transaction.TransactionManager; -import javax.transaction.UserTransaction; import java.sql.SQLException; import java.util.Map; -import java.util.Properties; /** * Copied from {@link org.hibernate.testing.jta.TestingJtaBootstrap}, as Envers tests use a different URL for @@ -48,10 +47,24 @@ public static TransactionManager updateConfigAndCreateTM(Map configValues) { dataSource.setUrl(configValues.get(Environment.URL).toString()); dataSource.setUser(configValues.get(Environment.USER).toString()); + configValues.remove(Environment.URL); + configValues.remove(Environment.USER); + configValues.remove(Environment.DRIVER); + configValues.put( JtaPlatformInitiator.JTA_PLATFORM, new JBossStandAloneJtaPlatform() ); configValues.put( Environment.CONNECTION_PROVIDER, DatasourceConnectionProviderImpl.class.getName() ); configValues.put( Environment.DATASOURCE, dataSource ); + configValues.put(AvailableSettings.TRANSACTION_TYPE, "JTA"); + return transactionManager; } + + public static void tryCommit(TransactionManager tm) throws Exception { + if (tm.getStatus() == Status.STATUS_MARKED_ROLLBACK) { + tm.rollback(); + } else { + tm.commit(); + } + } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/jta/JtaExceptionListener.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/jta/JtaExceptionListener.java index 0d988d5e84..21edc7352a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/jta/JtaExceptionListener.java +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/jta/JtaExceptionListener.java @@ -32,6 +32,8 @@ import javax.persistence.EntityManager; import javax.transaction.TransactionManager; +import static org.hibernate.envers.test.EnversTestingJtaBootstrap.*; + /** * Same as {@link org.hibernate.envers.test.integration.reventity.ExceptionListener}, but in a JTA environment. * @author Adam Warski (adam at warski dot org) @@ -40,36 +42,40 @@ public class JtaExceptionListener extends AbstractEntityTest { private TransactionManager tm; public void configure(Ejb3Configuration cfg) { + tm = updateConfigAndCreateTM(cfg.getProperties()); + cfg.addAnnotatedClass(StrTestEntity.class); cfg.addAnnotatedClass(ExceptionListenerRevEntity.class); - - tm = addJTAConfig(cfg); } @Test(expected = RuntimeException.class) public void testTransactionRollback() throws Exception { tm.begin(); - // Trying to persist an entity - however the listener should throw an exception, so the entity - // shouldn't be persisted - newEntityManager(); - EntityManager em = getEntityManager(); - StrTestEntity te = new StrTestEntity("x"); - em.persist(te); - - tm.commit(); + try { + // Trying to persist an entity - however the listener should throw an exception, so the entity + // shouldn't be persisted + newEntityManager(); + EntityManager em = getEntityManager(); + StrTestEntity te = new StrTestEntity("x"); + em.persist(te); + } finally { + tryCommit(tm); + } } @Test public void testDataNotPersisted() throws Exception { tm.begin(); - // Checking if the entity became persisted - newEntityManager(); - EntityManager em = getEntityManager(); - Long count = (Long) em.createQuery("select count(s) from StrTestEntity s where s.str = 'x'").getSingleResult(); - assert count == 0l; - - tm.commit(); + try { + // Checking if the entity became persisted + newEntityManager(); + EntityManager em = getEntityManager(); + Long count = (Long) em.createQuery("select count(s) from StrTestEntity s where s.str = 'x'").getSingleResult(); + assert count == 0l; + } finally { + tryCommit(tm); + } } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/jta/JtaTransaction.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/jta/JtaTransaction.java index 6510da6f78..f6f3180520 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/jta/JtaTransaction.java +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/jta/JtaTransaction.java @@ -2,6 +2,7 @@ import org.hibernate.ejb.Ejb3Configuration; import org.hibernate.envers.test.AbstractEntityTest; +import org.hibernate.envers.test.EnversTestingJtaBootstrap; import org.hibernate.envers.test.Priority; import org.hibernate.envers.test.entities.IntTestEntity; import org.junit.Test; @@ -10,6 +11,8 @@ import javax.transaction.TransactionManager; import java.util.Arrays; +import static org.hibernate.envers.test.EnversTestingJtaBootstrap.*; + /** * Same as {@link org.hibernate.envers.test.integration.basic.Simple}, but in a JTA environment. * @author Adam Warski (adam at warski dot org) @@ -20,8 +23,7 @@ public class JtaTransaction extends AbstractEntityTest { public void configure(Ejb3Configuration cfg) { cfg.addAnnotatedClass(IntTestEntity.class); - - tm = addJTAConfig(cfg); + tm = EnversTestingJtaBootstrap.updateConfigAndCreateTM(cfg.getProperties()); } @Test @@ -29,24 +31,30 @@ public void configure(Ejb3Configuration cfg) { public void initData() throws Exception { tm.begin(); - newEntityManager(); - EntityManager em = getEntityManager(); - IntTestEntity ite = new IntTestEntity(10); - em.persist(ite); - id1 = ite.getId(); - - tm.commit(); + EntityManager em; + IntTestEntity ite; + try { + newEntityManager(); + em = getEntityManager(); + ite = new IntTestEntity(10); + em.persist(ite); + id1 = ite.getId(); + } finally { + tryCommit(tm); + } // tm.begin(); - newEntityManager(); - em = getEntityManager(); - ite = em.find(IntTestEntity.class, id1); - ite.setNumber(20); - - tm.commit(); + try { + newEntityManager(); + em = getEntityManager(); + ite = em.find(IntTestEntity.class, id1); + ite.setNumber(20); + } finally { + tryCommit(tm); + } } @Test diff --git a/hibernate-envers/src/test/resources/hibernate.test.cfg.xml b/hibernate-envers/src/test/resources/hibernate.test.cfg.xml deleted file mode 100644 index b2319ef2b7..0000000000 --- a/hibernate-envers/src/test/resources/hibernate.test.cfg.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - create-drop - - false - true - - org.hibernate.dialect.H2Dialect - org.h2.Driver - sa - - - - - - - - - - - - - -