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/03/30 09:06:45 UTC

[isis] branch master updated: ISIS-2573: fixes entity change publishing to happen during pre-commit

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new ff89c30  ISIS-2573: fixes entity change publishing to happen during pre-commit
ff89c30 is described below

commit ff89c305f6bae9bdf2a41a591304ba8a2ca9acaf
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Mar 30 11:06:29 2021 +0200

    ISIS-2573: fixes entity change publishing to happen during pre-commit
---
 .../org/apache/isis/core/runtime/events/_Xray.java |  5 ++--
 .../changetracking/EntityChangeTrackerDefault.java | 11 ++++-----
 .../applayer/ApplicationLayerTestFactory.java      | 28 ++++++----------------
 3 files changed, 15 insertions(+), 29 deletions(-)

diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/_Xray.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/_Xray.java
index 0fa69d5..b411521 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/_Xray.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/_Xray.java
@@ -76,7 +76,8 @@ final class _Xray {
             
             seq.ifPresent(sequence->{
                 val sequenceData = sequence.getData();
-                sequenceData.enter("thread", "tx", "before completion");
+                sequenceData.alias("evb", "EventBus");
+                sequenceData.enter("tx", "evb", "tx: before completion");
             });
             
         });
@@ -111,7 +112,7 @@ final class _Xray {
             
             seq.ifPresent(sequence->{
                 val sequenceData = sequence.getData();
-                sequenceData.exit("tx", "thread", txInfo);
+                sequenceData.enter("tx", "evb", txInfo);
             });
             
         });
diff --git a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
index 0c6545f..711a0ac 100644
--- a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
+++ b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
@@ -31,9 +31,9 @@ import javax.inject.Provider;
 
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Primary;
+import org.springframework.context.event.EventListener;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.event.TransactionalEventListener;
 
 import org.apache.isis.applib.annotation.EntityChangeKind;
 import org.apache.isis.applib.annotation.InteractionScope;
@@ -174,12 +174,11 @@ implements
     }
 
     /**
-     * @apiNote intended to be called during pre-commit of a transaction by the framework internally
+     * TRANSACTION END BOUNDARY
+     * @apiNote intended to be called during before transaction completion by the framework internally
      */
-
-    /** TRANSACTION END BOUNDARY */
-    @TransactionalEventListener(TransactionBeforeCompletionEvent.class)
-    public void onPreCommit(TransactionBeforeCompletionEvent event) {
+    @EventListener(value = TransactionBeforeCompletionEvent.class)
+    public void onTransactionCompleting(TransactionBeforeCompletionEvent event) {
         whilePublishing();
         postPublishing();
     }
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/ApplicationLayerTestFactory.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/ApplicationLayerTestFactory.java
index 0f9f1a9..62d9bcb 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/ApplicationLayerTestFactory.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/ApplicationLayerTestFactory.java
@@ -18,6 +18,12 @@
  */
 package org.apache.isis.testdomain.applayer;
 
+import static org.apache.isis.applib.services.wrapper.control.AsyncControl.returningVoid;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.DynamicTest.dynamicTest;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -28,7 +34,6 @@ import java.util.function.Consumer;
 
 import javax.inject.Inject;
 import javax.inject.Named;
-import javax.inject.Provider;
 import javax.jdo.JDOHelper;
 import javax.jdo.PersistenceManagerFactory;
 
@@ -39,11 +44,6 @@ import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.fail;
-import static org.junit.jupiter.api.DynamicTest.dynamicTest;
-
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.repository.RepositoryService;
@@ -63,7 +63,6 @@ import org.apache.isis.core.metamodel.interactions.managed.PropertyInteraction;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.util.XrayUtil;
-import org.apache.isis.core.transaction.changetracking.EntityChangeTrackerDefault;
 import org.apache.isis.core.transaction.events.TransactionBeforeCompletionEvent;
 import org.apache.isis.testdomain.jdo.JdoTestDomainPersona;
 import org.apache.isis.testdomain.jdo.entities.JdoBook;
@@ -71,14 +70,11 @@ import org.apache.isis.testdomain.jdo.entities.JdoInventory;
 import org.apache.isis.testdomain.jdo.entities.JdoProduct;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
 
-import static org.apache.isis.applib.services.wrapper.control.AsyncControl.returningVoid;
-
+import io.smallrye.common.constraint.Assert;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
 import lombok.val;
 
-import io.smallrye.common.constraint.Assert;
-
 @Component
 @Import({
     ApplicationLayerTestFactory.PreCommitListener.class
@@ -94,7 +90,6 @@ public class ApplicationLayerTestFactory {
     private final PreCommitListener preCommitListener;
     private final InteractionFactory interactionFactory;
     private final InteractionTracker interactionTracker;
-    private final Provider<EntityChangeTrackerDefault> entityChangeTrackerProvider;
     
     @Named("transaction-aware-pmf-proxy")
     private final PersistenceManagerFactory pmf;
@@ -228,9 +223,6 @@ public class ApplicationLayerTestFactory {
             book.setName("Book #2");
             repository.persist(book);
             
-            // trigger publishing of entity changes (flush queue)
-            entityChangeTrackerProvider.get().onPreCommit(null);
-            
         });
         
         preCommitListener.setVerifier(null);
@@ -441,9 +433,6 @@ public class ApplicationLayerTestFactory {
             
             pm.flush();
             
-            // trigger publishing of entity changes (flush queue)
-            entityChangeTrackerProvider.get().onPreCommit(null);
-            
         });
     }
     
@@ -455,9 +444,6 @@ public class ApplicationLayerTestFactory {
             val book = repository.allInstances(JdoBook.class).listIterator().next();
             transactionalBookConsumer.accept(book);
 
-            //FIXME ... should not be required explicitly here
-            // trigger publishing of entity changes (flush queue)
-            entityChangeTrackerProvider.get().onPreCommit(null);
         })
         .optionalElseFail();