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 36bc684  ISIS-2464: semantic renaming audit/dispatch -> publishing (4)
36bc684 is described below

commit 36bc6840472e4f0f98e68f94ebc9b802eea71b42
Author: Andi Huber <[email protected]>
AuthorDate: Fri Nov 20 09:59:15 2020 +0100

    ISIS-2464: semantic renaming audit/dispatch -> publishing (4)
---
 .../org/apache/isis/applib/IsisModuleApplib.java   | 16 +++++-----
 .../org/apache/isis/applib/annotation/Action.java  |  8 ++---
 .../apache/isis/applib/annotation/Property.java    |  8 ++---
 .../isis/applib/services/command/Command.java      |  8 +++--
 .../applib/services/iactn/spi/package-info.java    | 28 ------------------
 .../services/publishing/log/CommandLogger.java     | 34 ++++++++++++++++++++++
 .../EntityChangesLogger.java}                      |  6 ++--
 .../EntityPropertyChangeLogger.java}               |  6 ++--
 .../log/ExecutionLogger.java}                      | 16 +++++-----
 .../applib/services/publishing/package-info.java   | 16 +++++++---
 .../spi/CommandSubscriber.java}                    | 34 +++++-----------------
 .../spi/ExecutionSubscriber.java}                  |  5 ++--
 .../apache/isis/core/config/IsisConfiguration.java | 16 +++++-----
 .../publish/ExecutionDispatchPropertyFacet.java    |  4 +--
 .../services/command/CommandPublisher.java         | 20 +++++++++++++
 ...ispatcher.java => CommandPublisherDefault.java} | 13 +++++----
 .../core/runtime/iactn/InteractionSession.java     |  2 +-
 .../changetracking/EntityChangeTrackerDefault.java |  2 +-
 .../EntityPropertyChangePublisher.java             | 10 ++++---
 .../IsisModuleCoreRuntimeServices.java             |  4 +--
 .../publish/ExecutionDispatcherDefault.java        |  6 ++--
 ...utionListenerToCaptureInteractionsInMemory.java |  4 +--
 ...nerForJdo.java => CommandSubscriberForJdo.java} |  9 ++----
 .../persistence/IsisPersistenceSessionJdoBase.java |  6 ++--
 .../persistence/PersistenceSession5.java           |  3 +-
 .../EntityChangesSubscriberForTesting.java         |  4 +--
 26 files changed, 156 insertions(+), 132 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java 
b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
index 10d1fa2..f012cc6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
@@ -32,16 +32,16 @@ import 
org.apache.isis.applib.mixins.metamodel.Object_objectType;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder_lookup;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder_object;
 import org.apache.isis.applib.services.clock.ClockService;
-import org.apache.isis.applib.services.command.spi.CommandListener;
 import 
org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto;
 import 
org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto;
 import 
org.apache.isis.applib.services.commanddto.processor.spi.CommandDtoProcessorServiceIdentity;
 import org.apache.isis.applib.services.confview.ConfigurationMenu;
-import org.apache.isis.applib.services.iactn.spi.ExecutionLogging;
 import org.apache.isis.applib.services.layout.LayoutServiceMenu;
 import org.apache.isis.applib.services.metamodel.MetaModelServiceMenu;
-import org.apache.isis.applib.services.publishing.logging.EntityChangesLogging;
-import 
org.apache.isis.applib.services.publishing.logging.EntityPropertyChangeLogging;
+import org.apache.isis.applib.services.publishing.log.CommandLogger;
+import org.apache.isis.applib.services.publishing.log.EntityChangesLogger;
+import 
org.apache.isis.applib.services.publishing.log.EntityPropertyChangeLogger;
+import org.apache.isis.applib.services.publishing.log.ExecutionLogger;
 import org.apache.isis.applib.services.session.SessionLoggingServiceLogging;
 import org.apache.isis.schema.IsisModuleSchema;
 
@@ -70,12 +70,12 @@ import org.apache.isis.schema.IsisModuleSchema;
         // @Service's
         ClockService.class,
         CommandDtoProcessorServiceIdentity.class,
-        CommandListener.Null.class,
+        CommandLogger.class,
         ContentMappingServiceForCommandDto.class,
         ContentMappingServiceForCommandsDto.class,
-        EntityChangesLogging.class,
-        EntityPropertyChangeLogging.class,
-        ExecutionLogging.class,
+        EntityChangesLogger.class,
+        EntityPropertyChangeLogger.class,
+        ExecutionLogger.class,
         SessionLoggingServiceLogging.class,
 
 })
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/annotation/Action.java 
b/api/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
index 09f8b61..cbb4a55 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
@@ -27,12 +27,12 @@ import java.lang.annotation.Target;
 
 import org.apache.isis.applib.events.domain.ActionDomainEvent;
 import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.spi.CommandListener;
 import 
org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto;
 import 
org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto;
 import 
org.apache.isis.applib.services.commanddto.processor.CommandDtoProcessor;
 import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.applib.services.iactn.spi.ExecutionListener;
+import org.apache.isis.applib.services.publishing.spi.CommandSubscriber;
+import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 
 /**
  * Domain semantics for domain object collection.
@@ -92,7 +92,7 @@ public @interface Action {
     // end::refguide[]
     /**
      * Whether action invocations, captured as {@link Command}s, 
-     * should be dispatched to {@link CommandListener}s.
+     * should be dispatched to {@link CommandSubscriber}s.
      */
     // tag::refguide[]
     Dispatching commandDispatch()                               // <.>
@@ -141,7 +141,7 @@ public @interface Action {
     // end::refguide[]
     /**
      * Whether {@link Interaction.Execution}s (triggered by action 
invocations), should
-     * be dispatched to {@link ExecutionListener}s.
+     * be dispatched to {@link ExecutionSubscriber}s.
      */
     // tag::refguide[]
     Dispatching executionDispatch()                           // <.>
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java 
b/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
index 2c50dfb..5f7055a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
@@ -27,12 +27,12 @@ import java.lang.annotation.Target;
 
 import org.apache.isis.applib.events.domain.PropertyDomainEvent;
 import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.spi.CommandListener;
 import 
org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto;
 import 
org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto;
 import 
org.apache.isis.applib.services.commanddto.processor.CommandDtoProcessor;
 import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.applib.services.iactn.spi.ExecutionListener;
+import org.apache.isis.applib.services.publishing.spi.CommandSubscriber;
+import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.applib.spec.Specification;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
@@ -55,7 +55,7 @@ public @interface Property {
     // end::refguide[]
     /**
      * Whether property edits, captured as {@link Command}s, 
-     * should be dispatched to {@link CommandListener}s.
+     * should be dispatched to {@link CommandSubscriber}s.
      */
     // tag::refguide[]
     Dispatching commandDispatch()                               // <.>
@@ -123,7 +123,7 @@ public @interface Property {
     /**
      * Whether {@link Interaction.Execution}s 
      * (triggered property edits), should be dispatched to 
-     * {@link ExecutionListener}s.
+     * {@link ExecutionSubscriber}s.
      */
     // tag::refguide[]
     Dispatching executionDispatch()                             // <.>
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/command/Command.java 
b/api/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
index d6e741c..2e53e26 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
@@ -34,6 +34,7 @@ import org.apache.isis.schema.cmd.v2.CommandDto;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.ToString;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
@@ -70,6 +71,7 @@ import lombok.extern.log4j.Log4j2;
  * </p>
  */
 @RequiredArgsConstructor
+@ToString
 @Log4j2
 // tag::refguide[]
 public class Command implements HasUniqueId, HasUsername, HasCommandDto {
@@ -136,6 +138,7 @@ public class Command implements HasUniqueId, HasUsername, 
HasCommandDto {
      *     from the provided {@link CommandDto}.
      * </p>
      */
+    @ToString.Exclude
     // tag::refguide[]
     @Getter
     private CommandDto commandDto;              // <.>
@@ -177,6 +180,7 @@ public class Command implements HasUniqueId, HasUsername, 
HasCommandDto {
      * @see WrapperFactory#asyncWrapMixin(Class, Object, AsyncControl)
      *
      */
+    @ToString.Exclude
     // tag::refguide[]
     @Getter
     private Command parent;                     // <.>
@@ -252,7 +256,7 @@ public class Command implements HasUniqueId, HasUsername, 
HasCommandDto {
      * <p>
      *     This can be used as a hint to decide whether to persist the command
      *     to a datastore, for example for auditing (though
-     *     {@link org.apache.isis.applib.services.iactn.spi.ExecutionListener} 
is
+     *     {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber} is
      *     an alternative for that use case) or so that it can be retrieved
      *     and replayed on another system, eg for regression testing.
      * </p>
@@ -266,7 +270,7 @@ public class Command implements HasUniqueId, HasUsername, 
HasCommandDto {
 
     /**
      * Whether this command has been enabled for dispatching, 
-     * that is {@link CommandListener}s will be notified when this Command 
completes.
+     * that is {@link CommandSubscriber}s will be notified when this Command 
completes.
      */
     // tag::refguide[]
     @Getter
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/package-info.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/package-info.java
deleted file mode 100644
index e05b8b7..0000000
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/package-info.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  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.
- */
-
-/**
- * The {@link org.apache.isis.applib.services.iactn.spi.ExecutionListener} API 
is intended for coarse-grained
- * publish/subscribe for system-to-system interactions, from Apache Isis to 
some other system. Events that can be
- * published are action invocations/property edits, and changed objects. A 
typical use case is to publish onto a
- * pub/sub bus such as ActiveMQ with Camel to keep other systems up to date.
- *
- *
- */
-package org.apache.isis.applib.services.iactn.spi;
\ No newline at end of file
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/CommandLogger.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/CommandLogger.java
new file mode 100644
index 0000000..cc26abb
--- /dev/null
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/CommandLogger.java
@@ -0,0 +1,34 @@
+package org.apache.isis.applib.services.publishing.log;
+
+import javax.inject.Named;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.publishing.spi.CommandSubscriber;
+
+import lombok.extern.log4j.Log4j2;
+
+@Service
+@Named("isisApplib.CommandLogger")
+@Order(OrderPrecedence.LATE)
+@Primary
+@Qualifier("Logging")
+@Log4j2
+public class CommandLogger implements CommandSubscriber {
+
+    @Override
+    public boolean isEnabled() {
+        return log.isDebugEnabled();
+    }
+
+    @Override
+    public void onCompleted(Command command) {
+        log.debug("completed: {}", command);
+    }
+
+}
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/publishing/logging/EntityChangesLogging.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/EntityChangesLogger.java
similarity index 91%
rename from 
api/applib/src/main/java/org/apache/isis/applib/services/publishing/logging/EntityChangesLogging.java
rename to 
api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/EntityChangesLogger.java
index 407bb0e..54977f2 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/publishing/logging/EntityChangesLogging.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/EntityChangesLogger.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.services.publishing.logging;
+package org.apache.isis.applib.services.publishing.log;
 
 import javax.inject.Named;
 
@@ -34,12 +34,12 @@ import org.apache.isis.schema.chg.v2.ChangesDto;
 import lombok.extern.log4j.Log4j2;
 
 @Service
-@Named("isisApplib.EntityChangesLogging")
+@Named("isisApplib.EntityChangesLogger")
 @Order(OrderPrecedence.LATE)
 @Primary
 @Qualifier("Logging")
 @Log4j2
-public class EntityChangesLogging implements EntityChangesSubscriber {
+public class EntityChangesLogger implements EntityChangesSubscriber {
 
     @Override
     public boolean isEnabled() {
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/publishing/logging/EntityPropertyChangeLogging.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/EntityPropertyChangeLogger.java
similarity index 89%
rename from 
api/applib/src/main/java/org/apache/isis/applib/services/publishing/logging/EntityPropertyChangeLogging.java
rename to 
api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/EntityPropertyChangeLogger.java
index 4e63bcb..fcf05ae 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/publishing/logging/EntityPropertyChangeLogging.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/EntityPropertyChangeLogger.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.services.publishing.logging;
+package org.apache.isis.applib.services.publishing.log;
 
 import javax.inject.Named;
 
@@ -32,12 +32,12 @@ import 
org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscr
 import lombok.extern.log4j.Log4j2;
 
 @Service
-@Named("isisApplib.EntityPropertyChangeLogging")
+@Named("isisApplib.EntityPropertyChangeLogger")
 @Order(OrderPrecedence.LATE)
 @Primary
 @Qualifier("logging")
 @Log4j2
-public class EntityPropertyChangeLogging implements 
EntityPropertyChangeSubscriber {
+public class EntityPropertyChangeLogger implements 
EntityPropertyChangeSubscriber {
 
     @Override
     public boolean isEnabled() {
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/ExecutionLogging.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/ExecutionLogger.java
similarity index 84%
rename from 
api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/ExecutionLogging.java
rename to 
api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/ExecutionLogger.java
index 24635cf..da30481 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/ExecutionLogging.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/log/ExecutionLogger.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.services.iactn.spi;
+package org.apache.isis.applib.services.publishing.log;
 
 import javax.inject.Named;
 
@@ -27,26 +27,28 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.iactn.Interaction;
+import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.applib.util.schema.InteractionDtoUtils;
 import org.apache.isis.schema.ixn.v2.InteractionDto;
 
 import lombok.extern.log4j.Log4j2;
 
 @Service
-@Named("isisApplib.ExecutionLogging")
+@Named("isisApplib.ExecutionLogger")
 @Order(OrderPrecedence.LATE)
 @Primary
 @Qualifier("Logging")
 @Log4j2
-public class ExecutionLogging implements ExecutionListener {
+public class ExecutionLogger implements ExecutionSubscriber {
 
     @Override
+    public boolean isEnabled() {
+        return log.isDebugEnabled();
+    }
+    
+    @Override
     public void onExecution(final Interaction.Execution<?, ?> execution) {
 
-        if(!log.isDebugEnabled()) {
-            return;
-        }
-
         final InteractionDto interactionDto =
                 InteractionDtoUtils.newInteractionDto(execution, 
InteractionDtoUtils.Strategy.DEEP);
 
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/publishing/package-info.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/package-info.java
index 246e465..db645b8 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/publishing/package-info.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/package-info.java
@@ -18,9 +18,17 @@
  */
 
 /**
- * The {@link 
org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber} 
auditing service provides a simple mechanism to
- * capture changes to data. It is called for each property that has changed on 
any domain object, as a set of pre- and post-values.
- *
- *
+ * The {@link 
org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber} 
+ * service provides a simple mechanism to capture changes to data. 
+ * It is called for each property that has changed on any entity object 
+ * (when enabled for publishing), as a set of pre- and post-values.
+ * 
+ * The {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber} API is 
intended 
+ * for coarse-grained publish/subscribe for system-to-system interactions, 
from Apache Isis 
+ * to some other system. Events that can be published are action 
invocations/property edits, 
+ * and changed objects. A typical use case is to publish onto a pub/sub bus 
such as 
+ * ActiveMQ with Camel to keep other systems up to date.
+ * 
+ * TODO v2 publishing/subscribing now has even more participants
  */
 package org.apache.isis.applib.services.publishing;
\ No newline at end of file
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/command/spi/CommandListener.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/spi/CommandSubscriber.java
similarity index 59%
rename from 
api/applib/src/main/java/org/apache/isis/applib/services/command/spi/CommandListener.java
rename to 
api/applib/src/main/java/org/apache/isis/applib/services/publishing/spi/CommandSubscriber.java
index d700ce4..64b4d06 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/command/spi/CommandListener.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/spi/CommandSubscriber.java
@@ -16,22 +16,19 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.services.command.spi;
+package org.apache.isis.applib.services.publishing.spi;
 
-import javax.inject.Named;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Service;
-
-import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.commons.having.HasEnabling;
 
 /**
- * SPI
+ * Part of the <i>Publishing SPI</i>. A component to receive {@link Command}s 
+ * (with publishing enabled) that just completed.
+ *  
+ * @since 2.0
  */
 // tag::refguide[]
-public interface CommandListener {
+public interface CommandSubscriber extends HasEnabling {
 
     /**
      * Notifies that the command has completed.
@@ -42,22 +39,7 @@ public interface CommandListener {
      * </p>
      */
     // tag::refguide[]
-    void onComplete(final Command command);           // <.>
-
-    /**
-     * At least one implementation is required to satisfy injection point
-     * internal to the framework.
-     */
-    @Service
-    @Named("isisApplib.CommandServiceListenerNull")
-    @Order(OrderPrecedence.LATE)
-    @Qualifier("Null")
-    public static class Null implements CommandListener {
-
-        @Override
-        public void onComplete(Command command) {
+    void onCompleted(Command command);           // <.>
 
-        }
-    }
 }
 // end::refguide[]
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/ExecutionListener.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/spi/ExecutionSubscriber.java
similarity index 91%
rename from 
api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/ExecutionListener.java
rename to 
api/applib/src/main/java/org/apache/isis/applib/services/publishing/spi/ExecutionSubscriber.java
index 2d10b6b..b224b1d 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/iactn/spi/ExecutionListener.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/publishing/spi/ExecutionSubscriber.java
@@ -16,10 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.services.iactn.spi;
+package org.apache.isis.applib.services.publishing.spi;
 
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.util.schema.InteractionDtoUtils;
+import org.apache.isis.commons.having.HasEnabling;
 
 /**
  * SPI that allows individual interactions (action invocations or property 
edits) to be
@@ -27,7 +28,7 @@ import org.apache.isis.applib.util.schema.InteractionDtoUtils;
  * Note that re-publishing is not part of this SPI.
  */
 // tag::refguide[]
-public interface ExecutionListener {
+public interface ExecutionSubscriber extends HasEnabling {
 
     // end::refguide[]
     /**
diff --git 
a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java 
b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index 713424b..fbeaba2 100644
--- 
a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ 
b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -185,10 +185,10 @@ public class IsisConfiguration {
 
                 /**
                  * The default for whether the identities of changed objects 
should be sent through to the
-                 * {@link 
org.apache.isis.applib.services.iactn.spi.ExecutionListener} for publishing.
+                 * {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber} for 
publishing.
                  *
                  * <p>
-                 *     The service's {@link 
org.apache.isis.applib.services.iactn.spi.ExecutionListener#publish(EntityChanges)
 publish}
+                 *     The service's {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber#publish(EntityChanges)
 publish}
                  *     method is called only once per transaction, with {@link 
EntityChanges} collecting details of
                  *     all changed domain objects.
                  * </p>
@@ -654,7 +654,7 @@ public class IsisConfiguration {
                  * The default for whether action invocations should be reified
                  * as a {@link 
org.apache.isis.applib.services.command.Command},
                  * to be sent to any registered
-                 * {@link 
org.apache.isis.applib.services.command.spi.CommandListener}s,
+                 * {@link 
org.apache.isis.applib.services.publishing.spi.CommandSubscriber}s,
                  * either for auditing or for replayed against a secondary
                  * system, eg for regression testing.
                  *
@@ -714,10 +714,10 @@ public class IsisConfiguration {
 
                 /**
                  * The default for whether action invocations should be sent 
through to the
-                 * {@link 
org.apache.isis.applib.services.iactn.spi.ExecutionListener} for publishing.
+                 * {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber} for 
publishing.
                  *
                  * <p>
-                 *     The service's {@link 
org.apache.isis.applib.services.iactn.spi.ExecutionListener#publish(Interaction.Execution)
 publish}
+                 *     The service's {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber#publish(Interaction.Execution)
 publish}
                  *     method is called only once per transaction, with
                  *     {@link Interaction.Execution} collecting details of
                  *     the identity of the target object, the action invoked, 
the action arguments and the returned
@@ -835,7 +835,7 @@ public class IsisConfiguration {
                  * The default for whether property edits should be reified
                  * as a {@link 
org.apache.isis.applib.services.command.Command},
                  * to be sent to any registered
-                 * {@link 
org.apache.isis.applib.services.command.spi.CommandListener}s,
+                 * {@link 
org.apache.isis.applib.services.publishing.spi.CommandSubscriber}s,
                  * either for auditing or for replayed against a secondary
                  * system, eg for regression testing.
                  *
@@ -848,10 +848,10 @@ public class IsisConfiguration {
 
                 /**
                  * The default for whether property edits should be sent 
through to the
-                 * {@link 
org.apache.isis.applib.services.iactn.spi.ExecutionListener} for publishing.
+                 * {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber} for 
publishing.
                  *
                  * <p>
-                 *     The service's {@link 
org.apache.isis.applib.services.iactn.spi.ExecutionListener#publish(Interaction.Execution)
 publish}
+                 *     The service's {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber#publish(Interaction.Execution)
 publish}
                  *     method is called only once per transaction, with
                  *     {@link Interaction.Execution} collecting details of
                  *     the identity of the target object, the property edited, 
and the new value of the property.
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/publish/ExecutionDispatchPropertyFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/publish/ExecutionDispatchPropertyFacet.java
index 42a59c7..4f35b0b 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/publish/ExecutionDispatchPropertyFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/publish/ExecutionDispatchPropertyFacet.java
@@ -20,7 +20,7 @@
 package org.apache.isis.core.metamodel.facets.properties.publish;
 
 import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.applib.services.iactn.spi.ExecutionListener;
+import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.services.publishing.ExecutionDispatcher;
@@ -31,7 +31,7 @@ import lombok.val;
 /**
  * Indicates that editing of the property, captured by an {@link 
Interaction.Execution},
  * should be dispatched via {@link ExecutionDispatcher} to all subscribed 
- * {@link ExecutionListener}s.
+ * {@link ExecutionSubscriber}s.
  */
 public interface ExecutionDispatchPropertyFacet extends Facet {
     
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandPublisher.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandPublisher.java
new file mode 100644
index 0000000..a02d7f3
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandPublisher.java
@@ -0,0 +1,20 @@
+package org.apache.isis.core.metamodel.services.command;
+
+import org.apache.isis.applib.services.command.Command;
+
+import lombok.NonNull;
+
+public interface CommandPublisher {
+
+    /**
+     * &quot;Complete&quot; the command, providing an opportunity ot persist
+     * a memento of the command if the
+     * {@link Command#isSystemStateChanged() system state has changed}.
+     *
+     * <p>
+     *     The framework will automatically have set the {@link 
Command#getCompletedAt()} property.
+     * </p>
+     */
+    void complete(@NonNull Command command);
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandDispatcher.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandPublisherDefault.java
similarity index 85%
rename from 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandDispatcher.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandPublisherDefault.java
index d455613..c5ebbce 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandDispatcher.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandPublisherDefault.java
@@ -30,19 +30,19 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.spi.CommandListener;
+import org.apache.isis.applib.services.publishing.spi.CommandSubscriber;
 
 import lombok.NonNull;
 import lombok.extern.log4j.Log4j2;
 
 @Service
-@Named("isisMetaModel.CommandDispatcher")
+@Named("isisMetaModel.CommandPublisher")
 @Order(OrderPrecedence.MIDPOINT)
 @Primary
 @Qualifier("Internal")
 @Log4j2
 // tag::refguide[]
-public class CommandDispatcher {
+public class CommandPublisherDefault implements CommandPublisher {
 
     // end::refguide[]
     /**
@@ -55,6 +55,7 @@ public class CommandDispatcher {
      * </p>
      */
     // tag::refguide[]
+    @Override
     public void complete(final @NonNull Command command) {   // <.>
         // ...
     // end::refguide[]
@@ -67,15 +68,15 @@ public class CommandDispatcher {
             return;
         }
 
-        log.debug("complete: {}, systemStateChanged {}",
+        log.debug("completed: {}, systemStateChanged {}",
                 command.getLogicalMemberIdentifier(),
                 command.isSystemStateChanged());
 
     // tag::refguide[]
-        commandListeners.forEach(commandListener -> 
commandListener.onComplete(command));
+        subscribers.forEach(commandListener -> 
commandListener.onCompleted(command));
     }
 
-    @Inject List<CommandListener> commandListeners;
+    @Inject List<CommandSubscriber> subscribers;
 
 }
 // end::refguide[]
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/iactn/InteractionSession.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/iactn/InteractionSession.java
index e1bd91b..a75fc45 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/iactn/InteractionSession.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/iactn/InteractionSession.java
@@ -48,7 +48,7 @@ import lombok.Setter;
  *     captures the details of an action invocation or property edit (along
  *     with any nested calls to other actions through wrapper factory) for
  *     the purpose of publishing using
- *     {@link org.apache.isis.applib.services.iactn.spi.ExecutionListener}.
+ *     {@link 
org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber}.
  * </p>
  *
  * @see IsisInteractionFactory
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java
index 336688f..1b652da 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java
@@ -186,7 +186,7 @@ implements
         case AUDITING:
             log.debug("about to dispatch audit entries and entity changes");
             prepareAuditDispatching();
-            entityAuditDispatcher.dispatchEntityAudits(this);
+            entityAuditDispatcher.publishEntityAudits(this);
             changingEntitiesDispatcher.publishChangingEntities(this);
             break;
         case POST_AUDITING:
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityPropertyChangePublisher.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityPropertyChangePublisher.java
index 1cf463c..588be88 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityPropertyChangePublisher.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityPropertyChangePublisher.java
@@ -70,14 +70,16 @@ public class EntityPropertyChangePublisher {
                 .filter(HasEnabling::isEnabled);
     }
 
-    public void dispatchEntityAudits(final 
HasEnlistedEntityPropertyChangeRecords hasEnlistedForAuditing) {
-        if(!canDispatch()) { 
+    public void publishEntityAudits(
+            final HasEnlistedEntityPropertyChangeRecords 
hasEnlistedEntityPropertyChangeRecords) {
+        
+        if(!canPublish()) { 
             return; 
         }
         
         val currentUser = userService.getUser().getName();
         val currentTime = clockService.nowAsJavaSqlTimestamp();
-        val propertyChangeRecords = 
hasEnlistedForAuditing.getPropertyChangeRecords();
+        val propertyChangeRecords = 
hasEnlistedEntityPropertyChangeRecords.getPropertyChangeRecords();
     
         log.debug("about to process {} property changes", 
()->propertyChangeRecords.size());
         
@@ -88,7 +90,7 @@ public class EntityPropertyChangePublisher {
 
     // -- HELPER
     
-    private boolean canDispatch() {
+    private boolean canPublish() {
         return enabledSubscribers.isNotEmpty();
     }
     
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/IsisModuleCoreRuntimeServices.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/IsisModuleCoreRuntimeServices.java
index afc4742..d2de80a 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/IsisModuleCoreRuntimeServices.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/IsisModuleCoreRuntimeServices.java
@@ -27,7 +27,7 @@ import org.springframework.core.OrderComparator;
 import org.springframework.core.annotation.AnnotationAwareOrderComparator;
 
 import org.apache.isis.core.codegen.bytebuddy.IsisModuleCoreCodegenByteBuddy;
-import org.apache.isis.core.metamodel.services.command.CommandDispatcher;
+import org.apache.isis.core.metamodel.services.command.CommandPublisherDefault;
 import org.apache.isis.core.runtime.IsisModuleCoreRuntime;
 import org.apache.isis.core.runtimeservices.bookmarks.BookmarkServiceDefault;
 import 
org.apache.isis.core.runtimeservices.command.CommandDtoServiceInternalDefault;
@@ -73,7 +73,7 @@ import 
org.apache.isis.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefaul
         EntityChangesPublisherDefault.class,
         CommandDtoServiceInternalDefault.class,
         CommandExecutorServiceDefault.class,
-        CommandDispatcher.class,
+        CommandPublisherDefault.class,
         ConfigurationViewServiceDefault.class,
         EmailNotificationServiceDefault.class,
         EmailServiceDefault.class,
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ExecutionDispatcherDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ExecutionDispatcherDefault.java
index ab57ba1..ff2c4bb 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ExecutionDispatcherDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ExecutionDispatcherDefault.java
@@ -34,14 +34,14 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.IsisInteractionScope;
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.applib.services.iactn.spi.ExecutionListener;
+import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.core.metamodel.services.publishing.ExecutionDispatcher;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 /**
- * Wrapper around {@link ExecutionListener}.  Is a no-op if there is no 
injected service.
+ * Wrapper around {@link ExecutionSubscriber}.  Is a no-op if there is no 
injected service.
  */
 @Service
 @Named("isisRuntimeServices.ExecutionDispatcherDefault")
@@ -54,7 +54,7 @@ import lombok.val;
 public class ExecutionDispatcherDefault 
 implements ExecutionDispatcher {
 
-    private final List<ExecutionListener> executionListeners;
+    private final List<ExecutionSubscriber> executionListeners;
 
     @Override
     public void dispatchActionInvoking(final Interaction.Execution<?,?> 
execution) {
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/_interactions/ExecutionListenerToCaptureInteractionsInMemory.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/_interactions/ExecutionListenerToCaptureInteractionsInMemory.java
index f592205..bbd87a1 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/_interactions/ExecutionListenerToCaptureInteractionsInMemory.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/_interactions/ExecutionListenerToCaptureInteractionsInMemory.java
@@ -25,7 +25,7 @@ import java.util.stream.Stream;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.applib.services.iactn.spi.ExecutionListener;
+import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.applib.util.schema.InteractionDtoUtils;
 import org.apache.isis.schema.ixn.v2.InteractionDto;
 
@@ -33,7 +33,7 @@ import lombok.val;
 
 //tag::class[]
 @Service
-public class ExecutionListenerToCaptureInteractionsInMemory implements 
ExecutionListener {
+public class ExecutionListenerToCaptureInteractionsInMemory implements 
ExecutionSubscriber {
 
     private final List<InteractionDto> executions = new ArrayList<>();
 
diff --git 
a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandServiceListenerForJdo.java
 
b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandSubscriberForJdo.java
similarity index 91%
rename from 
extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandServiceListenerForJdo.java
rename to 
extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandSubscriberForJdo.java
index d902cd8..6cbe4fe 100644
--- 
a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandServiceListenerForJdo.java
+++ 
b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandSubscriberForJdo.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.extensions.commandlog.impl;
 
-import java.util.Optional;
-
 import javax.inject.Inject;
 import javax.inject.Named;
 
@@ -29,11 +27,10 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.spi.CommandListener;
+import org.apache.isis.applib.services.publishing.spi.CommandSubscriber;
 import org.apache.isis.applib.util.JaxbUtil;
 import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdo;
 import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdoRepository;
-import org.apache.isis.schema.cmd.v2.CommandDto;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -45,12 +42,12 @@ import lombok.extern.log4j.Log4j2;
 @Qualifier("Jdo")
 @Log4j2
 @RequiredArgsConstructor
-public class CommandServiceListenerForJdo implements CommandListener {
+public class CommandSubscriberForJdo implements CommandSubscriber {
 
     @Inject final CommandJdoRepository commandJdoRepository;
 
     @Override
-    public void onComplete(Command command) {
+    public void onCompleted(Command command) {
 
         if(!command.isSystemStateChanged()) {
             return;
diff --git 
a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdoBase.java
 
b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdoBase.java
index e3cf7cc..37b4198 100644
--- 
a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdoBase.java
+++ 
b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdoBase.java
@@ -36,7 +36,7 @@ import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.commons.ToString;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.services.command.CommandDispatcher;
+import org.apache.isis.core.metamodel.services.command.CommandPublisher;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -62,7 +62,7 @@ abstract class IsisPersistenceSessionJdoBase implements 
IsisPersistenceSessionJd
     @Getter protected final MetaModelContext metaModelContext;
     protected final ServiceInjector serviceInjector;
     protected final ServiceRegistry serviceRegistry;
-    protected final CommandDispatcher commandDispatcher;
+    protected final CommandPublisher commandPublisher;
     protected final FactoryService factoryService;
     protected final ClockService clockService;
     protected final UserService userService;
@@ -113,7 +113,7 @@ abstract class IsisPersistenceSessionJdoBase implements 
IsisPersistenceSessionJd
         this.configuration = metaModelContext.getConfiguration();
         this.specificationLoader = metaModelContext.getSpecificationLoader();
 
-        this.commandDispatcher = lookupService(CommandDispatcher.class);
+        this.commandPublisher = lookupService(CommandPublisher.class);
         this.factoryService = lookupService(FactoryService.class);
         this.clockService = lookupService(ClockService.class);
         this.userService = lookupService(UserService.class);
diff --git 
a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
 
b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
index a758062..dd3922d 100644
--- 
a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
+++ 
b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
@@ -197,6 +197,7 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
         this.state = State.CLOSED;
     }
 
+    @Deprecated //TODO[2464] should be the responsibility of the internal 
Interaction lifecycle handler 
     private void completeCommandFromInteractionAndClearDomainEvents() {
 
         val interaction = 
interactionContextProvider.get().getInteractionElseFail();
@@ -221,7 +222,7 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
             command.updater().setCompletedAt(completedAt);
         }
 
-        commandDispatcher.complete(command);
+        commandPublisher.complete(command);
 
         interaction.clear();
     }
diff --git 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/EntityChangesSubscriberForTesting.java
 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/EntityChangesSubscriberForTesting.java
index 84a1b7d..55054b5 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/EntityChangesSubscriberForTesting.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/EntityChangesSubscriberForTesting.java
@@ -27,9 +27,9 @@ import javax.inject.Inject;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.services.iactn.Interaction.Execution;
-import org.apache.isis.applib.services.iactn.spi.ExecutionListener;
 import org.apache.isis.applib.services.publishing.spi.EntityChanges;
 import org.apache.isis.applib.services.publishing.spi.EntityChangesSubscriber;
+import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.applib.util.schema.ChangesDtoUtils;
 import org.apache.isis.applib.util.schema.MemberExecutionDtoUtils;
 import org.apache.isis.commons.collections.Can;
@@ -42,7 +42,7 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class EntityChangesSubscriberForTesting 
 implements 
-    ExecutionListener,
+    ExecutionSubscriber,
     EntityChangesSubscriber {
 
     @Inject private KVStoreForTesting kvStore;

Reply via email to