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