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/28 06:27:07 UTC

[isis] branch master updated: ISIS-2513: Demo: prepare DomainObjectEntityChangePublishing for JPA

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 525f22c  ISIS-2513: Demo: prepare DomainObjectEntityChangePublishing for JPA
525f22c is described below

commit 525f22c18c8e3c86b229e74819e4e8abf0f97c74
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 28 08:26:51 2021 +0200

    ISIS-2513: Demo: prepare DomainObjectEntityChangePublishing for JPA
---
 .../dom/_infra/values/ValueHolderRepository.java   | 14 +++-
 ... DomainObjectEntityChangePublishingEntity.java} | 32 +++++----
 ...nObjectEntityChangePublishingEntity.layout.xml} |  0
 ...ublishingEntity_updatePropertyUsingAction.java} | 15 +++--
 ...omainObjectEntityChangePublishingVm_create.java | 25 +++----
 ...omainObjectEntityChangePublishingVm_delete.java | 77 ++++++++++++----------
 ...inObjectEntityChangePublishingVm_updateAll.java | 29 ++++----
 ...bjectEntityChangePublishingDisabledEntity.java} | 29 +++-----
 ...ectEntityChangePublishingDisabledJdo.layout.xml | 59 -----------------
 ...tEntityChangePublishingDisabledJdoEntities.java | 57 ----------------
 ...tityChangePublishingDisabledJdoSeedService.java | 57 ----------------
 ...jectEntityChangePublishingDisabledSeeding.java} | 26 +++-----
 ...hingVm_publishingDisabledAnnotatedEntities.java | 10 +--
 ...ityChangePublishingDisabledJdo-description.adoc |  0
 ...ainObjectEntityChangePublishingDisabledJdo.java | 13 ++--
 ...EntityChangePublishingDisabledJdoEntities.java} | 35 +++++-----
 .../DomainObjectAuditingEnabledJdoEntities.java    | 57 ----------------
 .../DomainObjectAuditingEnabledJdoSeedService.java | 57 ----------------
 ...ObjectEntityChangePublishingEnabledEntity.java} | 27 ++------
 ...jectEntityChangePublishingEnabledJdo.layout.xml | 59 -----------------
 ...bjectEntityChangePublishingEnabledSeeding.java} | 26 +++-----
 ...hingVm_publishingEnabledAnnotatedEntities.java} | 14 ++--
 ...tityChangePublishingEnabledJdo-description.adoc |  0
 ...mainObjectEntityChangePublishingEnabledJdo.java | 13 ++--
 ...tEntityChangePublishingEnabledJdoEntities.java} | 35 +++++-----
 ...hangePublishingEnabledMetaAnnotatedEntity.java} | 29 +++-----
 ...ngePublishingEnabledMetaAnnotatedJdo.layout.xml | 59 -----------------
 ...ePublishingEnabledMetaAnnotatedJdoEntities.java | 57 ----------------
 ...angePublishingEnabledMetaAnnotatedSeeding.java} | 33 ++--------
 ...gVm_publishingEnabledMetaAnnotatedEntities.java | 10 +--
 ...lishingEnabledMetaAnnotatedJdo-description.adoc |  2 +-
 ...ityChangePublishingEnabledMetaAnnotatedJdo.java | 11 ++--
 ...PublishingEnabledMetaAnnotatedJdoEntities.java} | 33 +++++-----
 ...ublishingEnabledMetaAnnotOverriddenEntity.java} | 29 +++-----
 ...shingEnabledMetaAnnotOverriddenJdoEntities.java | 57 ----------------
 ...blishingEnabledMetaAnnotOverriddenSeeding.java} | 35 +++-------
 ...blishingEnabledMetaAnnotOverriddenEntities.java | 10 +--
 ...gEnabledMetaAnnotOverriddenJdo-description.adoc |  2 +-
 ...ngePublishingEnabledMetaAnnotOverriddenJdo.java | 13 ++--
 ...hingEnabledMetaAnnotOverriddenJdoEntities.java} | 30 ++++-----
 40 files changed, 295 insertions(+), 881 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolderRepository.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolderRepository.java
index 4e0cc54..8809db1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolderRepository.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolderRepository.java
@@ -27,11 +27,12 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.services.repository.RepositoryService;
 
-import demoapp.dom.types.Samples;
 import lombok.AccessLevel;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 @RequiredArgsConstructor(access = AccessLevel.PROTECTED)
 public abstract class ValueHolderRepository<T, E extends ValueHolder<T>> {
 
@@ -58,6 +59,15 @@ public abstract class ValueHolderRepository<T, E extends ValueHolder<T>> {
         return all().stream().findFirst();
     }
 
+    public void remove(Object entity) {
+        repositoryService.removeAndFlush(entity);
+    }
+
+    public E create(T value) {
+        return repositoryService.persistAndFlush(newDetachedEntity(value));
+    }
+
+
     // -- SEEDING SUPPORT
 
     @Inject protected Samples<T> samples;
@@ -71,4 +81,6 @@ public abstract class ValueHolderRepository<T, E extends ValueHolder<T>> {
                 .forEach(onSamplePersisted);
     }
 
+
+
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.java
similarity index 60%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.java
index 23517bd..552d0b4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.java
@@ -18,26 +18,32 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing;
 
-import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.Property;
-import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.domain._changes.ExposeCapturedChanges;
 
+@DomainObject(
+        logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity" // shared permissions with concrete sub class
+)
 //tag::class[]
-public interface DomainObjectEntityChangePublishingJdo
-        extends HasAsciiDocDescription, ExposeCapturedChanges {
+public abstract class DomainObjectEntityChangePublishingEntity
+implements
+    HasAsciiDocDescription,
+    ExposeCapturedChanges,
+    ValueHolder<String> {
 
-    @Property(editing = Editing.ENABLED)
-    @PropertyLayout(fieldSetId = "property", sequence = "1")
-    String getProperty();
-    void setProperty(String value);
+    @Override
+    public String value() {
+        return getProperty();
+    }
 
-    @Property(editing = Editing.DISABLED)
-    @PropertyLayout(fieldSetId = "action", sequence = "1")
-    String getPropertyUpdatedByAction();
-    void setPropertyUpdatedByAction(String value);
+    public abstract String getProperty();
+    public abstract void setProperty(String value);
+
+    public abstract String getPropertyUpdatedByAction();
+    public abstract void setPropertyUpdatedByAction(String value);
 
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo_updatePropertyUsingAction.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction.java
similarity index 66%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo_updatePropertyUsingAction.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction.java
index 8169087..0e863d8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo_updatePropertyUsingAction.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction.java
@@ -29,22 +29,23 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
     semantics = SemanticsOf.IDEMPOTENT)
 @ActionLayout(
     associateWith = "propertyUpdatedByAction")
-public class DomainObjectEntityChangePublishingJdo_updatePropertyUsingAction implements HasAsciiDocDescription {
+public class DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction
+        implements HasAsciiDocDescription {
     // ...
 //end::class[]
-    private final DomainObjectEntityChangePublishingJdo domainObjectAuditingJdo;
+    private final DomainObjectEntityChangePublishingEntity domainObjectAuditingEntity;
 
-    public DomainObjectEntityChangePublishingJdo_updatePropertyUsingAction(DomainObjectEntityChangePublishingJdo domainObjectAuditingJdo) {
-        this.domainObjectAuditingJdo = domainObjectAuditingJdo;
+    public DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction(DomainObjectEntityChangePublishingEntity domainObjectAuditingEntity) {
+        this.domainObjectAuditingEntity = domainObjectAuditingEntity;
     }
 
 //tag::class[]
-    public DomainObjectEntityChangePublishingJdo_updatePropertyUsingAction updateProperty(final String value) {
-        domainObjectAuditingJdo.setPropertyUpdatedByAction(value);
+    public DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction updateProperty(final String value) {
+        domainObjectAuditingEntity.setPropertyUpdatedByAction(value);
         return this;
     }
     public String default0UpdateProperty() {
-        return domainObjectAuditingJdo.getPropertyUpdatedByAction();
+        return domainObjectAuditingEntity.getPropertyUpdatedByAction();
     }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_create.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_create.java
index 03d8e15..8d991f9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_create.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_create.java
@@ -25,10 +25,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import demoapp.dom._infra.samples.NameSamples;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities;
+import demoapp.dom._infra.values.ValueHolderRepository;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectEntityChangePublishingEnabledEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity;
 
 //tag::class[]
 @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
@@ -51,16 +52,16 @@ public class DomainObjectEntityChangePublishingVm_create {
             , boolean publishingEnabledMetaAnnotOverridden
     ) {
         if(publishingEnabled) {
-            publishingEnabledJdoEntities.create(newValue);
+            publishingEnabledEntities.create(newValue);
         }
         if(publishingDisabled) {
-            publishingDisabledJdoEntities.create(newValue);
+            publishingDisabledEntities.create(newValue);
         }
         if(publishingEnabledMetaAnnotated) {
-            publishingEnabledMetaAnnotatedJdoEntities.create(newValue);
+            publishingEnabledMetaAnnotatedEntities.create(newValue);
         }
         if(publishingEnabledMetaAnnotOverridden) {
-            publishingEnabledMetaAnnotOverriddenJdoEntities.create(newValue);
+            publishingEnabledMetaAnnotOverriddenEntities.create(newValue);
         }
         return domainObjectAuditingVm;
     }
@@ -81,16 +82,16 @@ public class DomainObjectEntityChangePublishingVm_create {
     }
 
     @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledEntity> publishingEnabledEntities;
 
     @Inject
-    DomainObjectEntityChangePublishingDisabledJdoEntities publishingDisabledJdoEntities;
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingDisabledEntity> publishingDisabledEntities;
 
     @Inject
-    DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities publishingEnabledMetaAnnotatedJdoEntities;
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity> publishingEnabledMetaAnnotatedEntities;
 
     @Inject
-    DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities publishingEnabledMetaAnnotOverriddenJdoEntities;
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity> publishingEnabledMetaAnnotOverriddenEntities;
 
     @Inject
     NameSamples nameSamples;
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_delete.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_delete.java
index 7d4c0f6..6ad1a2e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_delete.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_delete.java
@@ -25,14 +25,11 @@ 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.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdo;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectEntityChangePublishingEnabledJdo;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities;
+import demoapp.dom._infra.values.ValueHolderRepository;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectEntityChangePublishingEnabledEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity;
 
 //tag::class[]
 @Action(semantics = SemanticsOf.IDEMPOTENT)
@@ -47,48 +44,56 @@ public class DomainObjectEntityChangePublishingVm_delete {
     }
 
     public DomainObjectEntityChangePublishingVm act(
-            @Nullable DomainObjectEntityChangePublishingEnabledJdo enabledJdo
-            , @Nullable DomainObjectEntityChangePublishingDisabledJdo disabledJdo
-            , @Nullable DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo metaAnnotatedJdo
-            , @Nullable DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo metaAnnotOverriddenJdo
+            @Nullable DomainObjectEntityChangePublishingEnabledEntity enabledEntity
+            , @Nullable DomainObjectEntityChangePublishingDisabledEntity disabledEntity
+            , @Nullable DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity metaAnnotatedEntity
+            , @Nullable DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity metaAnnotOverriddenEntity
             ) {
-        if(enabledJdo != null) {
-            publishingEnabledJdoEntities.remove(enabledJdo);
+        if(enabledEntity != null) {
+            publishingEnabledEntities.remove(enabledEntity);
         }
-        if(disabledJdo != null) {
-            publishingDisabledJdoEntities.remove(disabledJdo);
+        if(disabledEntity != null) {
+            publishingDisabledEntities.remove(disabledEntity);
         }
-        if(metaAnnotatedJdo != null) {
-            publishingEnabledMetaAnnotatedJdoEntities.remove(metaAnnotatedJdo);
+        if(metaAnnotatedEntity != null) {
+            publishingEnabledMetaAnnotatedEntities.remove(metaAnnotatedEntity);
         }
-        if(metaAnnotOverriddenJdo != null) {
-            publishingEnabledMetaAnnotOverriddenJdoEntities.remove(metaAnnotOverriddenJdo);
+        if(metaAnnotOverriddenEntity != null) {
+            publishingEnabledMetaAnnotOverriddenEntities.remove(metaAnnotOverriddenEntity);
         }
         return domainObjectAuditingVm;
     }
-    public DomainObjectEntityChangePublishingEnabledJdo default0Act() {
-        return publishingEnabledJdoEntities.first().get();
+    public DomainObjectEntityChangePublishingEnabledEntity default0Act() {
+        return publishingEnabledEntities.first().orElse(null);
     }
-    public DomainObjectEntityChangePublishingDisabledJdo default1Act() {
-        return publishingDisabledJdoEntities.first().get();
+    public DomainObjectEntityChangePublishingDisabledEntity default1Act() {
+        return publishingDisabledEntities.first().orElse(null);
     }
-    public DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo default2Act() {
-        return publishingEnabledMetaAnnotatedJdoEntities.first().get();
+    public DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity default2Act() {
+        return publishingEnabledMetaAnnotatedEntities.first().orElse(null);
     }
-    public DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo default3Act() {
-        return publishingEnabledMetaAnnotOverriddenJdoEntities.first().get();
+    public DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity default3Act() {
+        return publishingEnabledMetaAnnotOverriddenEntities.first().orElse(null);
     }
     public String disableAct() {
-        if(!publishingEnabledJdoEntities.first().isPresent()) { return "No EnabledJdo to delete"; }
-        if(!publishingDisabledJdoEntities.first().isPresent()) { return "No DisabledJdo to delete"; }
-        if(!publishingEnabledMetaAnnotatedJdoEntities.first().isPresent()) { return "No MetaAnnotated to delete"; }
-        if(!publishingEnabledMetaAnnotOverriddenJdoEntities.first().isPresent()) { return "No MetaAnnotated But Overridden to delete"; }
+        if(!publishingEnabledEntities.first().isPresent()) { return "No EnabledJdo to delete"; }
+        if(!publishingDisabledEntities.first().isPresent()) { return "No DisabledJdo to delete"; }
+        if(!publishingEnabledMetaAnnotatedEntities.first().isPresent()) { return "No MetaAnnotated to delete"; }
+        if(!publishingEnabledMetaAnnotOverriddenEntities.first().isPresent()) { return "No MetaAnnotated But Overridden to delete"; }
         return null;
     }
 
-    @Inject DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
-    @Inject DomainObjectEntityChangePublishingDisabledJdoEntities publishingDisabledJdoEntities;
-    @Inject DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities publishingEnabledMetaAnnotatedJdoEntities;
-    @Inject DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities publishingEnabledMetaAnnotOverriddenJdoEntities;
+    @Inject
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledEntity> publishingEnabledEntities;
+
+    @Inject
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingDisabledEntity> publishingDisabledEntities;
+
+    @Inject
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity> publishingEnabledMetaAnnotatedEntities;
+
+    @Inject
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity> publishingEnabledMetaAnnotOverriddenEntities;
+
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_updateAll.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_updateAll.java
index d771ff3..9cd13fa 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_updateAll.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_updateAll.java
@@ -27,12 +27,14 @@ 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.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities;
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom._infra.values.ValueHolderRepository;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectEntityChangePublishingEnabledEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity;
+
 //tag::class[]
 @Action(semantics = SemanticsOf.IDEMPOTENT)
 @ActionLayout(
@@ -51,16 +53,16 @@ public class DomainObjectEntityChangePublishingVm_updateAll {
     ) {
 
         if(publishingEnabled) {
-            renumber((List)publishingEnabledJdoEntities.all());
+            renumber((List)publishingEnabledEntities.all());
         }
         if(publishingDisabled) {
-            renumber((List)publishingDisabledJdoEntities.all());
+            renumber((List)publishingDisabledEntities.all());
         }
         if(publishingEnabledMetaAnnotated) {
-            renumber((List)publishingEnabledMetaAnnotatedJdoEntities.all());
+            renumber((List)publishingEnabledMetaAnnotatedEntities.all());
         }
         if(publishingEnabledMetaAnnotOverridden) {
-            renumber((List)publishingEnabledMetaAnnotOverriddenJdoEntities.all());
+            renumber((List)publishingEnabledMetaAnnotOverriddenEntities.all());
         }
 
         return domainObjectAuditingVm;
@@ -79,20 +81,21 @@ public class DomainObjectEntityChangePublishingVm_updateAll {
     }
 
     final static AtomicInteger counter = new AtomicInteger(0);
-    private static void renumber(List<DomainObjectEntityChangePublishingJdo> all) {
+    private static void renumber(List<DomainObjectEntityChangePublishingEntity> all) {
         all.forEach(x -> x.setPropertyUpdatedByAction("Object #" + counter.incrementAndGet()));
     }
 
     @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledEntity> publishingEnabledEntities;
 
     @Inject
-    DomainObjectEntityChangePublishingDisabledJdoEntities publishingDisabledJdoEntities;
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingDisabledEntity> publishingDisabledEntities;
 
     @Inject
-    DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities publishingEnabledMetaAnnotatedJdoEntities;
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity> publishingEnabledMetaAnnotatedEntities;
 
     @Inject
-    DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities publishingEnabledMetaAnnotOverriddenJdoEntities;
+    ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity> publishingEnabledMetaAnnotOverriddenEntities;
+
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledEntity.java
similarity index 55%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledEntity.java
index 20e2eda..b14f6b5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledEntity.java
@@ -16,29 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled;
 
-import java.util.List;
+import org.apache.isis.applib.annotation.DomainObject;
 
-import javax.inject.Inject;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingEntity;
 
-import org.apache.isis.applib.annotation.Collection;
+@DomainObject(
+        logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity" // shared permissions with concrete sub class
+)
+public abstract class DomainObjectEntityChangePublishingDisabledEntity
+extends DomainObjectEntityChangePublishingEntity {
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
-
-@Collection()
-public class DomainObjectAuditingVm_publishingEnabledAnnotatedEntities {
-
-    private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
-
-    public DomainObjectAuditingVm_publishingEnabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
-
-    public List<DomainObjectEntityChangePublishingEnabledJdo> coll() {
-        return publishingEnabledJdoEntities.all();
-    }
-
-    @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdo.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdo.layout.xml
deleted file mode 100644
index 38a7339..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdo.layout.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!-- 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. -->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-	<bs3:row>
-		<bs3:col span="10" unreferencedActions="true">
-			<cpt:domainObject />
-		</bs3:col>
-		<bs3:col span="2">
-			<cpt:fieldSet name="" id="sources" />
-		</bs3:col>
-	</bs3:row>
-
-	<bs3:row>
-		<bs3:col span="6">
-			<bs3:row>
-				<bs3:col span="12">
-					<cpt:fieldSet name="Property edits" id="property"/>
-					<cpt:fieldSet name="Action invocations" id="action"/>
-				</bs3:col>
-			</bs3:row>
-			<bs3:row>
-				<bs3:col span="12">
-					<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-				</bs3:col>
-			</bs3:row>
-		</bs3:col>
-		<bs3:col span="6">
-			<cpt:fieldSet name="Description" id="description" >
-				<cpt:action id="clearHints" position="PANEL" />
-				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="rebuildMetamodel" position="PANEL"/>
-				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
-                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
-				<cpt:property id="description"/>
-			</cpt:fieldSet>
-		</bs3:col>
-	</bs3:row>
-	<bs3:row>
-		<bs3:col span="12" unreferencedCollections="true"/>
-	</bs3:row>
-
-</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdoEntities.java
deleted file mode 100644
index 34880a3..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdoEntities.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.objects.DomainObject.entityChangePublishing.annotated.disabled;
-
-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 DomainObjectEntityChangePublishingDisabledJdoEntities {
-
-    public Optional<DomainObjectEntityChangePublishingDisabledJdo> find(final String value) {
-        return repositoryService.firstMatch(DomainObjectEntityChangePublishingDisabledJdo.class, x -> Objects.equals(x.getProperty(), value));
-    }
-
-    public List<DomainObjectEntityChangePublishingDisabledJdo> all() {
-        return repositoryService.allInstances(DomainObjectEntityChangePublishingDisabledJdo.class);
-    }
-
-    public Optional<DomainObjectEntityChangePublishingDisabledJdo> first() {
-        return all().stream().findFirst();
-    }
-
-    public DomainObjectEntityChangePublishingDisabledJdo create(String newValue) {
-        return repositoryService.persistAndFlush(new DomainObjectEntityChangePublishingDisabledJdo(newValue));
-    }
-
-    public void remove(DomainObjectEntityChangePublishingDisabledJdo disabledJdo) {
-        repositoryService.removeAndFlush(disabledJdo);
-    }
-
-    @Inject
-    RepositoryService repositoryService;
-
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdoSeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdoSeedService.java
deleted file mode 100644
index 1afb548..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdoSeedService.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.objects.DomainObject.entityChangePublishing.annotated.disabled;
-
-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 DomainObjectEntityChangePublishingDisabledJdoSeedService extends SeedServiceAbstract {
-
-    public DomainObjectEntityChangePublishingDisabledJdoSeedService() {
-        super(PropertyPublishingNotJdoEntityFixture::new);
-    }
-
-    static class PropertyPublishingNotJdoEntityFixture extends FixtureScript {
-
-        @Override
-        protected void execute(ExecutionContext executionContext) {
-            samples.stream()
-                    .map(DomainObjectEntityChangePublishingDisabledJdo::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/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledSeeding.java
similarity index 54%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledSeeding.java
index eeac2ad..8aa8920 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledSeeding.java
@@ -18,27 +18,21 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.apache.isis.applib.annotation.Collection;
-
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
-
-@Collection()
-public class DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities {
+import org.springframework.stereotype.Service;
 
-    private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
+import demoapp.dom._infra.seed.SeedServiceAbstract;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
-    public DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
+@Service
+public class DomainObjectEntityChangePublishingDisabledSeeding
+extends SeedServiceAbstract {
 
-    public List<DomainObjectEntityChangePublishingDisabledJdo> coll() {
-        return publishingDisabledJdoEntities.all();
+    @Inject
+    public DomainObjectEntityChangePublishingDisabledSeeding(
+            ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingDisabledEntity> entities) {
+        super(entities);
     }
 
-    @Inject
-    DomainObjectEntityChangePublishingDisabledJdoEntities publishingDisabledJdoEntities;
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities.java
index eeac2ad..5a31cf4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities.java
@@ -24,17 +24,19 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Collection;
 
+import lombok.RequiredArgsConstructor;
+
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jdo.DomainObjectEntityChangePublishingDisabledJdo;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jdo.DomainObjectEntityChangePublishingDisabledJdoEntities;
 
 @Collection()
+@RequiredArgsConstructor
 public class DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities {
 
+    @SuppressWarnings("unused")
     private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
 
-    public DomainObjectEntityChangePublishingVm_publishingDisabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
-
     public List<DomainObjectEntityChangePublishingDisabledJdo> coll() {
         return publishingDisabledJdoEntities.all();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdo-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo-description.adoc
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdo-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo-description.adoc
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo.java
similarity index 85%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo.java
index 5cadb9a..10b0722 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo.java
@@ -16,13 +16,15 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.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.Bounding;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
@@ -33,22 +35,23 @@ import org.apache.isis.applib.annotation.Title;
 import lombok.Getter;
 import lombok.Setter;
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingJdo;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledEntity;
 
+@Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
     nature=Nature.ENTITY
-    , logicalTypeName = "demo.DomainObjectAuditingDisabledJdo"
+    , logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity"
     , entityChangePublishing = Publishing.DISABLED           // <.>
     , bounding = Bounding.BOUNDED
 )
 @DomainObjectLayout(
-    describedAs = "@DomainObject(publishing=DISABLED)"
+    describedAs = "@DomainObject(entityChangePublishing=DISABLED)"
 )
 public class DomainObjectEntityChangePublishingDisabledJdo
-                implements DomainObjectEntityChangePublishingJdo {
+                extends DomainObjectEntityChangePublishingDisabledEntity {
     // ...
 //end::class[]
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdoEntities.java
similarity index 52%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdoEntities.java
index 23517bd..3558252 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdoEntities.java
@@ -16,28 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jdo;
 
-import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.Property;
-import org.apache.isis.applib.annotation.PropertyLayout;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Service;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain._changes.ExposeCapturedChanges;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
-//tag::class[]
-public interface DomainObjectEntityChangePublishingJdo
-        extends HasAsciiDocDescription, ExposeCapturedChanges {
+@Profile("demo-jdo")
+@Service
+public class DomainObjectEntityChangePublishingDisabledJdoEntities
+extends ValueHolderRepository<String, DomainObjectEntityChangePublishingDisabledJdo> {
 
-    @Property(editing = Editing.ENABLED)
-    @PropertyLayout(fieldSetId = "property", sequence = "1")
-    String getProperty();
-    void setProperty(String value);
+    protected DomainObjectEntityChangePublishingDisabledJdoEntities() {
+        super(DomainObjectEntityChangePublishingDisabledJdo.class);
+    }
 
-    @Property(editing = Editing.DISABLED)
-    @PropertyLayout(fieldSetId = "action", sequence = "1")
-    String getPropertyUpdatedByAction();
-    void setPropertyUpdatedByAction(String value);
+    @Override
+    protected DomainObjectEntityChangePublishingDisabledJdo newDetachedEntity(String value) {
+        return new DomainObjectEntityChangePublishingDisabledJdo(value);
+    }
 
-}
-//end::class[]
+}
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingEnabledJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingEnabledJdoEntities.java
deleted file mode 100644
index 26e0a1e..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingEnabledJdoEntities.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.objects.DomainObject.entityChangePublishing.annotated.enabled;
-
-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 DomainObjectAuditingEnabledJdoEntities {
-
-    public Optional<DomainObjectEntityChangePublishingEnabledJdo> find(final String value) {
-        return repositoryService.firstMatch(DomainObjectEntityChangePublishingEnabledJdo.class, x -> Objects.equals(x.getProperty(), value));
-    }
-
-    public List<DomainObjectEntityChangePublishingEnabledJdo> all() {
-        return repositoryService.allInstances(DomainObjectEntityChangePublishingEnabledJdo.class);
-    }
-
-    public Optional<DomainObjectEntityChangePublishingEnabledJdo> first() {
-        return all().stream().findFirst();
-    }
-
-    public DomainObjectEntityChangePublishingEnabledJdo create(String newValue) {
-        return repositoryService.persistAndFlush(new DomainObjectEntityChangePublishingEnabledJdo(newValue));
-    }
-
-    public void remove(DomainObjectEntityChangePublishingEnabledJdo enabledJdo) {
-        repositoryService.removeAndFlush(enabledJdo);
-    }
-
-    @Inject
-    RepositoryService repositoryService;
-
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingEnabledJdoSeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingEnabledJdoSeedService.java
deleted file mode 100644
index 63e6588..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingEnabledJdoSeedService.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.objects.DomainObject.entityChangePublishing.annotated.enabled;
-
-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 DomainObjectAuditingEnabledJdoSeedService extends SeedServiceAbstract {
-
-    public DomainObjectAuditingEnabledJdoSeedService() {
-        super(PropertyPublishingJdoEntityFixture::new);
-    }
-
-    static class PropertyPublishingJdoEntityFixture extends FixtureScript {
-
-        @Override
-        protected void execute(ExecutionContext executionContext) {
-            samples.stream()
-                    .map(DomainObjectEntityChangePublishingEnabledJdo::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/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledEntity.java
similarity index 57%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledEntity.java
index 20e2eda..b71f599 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledEntity.java
@@ -18,27 +18,14 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled;
 
-import java.util.List;
+import org.apache.isis.applib.annotation.DomainObject;
 
-import javax.inject.Inject;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingEntity;
 
-import org.apache.isis.applib.annotation.Collection;
+@DomainObject(
+        logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity" // shared permissions with concrete sub class
+)
+public abstract class DomainObjectEntityChangePublishingEnabledEntity
+extends DomainObjectEntityChangePublishingEntity {
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
-
-@Collection()
-public class DomainObjectAuditingVm_publishingEnabledAnnotatedEntities {
-
-    private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
-
-    public DomainObjectAuditingVm_publishingEnabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
-
-    public List<DomainObjectEntityChangePublishingEnabledJdo> coll() {
-        return publishingEnabledJdoEntities.all();
-    }
-
-    @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledJdo.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledJdo.layout.xml
deleted file mode 100644
index 38a7339..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledJdo.layout.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!-- 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. -->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-	<bs3:row>
-		<bs3:col span="10" unreferencedActions="true">
-			<cpt:domainObject />
-		</bs3:col>
-		<bs3:col span="2">
-			<cpt:fieldSet name="" id="sources" />
-		</bs3:col>
-	</bs3:row>
-
-	<bs3:row>
-		<bs3:col span="6">
-			<bs3:row>
-				<bs3:col span="12">
-					<cpt:fieldSet name="Property edits" id="property"/>
-					<cpt:fieldSet name="Action invocations" id="action"/>
-				</bs3:col>
-			</bs3:row>
-			<bs3:row>
-				<bs3:col span="12">
-					<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-				</bs3:col>
-			</bs3:row>
-		</bs3:col>
-		<bs3:col span="6">
-			<cpt:fieldSet name="Description" id="description" >
-				<cpt:action id="clearHints" position="PANEL" />
-				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="rebuildMetamodel" position="PANEL"/>
-				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
-                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
-				<cpt:property id="description"/>
-			</cpt:fieldSet>
-		</bs3:col>
-	</bs3:row>
-	<bs3:row>
-		<bs3:col span="12" unreferencedCollections="true"/>
-	</bs3:row>
-
-</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledSeeding.java
similarity index 56%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledSeeding.java
index 20e2eda..95d2e89 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledSeeding.java
@@ -18,27 +18,21 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.apache.isis.applib.annotation.Collection;
-
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
-
-@Collection()
-public class DomainObjectAuditingVm_publishingEnabledAnnotatedEntities {
+import org.springframework.stereotype.Service;
 
-    private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
+import demoapp.dom._infra.seed.SeedServiceAbstract;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
-    public DomainObjectAuditingVm_publishingEnabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
+@Service
+public class DomainObjectEntityChangePublishingEnabledSeeding
+extends SeedServiceAbstract {
 
-    public List<DomainObjectEntityChangePublishingEnabledJdo> coll() {
-        return publishingEnabledJdoEntities.all();
+    @Inject
+    public DomainObjectEntityChangePublishingEnabledSeeding(
+            ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledEntity> entities) {
+        super(entities);
     }
 
-    @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities.java
similarity index 71%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities.java
index 20e2eda..ed39456 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities.java
@@ -24,21 +24,23 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Collection;
 
+import lombok.RequiredArgsConstructor;
+
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jdo.DomainObjectEntityChangePublishingEnabledJdo;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jdo.DomainObjectEntityChangePublishingEnabledJdoEntities;
 
 @Collection()
-public class DomainObjectAuditingVm_publishingEnabledAnnotatedEntities {
+@RequiredArgsConstructor
+public class DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities {
 
+    @SuppressWarnings("unused")
     private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
 
-    public DomainObjectAuditingVm_publishingEnabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
-
     public List<DomainObjectEntityChangePublishingEnabledJdo> coll() {
         return publishingEnabledJdoEntities.all();
     }
 
     @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
+    DomainObjectEntityChangePublishingEnabledJdoEntities publishingEnabledJdoEntities;
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledJdo-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo-description.adoc
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledJdo-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo-description.adoc
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo.java
similarity index 85%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo.java
index 4e332fe..1d1840e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo.java
@@ -16,13 +16,15 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.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.Bounding;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
@@ -33,22 +35,23 @@ import org.apache.isis.applib.annotation.Title;
 import lombok.Getter;
 import lombok.Setter;
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingJdo;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectEntityChangePublishingEnabledEntity;
 
+@Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
     nature=Nature.ENTITY
-    , logicalTypeName = "demo.DomainObjectAuditingEnabledJdo"
+    , logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity"
     , entityChangePublishing = Publishing.ENABLED            // <.>
     , bounding = Bounding.BOUNDED
 )
 @DomainObjectLayout(
-    describedAs = "@DomainObject(publishing=ENABLED)"
+    describedAs = "@DomainObject(entityChangePublishing=ENABLED)"
 )
 public class DomainObjectEntityChangePublishingEnabledJdo
-                implements DomainObjectEntityChangePublishingJdo {
+                extends DomainObjectEntityChangePublishingEnabledEntity {
     // ...
 //end::class[]
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdoEntities.java
similarity index 52%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdoEntities.java
index 23517bd..3cc8c99 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdoEntities.java
@@ -16,28 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jdo;
 
-import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.Property;
-import org.apache.isis.applib.annotation.PropertyLayout;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Service;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain._changes.ExposeCapturedChanges;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
-//tag::class[]
-public interface DomainObjectEntityChangePublishingJdo
-        extends HasAsciiDocDescription, ExposeCapturedChanges {
+@Profile("demo-jdo")
+@Service
+public class DomainObjectEntityChangePublishingEnabledJdoEntities
+extends ValueHolderRepository<String, DomainObjectEntityChangePublishingEnabledJdo> {
 
-    @Property(editing = Editing.ENABLED)
-    @PropertyLayout(fieldSetId = "property", sequence = "1")
-    String getProperty();
-    void setProperty(String value);
+    protected DomainObjectEntityChangePublishingEnabledJdoEntities() {
+        super(DomainObjectEntityChangePublishingEnabledJdo.class);
+    }
 
-    @Property(editing = Editing.DISABLED)
-    @PropertyLayout(fieldSetId = "action", sequence = "1")
-    String getPropertyUpdatedByAction();
-    void setPropertyUpdatedByAction(String value);
+    @Override
+    protected DomainObjectEntityChangePublishingEnabledJdo newDetachedEntity(String value) {
+        return new DomainObjectEntityChangePublishingEnabledJdo(value);
+    }
 
-}
-//end::class[]
+}
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity.java
similarity index 55%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity.java
index 20e2eda..8b5e6d5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity.java
@@ -16,29 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled;
 
-import java.util.List;
+import org.apache.isis.applib.annotation.DomainObject;
 
-import javax.inject.Inject;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingEntity;
 
-import org.apache.isis.applib.annotation.Collection;
+@DomainObject(
+        logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity" // shared permissions with concrete sub class
+)
+public abstract class DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity
+extends DomainObjectEntityChangePublishingEntity {
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
-
-@Collection()
-public class DomainObjectAuditingVm_publishingEnabledAnnotatedEntities {
-
-    private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
-
-    public DomainObjectAuditingVm_publishingEnabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
-
-    public List<DomainObjectEntityChangePublishingEnabledJdo> coll() {
-        return publishingEnabledJdoEntities.all();
-    }
-
-    @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.layout.xml
deleted file mode 100644
index 38a7339..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.layout.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!-- 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. -->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-	<bs3:row>
-		<bs3:col span="10" unreferencedActions="true">
-			<cpt:domainObject />
-		</bs3:col>
-		<bs3:col span="2">
-			<cpt:fieldSet name="" id="sources" />
-		</bs3:col>
-	</bs3:row>
-
-	<bs3:row>
-		<bs3:col span="6">
-			<bs3:row>
-				<bs3:col span="12">
-					<cpt:fieldSet name="Property edits" id="property"/>
-					<cpt:fieldSet name="Action invocations" id="action"/>
-				</bs3:col>
-			</bs3:row>
-			<bs3:row>
-				<bs3:col span="12">
-					<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-				</bs3:col>
-			</bs3:row>
-		</bs3:col>
-		<bs3:col span="6">
-			<cpt:fieldSet name="Description" id="description" >
-				<cpt:action id="clearHints" position="PANEL" />
-				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="rebuildMetamodel" position="PANEL"/>
-				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
-                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
-				<cpt:property id="description"/>
-			</cpt:fieldSet>
-		</bs3:col>
-	</bs3:row>
-	<bs3:row>
-		<bs3:col span="12" unreferencedCollections="true"/>
-	</bs3:row>
-
-</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities.java
deleted file mode 100644
index b56439c..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities.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.objects.DomainObject.entityChangePublishing.metaAnnot.enabled;
-
-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 DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities {
-
-    public Optional<DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo> find(final String value) {
-        return repositoryService.firstMatch(DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.class, x -> Objects.equals(x.getProperty(), value));
-    }
-
-    public List<DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo> all() {
-        return repositoryService.allInstances(DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.class);
-    }
-
-    public Optional<DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo> first() {
-        return all().stream().findFirst();
-    }
-
-    public DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo create(String newValue) {
-        return repositoryService.persistAndFlush(new DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo(newValue));
-    }
-
-    public void remove(DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo enabledJdo) {
-        repositoryService.removeAndFlush(enabledJdo);
-    }
-
-    @Inject
-    RepositoryService repositoryService;
-
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedSeeding.java
similarity index 56%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedSeeding.java
index b04b1dd..e351f79 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedSeeding.java
@@ -22,36 +22,17 @@ 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;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
 @Service
-public class DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService extends SeedServiceAbstract {
+public class DomainObjectEntityChangePublishingEnabledMetaAnnotatedSeeding
+extends SeedServiceAbstract {
 
-    public DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService() {
-        super(PropertyPublishingJdoEntityFixture::new);
+    @Inject
+    public DomainObjectEntityChangePublishingEnabledMetaAnnotatedSeeding(
+            ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity> entities) {
+        super(entities);
     }
 
-    static class PropertyPublishingJdoEntityFixture extends FixtureScript {
-
-        @Override
-        protected void execute(ExecutionContext executionContext) {
-            samples.stream()
-                    .map(DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo::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/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotatedEntities.java
index 43e9014..0be80a8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotatedEntities.java
@@ -24,17 +24,19 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Collection;
 
+import lombok.RequiredArgsConstructor;
+
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jdo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jdo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities;
 
 @Collection()
+@RequiredArgsConstructor
 public class DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotatedEntities {
 
+    @SuppressWarnings("unused")
     private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
 
-    public DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
-
     public List<DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo> coll() {
         return publishingEnabledJdoEntities.all();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo-description.adoc
similarity index 93%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo-description.adoc
index e00d436..154724c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo-description.adoc
@@ -8,7 +8,7 @@ The `entityChangePublishing` element can also be specified using a custom meta-a
 +
 [source,java]
 ----
-include::../DomainObjectEntityChangePublishingEnabledMetaAnnotation.java[tags=class]
+include::../../DomainObjectEntityChangePublishingEnabledMetaAnnotation.java[tags=class]
 ----
 <.> annotated for a domain object
 <.> annotation can be applied to the type or a further meta-annotation type only
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java
similarity index 87%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java
index ea40205..d2791a1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java
@@ -16,13 +16,15 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.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.Bounding;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
@@ -32,23 +34,24 @@ import org.apache.isis.applib.annotation.Title;
 import lombok.Getter;
 import lombok.Setter;
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingJdo;
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.DomainObjectEntityChangePublishingEnabledMetaAnnotation;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity;
 
+@Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObjectEntityChangePublishingEnabledMetaAnnotation                    // <.>
 @DomainObject(
     nature=Nature.ENTITY
-    , logicalTypeName = "demo.DomainObjectAuditingEnabledMetaAnnotatedJdo"
+    , logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity"
     , bounding = Bounding.BOUNDED
 )
 @DomainObjectLayout(
     describedAs = "@DomainObjectAuditingEnabledMetaAnnotation"
 )
 public class DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo
-                implements DomainObjectEntityChangePublishingJdo {
+                extends DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity {
     // ...
 //end::class[]
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities.java
similarity index 53%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities.java
index 23517bd..c153c9c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities.java
@@ -16,28 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jdo;
 
-import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.Property;
-import org.apache.isis.applib.annotation.PropertyLayout;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Service;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain._changes.ExposeCapturedChanges;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
-//tag::class[]
-public interface DomainObjectEntityChangePublishingJdo
-        extends HasAsciiDocDescription, ExposeCapturedChanges {
+@Profile("demo-jdo")
+@Service
+public class DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities
+extends ValueHolderRepository<String, DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo> {
 
-    @Property(editing = Editing.ENABLED)
-    @PropertyLayout(fieldSetId = "property", sequence = "1")
-    String getProperty();
-    void setProperty(String value);
+    protected DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities() {
+        super(DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.class);
+    }
 
-    @Property(editing = Editing.DISABLED)
-    @PropertyLayout(fieldSetId = "action", sequence = "1")
-    String getPropertyUpdatedByAction();
-    void setPropertyUpdatedByAction(String value);
+    @Override
+    protected DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo newDetachedEntity(String value) {
+        return new DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo(value);
+    }
 
 }
-//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity.java
similarity index 55%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity.java
index 20e2eda..56124c9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity.java
@@ -16,29 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled;
 
-import java.util.List;
+import org.apache.isis.applib.annotation.DomainObject;
 
-import javax.inject.Inject;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingEntity;
 
-import org.apache.isis.applib.annotation.Collection;
+@DomainObject(
+        logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity" // shared permissions with concrete sub class
+)
+public abstract class DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity
+extends DomainObjectEntityChangePublishingEntity {
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
-
-@Collection()
-public class DomainObjectAuditingVm_publishingEnabledAnnotatedEntities {
-
-    private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
-
-    public DomainObjectAuditingVm_publishingEnabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
-
-    public List<DomainObjectEntityChangePublishingEnabledJdo> coll() {
-        return publishingEnabledJdoEntities.all();
-    }
-
-    @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities.java
deleted file mode 100644
index 7f70ba6..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities.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.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled;
-
-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 DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities {
-
-    public Optional<DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo> find(final String value) {
-        return repositoryService.firstMatch(DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.class, x -> Objects.equals(x.getProperty(), value));
-    }
-
-    public List<DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo> all() {
-        return repositoryService.allInstances(DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.class);
-    }
-
-    public Optional<DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo> first() {
-        return all().stream().findFirst();
-    }
-
-    public DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo create(String newValue) {
-        return repositoryService.persistAndFlush(new DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo(newValue));
-    }
-
-    public void remove(DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo enabledJdo) {
-        repositoryService.removeAndFlush(enabledJdo);
-    }
-
-    @Inject
-    RepositoryService repositoryService;
-
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenSeeding.java
similarity index 56%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenSeeding.java
index 907d67d..0c62082 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenSeeding.java
@@ -22,36 +22,17 @@ 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;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
 @Service
-public class DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService extends SeedServiceAbstract {
+public class DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenSeeding
+extends SeedServiceAbstract {
 
-    public DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService() {
-        super(PropertyPublishingJdoEntityFixture::new);
+    @Inject
+    public DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenSeeding(
+            ValueHolderRepository<String, ? extends DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity> entities) {
+        super(entities);
     }
 
-    static class PropertyPublishingJdoEntityFixture extends FixtureScript {
-
-        @Override
-        protected void execute(ExecutionContext executionContext) {
-            samples.stream()
-                    .map(DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo::new)
-                    .forEach(domainObject -> {
-                        repositoryService.persist(domainObject);
-                        executionContext.addResult(this, domainObject);
-                    });
-
-        }
-
-        @Inject
-        RepositoryService repositoryService;
-
-        @Inject
-        Samples<String> samples;
-    }
-}
+}
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotOverriddenEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotOverriddenEntities.java
index e160700..617bfed 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotOverriddenEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotOverriddenEntities.java
@@ -24,17 +24,19 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Collection;
 
+import lombok.RequiredArgsConstructor;
+
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jdo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jdo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities;
 
 @Collection()
+@RequiredArgsConstructor
 public class DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotOverriddenEntities {
 
+    @SuppressWarnings("unused")
     private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
 
-    public DomainObjectEntityChangePublishingVm_publishingEnabledMetaAnnotOverriddenEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
-    }
-
     public List<DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo> coll() {
         return publishingEnabledJdoEntities.all();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo-description.adoc
similarity index 94%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo-description.adoc
index d63556a..26b6ab8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo-description.adoc
@@ -10,7 +10,7 @@ The `entityChangePublishing` element can also be specified using a custom meta-a
 +
 [source,java]
 ----
-include::../DomainObjectEntityChangePublishingDisabledMetaAnnotation.java[tags=class]
+include::../../DomainObjectEntityChangePublishingDisabledMetaAnnotation.java[tags=class]
 ----
 <.> annotated for a domain object
 <.> annotation can be applied to the type or a further meta-annotation type only
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java
similarity index 86%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java
index 3729e11..bb0f6ef 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java
@@ -16,13 +16,15 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.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.Bounding;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
@@ -33,26 +35,27 @@ import org.apache.isis.applib.annotation.Title;
 import lombok.Getter;
 import lombok.Setter;
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingJdo;
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.DomainObjectEntityChangePublishingDisabledMetaAnnotation;
+import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity;
 
+@Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObjectEntityChangePublishingDisabledMetaAnnotation                   // <.>
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.DomainObjectAuditingEnabledMetaAnnotOverriddenJdo"
+        , logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity"
         , entityChangePublishing = Publishing.ENABLED         // <.>
         , bounding = Bounding.BOUNDED
 )
 @DomainObjectLayout(
     describedAs =
         "@DomainObjectAuditingDisabledMetaAnnotation " +
-        "@DomainObject(publishing=ENABLED)"
+        "@DomainObject(entityChangePublishing=ENABLED)"
 )
 public class DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo
-        implements DomainObjectEntityChangePublishingJdo {
+        extends DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity {
     // ...
 //end::class[]
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities.java
similarity index 52%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities.java
index 20e2eda..ace8fdb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectAuditingVm_publishingEnabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities.java
@@ -16,29 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled;
+package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jdo;
 
-import java.util.List;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Service;
 
-import javax.inject.Inject;
+import demoapp.dom._infra.values.ValueHolderRepository;
 
-import org.apache.isis.applib.annotation.Collection;
+@Profile("demo-jdo")
+@Service
+public class DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities
+extends ValueHolderRepository<String, DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo> {
 
-import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
-
-@Collection()
-public class DomainObjectAuditingVm_publishingEnabledAnnotatedEntities {
-
-    private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
-
-    public DomainObjectAuditingVm_publishingEnabledAnnotatedEntities(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
-        this.domainObjectAuditingVm = domainObjectAuditingVm;
+    protected DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities() {
+        super(DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.class);
     }
 
-    public List<DomainObjectEntityChangePublishingEnabledJdo> coll() {
-        return publishingEnabledJdoEntities.all();
+    @Override
+    protected DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo newDetachedEntity(String value) {
+        return new DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo(value);
     }
 
-    @Inject
-    DomainObjectAuditingEnabledJdoEntities publishingEnabledJdoEntities;
 }