You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/05/04 08:40:49 UTC

[causeway] branch CAUSEWAY-2485 updated (9bc08ae5ee -> 4a1c463e88)

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

danhaywood pushed a change to branch CAUSEWAY-2485
in repository https://gitbox.apache.org/repos/asf/causeway.git


    from 9bc08ae5ee CAUSEWAY-2485: updates @CollectionLayout#tableDecorator
     add 8b8fc8007d Bump cucumber.version from 7.11.2 to 7.12.0
     add 750032427b Merge pull request #1617 from apache/dependabot/maven/master/cucumber.version-7.12.0
     add a30af47746 Bump jsoup from 1.15.4 to 1.16.1
     add 0f2080d5fb Merge pull request #1618 from apache/dependabot/maven/master/org.jsoup-jsoup-1.16.1
     add b5de4d571e Bump flexmark-all from 0.64.0 to 0.64.2
     add 3e67f9141d Merge pull request #1619 from apache/dependabot/maven/master/com.vladsch.flexmark-flexmark-all-0.64.2
     add 4f6827c792 CAUSEWAY-2968: don't fail hard with SynthesizeDomainEventsForMixinPostProcessor
     add db31fd7023 CAUSEWAY-2968: adding test cases
     add 163ca4c84f Bump flexmark-all from 0.64.2 to 0.64.4
     add 2b965bec9c Merge pull request #1623 from apache/dependabot/maven/master/com.vladsch.flexmark-flexmark-all-0.64.4
     add bf099f6a22 Bump checker-qual from 3.33.0 to 3.34.0
     add 6275d32291 Merge pull request #1624 from apache/dependabot/maven/master/org.checkerframework-checker-qual-3.34.0
     add ca04d71b96 Bump javaparser-core from 3.25.2 to 3.25.3
     add 309658d098 Merge pull request #1625 from apache/dependabot/maven/master/com.github.javaparser-javaparser-core-3.25.3
     new 4a1c463e88 CAUSEWAY-2485: wip on embedded types

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 bom/pom.xml                                        |  4 +-
 ...ynthesizeDomainEventsForMixinPostProcessor.java | 51 +++++++-----
 .../src/main/java/demoapp/dom/DemoModuleJpa.java   |  2 +-
 .../embedded/{embedded => }/ComplexNumber.java     |  2 +-
 .../samples => }/ComplexNumberSamples.java         |  3 +-
 .../persistence => }/NumberConstantEntity.java     |  3 +-
 .../persistence => }/NumberConstantSeeding.java    |  3 +-
 .../{embedded => }/jdo/ComplexNumberJdo.java       |  4 +-
 .../jdo/ComplexNumberJdoValueSemantics.java        |  8 +-
 .../EmbeddedTypeMenuJdo.java}                      | 17 ++--
 .../EmbeddedTypePageJdo-description.adoc}          | 22 ++---
 .../EmbeddedTypePageJdo.java}                      |  9 ++-
 .../EmbeddedTypePageJdo.layout.xml}                |  0
 .../jdo/NumberConstantJdo-description.adoc         |  0
 .../{embedded => }/jdo/NumberConstantJdo.java      |  8 +-
 .../jdo/NumberConstantJdo.layout.xml               |  0
 .../{embedded => }/jdo/NumberConstantJdo.svg       |  0
 .../jdo/NumberConstantJdoRepository.java           |  4 +-
 .../jdo/NumberConstantJdo_updateNumber.java        |  2 +-
 .../{embedded => }/jpa/ComplexNumberJpa.java       | 49 +++---------
 .../jpa/ComplexNumberJpaValueSemantics.java        | 78 +++++++-----------
 .../embedded/jpa/ComplexNumberJpa_default.java     | 37 +++++++++
 .../EmbeddedTypeMenuJpa.java}                      | 19 +++--
 .../EmbeddedTypePageJpa-description.adoc}          | 47 +++++------
 .../EmbeddedTypePageJpa.java}                      | 15 ++--
 .../EmbeddedTypePageJpa.layout.xml}                |  0
 .../jpa/NumberConstantJpa-description.adoc         |  0
 .../{embedded => }/jpa/NumberConstantJpa.java      | 10 +--
 .../jpa/NumberConstantJpa.layout.xml               |  0
 .../{embedded => }/jpa/NumberConstantJpa.svg       |  0
 .../jpa/NumberConstantJpaRepository.java           |  4 +-
 .../jpa/NumberConstantJpa_updateNumber.java        |  2 +-
 .../mixins/mixins/CountHolder_explanation.java     |  6 +-
 .../mixins/CountHolder_fibonacciSequence.java      |  1 -
 .../mixins/mixins/CountHolder_updateCount.java     |  8 +-
 .../progmodel/objects/mixins/mixins/MixinMenu.java |  4 +-
 ...description.adoc => MixinPage-description.adoc} | 39 +++++----
 .../mixins/mixins/{MixinVm.java => MixinPage.java} | 13 +--
 .../{MixinVm.layout.xml => MixinPage.layout.xml}   |  0
 .../src/main/java/demoapp/dom/menubars.layout.xml  | 37 ++++-----
 .../core/eventbusservice/EventLogEntryJpa.java     |  5 ++
 .../customvaluetypes/ComplexNumberJdo_Test.java    |  2 +-
 .../DomainModelTest_usingBadDomain.java            | 17 ++++
 .../bad/Configuration_usingInvalidDomain.java      |  2 +-
 .../testdomain/model/bad/InvalidElementTypes.java  | 93 ++++++++++++++++++++++
 .../applib/validate/DomainModelValidator.java      | 26 ++++++
 tooling/javamodel/pom.xml                          |  2 +-
 tooling/pom.xml                                    |  2 +-
 valuetypes/markdown/pom.xml                        |  2 +-
 49 files changed, 398 insertions(+), 264 deletions(-)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/ComplexNumber.java (95%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/samples => }/ComplexNumberSamples.java (89%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/persistence => }/NumberConstantEntity.java (90%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/persistence => }/NumberConstantSeeding.java (89%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jdo/ComplexNumberJdo.java (95%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jdo/ComplexNumberJdoValueSemantics.java (95%)
 copy examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/EmbeddedTypeMenu.java => jdo/EmbeddedTypeMenuJdo.java} (81%)
 copy examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/EmbeddedTypeVm-description.adoc => jdo/EmbeddedTypePageJdo-description.adoc} (85%)
 copy examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/EmbeddedTypeVm.java => jdo/EmbeddedTypePageJdo.java} (84%)
 copy examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/EmbeddedTypeVm.layout.xml => jdo/EmbeddedTypePageJdo.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jdo/NumberConstantJdo-description.adoc (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jdo/NumberConstantJdo.java (89%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jdo/NumberConstantJdo.layout.xml (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jdo/NumberConstantJdo.svg (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jdo/NumberConstantJdoRepository.java (91%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jdo/NumberConstantJdo_updateNumber.java (96%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jpa/ComplexNumberJpa.java (55%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jpa/ComplexNumberJpaValueSemantics.java (64%)
 create mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpa_default.java
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/EmbeddedTypeMenu.java => jpa/EmbeddedTypeMenuJpa.java} (77%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/EmbeddedTypeVm-description.adoc => jpa/EmbeddedTypePageJpa-description.adoc} (69%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/EmbeddedTypeVm.java => jpa/EmbeddedTypePageJpa.java} (84%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded/EmbeddedTypeVm.layout.xml => jpa/EmbeddedTypePageJpa.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jpa/NumberConstantJpa-description.adoc (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jpa/NumberConstantJpa.java (87%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jpa/NumberConstantJpa.layout.xml (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jpa/NumberConstantJpa.svg (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jpa/NumberConstantJpaRepository.java (91%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/{embedded => }/jpa/NumberConstantJpa_updateNumber.java (96%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/{MixinVm-description.adoc => MixinPage-description.adoc} (59%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/{MixinVm.java => MixinPage.java} (90%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/{MixinVm.layout.xml => MixinPage.layout.xml} (100%)
 create mode 100644 regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/bad/InvalidElementTypes.java


[causeway] 01/01: CAUSEWAY-2485: wip on embedded types

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch CAUSEWAY-2485
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 4a1c463e88c2762d2dae9edf84f97d20ad644dff
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu May 4 09:40:31 2023 +0100

    CAUSEWAY-2485: wip on embedded types
---
 .../src/main/java/demoapp/dom/DemoModuleJpa.java   |  2 +-
 .../embedded/{embedded => }/ComplexNumber.java     |  2 +-
 .../samples => }/ComplexNumberSamples.java         |  3 +-
 .../persistence => }/NumberConstantEntity.java     |  3 +-
 .../persistence => }/NumberConstantSeeding.java    |  3 +-
 .../{embedded => }/jdo/ComplexNumberJdo.java       |  4 +-
 .../jdo/ComplexNumberJdoValueSemantics.java        |  8 +--
 .../EmbeddedTypeMenuJdo.java}                      | 17 ++---
 .../EmbeddedTypePageJdo-description.adoc}          | 22 +++---
 .../EmbeddedTypePageJdo.java}                      |  9 +--
 .../EmbeddedTypePageJdo.layout.xml}                |  0
 .../jdo/NumberConstantJdo-description.adoc         |  0
 .../{embedded => }/jdo/NumberConstantJdo.java      |  8 +--
 .../jdo/NumberConstantJdo.layout.xml               |  0
 .../{embedded => }/jdo/NumberConstantJdo.svg       |  0
 .../jdo/NumberConstantJdoRepository.java           |  4 +-
 .../jdo/NumberConstantJdo_updateNumber.java        |  2 +-
 .../{embedded => }/jpa/ComplexNumberJpa.java       | 49 +++-----------
 .../jpa/ComplexNumberJpaValueSemantics.java        | 78 +++++++++-------------
 .../embedded/jpa/ComplexNumberJpa_default.java     | 37 ++++++++++
 .../EmbeddedTypeMenuJpa.java}                      | 19 +++---
 .../EmbeddedTypePageJpa-description.adoc}          | 47 ++++++-------
 .../EmbeddedTypePageJpa.java}                      | 15 +++--
 .../EmbeddedTypePageJpa.layout.xml}                |  0
 .../jpa/NumberConstantJpa-description.adoc         |  0
 .../{embedded => }/jpa/NumberConstantJpa.java      | 10 +--
 .../jpa/NumberConstantJpa.layout.xml               |  0
 .../{embedded => }/jpa/NumberConstantJpa.svg       |  0
 .../jpa/NumberConstantJpaRepository.java           |  4 +-
 .../jpa/NumberConstantJpa_updateNumber.java        |  2 +-
 .../mixins/mixins/CountHolder_explanation.java     |  6 +-
 .../mixins/CountHolder_fibonacciSequence.java      |  1 -
 .../mixins/mixins/CountHolder_updateCount.java     |  8 +--
 .../progmodel/objects/mixins/mixins/MixinMenu.java |  4 +-
 ...description.adoc => MixinPage-description.adoc} | 39 +++++++----
 .../mixins/mixins/{MixinVm.java => MixinPage.java} | 13 ++--
 .../{MixinVm.layout.xml => MixinPage.layout.xml}   |  0
 .../src/main/java/demoapp/dom/menubars.layout.xml  | 37 +++++-----
 .../core/eventbusservice/EventLogEntryJpa.java     |  5 ++
 .../customvaluetypes/ComplexNumberJdo_Test.java    |  2 +-
 40 files changed, 225 insertions(+), 238 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
index 428aa868d1..b34f301d87 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
@@ -50,7 +50,7 @@ import demoapp.dom.domain.objects.DomainObjectLayout.named.jpa.DomainObjectLayou
 import demoapp.dom.domain.objects.DomainObjectLayout.paged.jpa.DomainObjectLayoutPagedJpa;
 import demoapp.dom.domain.objects.DomainObjectLayout.tabledec.jpa.DomainObjectLayoutTableDecoratorJpa;
 import demoapp.dom.domain.objects.DomainObjectLayout.xxxUiEvent.jpa.DomainObjectLayoutXxxUiEventJpa;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.jpa.NumberConstantJpa;
+import demoapp.dom.domain.progmodel.objects.embedded.jpa.NumberConstantJpa;
 import demoapp.dom.domain.properties.Property.commandPublishing.jpa.PropertyCommandPublishingJpa;
 import demoapp.dom.domain.properties.Property.editing.jpa.PropertyEditingJpa;
 import demoapp.dom.domain.properties.Property.executionPublishing.jpa.PropertyExecutionPublishingJpa;
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/ComplexNumber.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/ComplexNumber.java
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/ComplexNumber.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/ComplexNumber.java
index b90163a1d6..7c0e560c92 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/ComplexNumber.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/ComplexNumber.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded;
+package demoapp.dom.domain.progmodel.objects.embedded;
 
 import lombok.Value;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/samples/ComplexNumberSamples.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/ComplexNumberSamples.java
similarity index 89%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/samples/ComplexNumberSamples.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/ComplexNumberSamples.java
index e445f1bff6..523764edd4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/samples/ComplexNumberSamples.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/ComplexNumberSamples.java
@@ -18,13 +18,12 @@
  *
  */
 
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.samples;
+package demoapp.dom.domain.progmodel.objects.embedded;
 
 import java.util.stream.Stream;
 
 import org.springframework.stereotype.Service;
 
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
 import demoapp.dom.types.Samples;
 
 @Service
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/persistence/NumberConstantEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/NumberConstantEntity.java
similarity index 90%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/persistence/NumberConstantEntity.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/NumberConstantEntity.java
index af48e9e240..6aab9924e2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/persistence/NumberConstantEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/NumberConstantEntity.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.persistence;
+package demoapp.dom.domain.progmodel.objects.embedded;
 
 import javax.inject.Named;
 
@@ -25,7 +25,6 @@ import org.apache.causeway.applib.annotation.Property;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
 
 @Named("demo.NumberConstantEntity") // shared permissions with concrete sub class
 @DomainObject
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/persistence/NumberConstantSeeding.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/NumberConstantSeeding.java
similarity index 89%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/persistence/NumberConstantSeeding.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/NumberConstantSeeding.java
index 7713845c91..df29b39e9f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/persistence/NumberConstantSeeding.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/NumberConstantSeeding.java
@@ -18,7 +18,7 @@
  *
  */
 
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.persistence;
+package demoapp.dom.domain.progmodel.objects.embedded;
 
 import javax.inject.Inject;
 
@@ -26,7 +26,6 @@ import org.springframework.stereotype.Service;
 
 import demoapp.dom._infra.seed.SeedServiceAbstract;
 import demoapp.dom._infra.values.ValueHolderRepository;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
 
 @Service
 public class NumberConstantSeeding
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/ComplexNumberJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/ComplexNumberJdo.java
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/ComplexNumberJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/ComplexNumberJdo.java
index 49d4a69664..726254e70e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/ComplexNumberJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/ComplexNumberJdo.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jdo;
+package demoapp.dom.domain.progmodel.objects.embedded.jdo;
 
 import java.util.Optional;
 import java.util.regex.Matcher;
@@ -28,7 +28,7 @@ import org.apache.causeway.applib.annotation.Value;
 import lombok.AccessLevel;
 import lombok.val;
 
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
+import demoapp.dom.domain.progmodel.objects.embedded.ComplexNumber;
 
 // tag::class[]
 @javax.jdo.annotations.PersistenceCapable                               // <.>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/ComplexNumberJdoValueSemantics.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/ComplexNumberJdoValueSemantics.java
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/ComplexNumberJdoValueSemantics.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/ComplexNumberJdoValueSemantics.java
index e5b64d95d4..6974334a8b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/ComplexNumberJdoValueSemantics.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/ComplexNumberJdoValueSemantics.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jdo;
+package demoapp.dom.domain.progmodel.objects.embedded.jdo;
 
 import org.springframework.stereotype.Component;
 
@@ -49,9 +49,6 @@ public class ComplexNumberJdoValueSemantics
  // tag::getRenderer[]
      @Override
      public Renderer<ComplexNumberJdo> getRenderer() {
- // end::getRenderer[]
-         // ...
- // tag::getRenderer[]
          return new Renderer<ComplexNumberJdo>() {
              @Override
              public String titlePresentation(final ValueSemanticsProvider.Context context, final ComplexNumberJdo object) {
@@ -63,9 +60,6 @@ public class ComplexNumberJdoValueSemantics
 // tag::getParser[]
     @Override
     public Parser<ComplexNumberJdo> getParser() {
-// end::getParser[]
-        // ...
-// tag::getParser[]
         return new Parser<ComplexNumberJdo>() {
             @Override
             public ComplexNumberJdo parseTextRepresentation(final ValueSemanticsProvider.Context context, final String entry) {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypeMenuJdo.java
similarity index 81%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeMenu.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypeMenuJdo.java
index 8160ff87c6..c67f92041c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypeMenuJdo.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded;
+package demoapp.dom.domain.progmodel.objects.embedded.jdo;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -28,21 +28,22 @@ import org.apache.causeway.applib.annotation.NatureOfService;
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.applib.services.factory.FactoryService;
 
+import org.springframework.context.annotation.Profile;
+
 import lombok.RequiredArgsConstructor;
 
-@Named("demo.EmbeddedTypeMenu")
-@DomainService(
-        nature=NatureOfService.VIEW
-)
+@Profile("demo-jdo")
+@Named("demo.EmbeddedTypeMenuJdo")
+@DomainService(nature=NatureOfService.VIEW)
 @javax.annotation.Priority(PriorityPrecedence.EARLY)
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class EmbeddedTypeMenu {
+public class EmbeddedTypeMenuJdo {
 
     private final FactoryService factoryService;
 
     @Action
     @ActionLayout(cssClassFa="fa-stop-circle", describedAs = "Experimental support for embedded types")
-    public EmbeddedTypeVm embeddedTypes(){
-        return factoryService.viewModel(new EmbeddedTypeVm());
+    public EmbeddedTypePageJdo embeddedTypes(){
+        return factoryService.viewModel(new EmbeddedTypePageJdo());
     }
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypePageJdo-description.adoc
similarity index 85%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm-description.adoc
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypePageJdo-description.adoc
index a9a89e5efd..da065c18fa 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypePageJdo-description.adoc
@@ -5,19 +5,19 @@ These are somewhat similar to value types, in that they have no identity and are
 They can also have custom behaviour.
 
 However, they are not quite true value types as the ORM needs to update their fields directly.
-Ensuring that The mutator method can be made `private`
+To enable that, a mutator method is required, though it can be made `private`
 
 CAUTION: This is still work in progress, see link:https://issues.apache.org/jira/browse/CAUSEWAY-1695[CAUSEWAY-1695].
 
 == View model and collection
 
-The page shows the `EmbeddedTypeVm`.
+The page shows the `EmbeddedTypePage`.
 This simply has a collection of `NumberConstantJdo` entities:
 
 [source,java]
 .EmbeddedTypeVm.java
 ----
-include::EmbeddedTypeVm.java[tags=class]
+include::EmbeddedTypePageJdo.java[tags=class]
 ----
 
 The `NumberConstantJdo` entity in turn declares a `name` property and a `complexNumber` property of type `ComplexNumberJdo`.
@@ -55,14 +55,14 @@ This class defines some behaviour:
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdo.java[tags=title]
+include::ComplexNumberJdo.java[tags=title]
 ----
 
 * how to parse a string:
 +
 [source,java]
 ----
-include::jdo/ComplexNumberJdo.java[tags=parse,indent=0]
+include::ComplexNumberJdo.java[tags=parse,indent=0]
 ----
 +
 This is used by the "value semantics provider", discussed in the next section.
@@ -73,7 +73,7 @@ The `NumberConstantJdo_updateNumber` mixin allows the value of the complex numbe
 [source,java]
 .NumberConstantJdo_updateNumber.java
 ----
-include::jdo/NumberConstantJdo_updateNumber.java[tags=class]
+include::NumberConstantJdo_updateNumber.java[tags=class]
 ----
 
 
@@ -84,7 +84,7 @@ As mentioned in the previous section, the framework uses an implementation of `V
 [source,java]
 .ComplexNumberJdoValueSemantics.java
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=class]
+include::ComplexNumberJdoValueSemantics.java[tags=class]
 ----
 
 where:
@@ -93,14 +93,14 @@ where:
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=getRenderer]
+include::ComplexNumberJdoValueSemantics.java[tags=getRenderer]
 ----
 
 * `getParser()` is responsible for parsing the entered string (for either an editable property or a parameter):
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=getParser]
+include::ComplexNumberJdoValueSemantics.java[tags=getParser]
 ----
 +
 In this case the implementation just delegates to the `ComplexNumberJdo` class itself.
@@ -109,13 +109,13 @@ In this case the implementation just delegates to the `ComplexNumberJdo` class i
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=getEncoderDecoder]
+include::ComplexNumberJdoValueSemantics.java[tags=getEncoderDecoder]
 ----
 
 * `getDefaultsProvider()` returns the default value to be used for non-optional parameters and properties:
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=getDefaultsProvider]
+include::ComplexNumberJdoValueSemantics.java[tags=getDefaultsProvider]
 ----
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypePageJdo.java
similarity index 84%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypePageJdo.java
index cc9c0e3918..30725b75fb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypePageJdo.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded;
+package demoapp.dom.domain.progmodel.objects.embedded.jdo;
 
 import java.util.List;
 
@@ -30,12 +30,13 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.persistence.NumberConstantEntity;
+import demoapp.dom.domain.progmodel.objects.embedded.ComplexNumber;
+import demoapp.dom.domain.progmodel.objects.embedded.NumberConstantEntity;
 
 // tag::class[]
-@Named("demo.EmbeddedTypeVm")
+@Named("demo.EmbeddedTypePageJdo")
 @DomainObject(nature=Nature.VIEW_MODEL)
-public class EmbeddedTypeVm implements HasAsciiDocDescription {
+public class EmbeddedTypePageJdo implements HasAsciiDocDescription {
 
     // ...
 // end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypePageJdo.layout.xml
similarity index 100%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.layout.xml
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/EmbeddedTypePageJdo.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo-description.adoc
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo-description.adoc
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo.java
similarity index 89%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo.java
index 654c120042..08532419ba 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jdo;
+package demoapp.dom.domain.progmodel.objects.embedded.jdo;
 
 import javax.inject.Named;
 import javax.jdo.annotations.Column;
@@ -36,14 +36,14 @@ import org.apache.causeway.applib.annotation.Property;
 import lombok.Getter;
 import lombok.Setter;
 
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.persistence.NumberConstantEntity;
+import demoapp.dom.domain.progmodel.objects.embedded.ComplexNumber;
+import demoapp.dom.domain.progmodel.objects.embedded.NumberConstantEntity;
 
 @Profile("demo-jdo")
 //tag::class[]
+@Named("demo.NumberConstantEntityJdo")
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo" )
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@Named("demo.NumberConstantEntity")
 @DomainObject
 public class NumberConstantJdo
         extends NumberConstantEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo.svg b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo.svg
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo.svg
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo.svg
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdoRepository.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdoRepository.java
similarity index 91%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdoRepository.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdoRepository.java
index a6ed83096b..ab8089bd9e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdoRepository.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdoRepository.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jdo;
+package demoapp.dom.domain.progmodel.objects.embedded.jdo;
 
 import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Service;
@@ -24,7 +24,7 @@ import org.springframework.stereotype.Service;
 import lombok.val;
 
 import demoapp.dom._infra.values.ValueHolderRepository;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
+import demoapp.dom.domain.progmodel.objects.embedded.ComplexNumber;
 
 @Profile("demo-jdo")
 @Service
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo_updateNumber.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo_updateNumber.java
similarity index 96%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo_updateNumber.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo_updateNumber.java
index 47f85737be..3edf5a2ce1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jdo/NumberConstantJdo_updateNumber.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jdo/NumberConstantJdo_updateNumber.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jdo;
+package demoapp.dom.domain.progmodel.objects.embedded.jdo;
 
 import org.springframework.context.annotation.Profile;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/ComplexNumberJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpa.java
similarity index 55%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/ComplexNumberJpa.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpa.java
index 974fd582c4..846a03d395 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/ComplexNumberJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpa.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jpa;
+package demoapp.dom.domain.progmodel.objects.embedded.jpa;
 
 import java.util.Optional;
 import java.util.regex.Matcher;
@@ -24,62 +24,31 @@ import java.util.regex.Pattern;
 
 import org.apache.causeway.applib.annotation.ObjectSupport;
 import org.apache.causeway.applib.annotation.Value;
+import org.apache.causeway.applib.annotation.ValueSemantics;
 
 import lombok.AccessLevel;
 import lombok.val;
 
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
+import demoapp.dom.domain.progmodel.objects.embedded.ComplexNumber;
 
 // tag::class[]
-//@Entity                                                               // <.>
-@javax.persistence.Embeddable                                           // <.>
-@Value                                                                  // <.>
-@lombok.Getter                                                          // <.>
-@lombok.Setter(AccessLevel.PRIVATE)                                     // <.>
+@javax.persistence.Embeddable                                       // <.>
+@Value                                                              // <.>
+@lombok.Getter                                                      // <.>
+@lombok.Setter(AccessLevel.PRIVATE)                                 // <.>
 @lombok.AllArgsConstructor(staticName = "of")
 @lombok.NoArgsConstructor
 public class ComplexNumberJpa
         implements ComplexNumber {
 
     @javax.persistence.Column(nullable = false)
-    private double re;
+    private double re;                                              // <.>
 
     @javax.persistence.Column(nullable = false)
-    private double im;
+    private double im;                                              // <.>
 
 // end::class[]
 
-// tag::title[]
-    @ObjectSupport public String title() {
-        return im >= 0
-                ? "" + re + " + " +  im + "i"
-                : "" + re + " - " + (-im) + "i";
-    }
-// end::title[]
-
-// tag::parse[]
-    private static final Pattern PATTERN =
-        Pattern.compile("^(?<re>\\S*)\\W*(?<sign>[+-])\\W*(?<im>\\S+)i$");
-
-    public static Optional<ComplexNumberJpa> parse(final String parse) {
-        val m = PATTERN.matcher(parse);
-        return m.matches() ?
-                Optional.of(ComplexNumberJpa.of(
-                    realFrom(m), signFrom(m) * imaginaryFrom(m)))
-                : Optional.empty();
-    }
-
-    private static double realFrom(final Matcher m) {
-        return Double.parseDouble(m.group("re"));
-    }
-    private static double signFrom(final Matcher m) {
-        return m.group("sign").equals("-") ? -1.0d : +1.0d;
-    }
-    private static double imaginaryFrom(final Matcher m) {
-        return Double.parseDouble(m.group("im"));
-    }
-// end::parse[]
-
 // tag::class[]
     // ...
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/ComplexNumberJpaValueSemantics.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpaValueSemantics.java
similarity index 64%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/ComplexNumberJpaValueSemantics.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpaValueSemantics.java
index 2ae9d23269..465149cd5c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/ComplexNumberJpaValueSemantics.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpaValueSemantics.java
@@ -16,26 +16,30 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jpa;
+package demoapp.dom.domain.progmodel.objects.embedded.jpa;
 
+import javax.inject.Named;
+
+import org.springframework.context.annotation.Import;
 import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.util.schema.CommonDtoUtils;
 import org.apache.causeway.applib.value.semantics.DefaultsProvider;
-import org.apache.causeway.applib.value.semantics.Parser;
 import org.apache.causeway.applib.value.semantics.Renderer;
 import org.apache.causeway.applib.value.semantics.ValueDecomposition;
 import org.apache.causeway.applib.value.semantics.ValueSemanticsAbstract;
-import org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Profile("demo-jpa")
 // tag::class[]
+@Named("demo.ComplexNumberJpaValueSemantics")
 @Component
+@Import({
+        ComplexNumberJpa_default.class      // <.>
+})
 public class ComplexNumberJpaValueSemantics
-        extends ValueSemanticsAbstract<ComplexNumberJpa>{
-
+        extends ValueSemanticsAbstract<ComplexNumberJpa> {
 // end::class[]
 
     @Override
@@ -48,44 +52,14 @@ public class ComplexNumberJpaValueSemantics
         return ValueType.COMPOSITE;
     }
 
-// tag::getRenderer[]
-    @Override
-    public Renderer<ComplexNumberJpa> getRenderer() {
-// end::getRenderer[]
-        // ...
-// tag::getRenderer[]
-        return new Renderer<ComplexNumberJpa>() {
-            @Override
-            public String titlePresentation(final ValueSemanticsProvider.Context context, final ComplexNumberJpa object) {
-                return object!=null ? object.title() : "NaN";
-            }
-        };
-    }
-// end::getRenderer[]
-// tag::getParser[]
+// tag::getDefaultsProvider[]
     @Override
-    public Parser<ComplexNumberJpa> getParser() {
-// end::getParser[]
-        // ...
-// tag::getParser[]
-        return new Parser<ComplexNumberJpa>() {
-            @Override
-            public ComplexNumberJpa parseTextRepresentation(final ValueSemanticsProvider.Context context, final String entry) {
-                return ComplexNumberJpa.parse(entry).orElse(null);
-            }
-            @Override
-            public int typicalLength() {
-                return 30;
-            }
-            @Override
-            public String parseableTextRepresentation(final ValueSemanticsProvider.Context context, final ComplexNumberJpa existing) {
-                return existing!=null ? existing.title() : null;
-            }
-        };
+    public DefaultsProvider<ComplexNumberJpa> getDefaultsProvider() {
+        return ()-> ComplexNumberJpa.of(0, 0);
     }
-// end::getParser[]
+// end::getDefaultsProvider[]
 
-// tag::getEncoderDecoder[]
+// tag::compose[]
     @Override
     public ValueDecomposition decompose(final ComplexNumberJpa value) {
         return CommonDtoUtils.typedTupleBuilder(value)
@@ -103,17 +77,25 @@ public class ComplexNumberJpaValueSemantics
                         (Double)map.get("im")))
                 .orElse(null);
     }
-// end::getEncoderDecoder[]
+// end::compose[]
 
-// tag::getDefaultsProvider[]
+// tag::getRenderer[]
     @Override
-    public DefaultsProvider<ComplexNumberJpa> getDefaultsProvider() {
-// end::getDefaultsProvider[]
-        // ...
-// tag::getDefaultsProvider[]
-        return ()-> ComplexNumberJpa.of(0, 0);
+    public Renderer<ComplexNumberJpa> getRenderer() {
+        return (context, object) -> title(object, "NaN");
     }
-// end::getDefaultsProvider[]
+
+    private static String title(ComplexNumberJpa complexNumber, final String fallbackIfNull) {
+        if (complexNumber == null) return fallbackIfNull;
+        return complexNumber.getRe() +
+                (complexNumber.getIm() >= 0
+                        ? (" + " +  complexNumber.getIm())
+                        : (" - " + (-complexNumber.getIm())))
+                + "i";
+    }
+
+// end::getRenderer[]
+
 // tag::class[]
 }
 // end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpa_default.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpa_default.java
new file mode 100644
index 0000000000..ed642ebb77
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/ComplexNumberJpa_default.java
@@ -0,0 +1,37 @@
+package demoapp.dom.domain.progmodel.objects.embedded.jpa;
+
+import lombok.RequiredArgsConstructor;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.MemberSupport;
+import org.apache.causeway.applib.annotation.PromptStyle;
+import org.apache.causeway.applib.annotation.SemanticsOf;
+
+// tag::default-mixin[]
+// ...
+@Action(semantics = SemanticsOf.SAFE)
+@ActionLayout(promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
+@RequiredArgsConstructor
+public class ComplexNumberJpa_default {
+
+    private final ComplexNumberJpa mixee;
+
+    @MemberSupport
+    public ComplexNumberJpa act(
+            final double re,
+            final double im
+    ) {
+        return ComplexNumberJpa.of(re, im);
+    }
+
+    @MemberSupport
+    public double defaultRe() {
+        return mixee.getRe();
+    }
+
+    @MemberSupport
+    public double defaultIm() {
+        return mixee.getIm();
+    }
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypeMenuJpa.java
similarity index 77%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeMenu.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypeMenuJpa.java
index 8160ff87c6..59204c5a16 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypeMenuJpa.java
@@ -16,11 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded;
+package demoapp.dom.domain.progmodel.objects.embedded.jpa;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.springframework.context.annotation.Profile;
+
 import org.apache.causeway.applib.annotation.Action;
 import org.apache.causeway.applib.annotation.ActionLayout;
 import org.apache.causeway.applib.annotation.DomainService;
@@ -30,19 +32,20 @@ import org.apache.causeway.applib.services.factory.FactoryService;
 
 import lombok.RequiredArgsConstructor;
 
-@Named("demo.EmbeddedTypeMenu")
-@DomainService(
-        nature=NatureOfService.VIEW
-)
+import demoapp.dom.domain.progmodel.objects.embedded.jdo.EmbeddedTypePageJdo;
+
+@Profile("demo-jpa")
+@Named("demo.EmbeddedTypeMenuJpa")
+@DomainService(nature=NatureOfService.VIEW)
 @javax.annotation.Priority(PriorityPrecedence.EARLY)
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class EmbeddedTypeMenu {
+public class EmbeddedTypeMenuJpa {
 
     private final FactoryService factoryService;
 
     @Action
     @ActionLayout(cssClassFa="fa-stop-circle", describedAs = "Experimental support for embedded types")
-    public EmbeddedTypeVm embeddedTypes(){
-        return factoryService.viewModel(new EmbeddedTypeVm());
+    public EmbeddedTypePageJpa embeddedTypes(){
+        return factoryService.viewModel(new EmbeddedTypePageJpa());
     }
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypePageJpa-description.adoc
similarity index 69%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypePageJpa-description.adoc
index a9a89e5efd..78aac4a6cc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypePageJpa-description.adoc
@@ -5,42 +5,33 @@ These are somewhat similar to value types, in that they have no identity and are
 They can also have custom behaviour.
 
 However, they are not quite true value types as the ORM needs to update their fields directly.
-Ensuring that The mutator method can be made `private`
+To enable that, a mutator method is required, though it can be made `private`
 
 CAUTION: This is still work in progress, see link:https://issues.apache.org/jira/browse/CAUSEWAY-1695[CAUSEWAY-1695].
 
-== View model and collection
+== How this demo works
 
-The page shows the `EmbeddedTypeVm`.
-This simply has a collection of `NumberConstantJdo` entities:
+This page object has a collection `allConstants` that just returns a set of `NumberConstantJpa` entities.
+The `NumberConstantJpa` entity defines a `name` property (of type `String) and a `numberConstant` property (of type `ComplexNumberJpa`).
+It is this second property that we are interested in:
 
 [source,java]
-.EmbeddedTypeVm.java
+.NumberConstantJpa.java
 ----
-include::EmbeddedTypeVm.java[tags=class]
+include::NumberConstantJpa.java[tags=class]
 ----
+<.> JPA `@Embedded` annotation indicates that the constituent parts of the embedded type should be stored as columns of the owning entity
 
-The `NumberConstantJdo` entity in turn declares a `name` property and a `complexNumber` property of type `ComplexNumberJdo`.
-This latter property is an embedded type:
 
-[source,java]
-.NumberConstantJdo.java
-----
-include::NumberConstantJdo.java[tags=class]
-----
-<.> JDO `@Embedded` annotation inlines the constituent parts of the value type as columns of the owning entity
-<.> maps the 'ComplexNumber.re' property to column `number_re`
-<.> maps the 'ComplexNumber.im' property to column `number_im`
-
-== Embedded (value) type
+== Embedded type
 
-The `ComplexNumberJdo` type must also be annotated as embedded.
+The `ComplexNumberJpa` type must also be annotated as embedded.
 We also annotate it with `@Value`; this instructs the framework how to interact with the type:
 
 [source,java]
 .ComplexNumberJdo.java
 ----
-include::ComplexNumberJdo.java[tags=class]
+include::ComplexNumberJpa.java[tags=class]
 ----
 <.> Indicates to the ORM that this _is_ persisted data ...
 <.> \... but can only be embedded.
@@ -55,14 +46,14 @@ This class defines some behaviour:
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdo.java[tags=title]
+include::ComplexNumberJpa.java[tags=title]
 ----
 
 * how to parse a string:
 +
 [source,java]
 ----
-include::jdo/ComplexNumberJdo.java[tags=parse,indent=0]
+include::ComplexNumberJpa.java[tags=parse,indent=0]
 ----
 +
 This is used by the "value semantics provider", discussed in the next section.
@@ -73,7 +64,7 @@ The `NumberConstantJdo_updateNumber` mixin allows the value of the complex numbe
 [source,java]
 .NumberConstantJdo_updateNumber.java
 ----
-include::jdo/NumberConstantJdo_updateNumber.java[tags=class]
+include::NumberConstantJpa_updateNumber.java[tags=class]
 ----
 
 
@@ -84,7 +75,7 @@ As mentioned in the previous section, the framework uses an implementation of `V
 [source,java]
 .ComplexNumberJdoValueSemantics.java
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=class]
+include::ComplexNumberJpaValueSemantics.java[tags=class]
 ----
 
 where:
@@ -93,14 +84,14 @@ where:
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=getRenderer]
+include::ComplexNumberJpaValueSemantics.java[tags=getRenderer]
 ----
 
 * `getParser()` is responsible for parsing the entered string (for either an editable property or a parameter):
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=getParser]
+include::ComplexNumberJpaValueSemantics.java[tags=getParser]
 ----
 +
 In this case the implementation just delegates to the `ComplexNumberJdo` class itself.
@@ -109,13 +100,13 @@ In this case the implementation just delegates to the `ComplexNumberJdo` class i
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=getEncoderDecoder]
+include::ComplexNumberJpaValueSemantics.java[tags=getEncoderDecoder]
 ----
 
 * `getDefaultsProvider()` returns the default value to be used for non-optional parameters and properties:
 +
 [source,java,indent=0]
 ----
-include::jdo/ComplexNumberJdoValueSemantics.java[tags=getDefaultsProvider]
+include::ComplexNumberJpaValueSemantics.java[tags=getDefaultsProvider]
 ----
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypePageJpa.java
similarity index 84%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypePageJpa.java
index cc9c0e3918..7b5d301e06 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypePageJpa.java
@@ -16,7 +16,12 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded;
+package demoapp.dom.domain.progmodel.objects.embedded.jpa;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom._infra.values.ValueHolderRepository;
+import demoapp.dom.domain.progmodel.objects.embedded.ComplexNumber;
+import demoapp.dom.domain.progmodel.objects.embedded.NumberConstantEntity;
 
 import java.util.List;
 
@@ -28,14 +33,10 @@ import org.apache.causeway.applib.annotation.DomainObject;
 import org.apache.causeway.applib.annotation.Nature;
 import org.apache.causeway.applib.annotation.ObjectSupport;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom._infra.values.ValueHolderRepository;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.persistence.NumberConstantEntity;
-
 // tag::class[]
-@Named("demo.EmbeddedTypeVm")
+@Named("demo.EmbeddedTypePageJpa")
 @DomainObject(nature=Nature.VIEW_MODEL)
-public class EmbeddedTypeVm implements HasAsciiDocDescription {
+public class EmbeddedTypePageJpa implements HasAsciiDocDescription {
 
     // ...
 // end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypePageJpa.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/EmbeddedTypeVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/EmbeddedTypePageJpa.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa-description.adoc
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa-description.adoc
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa.java
similarity index 87%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa.java
index 8e52c9d03b..71e38545ee 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jpa;
+package demoapp.dom.domain.progmodel.objects.embedded.jpa;
 
 import javax.inject.Named;
 import javax.persistence.Entity;
@@ -37,8 +37,8 @@ import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.persistence.NumberConstantEntity;
+import demoapp.dom.domain.progmodel.objects.embedded.ComplexNumber;
+import demoapp.dom.domain.progmodel.objects.embedded.NumberConstantEntity;
 
 @Profile("demo-jpa")
 //tag::class[]
@@ -48,7 +48,7 @@ import demoapp.dom.domain.progmodel.objects.embedded.embedded.persistence.Number
       name = "NumberConstantJpa"
 )
 @EntityListeners(CausewayEntityListener.class)
-@Named("demo.NumberConstantEntity")
+@Named("demo.NumberConstantEntityJpa")
 @DomainObject
 @NoArgsConstructor
 public class NumberConstantJpa
@@ -76,7 +76,7 @@ public class NumberConstantJpa
     @Getter @Setter
     private String name;
 
-    @javax.persistence.Embedded
+    @javax.persistence.Embedded                 // <.>
     @Property(editing = Editing.ENABLED)
     @Getter @Setter
     private ComplexNumberJpa number;
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa.svg b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa.svg
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa.svg
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa.svg
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpaRepository.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpaRepository.java
similarity index 91%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpaRepository.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpaRepository.java
index aea658d0a4..182cd8fab5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpaRepository.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpaRepository.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jpa;
+package demoapp.dom.domain.progmodel.objects.embedded.jpa;
 
 import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Service;
@@ -24,7 +24,7 @@ import org.springframework.stereotype.Service;
 import lombok.val;
 
 import demoapp.dom._infra.values.ValueHolderRepository;
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.ComplexNumber;
+import demoapp.dom.domain.progmodel.objects.embedded.ComplexNumber;
 
 @Profile("demo-jpa")
 @Service
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa_updateNumber.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa_updateNumber.java
similarity index 96%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa_updateNumber.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa_updateNumber.java
index 1172016a94..e7e90b7604 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/embedded/jpa/NumberConstantJpa_updateNumber.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/embedded/jpa/NumberConstantJpa_updateNumber.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.progmodel.objects.embedded.embedded.jpa;
+package demoapp.dom.domain.progmodel.objects.embedded.jpa;
 
 import org.springframework.context.annotation.Profile;
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_explanation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_explanation.java
index 980b2bab2e..60a3dec7eb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_explanation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_explanation.java
@@ -24,12 +24,12 @@ import org.apache.causeway.applib.annotation.PropertyLayout;
 import lombok.RequiredArgsConstructor;
 
 //tag::class[]
-@Property                                   // <.>
+@Property                                                   // <.>
 @PropertyLayout(fieldSetId = "properties", sequence = "1")
-@RequiredArgsConstructor                    // <.>
+@RequiredArgsConstructor                                    // <.>
 public class CountHolder_explanation {
 
-    private final CountHolder holder;       // <.>
+    private final CountHolder holder;                       // <.>
 
     public String prop() {
         return String.format(
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_fibonacciSequence.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_fibonacciSequence.java
index 6d40d38928..f2c413b38c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_fibonacciSequence.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_fibonacciSequence.java
@@ -46,7 +46,6 @@ public class CountHolder_fibonacciSequence {
 
         return collection;
     }
-
     private static int fibonacciFor(int n) {
         // ...
 // end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_updateCount.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_updateCount.java
index eeb98febe8..6d6ccc2355 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_updateCount.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/CountHolder_updateCount.java
@@ -25,10 +25,8 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 import lombok.RequiredArgsConstructor;
 
 //tag::class[]
-@Action
-@ActionLayout(
-        associateWith = "count")        // <.>
-
+@Action                                 // <.>
+@ActionLayout(associateWith = "count")
 @RequiredArgsConstructor                // <.>
 public class CountHolder_updateCount {
 
@@ -38,11 +36,9 @@ public class CountHolder_updateCount {
         holder.setCount(count);
         return holder;
     }
-
     @MemberSupport public int default0Act() {
         return holder.getCount();
     }
-
     @MemberSupport public String validate0Act(final int proposedCount) {
         return proposedCount >= 0 && proposedCount <= 46
                 ? null
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinMenu.java
index 8ea74f96fd..78f75bea7d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinMenu.java
@@ -37,8 +37,8 @@ public class MixinMenu {
 
     @Action
     @ActionLayout(cssClassFa="fa-mortar-pestle", describedAs="Contribute behaviour to domain objects")
-    public MixinVm mixins(){
-        val vm = new MixinVm();
+    public MixinPage mixins(){
+        val vm = new MixinPage();
         vm.setCount(10);
         return vm;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinPage-description.adoc
similarity index 59%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinPage-description.adoc
index ac1e190fe1..e57c7a092b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinPage-description.adoc
@@ -4,24 +4,29 @@
 Mixins allow domain object behaviour to be encapsulated as a separate class.
 This behaviour is then contributed to a target object as an action, property or collection.
 
-Mixins only contribute behaviour, not state.
-In the case of a contributed property or collection, these are in effect _derived_.
-Behind the scenes a query is run against the contributing object.
+Mixins contribute only behaviour, not state.
+In the case of a contributed property or collection (that seemingly show state), these are in effect _derived_.
+Behind the scenes a query is run against the contributee (or mixee) object.
 
-The contributee object is injected into the mixin through its (1-arg) constructor.
-Note that any type can be used, including interfaces.
+The framework instantiates the mixin by injecting the contributee/mixee object into the mixin through its (1-arg) constructor.
+All mixins that declare a constructor compatible with the mixee's type contribute to that mixee's metamodel; this includes interfaces.
 
-The examples contribute to the following class, which holds a simple non-editable "count" integer property:
+== How this demo works
+
+This page object shows examples of all three types of mixins: a mixin action, a mixin property and a mixin collection.
+
+=== Mixin action
+
+The page object itself has a single read-only property, `count`:
 
 [source,java]
-.MixinVm.java
+.MixinPage.java
 ----
-include::MixinVm.java[tags=class]
+include::MixinPage.java[tags=class]
 ----
 <.> editing disabled; it will be modified through a mixin
 
-The mixins contribute behaviour to list the first N fibonacci numbers.
-They don't contribute directly to the concrete `MixinVm` class, however; since all they require is a count value, they instead contribute to the `CountHolder` interface that the `MixinVm` class implements:
+It also implements an interface, `CountHolder`.
 
 [source,java]
 .CountHolder.java
@@ -29,9 +34,10 @@ They don't contribute directly to the concrete `MixinVm` class, however; since a
 include::CountHolder.java[tags=class]
 ----
 
-=== Contributed action
+A mixin action allows this to be modified.
+The examples contribute to the following class, which holds a simple non-editable "count" integer property:
 
-The `CountHolder_updateCount` mixin allows the count to be updated within a certain range:
+The `CountHolder_updateCount` mixin action contributes by way of this `CountHolder` interface:
 
 [source,java]
 .CountHolder_updateCount.java
@@ -42,9 +48,13 @@ include::CountHolder_updateCount.java[tags=class]
 <.> useful lombok annotation to generate the 1-arg constructor
 <.> the contributee
 
+The mixin class's name comes in two parts.
+The convention is for the first part (before the "_") to be the type name, while the action id is the second part (after the "_", in other words "updateCount").
+
+
 === Contributed collection
 
-The `CountHolder_fibonacciSequence` mixin dynamically computes the first N number of fibonacci numbers:
+The `CountHolder_fibonacciSequence` mixin collection dynamically computes the first N number of fibonacci numbers:
 
 [source,java]
 .CountHolder_fibonacciSequence.java
@@ -55,9 +65,10 @@ include::CountHolder_fibonacciSequence.java[tags=class]
 <.> useful lombok annotation to generate the 1-arg constructor
 <.> the contributee
 
+
 === Contributed property
 
-The `CountHolder_explanation` mixin simply provides a property that explains what's going on:
+The `CountHolder_explanation` mixin property simply provides an explanat what's going on:
 
 [source,java]
 .CountHolder_explanation.java
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinPage.java
similarity index 90%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinPage.java
index 074900b948..ccf306fbfc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinPage.java
@@ -35,18 +35,21 @@ import lombok.Setter;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
-//tag::class[]
-@XmlRootElement(name = "Demo")
+@Named("demo.MixinPage")
+@XmlRootElement(name = "demo.MixinPage")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo.MixinVm")
 @DomainObject(nature=Nature.VIEW_MODEL)
-public class MixinVm implements HasAsciiDocDescription, CountHolder {
-
+//tag::class[]
+// ...
+public class MixinPage implements HasAsciiDocDescription, CountHolder {
+    // ...
+//end::class[]
     @ObjectSupport public String title() {
         return "Mixins";
     }
 
+//tag::class[]
     @Property(editing = Editing.DISABLED)           // <.>
     @Getter @Setter
     private int count;
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinPage.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/progmodel/objects/mixins/mixins/MixinPage.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
index 56b8e29b78..23c0850535 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
@@ -23,7 +23,7 @@ For latest we use: https://raw.githubusercontent.com/apache/causeway/master/anto
     <mb3:primary>
 
         <mb3:menu>
-            <mb3:named>@DomainObject</mb3:named>
+            <mb3:named>Domain Objects</mb3:named>
             <mb3:section>
                 <mb3:named>@DomainObject</mb3:named>
                 <mb3:serviceAction objectType="demo.DomainObjectMenu" id="aliased"/>
@@ -48,10 +48,16 @@ For latest we use: https://raw.githubusercontent.com/apache/causeway/master/anto
                 <mb3:serviceAction objectType="demo.DomainObjectLayoutMenu" id="tableDecorator"/>
                 <mb3:serviceAction objectType="demo.DomainObjectLayoutMenu" id="uiEvents"/>
             </mb3:section>
+            <mb3:section>
+                <mb3:named>Prog Model</mb3:named>
+                <mb3:serviceAction objectType="demo.MixinMenu" id="mixins"/>
+                <mb3:serviceAction objectType="demo.EmbeddedTypeMenuJpa" id="embeddedTypes"/>
+                <mb3:serviceAction objectType="demo.EmbeddedTypeMenuJdo" id="embeddedTypes"/>
+            </mb3:section>
         </mb3:menu>
 
         <mb3:menu>
-            <mb3:named>@Action</mb3:named>
+            <mb3:named>Actions</mb3:named>
             <mb3:section>
                 <mb3:named>@Action</mb3:named>
                 <mb3:serviceAction objectType="demo.ActionMenu" id="choicesFrom"/>
@@ -76,10 +82,17 @@ For latest we use: https://raw.githubusercontent.com/apache/causeway/master/anto
                 <mb3:serviceAction objectType="demo.ActionLayoutMenu" id="redirectPolicy"/>
                 <mb3:serviceAction objectType="demo.ActionLayoutMenu" id="sequence"/>
             </mb3:section>
+            <mb3:section>
+                <mb3:named>Prog Model</mb3:named>
+                <mb3:serviceAction objectType="demo.AssociatedActionMenu" id="associatedActions"/>
+                <mb3:serviceAction objectType="demo.DependentArgsActionMenu" id="dependentArgsActions">
+                    <cpt:named>Dependent Arguments</cpt:named>
+                </mb3:serviceAction>
+            </mb3:section>
         </mb3:menu>
 
         <mb3:menu>
-            <mb3:named>@Property</mb3:named>
+            <mb3:named>Properties</mb3:named>
             <mb3:section>
                 <mb3:named>@Property</mb3:named>
                 <mb3:serviceAction objectType="demo.PropertyMenu" id="commandPublishing"/>
@@ -114,7 +127,7 @@ For latest we use: https://raw.githubusercontent.com/apache/causeway/master/anto
         </mb3:menu>
 
         <mb3:menu>
-            <mb3:named>@Collection</mb3:named>
+            <mb3:named>Collections</mb3:named>
             <mb3:section>
                 <mb3:named>@Collection</mb3:named>
                 <mb3:serviceAction objectType="demo.CollectionMenu" id="domainEvent"/>
@@ -134,22 +147,6 @@ For latest we use: https://raw.githubusercontent.com/apache/causeway/master/anto
             </mb3:section>
         </mb3:menu>
 
-        <mb3:menu>
-            <mb3:named>Prog Model</mb3:named>
-            <mb3:section>
-                <mb3:named>Domain Objects</mb3:named>
-                <mb3:serviceAction objectType="demo.MixinMenu" id="mixins"/>
-                <mb3:serviceAction objectType="demo.EmbeddedTypeMenu" id="embeddedTypes"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Actions</mb3:named>
-                <mb3:serviceAction objectType="demo.AssociatedActionMenu" id="associatedActions"/>
-                <mb3:serviceAction objectType="demo.DependentArgsActionMenu" id="dependentArgsActions">
-                    <cpt:named>Dependent Arguments</cpt:named>
-                </mb3:serviceAction>
-            </mb3:section>
-        </mb3:menu>
-
         <mb3:menu>
             <mb3:named>Basic Types</mb3:named>
             <mb3:section>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJpa.java
index 8bb3a18ae0..a42b4dcbd9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJpa.java
@@ -25,6 +25,7 @@ import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
+import javax.persistence.Table;
 
 import org.springframework.context.annotation.Profile;
 
@@ -42,6 +43,10 @@ import demoapp.dom.services.core.eventbusservice.EventBusServiceDemoVm.UiButtonE
 
 @Profile("demo-jpa")
 @Entity
+@Table(
+        schema = "demo",
+        name = "EventLogEntryJpa"
+)
 @Named("demo.EventLogEntry")
 @DomainObject
 public class EventLogEntryJpa
diff --git a/examples/demo/domain/src/test/java/demoapp/dom/domain/objects/other/customvaluetypes/ComplexNumberJdo_Test.java b/examples/demo/domain/src/test/java/demoapp/dom/domain/objects/other/customvaluetypes/ComplexNumberJdo_Test.java
index b678b10ff4..d098f46870 100644
--- a/examples/demo/domain/src/test/java/demoapp/dom/domain/objects/other/customvaluetypes/ComplexNumberJdo_Test.java
+++ b/examples/demo/domain/src/test/java/demoapp/dom/domain/objects/other/customvaluetypes/ComplexNumberJdo_Test.java
@@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
 
 import lombok.val;
 
-import demoapp.dom.domain.progmodel.objects.embedded.embedded.jdo.ComplexNumberJdo;
+import demoapp.dom.domain.progmodel.objects.embedded.jdo.ComplexNumberJdo;
 
 class ComplexNumberJdo_Test {