You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/01/02 09:44:28 UTC
[isis] branch 2033-Spring_Data_Integration updated: ISIS-2033:
headless support for InteractionAwareTransactionalBoundaryHandler
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 2033-Spring_Data_Integration
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/2033-Spring_Data_Integration by this push:
new d11328d ISIS-2033: headless support for InteractionAwareTransactionalBoundaryHandler
d11328d is described below
commit d11328d1cb3d8fc40700412bebee97a7490498d0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Jan 2 10:44:12 2021 +0100
ISIS-2033: headless support for
InteractionAwareTransactionalBoundaryHandler
---
...teractionAwareTransactionalBoundaryHandler.java | 9 ++++----
.../isis/JdoIsisTransactionScopeListenerTest.java | 27 +++++++++++-----------
.../JdoSpringTransactionScopeListenerTest.java | 18 +++++++--------
3 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
index 9256ff7..d2782a4 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
@@ -46,7 +46,7 @@ import lombok.val;
import lombok.extern.log4j.Log4j2;
@Service
-@Named("isisInteraction.TransactionalBoundary")
+@Named("isisInteraction.InteractionAwareTransactionalBoundaryHandler")
@Order(OrderPrecedence.MIDPOINT)
@Primary
@Qualifier("Default")
@@ -121,10 +121,11 @@ public class InteractionAwareTransactionalBoundaryHandler {
val txTemplate = new TransactionTemplate(txManager);
txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
- // either reuse existing or create new
+ // either participate in existing or create new transaction
val txStatus = txManager.getTransaction(txTemplate);
- if(!txStatus.isNewTransaction()) {
- // we are participating in an exiting transaction, nothing to do
+ if(txStatus==null // in support of JUnit testing (TransactionManagers might be mocked or hollow stubs)
+ || !txStatus.isNewTransaction()) {
+ // we are participating in an exiting transaction (or testing), nothing to do
return;
}
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionScopeListenerTest.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionScopeListenerTest.java
index bfbc40b..3019dfa 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionScopeListenerTest.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionScopeListenerTest.java
@@ -18,15 +18,14 @@
*/
package org.apache.isis.testdomain.transactions.jdo.isis;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
import javax.inject.Inject;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
-import org.springframework.transaction.annotation.Transactional;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.applib.services.xactn.TransactionService;
@@ -44,7 +43,7 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
Configuration_usingJdoIsis.class,
InteractionBoundaryProbe.class
})
-@Transactional
+//@Transactional
@TestPropertySource(IsisPresets.UseLog4j2Test)
/**
* With this test we manage IsisInteractions ourselves. (not sub-classing IsisIntegrationTestAbstract)
@@ -58,18 +57,18 @@ class JdoIsisTransactionScopeListenerTest {
@Inject private KVStoreForTesting kvStoreForTesting;
/* Expectations:
- * 1. for each IsisInteractionScope there should be a new InteractionBoundaryProbe instance
+ * 1. for each InteractionScope there should be a new InteractionBoundaryProbe instance
* 2. for each Transaction the current InteractionBoundaryProbe should get notified
*
- * first we have 1 IsisInteractionScope with 1 expected Transaction during 'setUp'
- * then we have 1 IsisInteractionScope with 3 expected Transactions within the test method
+ * first we have 1 InteractionScope with 1 expected Transaction during 'setUp'
+ * then we have 1 InteractionScope with 3 expected Transactions within the test method
*
*/
@BeforeEach
void setUp() {
- // new IsisInteractionScope with a new transaction (#1)
+ // new InteractionScope with a new transaction (#1)
isisInteractionFactory.runAnonymous(()->{
// cleanup
@@ -82,14 +81,14 @@ class JdoIsisTransactionScopeListenerTest {
@Test
void sessionScopedProbe_shouldBeReused_andBeAwareofTransactionBoundaries() {
- // new IsisInteractionScope
+ // new InteractionScope with a new transaction (#2)
isisInteractionFactory.runAnonymous(()->{
// expected pre condition
- // new transaction (#2)
+ // reuse transaction (#2)
assertEquals(0, repository.allInstances(JdoBook.class).size());
- // new transaction (#3)
+ // reuse transaction (#2)
transactionService.runWithinCurrentTransactionElseCreateNew(()->{
fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
@@ -97,15 +96,15 @@ class JdoIsisTransactionScopeListenerTest {
});
// expected post condition
- // new transaction (#4)
+ // reuse transaction (#2)
assertEquals(1, repository.allInstances(JdoBook.class).size());
});
assertEquals(2, InteractionBoundaryProbe.totalInteractionsStarted(kvStoreForTesting));
assertEquals(2, InteractionBoundaryProbe.totalInteractionsEnded(kvStoreForTesting));
- assertEquals(4, InteractionBoundaryProbe.totalTransactionsStarted(kvStoreForTesting));
- assertEquals(4, InteractionBoundaryProbe.totalTransactionsEnded(kvStoreForTesting));
+ assertEquals(2, InteractionBoundaryProbe.totalTransactionsStarted(kvStoreForTesting));
+ assertEquals(2, InteractionBoundaryProbe.totalTransactionsEnded(kvStoreForTesting));
}
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionScopeListenerTest.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionScopeListenerTest.java
index 9457775..e3e8348 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionScopeListenerTest.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionScopeListenerTest.java
@@ -63,11 +63,11 @@ class JdoSpringTransactionScopeListenerTest {
@Inject private KVStoreForTesting kvStoreForTesting;
/* Expectations:
- * 1. for each IsisInteractionScope there should be a new InteractionBoundaryProbe instance
+ * 1. for each InteractionScope there should be a new InteractionBoundaryProbe instance
* 2. for each Transaction the current InteractionBoundaryProbe should get notified
*
- * first we have 1 IsisInteractionScope with 1 expected Transaction during 'setUp'
- * then we have 1 IsisInteractionScope with 3 expected Transactions within the test method
+ * first we have 1 InteractionScope with 1 expected Transaction during 'setUp'
+ * then we have 1 InteractionScope with 1 expected Transaction within the test method
*
*/
@@ -90,17 +90,17 @@ class JdoSpringTransactionScopeListenerTest {
@Test
void sessionScopedProbe_shouldBeReused_andBeAwareofTransactionBoundaries() {
- // new IsisInteractionScope
+ // new IsisInteractionScope with a new transaction (#2)
isisInteractionFactory.runAnonymous(()->{
// request an InteractionBoundaryProbe for the current interaction
serviceRegistry.lookupServiceElseFail(InteractionBoundaryProbe.class);
// expected pre condition
- // new transaction (#2)
+ // reuse existing transaction (#2)
assertEquals(0, repository.allInstances(JdoBook.class).size());
- // new transaction (#3)
+ // reuse existing transaction (#2)
transactionService.runWithinCurrentTransactionElseCreateNew(()->{
fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
@@ -108,15 +108,15 @@ class JdoSpringTransactionScopeListenerTest {
});
// expected post condition
- // new transaction (#4)
+ // reuse existing transaction (#2)
assertEquals(1, repository.allInstances(JdoBook.class).size());
});
assertEquals(2, InteractionBoundaryProbe.totalInteractionsStarted(kvStoreForTesting));
assertEquals(2, InteractionBoundaryProbe.totalInteractionsEnded(kvStoreForTesting));
- assertEquals(1, InteractionBoundaryProbe.totalTransactionsStarted(kvStoreForTesting));
- assertEquals(1, InteractionBoundaryProbe.totalTransactionsEnded(kvStoreForTesting));
+ assertEquals(2, InteractionBoundaryProbe.totalTransactionsStarted(kvStoreForTesting));
+ assertEquals(2, InteractionBoundaryProbe.totalTransactionsEnded(kvStoreForTesting));
}