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 aaea0a0b3b2bc1f5332709e0e966e489f4ff35d3
Author: danhaywood <[email protected]>
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                                                               // <.>
[email protected]                                           // <.>
-@Value                                                                  // <.>
[email protected]                                                          // <.>
[email protected](AccessLevel.PRIVATE)                                     // <.>
[email protected]                                       // <.>
+@Value                                                              // <.>
[email protected]                                                      // <.>
[email protected](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 {
 

Reply via email to