package org.hibernate.envers.test.integration.jta; 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.hibernate.testing.FailureExpected; import org.junit.Test; import javax.persistence.EntityManager; import javax.transaction.TransactionManager; import java.util.Arrays; import java.util.Properties; 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) */ public class JtaTransaction extends AbstractEntityTest { private TransactionManager tm; private Integer id1; public void configure(Ejb3Configuration cfg) { cfg.addAnnotatedClass(IntTestEntity.class); } @Override public void addConfigurationProperties(Properties configuration) { super.addConfigurationProperties(configuration); tm = EnversTestingJtaBootstrap.updateConfigAndCreateTM(configuration); } @Test @Priority(10) @FailureExpected(jiraKey = "HHH-6624") public void initData() throws Exception { tm.begin(); EntityManager em; IntTestEntity ite; try { newEntityManager(); em = getEntityManager(); ite = new IntTestEntity(10); em.persist(ite); id1 = ite.getId(); } finally { tryCommit(tm); } // tm.begin(); try { newEntityManager(); em = getEntityManager(); ite = em.find(IntTestEntity.class, id1); ite.setNumber(20); } finally { tryCommit(tm); } } @Test @FailureExpected(jiraKey = "HHH-6624") public void testRevisionsCounts() throws Exception { assert Arrays.asList(1, 2).equals(getAuditReader().getRevisions(IntTestEntity.class, id1)); } @Test @FailureExpected(jiraKey = "HHH-6624") public void testHistoryOfId1() { IntTestEntity ver1 = new IntTestEntity(10, id1); IntTestEntity ver2 = new IntTestEntity(20, id1); assert getAuditReader().find(IntTestEntity.class, id1, 1).equals(ver1); assert getAuditReader().find(IntTestEntity.class, id1, 2).equals(ver2); } }