From 9b0c4238d5eb35d64c39adec5383fda08aa36112 Mon Sep 17 00:00:00 2001 From: Dancovich Date: Wed, 21 Aug 2013 15:54:19 -0300 Subject: [PATCH] Adicionados testes de transação usando a anotação @Transactional --- impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity1.java | 29 +++++++++++++++++++++++++++++ impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity2.java | 29 +++++++++++++++++++++++++++++ impl/extension/jpa/src/test/java/transaction/interceptor/TransactionalBusiness.java | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ impl/extension/jpa/src/test/java/transaction/manual/JPATransactionTest.java | 33 ++++++++++++++++++++++++++++++++- impl/extension/jpa/src/test/resources/transaction/interceptor/persistence.xml | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ impl/extension/jpa/src/test/resources/transaction/manual/persistence.xml | 13 +++++++++++++ 7 files changed, 356 insertions(+), 1 deletion(-) create mode 100644 impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java create mode 100644 impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity1.java create mode 100644 impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity2.java create mode 100644 impl/extension/jpa/src/test/java/transaction/interceptor/TransactionalBusiness.java create mode 100644 impl/extension/jpa/src/test/resources/transaction/interceptor/persistence.xml diff --git a/impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java b/impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java new file mode 100644 index 0000000..d5dd9ae --- /dev/null +++ b/impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java @@ -0,0 +1,93 @@ +package transaction.interceptor; + +import javax.inject.Inject; +import javax.persistence.EntityManager; + +import junit.framework.Assert; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import test.Tests; +import br.gov.frameworkdemoiselle.annotation.Name; +import br.gov.frameworkdemoiselle.transaction.TransactionContext; + +@RunWith(Arquillian.class) +public class JPATransactionTest { + + private static final String PATH = "src/test/resources/transaction/interceptor"; + + @Inject + private TransactionalBusiness tb; + + @Inject + @Name("pu1") + private EntityManager em1; + + @Inject + @Name("pu2") + private EntityManager em2; + + @Inject + private TransactionContext transactionContext; + + @Deployment + public static WebArchive createDeployment() { + WebArchive deployment = Tests.createDeployment(JPATransactionTest.class); + deployment.addAsResource(Tests.createFileAsset(PATH + "/persistence.xml"), "META-INF/persistence.xml"); + + return deployment; + } + + @Before + public void eraseDatabases(){ + transactionContext.getCurrentTransaction().begin(); + em1.createQuery("DELETE FROM MyEntity1").executeUpdate(); + em2.createQuery("DELETE FROM MyEntity2").executeUpdate(); + transactionContext.getCurrentTransaction().commit(); + } + + @Test + public void isTransactionActiveWithInterceptor(){ + Assert.assertTrue(tb.isTransactionActiveWithInterceptor()); + } + + @Test + public void isTransactionActiveWithoutInterceptor(){ + Assert.assertFalse(tb.isTransactionActiveWithoutInterceptor()); + } + + @Test + public void commitWithSuccess() { + + tb.commitWithSuccess(); + + MyEntity1 entity1 = em1.find(MyEntity1.class, tb.createId("id-1")); + MyEntity2 entity2 = em2.find(MyEntity2.class, tb.createId("id-2")); + + Assert.assertEquals("desc-1", entity1.getDescription()); + Assert.assertEquals("desc-2", entity2.getDescription()); + } + + @Test + public void rollbackWithSuccess() { + + try{ + tb.rollbackWithSuccess(); + } catch (Exception e) { + Assert.assertEquals("Exceção criada para marcar transação para rollback", e.getMessage()); + } + finally{ + MyEntity1 entity1 = em1.find(MyEntity1.class, tb.createId("id-1")); + MyEntity2 entity2 = em2.find(MyEntity2.class, tb.createId("id-2")); + + Assert.assertNull(entity1); + Assert.assertNull(entity2); + } + } + +} \ No newline at end of file diff --git a/impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity1.java b/impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity1.java new file mode 100644 index 0000000..b7c851b --- /dev/null +++ b/impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity1.java @@ -0,0 +1,29 @@ +package transaction.interceptor; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class MyEntity1 { + + @Id + private String id; + + private String description; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity2.java b/impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity2.java new file mode 100644 index 0000000..e7ef24b --- /dev/null +++ b/impl/extension/jpa/src/test/java/transaction/interceptor/MyEntity2.java @@ -0,0 +1,29 @@ +package transaction.interceptor; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class MyEntity2 { + + @Id + private String id; + + private String description; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/impl/extension/jpa/src/test/java/transaction/interceptor/TransactionalBusiness.java b/impl/extension/jpa/src/test/java/transaction/interceptor/TransactionalBusiness.java new file mode 100644 index 0000000..c99f3cd --- /dev/null +++ b/impl/extension/jpa/src/test/java/transaction/interceptor/TransactionalBusiness.java @@ -0,0 +1,64 @@ +package transaction.interceptor; + +import javax.inject.Inject; +import javax.persistence.EntityManager; + +import br.gov.frameworkdemoiselle.annotation.Name; +import br.gov.frameworkdemoiselle.transaction.TransactionContext; +import br.gov.frameworkdemoiselle.transaction.Transactional; + +public class TransactionalBusiness { + + @Inject + @Name("pu1") + private EntityManager em1; + + @Inject + @Name("pu2") + private EntityManager em2; + + @Inject + private TransactionContext transactionContext; + + @Transactional + public boolean isTransactionActiveWithInterceptor(){ + return transactionContext.getCurrentTransaction().isActive(); + } + + public boolean isTransactionActiveWithoutInterceptor(){ + return transactionContext.getCurrentTransaction().isActive(); + } + + @Transactional + public void commitWithSuccess() { + MyEntity1 entity1 = new MyEntity1(); + entity1.setId(createId("id-1")); + entity1.setDescription("desc-1"); + + MyEntity2 entity2 = new MyEntity2(); + entity2.setId(createId("id-2")); + entity2.setDescription("desc-2"); + + em1.persist(entity1); + em2.persist(entity2); + } + + @Transactional + public void rollbackWithSuccess() throws Exception { + MyEntity1 entity1 = new MyEntity1(); + entity1.setId(createId("id-3")); + + MyEntity2 entity2 = new MyEntity2(); + entity2.setId(createId("id-4")); + + em1.persist(entity1); + em2.persist(entity2); + + throw new Exception("Exceção criada para marcar transação para rollback"); + } + + String createId(String id) { + return this.getClass().getName() + "_" + id; + } + +} diff --git a/impl/extension/jpa/src/test/java/transaction/manual/JPATransactionTest.java b/impl/extension/jpa/src/test/java/transaction/manual/JPATransactionTest.java index 61c1a9c..5f9dfe4 100644 --- a/impl/extension/jpa/src/test/java/transaction/manual/JPATransactionTest.java +++ b/impl/extension/jpa/src/test/java/transaction/manual/JPATransactionTest.java @@ -9,6 +9,8 @@ import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.TransactionRequiredException; +import junit.framework.Assert; + import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; @@ -20,6 +22,8 @@ import br.gov.frameworkdemoiselle.annotation.Name; import br.gov.frameworkdemoiselle.transaction.JPATransaction; import br.gov.frameworkdemoiselle.transaction.Transaction; import br.gov.frameworkdemoiselle.transaction.TransactionContext; +import br.gov.frameworkdemoiselle.util.Beans; +import br.gov.frameworkdemoiselle.util.NameQualifier; @RunWith(Arquillian.class) public class JPATransactionTest { @@ -37,7 +41,7 @@ public class JPATransactionTest { @Name("pu2") private EntityManager em2; - @Deployment(name = "2") + @Deployment public static WebArchive createDeployment() { WebArchive deployment = Tests.createDeployment(JPATransactionTest.class); deployment.addAsResource(Tests.createFileAsset(PATH + "/persistence.xml"), "META-INF/persistence.xml"); @@ -120,6 +124,33 @@ public class JPATransactionTest { assertNull(persisted1); assertNull(persisted2); } + + @Test + public void checkEntityManagerCreatedAfterTransaction(){ + Transaction transaction = transactionContext.getCurrentTransaction(); + + String id = createId("id-5"); + MyEntity1 entity1 = new MyEntity1(); + entity1.setId(id); + entity1.setDescription("Test description"); + + Assert.assertFalse(transaction.isActive()); + transaction.begin(); + Assert.assertTrue(transaction.isActive()); + + EntityManager em1 = Beans.getReference(EntityManager.class, new NameQualifier("pu3")); + + try{ + em1.persist(entity1); + transaction.commit(); + } + catch(TransactionRequiredException te){ + Assert.fail("Entity Manager não ingressou em transação já em curso: "+te.getMessage()); + } + + entity1 = em1.find(MyEntity1.class, id); + Assert.assertEquals("Test description", entity1.getDescription()); + } private String createId(String id) { return this.getClass().getName() + "_" + id; diff --git a/impl/extension/jpa/src/test/resources/transaction/interceptor/persistence.xml b/impl/extension/jpa/src/test/resources/transaction/interceptor/persistence.xml new file mode 100644 index 0000000..0e389f3 --- /dev/null +++ b/impl/extension/jpa/src/test/resources/transaction/interceptor/persistence.xml @@ -0,0 +1,96 @@ + + + + + + + + java:jboss/datasources/ExampleDS + + transaction.interceptor.MyEntity1 + transaction.interceptor.MyEntity2 + + + + + + + + + + java:jboss/datasources/ExampleDS + + transaction.interceptor.MyEntity1 + transaction.interceptor.MyEntity2 + + + + + + + + + \ No newline at end of file diff --git a/impl/extension/jpa/src/test/resources/transaction/manual/persistence.xml b/impl/extension/jpa/src/test/resources/transaction/manual/persistence.xml index 50de0ae..a3a3014 100644 --- a/impl/extension/jpa/src/test/resources/transaction/manual/persistence.xml +++ b/impl/extension/jpa/src/test/resources/transaction/manual/persistence.xml @@ -92,5 +92,18 @@ + + + java:jboss/datasources/ExampleDS + + transaction.manual.MyEntity1 + transaction.manual.MyEntity2 + + + + + + + \ No newline at end of file -- libgit2 0.21.2