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/05 18:39:54 UTC

[isis] branch master updated: ISIS-2567: fixes command preparation happening too late

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 b5a3605  ISIS-2567: fixes command preparation happening too late
b5a3605 is described below

commit b5a3605201abe92d42849522b3bb396ea84b1426
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 5 19:39:40 2021 +0100

    ISIS-2567: fixes command preparation happening too late
---
 .../changetracking/EntityChangeTrackerDefault.java      | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

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 274ea55..3a49411 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
@@ -20,6 +20,7 @@ package org.apache.isis.core.transaction.changetracking;
 
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.LongAdder;
 import java.util.function.Function;
 import java.util.stream.Stream;
@@ -162,6 +163,7 @@ implements
         }
 
         entityChangeEventCount.increment();
+        enableCommandPublishing();
 
         if(!EntityChangePublishingFacet.isPublishingEnabled(adapter.getSpecification())) {
             return false; // ignore entities that are not enabled for entity change publishing
@@ -180,10 +182,9 @@ implements
         whilePublishing();
         postPublishing();
     }
-
+    
     private void whilePublishing() {
         log.debug("about to publish entity changes");
-        prepareCommandPublishing();
         entityPropertyChangePublisher.publishChangedProperties(this);
         entityChangesPublisher.publishChangingEntities(this);
     }
@@ -197,11 +198,12 @@ implements
         numberEntitiesLoaded.reset();
     }
 
-    private void prepareCommandPublishing() {
-        val command = currentInteraction().getCommand();
-        command.updater().setSystemStateChanged(
-                command.isSystemStateChanged()
-                || entityChangeEventCount.longValue() > 0L);
+    private void enableCommandPublishing() {
+        val alreadySet = persitentChangesEncountered.getAndSet(true);
+        if(!alreadySet) {
+            val command = currentInteraction().getCommand();
+            command.updater().setSystemStateChanged(true);
+        }
     }
 
     @Override
@@ -376,6 +378,7 @@ implements
 
     private final LongAdder numberEntitiesLoaded = new LongAdder();
     private final LongAdder entityChangeEventCount = new LongAdder();
+    private final AtomicBoolean persitentChangesEncountered = new AtomicBoolean();
 
     //  -- HELPER