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

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

commit f537ae484bd66555f1bea826d4d63f6283a42d8b
Author: danhaywood <[email protected]>
AuthorDate: Sun Aug 23 17:49:54 2020 +0100

    ISIS-2222: wip Action#command
---
 .../demoapp/dom/annotDomain/Action/ActionMenu.java |  14 ++-
 .../dom/annotDomain/Action/command/.gitkeep        |   0
 .../ActionCommandDisabledMetaAnnotation.java}      |   8 +-
 .../ActionCommandEnabledMetaAnnotation.java}       |   8 +-
 .../command/ActionCommandJdo-description.adoc      | 140 +++++++++++++++++++++
 .../ActionCommandJdo.java}                         |  61 ++++++---
 .../ActionCommandJdo.layout.xml}                   |   5 +-
 .../Action/command/ActionCommandJdoEntities.java   |  31 +++++
 .../command/ActionCommandJdoSeedService.java       |  39 ++++++
 .../ActionCommandJdo_mixinUpdateProperty.java      |  38 ++++++
 ...mmandJdo_mixinUpdatePropertyMetaAnnotation.java |  37 ++++++
 ...ixinUpdatePropertyMetaAnnotationOverridden.java |  41 ++++++
 .../ActionCommandJdo_backgroundCommands.java       |  39 ++++++
 .../ActionCommandJdo_clearBackgroundCommands.java  |  38 ++++++
 .../ActionCommandJdo_clearForegroundCommands.java  |  38 ++++++
 ...ActionCommandJdo_executeBackgroundCommands.java |  39 ++++++
 .../ActionCommandJdo_foregroundCommands.java       |  39 ++++++
 .../spiimpl/CommandServiceSpiForActions.java       |  95 ++++++++++++++
 .../ActionPublishingDisabledMetaAnnotation.java    |   3 +-
 .../Action/publishing/ActionPublishingJdo.java     |   6 +-
 .../publishing/ActionPublishingJdo.layout.xml      |   1 -
 .../Property/publishing/PropertyPublishingJdo.java |   4 +-
 .../publishing/PropertyPublishingJdo.layout.xml    |   1 -
 .../annotLayout/ActionLayout/ActionLayoutMenu.java |   2 +-
 .../src/main/java/demoapp/dom/menubars.layout.xml  |   1 +
 25 files changed, 693 insertions(+), 35 deletions(-)

diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/ActionMenu.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/ActionMenu.java
index e64750a..14c7cde 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/ActionMenu.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/ActionMenu.java
@@ -35,6 +35,8 @@ import lombok.extern.log4j.Log4j2;
 import demoapp.dom._infra.samples.NameSamples;
 import demoapp.dom.annotDomain.Action.associateWith.ActionAssociateWithVm;
 import 
demoapp.dom.annotDomain.Action.associateWith.child.ActionAssociateWithChildVm;
+import demoapp.dom.annotDomain.Action.command.ActionCommandJdo;
+import demoapp.dom.annotDomain.Action.command.ActionCommandJdoEntities;
 import demoapp.dom.annotDomain.Action.domainEvent.ActionDomainEventVm;
 import demoapp.dom.annotDomain.Action.hidden.ActionHiddenVm;
 import demoapp.dom.annotDomain.Action.publishing.ActionPublishingJdo;
@@ -67,6 +69,13 @@ public class ActionMenu {
     }
 
     @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(cssClassFa="fa-terminal", describedAs = "Action invocation 
intentions as XML")
+    public ActionCommandJdo command(){
+        return actionCommandJdoEntities.first();
+    }
+
+
+    @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-asterisk", describedAs = "Decouples 
interaction of actions")
     public ActionDomainEventVm domainEvent(){
         return new ActionDomainEventVm("value");
@@ -79,7 +88,7 @@ public class ActionMenu {
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    @ActionLayout(cssClassFa="fa-book", describedAs = "Property changed events 
as XML")
+    @ActionLayout(cssClassFa="fa-book", describedAs = "Action invocation 
events as XML")
     public ActionPublishingJdo publishing(){
         return actionPublishingJdoEntities.first();
     }
@@ -101,6 +110,9 @@ public class ActionMenu {
     ActionPublishingJdoEntities actionPublishingJdoEntities;
 
     @Inject
+    ActionCommandJdoEntities actionCommandJdoEntities;
+
+    @Inject
     NameSamples samples;
 
 }
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/.gitkeep
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandDisabledMetaAnnotation.java
similarity index 62%
copy from 
examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
copy to 
examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandDisabledMetaAnnotation.java
index 542c723..5cf894b 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandDisabledMetaAnnotation.java
@@ -1,4 +1,4 @@
-package demoapp.dom.annotDomain.Action.publishing;
+package demoapp.dom.annotDomain.Action.command;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Inherited;
@@ -6,17 +6,19 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.CommandReification;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.Publishing;
 
 //tag::class[]
-@Property(publishing = Publishing.DISABLED)     // <.>
+@Action(command = CommandReification.DISABLED)  // <.>
 @Inherited
 @Target({
         ElementType.TYPE, ElementType.METHOD    // <.>
 })
 @Retention(RetentionPolicy.RUNTIME)
-public @interface ActionPublishingDisabledMetaAnnotation {
+public @interface ActionCommandDisabledMetaAnnotation {
 
 }
 //end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandEnabledMetaAnnotation.java
similarity index 65%
copy from 
examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
copy to 
examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandEnabledMetaAnnotation.java
index 542c723..62e0d52 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandEnabledMetaAnnotation.java
@@ -1,4 +1,4 @@
-package demoapp.dom.annotDomain.Action.publishing;
+package demoapp.dom.annotDomain.Action.command;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Inherited;
@@ -6,17 +6,17 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Publishing;
 
 //tag::class[]
-@Property(publishing = Publishing.DISABLED)     // <.>
+@Action(publishing = Publishing.ENABLED)        // <.>
 @Inherited
 @Target({
         ElementType.TYPE, ElementType.METHOD    // <.>
 })
 @Retention(RetentionPolicy.RUNTIME)
-public @interface ActionPublishingDisabledMetaAnnotation {
+public @interface ActionCommandEnabledMetaAnnotation {
 
 }
 //end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo-description.adoc
new file mode 100644
index 0000000..673c469
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo-description.adoc
@@ -0,0 +1,140 @@
+CAUTION: TODO - to document
+
+//The `publishing` semantic specifies that the invocation of an object action 
should be published to registered implementation(s) of 
link:https://isis.apache.org/refguide/2.0.0-M3/applib-svc/PublisherService.html#spi[`PublisherService`
 SPI].
+//This is performed _after_ the action has been invoked.
+//
+//The publishing from the framework to the SPI is in-memory.
+//A typical SPI implementation would then publish over the network, or perhaps 
store in a database.
+//(Note that the framework provides an 
link:https://isis.apache.org/mappings/2.0.0-M3/outbox-publisher/about.html[out-of-the-box
 implementation] of the 
link:https://microservices.io/patterns/data/transactional-outbox.html[outbox 
pattern]).
+//
+//The semantic can be specified using either the `@Action` annotation, or 
through a meta-annotation.
+//
+//NOTE: The demo shows publishing of entities, as this is much more common use 
case than publishing a view model.
+//
+//== Annotated
+//
+//The `publisher` semantic can be specified explicitly using an annotation 
through `@Action#publishing()`:
+//
+//* it can be applied to an action:
+//+
+//[source,java,indent=0]
+//----
+//include::ActionPublishingJdo.java[tags=annotation]
+//----
+//<.> explicitly specifies that invoking the action should be published.
+//
+//* or to a mixin:
+//+
+//[source,java,indent=0]
+//----
+//include::ActionPublishingJdo_mixinUpdateProperty.java[tags=class]
+//----
+//<.> explicitly specifies that invoking the mixin action should be published.
+//
+//
+//== Meta-annotated
+//
+//The `publishing` semantic can also be specified using a custom 
meta-annotation:
+//
+//* the meta-annotation is defined as:
+//+
+//[source,java,indent=0]
+//----
+//include::ActionPublishingEnabledMetaAnnotation.java[tags=class]
+//----
+//<.> annotated for an action
+//<.> annotation can be applied to an action method or to a mixin
+//
+//* and can be applied to an action:
+//+
+//[source,java,indent=0]
+//----
+//include::ActionPublishingJdo.java[tags=meta-annotation]
+//----
+//<.> semantic is inherited from the meta-annotation
+//
+//* or to a mixin:
+//+
+//[source,java,indent=0]
+//----
+//include::ActionPublishingJdo_mixinUpdatePropertyMetaAnnotation.java[tags=class]
+//----
+//<.> semantic is inherited from the meta-annotation
+//
+//
+//=== Meta-annotated Overridden
+//
+//The meta-annotation can itself be overridden:
+//
+//* for an action:
+//+
+//[source,java,indent=0]
+//----
+//include::ActionPublishingJdo.java[tags=meta-annotation-overridden]
+//----
+//<.> semantic from meta-annotation ...
+//<.> \... is overridden by the `@Action` annotation
+//
+//* or on a mixin:
+//+
+//[source,java,indent=0]
+//----
+//include::ActionPublishingJdo_mixinUpdatePropertyMetaAnnotationOverridden.java[tags=class]
+//----
+//<.> semantic from meta-annotation ...
+//<.> \... is overridden by the `@Action` annotation
+//
+//
+//== PublisherService
+//
+//The demo provides a simple implementation of `PublisherService` that just 
stores the DTOs in memory:
+//
+//[source,java]
+//----
+//include::spiimpl/PublisherServiceSpiForActions.java[tags=class]
+//----
+//<.> serializes to `InteractionDto`, as defined by the 
link:https://isis.apache.org/refguide/2.0.0-M3/schema/ixn.html[Apache Isis 
schema].
+//
+//The demo implementation also provides a way to query these executions:
+//
+//[source,java,indent=0]
+//----
+//include::spiimpl/PublisherServiceSpiForActions.java[tags=demo]
+//----
+//
+//Supporting mixins surface this list as contributions on the object:
+//
+//* `interactionExecutions` collection:
+//+
+//[source,java,indent=0]
+//----
+//include::spiimpl/ActionPublishingJdo_interactionExecutions.java[tags=class]
+//----
+//
+//* `clearInteractionExecutions` action:
+//+
+//[source,java,indent=0]
+//----
+//include::spiimpl/ActionPublishingJdo_clearInteractionExecutions.java[tags=class]
+//----
+//
+//
+//== Configuration
+//
+//By default, publishing of action invocations is disabled.
+//This can be configured globally:
+//
+//[source,yaml]
+//.application.yml
+//----
+//isis:
+//  applib:
+//    annotation:
+//      action:
+//        publishing: none
+//----
+//
+//In addition to globally enabling or disabling action publishing, it is also 
possible to specify `ignore_safe`.
+//
+//This enables publishing for all actions except those that have safe (that 
is, query-only) semantics.
+//In other words actions are published except for those that don't change 
(aren't declared as changing) the state of the system.
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo.java
similarity index 66%
copy from 
examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.java
copy to 
examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo.java
index 1556229..3d1745d 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.annotDomain.Action.publishing;
+package demoapp.dom.annotDomain.Action.command;
 
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -25,6 +25,9 @@ import javax.jdo.annotations.PersistenceCapable;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.CommandExecuteIn;
+import org.apache.isis.applib.annotation.CommandPersistence;
+import org.apache.isis.applib.annotation.CommandReification;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.MemberOrder;
@@ -43,21 +46,22 @@ import 
demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         nature=Nature.JDO_ENTITY
-        , objectType = "demo.ActionPublishingJdo"
+        , objectType = "demo.ActionCommandJdo"
         , editing = Editing.DISABLED
 )
-public class ActionPublishingJdo implements HasAsciiDocDescription {
+public class ActionCommandJdo implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
-    public ActionPublishingJdo(String initialValue) {
+    public ActionCommandJdo(String initialValue) {
         this.property = initialValue;
         this.propertyMetaAnnotated = initialValue;
         this.propertyMetaAnnotatedOverridden = initialValue;
+        this.propertyUpdateInBackground = initialValue;
     }
 
     public String title() {
-        return "Action#publishing";
+        return "Action#command";
     }
 
 //tag::property[]
@@ -75,31 +79,35 @@ public class ActionPublishingJdo implements 
HasAsciiDocDescription {
     @MemberOrder(name = "meta-annotated-overridden", sequence = "1")
     @Getter @Setter
     private String propertyMetaAnnotatedOverridden;
+
+    @Property()
+    @MemberOrder(name = "background", sequence = "1")
+    @Getter @Setter
+    private String propertyUpdateInBackground;
 //end::property[]
 
 //tag::annotation[]
     @Action(
-        publishing = Publishing.ENABLED         // <.>
+        command = CommandReification.ENABLED         // <.>
         , semantics = SemanticsOf.IDEMPOTENT
         , associateWith = "property"
         , associateWithSequence = "1"
     )
     @ActionLayout(
         named = "Update Property"
-        , describedAs = "@Action(publishing = ENABLED)"
+        , describedAs = "@Action(command = ENABLED)"
     )
-    public ActionPublishingJdo updatePropertyUsingAnnotation(final String 
value) {
+    public ActionCommandJdo updatePropertyUsingAnnotation(final String value) {
         setProperty(value);
         return this;
     }
     public String default0UpdatePropertyUsingAnnotation() {
         return getProperty();
     }
-
 //end::annotation[]
 
 //tag::meta-annotation[]
-    @ActionPublishingEnabledMetaAnnotation      // <.>
+    @ActionCommandEnabledMetaAnnotation      // <.>
     @Action(
         semantics = SemanticsOf.IDEMPOTENT
         , associateWith = "propertyMetaAnnotated"
@@ -107,9 +115,9 @@ public class ActionPublishingJdo implements 
HasAsciiDocDescription {
     )
     @ActionLayout(
         named = "Update Property"
-        , describedAs = "@PublishingEnabledMetaAnnotation"
+        , describedAs = "@ActionCommandEnabledMetaAnnotation"
     )
-    public ActionPublishingJdo updatePropertyUsingMetaAnnotation(final String 
value) {
+    public ActionCommandJdo updatePropertyUsingMetaAnnotation(final String 
value) {
         setPropertyMetaAnnotated(value);
         return this;
     }
@@ -119,9 +127,9 @@ public class ActionPublishingJdo implements 
HasAsciiDocDescription {
 //end::meta-annotation[]
 
 //tag::meta-annotation-overridden[]
-    @ActionPublishingDisabledMetaAnnotation     // <.>
+    @ActionCommandDisabledMetaAnnotation        // <.>
     @Action(
-        publishing = Publishing.ENABLED         // <.>
+        command = CommandReification.ENABLED    // <.>
         , semantics = SemanticsOf.IDEMPOTENT
         , associateWith = "propertyMetaAnnotatedOverridden"
         , associateWithSequence = "1"
@@ -129,9 +137,9 @@ public class ActionPublishingJdo implements 
HasAsciiDocDescription {
     @ActionLayout(
         named = "Update Property"
         , describedAs =
-            "@PublishingEnabledMetaAnnotation @Action(publishing = ENABLED)"
+            "@ActionCommandDisabledMetaAnnotation @Action(publishing = 
ENABLED)"
     )
-    public ActionPublishingJdo 
updatePropertyUsingMetaAnnotationButOverridden(final String value) {
+    public ActionCommandJdo 
updatePropertyUsingMetaAnnotationButOverridden(final String value) {
         setPropertyMetaAnnotatedOverridden(value);
         return this;
     }
@@ -140,6 +148,27 @@ public class ActionPublishingJdo implements 
HasAsciiDocDescription {
     }
 //end::meta-annotation-overridden[]
 
+//tag::background[]
+    @Action(
+        command = CommandReification.ENABLED                // <.>
+        , commandExecuteIn = CommandExecuteIn.BACKGROUND    // <.>
+        , semantics = SemanticsOf.IDEMPOTENT
+        , associateWith = "propertyUpdateInBackground"
+        , associateWithSequence = "1"
+    )
+    @ActionLayout(
+        describedAs =
+            "@Action(command = ENABLED, commandExecuteIn = BACKGROUND)"
+    )
+    public ActionCommandJdo updatePropertyInBackground(final String value) {
+        setPropertyUpdateInBackground(value);
+        return this;
+    }
+    public String default0UpdatePropertyInBackground() {
+        return getPropertyUpdateInBackground();
+    }
+//end::background[]
+
 
 //tag::class[]
 }
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo.layout.xml
similarity index 93%
copy from 
examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.layout.xml
copy to 
examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo.layout.xml
index f3edfb0..8b34302 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.layout.xml
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo.layout.xml
@@ -23,12 +23,13 @@
                                        <cpt:fieldSet name="Contributed" 
id="contributed"/>
                                        <cpt:fieldSet name="Meta-annotated" 
id="meta-annotated"/>
                                        <cpt:fieldSet name="Meta-annotated 
Overridden" id="meta-annotated-overridden"/>
+                                       <cpt:fieldSet name="Background" 
id="background"/>
                                </bs3:col>
                        </bs3:row>
                        <bs3:row>
                                <bs3:col span="12">
-                                       <cpt:collection 
id="interactionExecutions"/>
-                                       <cpt:collection id="publishedObjects"/>
+                                       <cpt:collection 
id="foregroundCommands"/>
+                                       <cpt:collection 
id="backgroundCommands"/>
                                </bs3:col>
                        </bs3:row>
                        <bs3:row>
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdoEntities.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdoEntities.java
new file mode 100644
index 0000000..19cf0a7
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdoEntities.java
@@ -0,0 +1,31 @@
+package demoapp.dom.annotDomain.Action.command;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+@Service
+public class ActionCommandJdoEntities {
+
+    public Optional<ActionCommandJdo> find(final String value) {
+        return repositoryService.firstMatch(ActionCommandJdo.class, x -> 
Objects.equals(x.getProperty(), value));
+    }
+
+    public List<ActionCommandJdo> all() {
+        return repositoryService.allInstances(ActionCommandJdo.class);
+    }
+
+    public ActionCommandJdo first() {
+        return all().stream().findFirst().get();
+    }
+
+    @Inject
+    RepositoryService repositoryService;
+
+}
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdoSeedService.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdoSeedService.java
new file mode 100644
index 0000000..0e704d8
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdoSeedService.java
@@ -0,0 +1,39 @@
+package demoapp.dom.annotDomain.Action.command;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
+
+import demoapp.dom._infra.seed.SeedServiceAbstract;
+import demoapp.dom.types.Samples;
+
+@Service
+public class ActionCommandJdoSeedService extends SeedServiceAbstract {
+
+    public ActionCommandJdoSeedService() {
+        super(PropertyPublishingJdoEntityFixture::new);
+    }
+
+    static class PropertyPublishingJdoEntityFixture extends FixtureScript {
+
+        @Override
+        protected void execute(ExecutionContext executionContext) {
+            samples.stream()
+                    .map(ActionCommandJdo::new)
+                    .forEach(domainObject -> {
+                        repositoryService.persist(domainObject);
+                        executionContext.addResult(this, domainObject);
+                    });
+
+        }
+
+        @Inject
+        RepositoryService repositoryService;
+
+        @Inject
+        Samples<String> samples;
+    }
+}
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdateProperty.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdateProperty.java
new file mode 100644
index 0000000..349b825
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdateProperty.java
@@ -0,0 +1,38 @@
+package demoapp.dom.annotDomain.Action.command;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+//tag::class[]
+@Action(
+    publishing = Publishing.ENABLED         // <.>
+    , semantics = SemanticsOf.IDEMPOTENT
+    , associateWith = "property"
+    , associateWithSequence = "2"
+)
+@ActionLayout(
+    named = "Mixin Update Property"
+    , describedAs = "@Action(publishing = ENABLED)"
+)
+public class ActionCommandJdo_mixinUpdateProperty {
+    // ...
+//end::class[]
+
+    private final ActionCommandJdo actionCommandJdo;
+
+    public ActionCommandJdo_mixinUpdateProperty(ActionCommandJdo 
actionCommandJdo) {
+        this.actionCommandJdo = actionCommandJdo;
+    }
+
+//tag::class[]
+    public ActionCommandJdo act(final String value) {
+        actionCommandJdo.setProperty(value);
+        return actionCommandJdo;
+    }
+    public String default0Act() {
+        return actionCommandJdo.getProperty();
+    }
+}
+//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdatePropertyMetaAnnotation.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdatePropertyMetaAnnotation.java
new file mode 100644
index 0000000..5d3e7e7
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdatePropertyMetaAnnotation.java
@@ -0,0 +1,37 @@
+package demoapp.dom.annotDomain.Action.command;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+//tag::class[]
+@ActionCommandEnabledMetaAnnotation     // <.>
+@Action(
+    semantics = SemanticsOf.IDEMPOTENT
+    , associateWith = "propertyMetaAnnotated"
+    , associateWithSequence = "2"
+)
+@ActionLayout(
+    named = "Mixin Update Property"
+    , describedAs = "@ActionPublishingEnabledMetaAnnotation"
+)
+public class ActionCommandJdo_mixinUpdatePropertyMetaAnnotation {
+    // ...
+//end::class[]
+
+    private final ActionCommandJdo actionCommandJdo;
+
+    public ActionCommandJdo_mixinUpdatePropertyMetaAnnotation(ActionCommandJdo 
actionCommandJdo) {
+        this.actionCommandJdo = actionCommandJdo;
+    }
+
+//tag::class[]
+    public ActionCommandJdo act(final String value) {
+        actionCommandJdo.setPropertyMetaAnnotated(value);
+        return actionCommandJdo;
+    }
+    public String default0Act() {
+        return actionCommandJdo.getPropertyMetaAnnotated();
+    }
+}
+//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdatePropertyMetaAnnotationOverridden.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdatePropertyMetaAnnotationOverridden.java
new file mode 100644
index 0000000..52f6ac7
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/ActionCommandJdo_mixinUpdatePropertyMetaAnnotationOverridden.java
@@ -0,0 +1,41 @@
+package demoapp.dom.annotDomain.Action.command;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+//tag::class[]
+@ActionCommandDisabledMetaAnnotation     // <.>
+@Action(
+    publishing = Publishing.ENABLED         // <.>
+    , semantics = SemanticsOf.IDEMPOTENT
+    , associateWith = "propertyMetaAnnotatedOverridden"
+    , associateWithSequence = "2"
+)
+@ActionLayout(
+    named = "Mixin Update Property"
+    , describedAs =
+        "@ActionPublishingDisabledMetaAnnotation " +
+        "@Action(publishing = ENABLED)"
+)
+public class ActionCommandJdo_mixinUpdatePropertyMetaAnnotationOverridden {
+    // ...
+//end::class[]
+
+    private final ActionCommandJdo actionCommandJdo;
+
+    public 
ActionCommandJdo_mixinUpdatePropertyMetaAnnotationOverridden(ActionCommandJdo 
actionCommandJdo) {
+        this.actionCommandJdo = actionCommandJdo;
+    }
+
+//tag::class[]
+    public ActionCommandJdo act(final String value) {
+        actionCommandJdo.setPropertyMetaAnnotatedOverridden(value);
+        return actionCommandJdo;
+    }
+    public String default0Act() {
+        return actionCommandJdo.getPropertyMetaAnnotatedOverridden();
+    }
+}
+//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_backgroundCommands.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_backgroundCommands.java
new file mode 100644
index 0000000..ab695e5
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_backgroundCommands.java
@@ -0,0 +1,39 @@
+package demoapp.dom.annotDomain.Action.command.spiimpl;
+
+import java.util.LinkedList;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.services.command.CommandWithDto;
+import org.apache.isis.schema.cmd.v2.CommandDto;
+
+import lombok.val;
+
+import demoapp.dom.annotDomain.Action.command.ActionCommandJdo;
+
+//tag::class[]
+@Collection
+public class ActionCommandJdo_backgroundCommands {
+    // ...
+//end::class[]
+
+    private final ActionCommandJdo actionCommandJdo;
+    public ActionCommandJdo_backgroundCommands(ActionCommandJdo 
actionCommandJdo) {
+        this.actionCommandJdo = actionCommandJdo;
+    }
+
+    //tag::class[]
+    public LinkedList<CommandDto> coll() {
+        val list = new LinkedList<CommandDto>();
+        commandServiceSpiForActions
+                .streamBackgroundCommands()
+                .map(CommandWithDto::asDto)
+                .forEach(list::push);   // reverse order
+        return list;
+    }
+
+    @Inject
+    private CommandServiceSpiForActions commandServiceSpiForActions;
+}
+//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_clearBackgroundCommands.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_clearBackgroundCommands.java
new file mode 100644
index 0000000..410674f
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_clearBackgroundCommands.java
@@ -0,0 +1,38 @@
+package demoapp.dom.annotDomain.Action.command.spiimpl;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import demoapp.dom.annotDomain.Action.command.ActionCommandJdo;
+
+//tag::class[]
+@Action(
+    semantics = SemanticsOf.IDEMPOTENT
+    , associateWith = "backgroundCommands"
+)
+@ActionLayout(
+    named = "Clear"
+)
+public class ActionCommandJdo_clearBackgroundCommands {
+    // ...
+//end::class[]
+
+    private final ActionCommandJdo actionCommandJdo;
+    public ActionCommandJdo_clearBackgroundCommands(ActionCommandJdo 
actionCommandJdo) {
+        this.actionCommandJdo = actionCommandJdo;
+    }
+
+
+    //tag::class[]
+    public ActionCommandJdo act() {
+        commandServiceSpiForActions.clearBackgroundCommands();
+        return actionCommandJdo;
+    }
+
+    @Inject
+    private CommandServiceSpiForActions commandServiceSpiForActions;
+}
+//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_clearForegroundCommands.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_clearForegroundCommands.java
new file mode 100644
index 0000000..3485421
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_clearForegroundCommands.java
@@ -0,0 +1,38 @@
+package demoapp.dom.annotDomain.Action.command.spiimpl;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import demoapp.dom.annotDomain.Action.command.ActionCommandJdo;
+
+//tag::class[]
+@Action(
+    semantics = SemanticsOf.IDEMPOTENT
+    , associateWith = "foregroundCommands"
+)
+@ActionLayout(
+    named = "Clear"
+)
+public class ActionCommandJdo_clearForegroundCommands {
+    // ...
+//end::class[]
+
+    private final ActionCommandJdo actionCommandJdo;
+    public ActionCommandJdo_clearForegroundCommands(ActionCommandJdo 
actionCommandJdo) {
+        this.actionCommandJdo = actionCommandJdo;
+    }
+
+
+    //tag::class[]
+    public ActionCommandJdo act() {
+        commandServiceSpiForActions.clearForegroundCommands();
+        return actionCommandJdo;
+    }
+
+    @Inject
+    private CommandServiceSpiForActions commandServiceSpiForActions;
+}
+//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_executeBackgroundCommands.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_executeBackgroundCommands.java
new file mode 100644
index 0000000..43b0dbc
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_executeBackgroundCommands.java
@@ -0,0 +1,39 @@
+package demoapp.dom.annotDomain.Action.command.spiimpl;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+import demoapp.dom.annotDomain.Action.command.ActionCommandJdo;
+
+//tag::class[]
+@Action(
+    semantics = SemanticsOf.IDEMPOTENT
+    , associateWith = "backgroundCommands"
+    , associateWithSequence = "2"
+)
+@ActionLayout(
+    named = "Execute"
+)
+public class ActionCommandJdo_executeBackgroundCommands {
+    // ...
+//end::class[]
+
+    private final ActionCommandJdo actionCommandJdo;
+    public ActionCommandJdo_executeBackgroundCommands(ActionCommandJdo 
actionCommandJdo) {
+        this.actionCommandJdo = actionCommandJdo;
+    }
+
+
+    //tag::class[]
+    public ActionCommandJdo act() {
+        commandServiceSpiForActions.clearBackgroundCommands();
+        return actionCommandJdo;
+    }
+
+    @Inject
+    private CommandServiceSpiForActions commandServiceSpiForActions;
+}
+//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_foregroundCommands.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_foregroundCommands.java
new file mode 100644
index 0000000..5c57292
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/ActionCommandJdo_foregroundCommands.java
@@ -0,0 +1,39 @@
+package demoapp.dom.annotDomain.Action.command.spiimpl;
+
+import java.util.LinkedList;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.services.command.CommandWithDto;
+import org.apache.isis.schema.cmd.v2.CommandDto;
+
+import lombok.val;
+
+import demoapp.dom.annotDomain.Action.command.ActionCommandJdo;
+
+//tag::class[]
+@Collection
+public class ActionCommandJdo_foregroundCommands {
+    // ...
+//end::class[]
+
+    private final ActionCommandJdo actionCommandJdo;
+    public ActionCommandJdo_foregroundCommands(ActionCommandJdo 
actionCommandJdo) {
+        this.actionCommandJdo = actionCommandJdo;
+    }
+
+    //tag::class[]
+    public LinkedList<CommandDto> coll() {
+        val list = new LinkedList<CommandDto>();
+        commandServiceSpiForActions
+                .streamForegroundCommands()
+                .map(CommandWithDto::asDto)
+                .forEach(list::push);   // reverse order
+        return list;
+    }
+
+    @Inject
+    private CommandServiceSpiForActions commandServiceSpiForActions;
+}
+//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/CommandServiceSpiForActions.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/CommandServiceSpiForActions.java
new file mode 100644
index 0000000..af62cf8
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/command/spiimpl/CommandServiceSpiForActions.java
@@ -0,0 +1,95 @@
+package demoapp.dom.annotDomain.Action.command.spiimpl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.annotation.CommandExecuteIn;
+import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.services.background.BackgroundCommandService;
+import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.CommandDefault;
+import org.apache.isis.applib.services.command.CommandWithDto;
+import org.apache.isis.applib.services.command.spi.CommandService;
+import org.apache.isis.applib.util.schema.CommandDtoUtils;
+import 
org.apache.isis.core.runtimeservices.background.BackgroundCommandExecution;
+import org.apache.isis.core.security.authentication.standard.SimpleSession;
+import org.apache.isis.schema.cmd.v2.CommandDto;
+
+import lombok.val;
+
+@Service
+@Order(OrderPrecedence.EARLY)       // <.>
+public class CommandServiceSpiForActions implements CommandService {
+
+    public static class CommandWithDtoDefault extends CommandDefault 
implements CommandWithDto {
+        @Override
+        public CommandDto asDto() {
+            return CommandDtoUtils.fromXml(getMemento());
+        }
+    }
+
+    private List<CommandWithDto> foregroundCommands = new ArrayList<>();
+    private List<CommandWithDto> backgroundCommands = new ArrayList<>();
+
+    @Override
+    public Command create() {
+        return new CommandWithDtoDefault();
+    }
+
+    @Override
+    public boolean persistIfPossible(Command command) {
+        return true;
+    }
+
+    @Override
+    public void complete(Command command) {
+        final CommandWithDtoDefault cwdd = (CommandWithDtoDefault) command;
+        if(command.isPersistHint()) {
+            final CommandExecuteIn executeIn = command.getExecuteIn();
+            switch (executeIn) {
+                case FOREGROUND:
+                    foregroundCommands.add((CommandWithDto) command);
+                case BACKGROUND:
+                    backgroundCommands.add((CommandWithDto) command);
+            }
+        }
+    }
+
+    public Stream<CommandWithDto> streamForegroundCommands() {
+        return foregroundCommands.stream();
+    }
+
+    public void clearForegroundCommands() {
+        foregroundCommands.clear();
+    }
+
+    public Stream<CommandWithDto> streamBackgroundCommands() {
+        return backgroundCommands.stream();
+    }
+
+    public void clearBackgroundCommands() {
+        backgroundCommands.clear();
+    }
+
+    public void executeBackgroundCommands() {
+        val execution = new BackgroundCommandExecution() {
+            @Override
+            protected List<? extends Command> 
findBackgroundCommandsToExecute() {
+                return backgroundCommands;
+            }
+        };
+        val simpleSession = new SimpleSession("sven", Collections.emptyList(), 
"");
+
+        execution.execute(simpleSession, null);
+        clearBackgroundCommands();
+    }
+
+}
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
index 542c723..1a7d8ef 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingDisabledMetaAnnotation.java
@@ -6,11 +6,12 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.Publishing;
 
 //tag::class[]
-@Property(publishing = Publishing.DISABLED)     // <.>
+@Action(publishing = Publishing.DISABLED)       // <.>
 @Inherited
 @Target({
         ElementType.TYPE, ElementType.METHOD    // <.>
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.java
index 1556229..526dbae 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.java
@@ -107,7 +107,7 @@ public class ActionPublishingJdo implements 
HasAsciiDocDescription {
     )
     @ActionLayout(
         named = "Update Property"
-        , describedAs = "@PublishingEnabledMetaAnnotation"
+        , describedAs = "@ActionPublishingEnabledMetaAnnotation"
     )
     public ActionPublishingJdo updatePropertyUsingMetaAnnotation(final String 
value) {
         setPropertyMetaAnnotated(value);
@@ -129,7 +129,8 @@ public class ActionPublishingJdo implements 
HasAsciiDocDescription {
     @ActionLayout(
         named = "Update Property"
         , describedAs =
-            "@PublishingEnabledMetaAnnotation @Action(publishing = ENABLED)"
+            "@ActionPublishingDisabledMetaAnnotation " +
+            "@Action(publishing = ENABLED)"
     )
     public ActionPublishingJdo 
updatePropertyUsingMetaAnnotationButOverridden(final String value) {
         setPropertyMetaAnnotatedOverridden(value);
@@ -140,7 +141,6 @@ public class ActionPublishingJdo implements 
HasAsciiDocDescription {
     }
 //end::meta-annotation-overridden[]
 
-
 //tag::class[]
 }
 //end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.layout.xml
index f3edfb0..a9500e1 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.layout.xml
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/publishing/ActionPublishingJdo.layout.xml
@@ -28,7 +28,6 @@
                        <bs3:row>
                                <bs3:col span="12">
                                        <cpt:collection 
id="interactionExecutions"/>
-                                       <cpt:collection id="publishedObjects"/>
                                </bs3:col>
                        </bs3:row>
                        <bs3:row>
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/publishing/PropertyPublishingJdo.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/publishing/PropertyPublishingJdo.java
index 56b6481..5f0ebee 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/publishing/PropertyPublishingJdo.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/publishing/PropertyPublishingJdo.java
@@ -76,7 +76,7 @@ public class PropertyPublishingJdo implements 
HasAsciiDocDescription {
     @PropertyPublishingEnabledMetaAnnotation                // <.>
     @Property()
     @PropertyLayout(
-        describedAs = "@PublishingEnabledMetaAnnotation"
+        describedAs = "@PropertyPublishingEnabledMetaAnnotation"
     )
     @MemberOrder(name = "meta-annotated", sequence = "1")
     @XmlElement(required = true)
@@ -91,7 +91,7 @@ public class PropertyPublishingJdo implements 
HasAsciiDocDescription {
     )
     @PropertyLayout(
         describedAs =
-            "@PublishingDisabledMetaAnnotation " +
+            "@PropertyPublishingDisabledMetaAnnotation " +
             "@Property(publishing = ENABLED)"
     )
     @MemberOrder(name = "meta-annotated-overridden", sequence = "1")
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/publishing/PropertyPublishingJdo.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/publishing/PropertyPublishingJdo.layout.xml
index f3edfb0..a9500e1 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/publishing/PropertyPublishingJdo.layout.xml
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/publishing/PropertyPublishingJdo.layout.xml
@@ -28,7 +28,6 @@
                        <bs3:row>
                                <bs3:col span="12">
                                        <cpt:collection 
id="interactionExecutions"/>
-                                       <cpt:collection id="publishedObjects"/>
                                </bs3:col>
                        </bs3:row>
                        <bs3:row>
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/annotLayout/ActionLayout/ActionLayoutMenu.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/annotLayout/ActionLayout/ActionLayoutMenu.java
index 8c0b93a..73c0282 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/annotLayout/ActionLayout/ActionLayoutMenu.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/annotLayout/ActionLayout/ActionLayoutMenu.java
@@ -37,7 +37,7 @@ public class ActionLayoutMenu {
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    @ActionLayout(cssClassFa="fa-terminal", describedAs = "Location and style 
of action's prompt dialog")
+    @ActionLayout(cssClassFa="fa-question-circle", describedAs = "Location and 
style of action's prompt dialog")
     public 
demoapp.dom.annotLayout.ActionLayout.promptStyle.ActionLayoutPromptStyleVm 
promptStyle(){
         return new 
demoapp.dom.annotLayout.ActionLayout.promptStyle.ActionLayoutPromptStyleVm();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml 
b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
index b4b89e6..a306b18 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
@@ -113,6 +113,7 @@ as a replacement for
             <mb3:section>
                 <mb3:named>@Action</mb3:named>
                 <mb3:serviceAction objectType="demo.ActionMenu" 
id="associateWith"/>
+                <mb3:serviceAction objectType="demo.ActionMenu" id="command"/>
                 <mb3:serviceAction objectType="demo.ActionMenu" 
id="domainEvent"/>
                 <mb3:serviceAction objectType="demo.ActionMenu" id="hidden"/>
                 <mb3:serviceAction objectType="demo.ActionMenu" 
id="publishing"/>

Reply via email to