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));
 
     }