You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by st...@apache.org on 2018/09/03 10:30:27 UTC
[2/2] deltaspike git commit: DELTASPIKE-900 add unit test for
multiple BM tx
DELTASPIKE-900 add unit test for multiple BM tx
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/7bd3c1d5
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/7bd3c1d5
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/7bd3c1d5
Branch: refs/heads/master
Commit: 7bd3c1d53eeda4b8bc14656515ba7e885f2f6473
Parents: 779d28b
Author: Mark Struberg <st...@apache.org>
Authored: Mon Sep 3 12:29:15 2018 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon Sep 3 12:29:15 2018 +0200
----------------------------------------------------------------------
.../ManagedUserTransactionResolver.java | 2 +
.../test/jpa/api/shared/TestEntityManager.java | 2 +-
.../manual/BeanManagedlTransactionTest.java | 101 +++++++++++++++++++
.../manual/ManualTransactionBean.java | 5 +
.../manual/MockUserTransactionResolver.java | 99 ++++++++++++++++++
5 files changed, 208 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7bd3c1d5/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/ManagedUserTransactionResolver.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/ManagedUserTransactionResolver.java b/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/ManagedUserTransactionResolver.java
index d6657c0..9e55ad0 100644
--- a/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/ManagedUserTransactionResolver.java
+++ b/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/ManagedUserTransactionResolver.java
@@ -19,10 +19,12 @@
package org.apache.deltaspike.jpa.impl.transaction;
import javax.annotation.Resource;
+import javax.enterprise.context.Dependent;
import javax.transaction.UserTransaction;
//we need to keep it separated,
//because the injection of UserTransaction might fail with an exception (see DELTASPIKE-986)
+@Dependent
public class ManagedUserTransactionResolver
{
@Resource
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7bd3c1d5/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/shared/TestEntityManager.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/shared/TestEntityManager.java b/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/shared/TestEntityManager.java
index 343624b..aec822b 100644
--- a/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/shared/TestEntityManager.java
+++ b/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/shared/TestEntityManager.java
@@ -243,7 +243,7 @@ public class TestEntityManager implements EntityManager
@Override
public void joinTransaction()
{
- throw new IllegalStateException("not implemented");
+ // all fine, nothing to do
}
@Override
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7bd3c1d5/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/BeanManagedlTransactionTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/BeanManagedlTransactionTest.java b/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/BeanManagedlTransactionTest.java
new file mode 100644
index 0000000..b6af93e
--- /dev/null
+++ b/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/BeanManagedlTransactionTest.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.jpa.api.transactional.multipleinjection.manual;
+
+import org.apache.deltaspike.core.api.projectstage.ProjectStage;
+import org.apache.deltaspike.core.util.ProjectStageProducer;
+import org.apache.deltaspike.jpa.impl.transaction.context.TransactionContextExtension;
+import org.apache.deltaspike.test.category.SeCategory;
+import org.apache.deltaspike.test.util.ArchiveUtils;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.Asset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import javax.enterprise.inject.spi.Extension;
+import javax.inject.Inject;
+
+
+/**
+ * Same test as {@link ManualTransactionTest} but now with a UserTransaction instead
+ * of manual EM Tx.
+ */
+@RunWith(Arquillian.class)
+@Category(SeCategory.class)
+public class BeanManagedlTransactionTest
+{
+ private static Asset beansXml = new StringAsset(
+ "<beans>" +
+ "<alternatives>" +
+ "<class>org.apache.deltaspike.jpa.impl.transaction.BeanManagedUserTransactionStrategy</class>" +
+ "</alternatives>" +
+ "</beans>"
+ );
+
+
+ @Inject
+ private ManualTransactionBean manualTransactionBean;
+
+ @Inject
+ private MockUserTransactionResolver mockTxResolver;
+
+ @Deployment
+ public static WebArchive deploy()
+ {
+ JavaArchive testJar = ShrinkWrap.create(JavaArchive.class, "manualTransactionTest.jar")
+ .addPackage(ArchiveUtils.SHARED_PACKAGE)
+ .addPackage(BeanManagedlTransactionTest.class.getPackage().getName())
+ .addAsManifestResource(beansXml, "beans.xml");
+
+ return ShrinkWrap.create(WebArchive.class)
+ .addAsLibraries(ArchiveUtils.getDeltaSpikeCoreAndJpaArchive())
+ .addAsLibraries(testJar)
+ .addAsServiceProvider(Extension.class, TransactionContextExtension.class)
+ .addAsWebInfResource(ArchiveUtils.getBeansXml(), "beans.xml");
+ }
+
+ @Before
+ public void init()
+ {
+ ProjectStageProducer.setProjectStage(ProjectStage.UnitTest);
+ }
+
+ @Test
+ public void manualTransactionTest()
+ {
+
+ mockTxResolver.resetTx();
+ MockUserTransactionResolver.MockUserTransaction mockTx = mockTxResolver.resolveUserTransaction();
+ manualTransactionBean.executeInTransaction();
+
+ Assert.assertEquals(false, mockTx.isActive());
+ Assert.assertEquals(true, mockTx.isBegin());
+ Assert.assertEquals(true, mockTx.isCommit());
+ Assert.assertEquals(false, mockTx.isRollback());
+ Assert.assertEquals(false, mockTx.isRollBackOnly());
+ }
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7bd3c1d5/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/ManualTransactionBean.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/ManualTransactionBean.java b/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/ManualTransactionBean.java
index d88e095..85b0cb0 100644
--- a/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/ManualTransactionBean.java
+++ b/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/ManualTransactionBean.java
@@ -53,4 +53,9 @@ public class ManualTransactionBean
public void executeInSecondTransaction()
{
}
+
+ @Transactional
+ public void executeInTransaction()
+ {
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7bd3c1d5/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/MockUserTransactionResolver.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/MockUserTransactionResolver.java b/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/MockUserTransactionResolver.java
new file mode 100644
index 0000000..f613210
--- /dev/null
+++ b/deltaspike/modules/jpa/impl/src/test/java/org/apache/deltaspike/test/jpa/api/transactional/multipleinjection/manual/MockUserTransactionResolver.java
@@ -0,0 +1,99 @@
+package org.apache.deltaspike.test.jpa.api.transactional.multipleinjection.manual;
+
+import org.apache.deltaspike.jpa.impl.transaction.ManagedUserTransactionResolver;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Specializes;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.Status;
+import javax.transaction.SystemException;
+import javax.transaction.UserTransaction;
+
+/**
+ * @author Mark Struberg
+ */
+@Specializes
+@ApplicationScoped
+public class MockUserTransactionResolver extends ManagedUserTransactionResolver {
+
+ private MockUserTransaction mockTx;
+
+ @PostConstruct
+ public void resetTx() {
+ mockTx = new MockUserTransaction();
+ }
+
+ @Override
+ public MockUserTransaction resolveUserTransaction() {
+ return mockTx;
+ }
+
+ public static class MockUserTransaction implements UserTransaction {
+ private boolean begin = false;
+ private boolean commit = false;
+ private boolean rollback = false;
+ private boolean rollBackOnly =false;
+
+ private int status = Status.STATUS_NO_TRANSACTION;
+
+
+ @Override
+ public void begin() throws NotSupportedException, SystemException {
+ this.begin = true;
+ this.status = Status.STATUS_ACTIVE;
+ }
+
+ @Override
+ public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
+ this.commit = true;
+ this.status = Status.STATUS_COMMITTED;
+ }
+
+ @Override
+ public int getStatus() throws SystemException {
+ return status;
+ }
+
+ @Override
+ public void rollback() throws IllegalStateException, SecurityException, SystemException {
+ this.rollback = true;
+ this.status = Status.STATUS_ROLLEDBACK;
+ }
+
+ @Override
+ public void setRollbackOnly() throws IllegalStateException, SystemException {
+ this.rollBackOnly = true;
+ this.status = Status.STATUS_MARKED_ROLLBACK;
+ }
+
+ @Override
+ public void setTransactionTimeout(int i) throws SystemException {
+ // do nothing
+ }
+
+ public boolean isActive()
+ {
+ return begin && !(commit || rollback);
+ }
+
+ public boolean isBegin() {
+ return begin;
+ }
+
+ public boolean isCommit() {
+ return commit;
+ }
+
+ public boolean isRollback() {
+ return rollback;
+ }
+
+ public boolean isRollBackOnly() {
+ return rollBackOnly;
+ }
+ }
+}