You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/05/27 10:20:34 UTC

[isis] branch master updated: ISIS-2513: Demo: add JPA support for ActionExecutionPublishing

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 f55e9e1  ISIS-2513: Demo: add JPA support for ActionExecutionPublishing
f55e9e1 is described below

commit f55e9e119d41b39d6fee2ab628b9f45dbc166ad1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 27 12:20:23 2021 +0200

    ISIS-2513: Demo: add JPA support for ActionExecutionPublishing
---
 .../src/main/java/demoapp/dom/DemoModuleJpa.java   |  2 +
 .../dom/domain/actions/Action/ActionMenu.java      |  9 ++--
 .../ActionCommandPublishingEntity.java             | 11 +++--
 .../jdo/ActionCommandPublishingJdo.java            |  2 +-
 .../jpa/ActionCommandPublishingJpa.java            |  2 +-
 .../ActionExecutionPublishingEntity.java}          | 20 ++++----
 ... => ActionExecutionPublishingEntity.layout.xml} |  0
 ...utionPublishingEntity_mixinUpdateProperty.java} | 18 ++++---
 ...gEntity_mixinUpdatePropertyMetaAnnotation.java} | 18 ++++---
 ...xinUpdatePropertyMetaAnnotationOverridden.java} | 20 ++++----
 .../ActionExecutionPublishingJdoSeedService.java   | 57 ----------------------
 ....java => ActionExecutionPublishingSeeding.java} | 26 +++-------
 .../ActionExecutionPublishingJdo-description.adoc  |  8 +--
 .../{ => jdo}/ActionExecutionPublishingJdo.java    | 17 ++++---
 .../ActionExecutionPublishingJdoEntities.java      | 31 +++++-------
 .../ActionExecutionPublishingJpa-description.adoc} | 14 +++---
 .../ActionExecutionPublishingJpa.java}             | 55 +++++++++++++--------
 .../ActionExecutionPublishingJpaEntities.java}     | 31 +++++-------
 18 files changed, 141 insertions(+), 200 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
index 3948c48..36762b1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
@@ -27,6 +27,7 @@ import org.apache.isis.extensions.commandlog.jpa.IsisModuleExtCommandLogJpa;
 import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink;
 
 import demoapp.dom.domain.actions.Action.commandPublishing.jpa.ActionCommandPublishingJpa;
+import demoapp.dom.domain.actions.Action.executionPublishing.jpa.ActionExecutionPublishingJpa;
 import demoapp.dom.services.core.wrapperFactory.jpa.WrapperFactoryJpa;
 import demoapp.dom.services.extensions.secman.apptenancy.jpa.TenantedJpa;
 import demoapp.dom.types.isis.blobs.jpa.IsisBlobJpa;
@@ -123,6 +124,7 @@ import demoapp.dom.types.primitive.shorts.jpa.PrimitiveShortJpa;
         WrapperFactoryJpa.class,
 
         ActionCommandPublishingJpa.class,
+        ActionExecutionPublishingJpa.class,
 
 })
 public class DemoModuleJpa {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/ActionMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/ActionMenu.java
index ebb3da2..094e7e9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/ActionMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/ActionMenu.java
@@ -35,8 +35,7 @@ import demoapp.dom.domain.actions.Action.associateWith.ActionAssociateWithVm;
 import demoapp.dom.domain.actions.Action.associateWith.child.ActionAssociateWithChildVm;
 import demoapp.dom.domain.actions.Action.commandPublishing.ActionCommandPublishingEntity;
 import demoapp.dom.domain.actions.Action.domainEvent.ActionDomainEventVm;
-import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingJdo;
-import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingJdoEntities;
+import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingEntity;
 import demoapp.dom.domain.actions.Action.hidden.ActionHiddenVm;
 import demoapp.dom.domain.actions.Action.restrictTo.ActionRestrictToVm;
 import demoapp.dom.domain.actions.Action.semantics.ActionSemanticsVm;
@@ -48,7 +47,7 @@ import demoapp.dom.domain.actions.Action.typeOf.child.ActionTypeOfChildVm;
 public class ActionMenu {
 
     final ValueHolderRepository<String, ? extends ActionCommandPublishingEntity> actionCommandEntities;
-    final ActionExecutionPublishingJdoEntities actionPublishingJdoEntities;
+    final ValueHolderRepository<String, ? extends ActionExecutionPublishingEntity> actionPublishingEntities;
     final NameSamples samples;
 
     @Action(semantics = SemanticsOf.SAFE)
@@ -84,8 +83,8 @@ public class ActionMenu {
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-book", describedAs = "Action invocation events as XML")
-    public ActionExecutionPublishingJdo executionPublishing(){
-        return actionPublishingJdoEntities.first();
+    public ActionExecutionPublishingEntity executionPublishing(){
+        return actionPublishingEntities.first().orElse(null);
     }
 
     @Action(semantics = SemanticsOf.SAFE)
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java
index 823a28d..5b69c3c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java
@@ -33,17 +33,20 @@ implements
     ExposePersistedCommands,
     ValueHolder<String> {
 
-    public abstract String getProperty();
-    public abstract void setProperty(String value);
-
     @Override
     public String value() {
         return getProperty();
     }
-    protected abstract void setPropertyCommandDisabled(String value);
+
+    protected abstract String getProperty();
+    protected abstract void setProperty(String value);
+
     protected abstract String getPropertyCommandDisabled();
+    protected abstract void setPropertyCommandDisabled(String value);
+
     protected abstract String getPropertyMetaAnnotated();
     protected abstract void setPropertyMetaAnnotated(String value);
+
     protected abstract String getPropertyMetaAnnotatedOverridden();
     protected abstract void setPropertyMetaAnnotatedOverridden(String value);
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jdo/ActionCommandPublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jdo/ActionCommandPublishingJdo.java
index 469bd89..ba2b94d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jdo/ActionCommandPublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jdo/ActionCommandPublishingJdo.java
@@ -64,7 +64,7 @@ public class ActionCommandPublishingJdo
     }
 
     public String title() {
-        return "Action#command";
+        return "Action#commandPublishing (JDO)";
     }
 
 //tag::property[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jpa/ActionCommandPublishingJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jpa/ActionCommandPublishingJpa.java
index d80b8ee..00f7bb0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jpa/ActionCommandPublishingJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jpa/ActionCommandPublishingJpa.java
@@ -68,7 +68,7 @@ public class ActionCommandPublishingJpa
     }
 
     public String title() {
-        return "Action#command";
+        return "Action#commandPublishing (JPA)";
     }
 
     @Id
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.java
similarity index 72%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.java
index 823a28d..9b5db11 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.java
@@ -16,34 +16,34 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.actions.Action.commandPublishing;
+package demoapp.dom.domain.actions.Action.executionPublishing;
 
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
-import demoapp.dom.domain._commands.ExposePersistedCommands;
+import demoapp.dom.domain._interactions.ExposeCapturedInteractions;
 
 @DomainObject(
-        logicalTypeName = "demo.ActionCommandPublishingEntity" // shared permissions with concrete sub class
+        logicalTypeName = "demo.ActionExecutionPublishingEntity" // shared permissions with concrete sub class
 )
-public abstract class ActionCommandPublishingEntity
+public abstract class ActionExecutionPublishingEntity
 implements
     HasAsciiDocDescription,
-    ExposePersistedCommands,
+    ExposeCapturedInteractions,
     ValueHolder<String> {
 
-    public abstract String getProperty();
-    public abstract void setProperty(String value);
-
     @Override
     public String value() {
         return getProperty();
     }
-    protected abstract void setPropertyCommandDisabled(String value);
-    protected abstract String getPropertyCommandDisabled();
+
+    protected abstract String getProperty();
+    protected abstract void setProperty(String value);
+
     protected abstract String getPropertyMetaAnnotated();
     protected abstract void setPropertyMetaAnnotated(String value);
+
     protected abstract String getPropertyMetaAnnotatedOverridden();
     protected abstract void setPropertyMetaAnnotatedOverridden(String value);
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdateProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdateProperty.java
similarity index 70%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdateProperty.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdateProperty.java
index 8152e1a..9671cb5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdateProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdateProperty.java
@@ -23,6 +23,8 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
+import demoapp.dom.domain.actions.Action.executionPublishing.jdo.ActionExecutionPublishingJdo;
+
 //tag::class[]
 @Action(
     executionPublishing = Publishing.ENABLED         // <.>
@@ -34,23 +36,23 @@ import org.apache.isis.applib.annotation.SemanticsOf;
     , associateWith = "property"
     , sequence = "2"
 )
-public class ActionExecutionPublishingJdo_mixinUpdateProperty {
+public class ActionExecutionPublishingEntity_mixinUpdateProperty {
     // ...
 //end::class[]
 
-    private final ActionExecutionPublishingJdo actionPublishingJdo;
+    private final ActionExecutionPublishingEntity actionPublishingEntity;
 
-    public ActionExecutionPublishingJdo_mixinUpdateProperty(ActionExecutionPublishingJdo actionPublishingJdo) {
-        this.actionPublishingJdo = actionPublishingJdo;
+    public ActionExecutionPublishingEntity_mixinUpdateProperty(ActionExecutionPublishingJdo actionPublishingJdo) {
+        this.actionPublishingEntity = actionPublishingJdo;
     }
 
 //tag::class[]
-    public ActionExecutionPublishingJdo act(final String value) {
-        actionPublishingJdo.setProperty(value);
-        return actionPublishingJdo;
+    public ActionExecutionPublishingEntity act(final String value) {
+        actionPublishingEntity.setProperty(value);
+        return actionPublishingEntity;
     }
     public String default0Act() {
-        return actionPublishingJdo.getProperty();
+        return actionPublishingEntity.getProperty();
     }
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
similarity index 68%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotation.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
index 64b0127..9e015cb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
@@ -22,6 +22,8 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
+import demoapp.dom.domain.actions.Action.executionPublishing.jdo.ActionExecutionPublishingJdo;
+
 //tag::class[]
 @ActionExecutionPublishingEnabledMetaAnnotation     // <.>
 @Action(
@@ -33,23 +35,23 @@ import org.apache.isis.applib.annotation.SemanticsOf;
     , associateWith = "propertyMetaAnnotated"
     , sequence = "2"
 )
-public class ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotation {
+public class ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation {
     // ...
 //end::class[]
 
-    private final ActionExecutionPublishingJdo actionPublishingJdo;
+    private final ActionExecutionPublishingEntity actionPublishingEntity;
 
-    public ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotation(ActionExecutionPublishingJdo actionPublishingJdo) {
-        this.actionPublishingJdo = actionPublishingJdo;
+    public ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation(ActionExecutionPublishingJdo actionPublishingJdo) {
+        this.actionPublishingEntity = actionPublishingJdo;
     }
 
 //tag::class[]
-    public ActionExecutionPublishingJdo act(final String value) {
-        actionPublishingJdo.setPropertyMetaAnnotated(value);
-        return actionPublishingJdo;
+    public ActionExecutionPublishingEntity act(final String value) {
+        actionPublishingEntity.setPropertyMetaAnnotated(value);
+        return actionPublishingEntity;
     }
     public String default0Act() {
-        return actionPublishingJdo.getPropertyMetaAnnotated();
+        return actionPublishingEntity.getPropertyMetaAnnotated();
     }
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
similarity index 67%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotationOverridden.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
index 63e6971..bc015c3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
@@ -23,10 +23,12 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
+import demoapp.dom.domain.actions.Action.executionPublishing.jdo.ActionExecutionPublishingJdo;
+
 //tag::class[]
 @ActionExecutionPublishingDisabledMetaAnnotation     // <.>
 @Action(
-    executionPublishing = Publishing.ENABLED       // <.>
+    executionPublishing = Publishing.ENABLED         // <.>
     , semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
@@ -37,23 +39,23 @@ import org.apache.isis.applib.annotation.SemanticsOf;
     , associateWith = "propertyMetaAnnotatedOverridden"
     , sequence = "2"
 )
-public class ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotationOverridden {
+public class ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden {
     // ...
 //end::class[]
 
-    private final ActionExecutionPublishingJdo actionPublishingJdo;
+    private final ActionExecutionPublishingEntity actionPublishingEntity;
 
-    public ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotationOverridden(ActionExecutionPublishingJdo actionPublishingJdo) {
-        this.actionPublishingJdo = actionPublishingJdo;
+    public ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden(ActionExecutionPublishingJdo actionPublishingJdo) {
+        this.actionPublishingEntity = actionPublishingJdo;
     }
 
 //tag::class[]
-    public ActionExecutionPublishingJdo act(final String value) {
-        actionPublishingJdo.setPropertyMetaAnnotatedOverridden(value);
-        return actionPublishingJdo;
+    public ActionExecutionPublishingEntity act(final String value) {
+        actionPublishingEntity.setPropertyMetaAnnotatedOverridden(value);
+        return actionPublishingEntity;
     }
     public String default0Act() {
-        return actionPublishingJdo.getPropertyMetaAnnotatedOverridden();
+        return actionPublishingEntity.getPropertyMetaAnnotatedOverridden();
     }
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoSeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoSeedService.java
deleted file mode 100644
index e5b45ca..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoSeedService.java
+++ /dev/null
@@ -1,57 +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.
- */
-package demoapp.dom.domain.actions.Action.executionPublishing;
-
-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 ActionExecutionPublishingJdoSeedService extends SeedServiceAbstract {
-
-    public ActionExecutionPublishingJdoSeedService() {
-        super(PropertyPublishingJdoEntityFixture::new);
-    }
-
-    static class PropertyPublishingJdoEntityFixture extends FixtureScript {
-
-        @Override
-        protected void execute(ExecutionContext executionContext) {
-            samples.stream()
-                    .map(ActionExecutionPublishingJdo::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/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingSeeding.java
similarity index 59%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingSeeding.java
index cade649..dde2486 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingSeeding.java
@@ -18,32 +18,20 @@
  */
 package demoapp.dom.domain.actions.Action.executionPublishing;
 
-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;
+import demoapp.dom._infra.seed.SeedServiceAbstract;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
 @Service
-public class ActionExecutionPublishingJdoEntities {
-
-    public Optional<ActionExecutionPublishingJdo> find(final String value) {
-        return repositoryService.firstMatch(ActionExecutionPublishingJdo.class, x -> Objects.equals(x.getProperty(), value));
-    }
-
-    public List<ActionExecutionPublishingJdo> all() {
-        return repositoryService.allInstances(ActionExecutionPublishingJdo.class);
-    }
-
-    public ActionExecutionPublishingJdo first() {
-        return all().stream().findFirst().get();
-    }
+public class ActionExecutionPublishingSeeding
+extends SeedServiceAbstract {
 
     @Inject
-    RepositoryService repositoryService;
+    public ActionExecutionPublishingSeeding(ValueHolderRepository<String, ? extends ActionExecutionPublishingEntity> entities) {
+        super(entities);
+    }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo-description.adoc
similarity index 92%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo-description.adoc
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo-description.adoc
index 6371dcf..575ee6f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo-description.adoc
@@ -30,7 +30,7 @@ include::ActionExecutionPublishingJdo.java[tags=annotation]
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo_mixinUpdateProperty.java[tags=class]
+include::../ActionExecutionPublishingEntity_mixinUpdateProperty.java[tags=class]
 ----
 <.> explicitly specifies that invoking the mixin action should be published.
 
@@ -43,7 +43,7 @@ The `publishing` element can also be specified using a custom meta-annotation:
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingEnabledMetaAnnotation.java[tags=class]
+include::../ActionExecutionPublishingEnabledMetaAnnotation.java[tags=class]
 ----
 <.> annotated for an action
 <.> annotation can be applied to an action method or to a mixin
@@ -60,7 +60,7 @@ include::ActionExecutionPublishingJdo.java[tags=meta-annotation]
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotation.java[tags=class]
+include::../ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java[tags=class]
 ----
 <.> semantic is inherited from the meta-annotation
 
@@ -82,7 +82,7 @@ include::ActionExecutionPublishingJdo.java[tags=meta-annotation-overridden]
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotationOverridden.java[tags=class]
+include::../ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java[tags=class]
 ----
 <.> semantic from meta-annotation ...
 <.> \... is overridden by the `@Action` annotation
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo.java
similarity index 88%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo.java
index 856b3d3..e4bdbed 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo.java
@@ -16,13 +16,15 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.actions.Action.executionPublishing;
+package demoapp.dom.domain.actions.Action.executionPublishing.jdo;
 
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.PersistenceCapable;
 
+import org.springframework.context.annotation.Profile;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
@@ -33,21 +35,24 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain._interactions.ExposeCapturedInteractions;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingDisabledMetaAnnotation;
+import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingEnabledMetaAnnotation;
+import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingEntity;
+
+@Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.ActionPublishingJdo"
+        , logicalTypeName = "demo.ActionExecutionPublishingEntity"
         , editing = Editing.DISABLED
 )
 public class ActionExecutionPublishingJdo
-        implements HasAsciiDocDescription, ExposeCapturedInteractions {
+        extends ActionExecutionPublishingEntity {
     // ...
 //end::class[]
 
@@ -58,7 +63,7 @@ public class ActionExecutionPublishingJdo
     }
 
     public String title() {
-        return "Action#publishing";
+        return "Action#executionPublishing (JDO)";
     }
 
 //tag::property[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdoEntities.java
similarity index 54%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdoEntities.java
index cade649..8b13ea7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdoEntities.java
@@ -16,34 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.actions.Action.executionPublishing;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-
-import javax.inject.Inject;
+package demoapp.dom.domain.actions.Action.executionPublishing.jdo;
 
+import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Service;
 
-import org.apache.isis.applib.services.repository.RepositoryService;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
+@Profile("demo-jdo")
 @Service
-public class ActionExecutionPublishingJdoEntities {
+public class ActionExecutionPublishingJdoEntities
+extends ValueHolderRepository<String, ActionExecutionPublishingJdo> {
 
-    public Optional<ActionExecutionPublishingJdo> find(final String value) {
-        return repositoryService.firstMatch(ActionExecutionPublishingJdo.class, x -> Objects.equals(x.getProperty(), value));
+    protected ActionExecutionPublishingJdoEntities() {
+        super(ActionExecutionPublishingJdo.class);
     }
 
-    public List<ActionExecutionPublishingJdo> all() {
-        return repositoryService.allInstances(ActionExecutionPublishingJdo.class);
+    @Override
+    protected ActionExecutionPublishingJdo newDetachedEntity(String value) {
+        return new ActionExecutionPublishingJdo(value);
     }
 
-    public ActionExecutionPublishingJdo first() {
-        return all().stream().findFirst().get();
-    }
-
-    @Inject
-    RepositoryService repositoryService;
-
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa-description.adoc
similarity index 89%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa-description.adoc
index 6371dcf..73210e6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa-description.adoc
@@ -22,7 +22,7 @@ The `publisher` element can be specified explicitly using an annotation through
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo.java[tags=annotation]
+include::ActionExecutionPublishingJpa.java[tags=annotation]
 ----
 <.> explicitly specifies that invoking the action should be published.
 
@@ -30,7 +30,7 @@ include::ActionExecutionPublishingJdo.java[tags=annotation]
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo_mixinUpdateProperty.java[tags=class]
+include::../ActionExecutionPublishingEntity_mixinUpdateProperty.java[tags=class]
 ----
 <.> explicitly specifies that invoking the mixin action should be published.
 
@@ -43,7 +43,7 @@ The `publishing` element can also be specified using a custom meta-annotation:
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingEnabledMetaAnnotation.java[tags=class]
+include::../ActionExecutionPublishingEnabledMetaAnnotation.java[tags=class]
 ----
 <.> annotated for an action
 <.> annotation can be applied to an action method or to a mixin
@@ -52,7 +52,7 @@ include::ActionExecutionPublishingEnabledMetaAnnotation.java[tags=class]
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo.java[tags=meta-annotation]
+include::ActionExecutionPublishingJpa.java[tags=meta-annotation]
 ----
 <.> semantic is inherited from the meta-annotation
 
@@ -60,7 +60,7 @@ include::ActionExecutionPublishingJdo.java[tags=meta-annotation]
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotation.java[tags=class]
+include::../ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java[tags=class]
 ----
 <.> semantic is inherited from the meta-annotation
 
@@ -73,7 +73,7 @@ The meta-annotation can itself be overridden:
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo.java[tags=meta-annotation-overridden]
+include::ActionExecutionPublishingJpa.java[tags=meta-annotation-overridden]
 ----
 <.> semantic from meta-annotation ...
 <.> \... is overridden by the `@Action` annotation
@@ -82,7 +82,7 @@ include::ActionExecutionPublishingJdo.java[tags=meta-annotation-overridden]
 +
 [source,java,indent=0]
 ----
-include::ActionExecutionPublishingJdo_mixinUpdatePropertyMetaAnnotationOverridden.java[tags=class]
+include::../ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java[tags=class]
 ----
 <.> semantic from meta-annotation ...
 <.> \... is overridden by the `@Action` annotation
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa.java
similarity index 73%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa.java
index 856b3d3..dcb4801 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa.java
@@ -16,51 +16,64 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.actions.Action.executionPublishing;
+package demoapp.dom.domain.actions.Action.executionPublishing.jpa;
 
-import javax.jdo.annotations.DatastoreIdentity;
-import javax.jdo.annotations.IdGeneratorStrategy;
-import javax.jdo.annotations.IdentityType;
-import javax.jdo.annotations.PersistenceCapable;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.springframework.context.annotation.Profile;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain._interactions.ExposeCapturedInteractions;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingDisabledMetaAnnotation;
+import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingEnabledMetaAnnotation;
+import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingEntity;
+
+@Profile("demo-jpa")
 //tag::class[]
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Entity
+@Table(
+  schema = "demo",
+  name = "ActionExecutionPublishingJpa"
+)
+@EntityListeners(JpaEntityInjectionPointResolver.class)
 @DomainObject(
-        nature=Nature.ENTITY
-        , logicalTypeName = "demo.ActionPublishingJdo"
-        , editing = Editing.DISABLED
+  logicalTypeName = "demo.ActionExecutionPublishingEntity"
 )
-public class ActionExecutionPublishingJdo
-        implements HasAsciiDocDescription, ExposeCapturedInteractions {
+@NoArgsConstructor
+public class ActionExecutionPublishingJpa
+        extends ActionExecutionPublishingEntity {
     // ...
 //end::class[]
 
-    public ActionExecutionPublishingJdo(String initialValue) {
+    public ActionExecutionPublishingJpa(String initialValue) {
         this.property = initialValue;
         this.propertyMetaAnnotated = initialValue;
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
     public String title() {
-        return "Action#publishing";
+        return "Action#executionPublishing (JPA)";
     }
 
+    @Id
+    @GeneratedValue
+    private Long id;
+
 //tag::property[]
     @Property()
     @PropertyLayout(fieldSetId = "annotation", sequence = "1")
@@ -89,7 +102,7 @@ public class ActionExecutionPublishingJdo
         , associateWith = "property"
         , sequence = "1"
     )
-    public ActionExecutionPublishingJdo updatePropertyUsingAnnotation(final String value) {
+    public ActionExecutionPublishingJpa updatePropertyUsingAnnotation(final String value) {
         setProperty(value);
         return this;
     }
@@ -110,7 +123,7 @@ public class ActionExecutionPublishingJdo
         , associateWith = "propertyMetaAnnotated"
         , sequence = "1"
     )
-    public ActionExecutionPublishingJdo updatePropertyUsingMetaAnnotation(final String value) {
+    public ActionExecutionPublishingJpa updatePropertyUsingMetaAnnotation(final String value) {
         setPropertyMetaAnnotated(value);
         return this;
     }
@@ -133,7 +146,7 @@ public class ActionExecutionPublishingJdo
         , associateWith = "propertyMetaAnnotatedOverridden"
         , sequence = "1"
     )
-    public ActionExecutionPublishingJdo updatePropertyUsingMetaAnnotationButOverridden(final String value) {
+    public ActionExecutionPublishingJpa updatePropertyUsingMetaAnnotationButOverridden(final String value) {
         setPropertyMetaAnnotatedOverridden(value);
         return this;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpaEntities.java
similarity index 54%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpaEntities.java
index cade649..6f71972 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingJdoEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpaEntities.java
@@ -16,34 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.actions.Action.executionPublishing;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-
-import javax.inject.Inject;
+package demoapp.dom.domain.actions.Action.executionPublishing.jpa;
 
+import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Service;
 
-import org.apache.isis.applib.services.repository.RepositoryService;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
+@Profile("demo-jpa")
 @Service
-public class ActionExecutionPublishingJdoEntities {
+public class ActionExecutionPublishingJpaEntities
+extends ValueHolderRepository<String, ActionExecutionPublishingJpa> {
 
-    public Optional<ActionExecutionPublishingJdo> find(final String value) {
-        return repositoryService.firstMatch(ActionExecutionPublishingJdo.class, x -> Objects.equals(x.getProperty(), value));
+    protected ActionExecutionPublishingJpaEntities() {
+        super(ActionExecutionPublishingJpa.class);
     }
 
-    public List<ActionExecutionPublishingJdo> all() {
-        return repositoryService.allInstances(ActionExecutionPublishingJdo.class);
+    @Override
+    protected ActionExecutionPublishingJpa newDetachedEntity(String value) {
+        return new ActionExecutionPublishingJpa(value);
     }
 
-    public ActionExecutionPublishingJdo first() {
-        return all().stream().findFirst().get();
-    }
-
-    @Inject
-    RepositoryService repositoryService;
-
 }