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 2024/10/16 09:17:53 UTC

(causeway) 01/01: CAUSEWAY-3820: adds support for AsciiDocXml, Json, Yaml, Java

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

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

commit 8d1fbe627cc8f4667c0a9d4a3a0688f30d786a75
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 16 09:59:51 2024 +0100

    CAUSEWAY-3820: adds support for AsciiDocXml, Json, Yaml, Java
---
 .../pages/index/services/hint/HintIdProvider.adoc  |  8 ++--
 .../applib/services/repo/QueryDslRepository.adoc   |  2 +-
 .../index/asciidoc/applib/value/AsciiDoc.adoc      |  1 -
 .../value/{AsciiDoc.adoc => AsciiDocJava.adoc}     | 17 ++++---
 .../value/{AsciiDoc.adoc => AsciiDocJson.adoc}     | 17 ++++---
 .../value/{AsciiDoc.adoc => AsciiDocXml.adoc}      | 17 ++++---
 .../value/{AsciiDoc.adoc => AsciiDocYaml.adoc}     | 17 ++++---
 .../converters/CausewayAsciiDocJsonConverter.adoc} | 16 ++-----
 .../converters/CausewayAsciiDocXmlConverter.adoc}  | 16 ++-----
 .../converters/CausewayAsciiDocJsonConverter.adoc} | 16 ++-----
 .../converters/CausewayAsciiDocXmlConverter.adoc}  | 16 ++-----
 .../services/HintStoreUsingWicketSession.adoc      |  1 +
 .../applib/services/hint/HintIdProvider.java       |  2 +-
 core/adoc/modules/_overview/pages/about.adoc       | 39 ++-------------
 .../pages/sections/causeway.prototyping.adoc       |  2 +-
 .../pages/sections/causeway.viewer.wicket.adoc     | 15 +++++-
 ln-tooling-jar.sh                                  | 37 +++++++++++++++
 .../adoc/modules/asciidoc/pages/about.adoc         |  5 +-
 .../asciidoc/applib/src/main/java/module-info.java |  1 +
 .../applib/CausewayModuleValAsciidocApplib.java    |  5 +-
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java | 17 +------
 .../value/{AsciiDoc.java => AsciiDocAbstract.java} | 55 +++++++++-------------
 .../value/{AsciiDoc.java => AsciiDocJava.java}     | 44 +++++------------
 .../value/{AsciiDoc.java => AsciiDocJson.java}     | 44 +++++------------
 .../value/{AsciiDoc.java => AsciiDocXml.java}      | 42 +++++------------
 .../value/{AsciiDoc.java => AsciiDocYaml.java}     | 44 +++++------------
 valuetypes/asciidoc/persistence-jdo/pom.xml        |  6 ++-
 .../converters/CausewayAsciiDocJavaConverter.java} | 42 ++++++++++-------
 .../converters/CausewayAsciiDocJsonConverter.java  | 47 ++++++++++++++++++
 .../converters/CausewayAsciiDocXmlConverter.java   | 48 +++++++++++++++++++
 .../converters/CausewayAsciiDocYamlConverter.java} | 42 ++++++++++-------
 .../persistence-jdo/src/main/resources/plugin.xml  | 52 ++++++++++++++++++++
 valuetypes/asciidoc/persistence-jpa/pom.xml        |  6 ++-
 .../converters/CausewayAsciiDocJavaConverter.java} | 43 ++++++++++-------
 .../converters/CausewayAsciiDocJsonConverter.java  | 47 ++++++++++++++++++
 .../converters/CausewayAsciiDocXmlConverter.java   | 47 ++++++++++++++++++
 .../converters/CausewayAsciiDocYamlConverter.java} | 43 ++++++++++-------
 37 files changed, 553 insertions(+), 366 deletions(-)

diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/hint/HintIdProvider.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/hint/HintIdProvider.adoc
index bcd14c6d55..a7470913a1 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/hint/HintIdProvider.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/hint/HintIdProvider.adoc
@@ -1,13 +1,11 @@
 = HintIdProvider
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Provides an SPI for view models to implement to represent their "logical" identity (stable even if the view model's state changes).
+Provides a SPI for view models to implement to represent their "logical" identity (stable even if the view model's state changes).
 
-Hints are stored against the `Bookmark` of a domain object, essentially the identifier of the domain object.
-For a domain entity this identifier is fixed and unchanging but for view models the identifier changes each time the view model's state changes (the identifier is basically a digest of the object's state).
-This means that any hints stored against the view model's bookmark are in effect lost as soon as the view model is modified.
+Hints are stored against the `Bookmark` of a domain object, essentially the identifier of the domain object. For a domain entity this identifier is fixed and unchanging but for view models the identifier changes each time the view model's state changes (the identifier is basically a digest of the object's state). This means that any hints stored against the view model's bookmark are in effect lost as soon as the view model is modified.
 
-This SPI therefore allows a view model to take advantage of the hinting mechanism of the viewer by providing a "logical" identity stored which hints for the view model can be stored.
+This SPI therefore allows a view model to take advantage of the hinting mechanism of the viewer by providing a "logical" identity against which hints for the view model can be stored.
 
 == API
 
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/querydsl/applib/services/repo/QueryDslRepository.adoc b/antora/components/refguide-index/modules/persistence/pages/index/querydsl/applib/services/repo/QueryDslRepository.adoc
index 3ccb5e4862..e86801c4f8 100644
--- a/antora/components/refguide-index/modules/persistence/pages/index/querydsl/applib/services/repo/QueryDslRepository.adoc
+++ b/antora/components/refguide-index/modules/persistence/pages/index/querydsl/applib/services/repo/QueryDslRepository.adoc
@@ -34,7 +34,7 @@ class QueryDslRepository<T, Q> {
   Optional<F> findUniqueFields(Function<Q, Expression<F>> projection, Function<Q, Predicate>... predicates)     // <.>
   List<T> find(Function<Q, Predicate>[] predicates, Function<Q, OrderSpecifier<?>>... orderSpecifiers)     // <.>
   List<T> find(Function<Q, Predicate> predicate, Function<Q, OrderSpecifier<?>>... orderSpecifiers)     // <.>
-  List<T> findUsingDefaultOrder(Function<Q, Predicate>[] predicates)     // <.>
+  List<T> findUsingDefaultOrder(Function<Q, Predicate>... predicates)     // <.>
   List<B> findAsBean(Function<Q, Expression<?>>[] projections, Class<? extends B> bean, Function<Q, Predicate>[] predicates, Function<Q, OrderSpecifier<?>>... orderSpecifiers)     // <.>
   List<B> findAsBean(Function<Q, Predicate> predicate, Function<Q, OrderSpecifier<?>> orderSpecifier, Class<? extends B> bean, Function<Q, Expression<?>>... projections)     // <.>
   List<T> newList(T... objs)
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
index c3f657bf6a..eb2d057ad7 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
@@ -12,7 +12,6 @@ class AsciiDoc {
   AsciiDoc()
   AsciiDoc(String adoc)
   AsciiDoc valueOf(String adoc)
-  String asHtml()
   boolean isEqualTo(AsciiDoc other)
   String toString()
 }
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocJava.adoc
similarity index 76%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocJava.adoc
index c3f657bf6a..71a628a8cd 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocJava.adoc
@@ -1,19 +1,18 @@
-= AsciiDoc
+= AsciiDocJava
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Immutable value type holding pre-rendered HTML.
+Immutable value type holding Java text rendered using anAsciidoc source block
 
 == API
 
 [source,java]
-.AsciiDoc.java
+.AsciiDocJava.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOf(String adoc)
-  String asHtml()
-  boolean isEqualTo(AsciiDoc other)
+class AsciiDocJava {
+  AsciiDocJava()
+  AsciiDocJava(String adoc)
+  AsciiDocJava valueOf(String adoc)
+  boolean isEqualTo(AsciiDocJava other)
   String toString()
 }
 ----
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocJson.adoc
similarity index 76%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocJson.adoc
index c3f657bf6a..c1eb737aca 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocJson.adoc
@@ -1,19 +1,18 @@
-= AsciiDoc
+= AsciiDocJson
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Immutable value type holding pre-rendered HTML.
+Immutable value type holding Json text rendered using anAsciidoc source block
 
 == API
 
 [source,java]
-.AsciiDoc.java
+.AsciiDocJson.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOf(String adoc)
-  String asHtml()
-  boolean isEqualTo(AsciiDoc other)
+class AsciiDocJson {
+  AsciiDocJson()
+  AsciiDocJson(String adoc)
+  AsciiDocJson valueOf(String adoc)
+  boolean isEqualTo(AsciiDocJson other)
   String toString()
 }
 ----
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocXml.adoc
similarity index 77%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocXml.adoc
index c3f657bf6a..97cd53049a 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocXml.adoc
@@ -1,19 +1,18 @@
-= AsciiDoc
+= AsciiDocXml
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Immutable value type holding pre-rendered HTML.
+Immutable value type holding XML rendered using anAsciidoc source block
 
 == API
 
 [source,java]
-.AsciiDoc.java
+.AsciiDocXml.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOf(String adoc)
-  String asHtml()
-  boolean isEqualTo(AsciiDoc other)
+class AsciiDocXml {
+  AsciiDocXml()
+  AsciiDocXml(String adoc)
+  AsciiDocXml valueOf(String adoc)
+  boolean isEqualTo(AsciiDocXml other)
   String toString()
 }
 ----
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocYaml.adoc
similarity index 76%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocYaml.adoc
index c3f657bf6a..9891acf7b1 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDocYaml.adoc
@@ -1,19 +1,18 @@
-= AsciiDoc
+= AsciiDocYaml
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Immutable value type holding pre-rendered HTML.
+Immutable value type holding Yaml rendered using anAsciidoc source block
 
 == API
 
 [source,java]
-.AsciiDoc.java
+.AsciiDocYaml.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOf(String adoc)
-  String asHtml()
-  boolean isEqualTo(AsciiDoc other)
+class AsciiDocYaml {
+  AsciiDocYaml()
+  AsciiDocYaml(String adoc)
+  AsciiDocYaml valueOf(String adoc)
+  boolean isEqualTo(AsciiDocYaml other)
   String toString()
 }
 ----
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocJsonConverter.adoc
similarity index 77%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocJsonConverter.adoc
index c3f657bf6a..f91e890260 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocJsonConverter.adoc
@@ -1,20 +1,14 @@
-= AsciiDoc
+= CausewayAsciiDocJsonConverter
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Immutable value type holding pre-rendered HTML.
-
 == API
 
 [source,java]
-.AsciiDoc.java
+.CausewayAsciiDocJsonConverter.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOf(String adoc)
-  String asHtml()
-  boolean isEqualTo(AsciiDoc other)
-  String toString()
+class CausewayAsciiDocJsonConverter {
+  String toDatastoreType(AsciiDocJson memberValue)
+  AsciiDocJson toMemberType(String datastoreValue)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocXmlConverter.adoc
similarity index 77%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocXmlConverter.adoc
index c3f657bf6a..62e9fe0499 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocXmlConverter.adoc
@@ -1,20 +1,14 @@
-= AsciiDoc
+= CausewayAsciiDocXmlConverter
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Immutable value type holding pre-rendered HTML.
-
 == API
 
 [source,java]
-.AsciiDoc.java
+.CausewayAsciiDocXmlConverter.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOf(String adoc)
-  String asHtml()
-  boolean isEqualTo(AsciiDoc other)
-  String toString()
+class CausewayAsciiDocXmlConverter {
+  String toDatastoreType(AsciiDocXml memberValue)
+  AsciiDocXml toMemberType(String datastoreValue)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jpa/converters/CausewayAsciiDocJsonConverter.adoc
similarity index 77%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jpa/converters/CausewayAsciiDocJsonConverter.adoc
index c3f657bf6a..242ee7f9e6 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jpa/converters/CausewayAsciiDocJsonConverter.adoc
@@ -1,20 +1,14 @@
-= AsciiDoc
+= CausewayAsciiDocJsonConverter
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Immutable value type holding pre-rendered HTML.
-
 == API
 
 [source,java]
-.AsciiDoc.java
+.CausewayAsciiDocJsonConverter.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOf(String adoc)
-  String asHtml()
-  boolean isEqualTo(AsciiDoc other)
-  String toString()
+class CausewayAsciiDocJsonConverter {
+  String convertToDatabaseColumn(AsciiDocJson memberValue)
+  AsciiDocJson convertToEntityAttribute(String datastoreValue)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jpa/converters/CausewayAsciiDocXmlConverter.adoc
similarity index 77%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jpa/converters/CausewayAsciiDocXmlConverter.adoc
index c3f657bf6a..46662c2962 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jpa/converters/CausewayAsciiDocXmlConverter.adoc
@@ -1,20 +1,14 @@
-= AsciiDoc
+= CausewayAsciiDocXmlConverter
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Immutable value type holding pre-rendered HTML.
-
 == API
 
 [source,java]
-.AsciiDoc.java
+.CausewayAsciiDocXmlConverter.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOf(String adoc)
-  String asHtml()
-  boolean isEqualTo(AsciiDoc other)
-  String toString()
+class CausewayAsciiDocXmlConverter {
+  String convertToDatabaseColumn(AsciiDocXml memberValue)
+  AsciiDocXml convertToEntityAttribute(String datastoreValue)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/wicket/viewer/services/HintStoreUsingWicketSession.adoc b/antora/components/refguide-index/modules/viewer/pages/index/wicket/viewer/services/HintStoreUsingWicketSession.adoc
index 98f968fa86..2104effc3e 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/wicket/viewer/services/HintStoreUsingWicketSession.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/wicket/viewer/services/HintStoreUsingWicketSession.adoc
@@ -9,6 +9,7 @@ Wicket-specific implementation of xref:refguide:applib:index/services/hint/HintS
 .HintStoreUsingWicketSession.java
 ----
 class HintStoreUsingWicketSession {
+  public static final String LOGICAL_TYPE_NAME;
   String get(Bookmark bookmark, String key)
   void set(Bookmark bookmark, String key, String value)
   void remove(Bookmark bookmark, String key)
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/hint/HintIdProvider.java b/api/applib/src/main/java/org/apache/causeway/applib/services/hint/HintIdProvider.java
index bf73c27462..4db6a9ca10 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/hint/HintIdProvider.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/hint/HintIdProvider.java
@@ -34,7 +34,7 @@ package org.apache.causeway.applib.services.hint;
  *
  * <p>
  *     This SPI therefore allows a view model to take advantage of the hinting
- *     mechanism of the viewer by providing a "logical" identity stored which
+ *     mechanism of the viewer by providing a "logical" identity against which
  *     hints for the view model can be stored.
  * </p>
  *
diff --git a/core/adoc/modules/_overview/pages/about.adoc b/core/adoc/modules/_overview/pages/about.adoc
index 86fc2b84d5..22ec2ca4a5 100644
--- a/core/adoc/modules/_overview/pages/about.adoc
+++ b/core/adoc/modules/_overview/pages/about.adoc
@@ -3596,15 +3596,8 @@ Directory: /viewers/wicket/viewer
 ----
 |.Components
 ****
-o.a.i.viewer.wicket.viewer.registries.components.ComponentFactoryRegistrarDefault +
-o.a.i.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault +
-o.a.i.viewer.wicket.viewer.registries.pages.PageClassListDefault +
-o.a.i.viewer.wicket.viewer.registries.pages.PageClassRegistryDefault +
-o.a.i.viewer.wicket.viewer.registries.pages.PageNavigationServiceDefault +
 o.a.i.viewer.wicket.viewer.services.BookmarkUiServiceWicket +
 o.a.i.viewer.wicket.viewer.services.DeepLinkServiceWicket +
-o.a.i.viewer.wicket.viewer.services.HintStoreUsingWicketSession +
-o.a.i.viewer.wicket.viewer.services.ImageResourceCacheClassPath +
 o.a.i.viewer.wicket.viewer.webmodule.WebModuleWicket +
 o.a.i.viewer.wicket.viewer.wicketapp.CausewayWicketApplication$ServiceInjectorHolder +
 ****
@@ -3895,7 +3888,7 @@ org.asciidoctor:asciidoctorj-api:jar:${asciidoctorj.version} +
 
 .Document Index Entries
 ****
-xref:refguide:valuetypes:index/asciidoc/applib/CausewayModuleValAsciidocApplib.adoc[CausewayModuleValAsciidocApplib], xref:refguide:valuetypes:index/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.adoc[AsciiDocJaxbAdapter], xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDoc.adoc[AsciiDoc]
+xref:refguide:valuetypes:index/asciidoc/applib/CausewayModuleValAsciidocApplib.adoc[CausewayModuleValAsciidocApplib], xref:refguide:valuetypes:index/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.adoc[AsciiDocJaxbAdapter], xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDoc.adoc[AsciiDoc], xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDocJava.adoc[AsciiDocJava], xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDocJson.adoc[AsciiDocJson], xref:refguide:valuetypes: [...]
 ****
 
 |Apache Causeway Val - Asciidoctor (Builder)
@@ -3967,7 +3960,7 @@ org.datanucleus:datanucleus-core:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:valuetypes:index/asciidoc/persistence/jdo/CausewayModuleValAsciidocPersistenceJdo.adoc[CausewayModuleValAsciidocPersistenceJdo], xref:refguide:valuetypes:index/asciidoc/persistence/jdo/converters/CausewayAsciiDocConverter.adoc[CausewayAsciiDocConverter]
+xref:refguide:valuetypes:index/asciidoc/persistence/jdo/CausewayModuleValAsciidocPersistenceJdo.adoc[CausewayModuleValAsciidocPersistenceJdo], xref:refguide:valuetypes:index/asciidoc/persistence/jdo/converters/CausewayAsciiDocConverter.adoc[CausewayAsciiDocConverter], xref:refguide:valuetypes:index/asciidoc/persistence/jdo/converters/CausewayAsciiDocJsonConverter.adoc[CausewayAsciiDocJsonConverter], xref:refguide:valuetypes:index/asciidoc/persistence/jdo/converters/CausewayAsciiDocXmlCon [...]
 ****
 
 |Apache Causeway Val - Asciidoctor (persistence JPA)
@@ -3986,7 +3979,7 @@ org.apache.causeway.valuetypes:causeway-valuetypes-asciidoc-applib:jar:<managed>
 
 .Document Index Entries
 ****
-xref:refguide:valuetypes:index/asciidoc/persistence/jpa/CausewayModuleValAsciidocPersistenceJpa.adoc[CausewayModuleValAsciidocPersistenceJpa], xref:refguide:valuetypes:index/asciidoc/persistence/jpa/converters/CausewayAsciiDocConverter.adoc[CausewayAsciiDocConverter]
+xref:refguide:valuetypes:index/asciidoc/persistence/jpa/CausewayModuleValAsciidocPersistenceJpa.adoc[CausewayModuleValAsciidocPersistenceJpa], xref:refguide:valuetypes:index/asciidoc/persistence/jpa/converters/CausewayAsciiDocConverter.adoc[CausewayAsciiDocConverter], xref:refguide:valuetypes:index/asciidoc/persistence/jpa/converters/CausewayAsciiDocJsonConverter.adoc[CausewayAsciiDocJsonConverter], xref:refguide:valuetypes:index/asciidoc/persistence/jpa/converters/CausewayAsciiDocXmlCon [...]
 ****
 
 |Apache Causeway Val - Asciidoctor (ui)
@@ -7036,31 +7029,7 @@ Artifact: causeway-regressiontests-base
 Type: jar
 Directory: /regressiontests/base
 ----
-|.Components
-****
-o.a.i.testdomain.jdo.JdoInventoryDao +
-o.a.i.testdomain.jdo.JdoTestFixtures +
-o.a.i.testdomain.jpa.JpaInventoryDao +
-o.a.i.testdomain.jpa.JpaTestFixtures +
-o.a.i.testdomain.jpa.springdata.EmployeeRepository +
-o.a.i.testdomain.model.valuetypes.ValueTypeExampleService +
-o.a.i.testdomain.publishing.PublishingTestFactoryAbstract$CommitListener +
-o.a.i.testdomain.publishing.PublishingTestFactoryJdo +
-o.a.i.testdomain.publishing.PublishingTestFactoryJpa +
-o.a.i.testdomain.publishing.subscriber.CommandSubscriberForTesting +
-o.a.i.testdomain.publishing.subscriber.EntityChangesSubscriberForTesting +
-o.a.i.testdomain.publishing.subscriber.EntityPropertyChangeSubscriberForTesting +
-o.a.i.testdomain.publishing.subscriber.ExecutionSubscriberForTesting +
-o.a.i.testdomain.util.event.LifecycleEventSubscriberJdoForTesting +
-o.a.i.testdomain.util.event.LifecycleEventSubscriberJpaForTesting +
-o.a.i.testdomain.util.interaction.DomainObjectTesterFactory +
-o.a.i.testdomain.util.interaction.InteractionBoundaryProbe +
-o.a.i.testdomain.util.kv.KVStoreForTesting +
-o.a.i.testdomain.util.rest.RestEndpointService +
-o.a.i.testdomain.wrapperfactory.CounterRepository +
-****
-
-.Dependencies
+|.Dependencies
 ****
 org.apache.causeway.extensions:causeway-extensions-fullcalendar-applib:jar:<managed> +
 org.apache.causeway.extensions:causeway-extensions-secman-encryption-jbcrypt:jar:<managed> +
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/causeway.prototyping.adoc b/core/config/src/main/adoc/modules/config/pages/sections/causeway.prototyping.adoc
index 3e9c0f6e64..a2857b725d 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/causeway.prototyping.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/causeway.prototyping.adoc
@@ -43,7 +43,7 @@ if-disabled-policy
 | 
 | Whether and how to display any properties, actions and collections whose usability has been vetoed.
 
-By default, such object members are shown as disabled, with the tolipindicating why. Setting the property to SHOW_AS_DISABLED_WITH_DIAGNOSTICS shows additional detail in the tooltip.
+By default, such object members are shown as disabled, with the tooltip indicating why. Setting the property to SHOW_AS_DISABLED_WITH_DIAGNOSTICS shows additional detail in the tooltip.
 
 This config property only applies in prototyping mode.
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/causeway.viewer.wicket.adoc b/core/config/src/main/adoc/modules/config/pages/sections/causeway.viewer.wicket.adoc
index ff25ca1296..8debbf8e6d 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/causeway.viewer.wicket.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/causeway.viewer.wicket.adoc
@@ -198,7 +198,7 @@ disable-reason-explanation-in- +
 prototyping-mode-enabled
 
 |  true
-| In prototyping mode, a text icon is appeneded to any property that is disabled, with its tool-tip explaining why the property is disabled. This configuration property can be used to suppress the icon, even in prototyping mode, if desired.
+| In prototyping mode, a text icon is appended to any property that is disabled, with its tool-tip explaining why the property is disabled. This configuration property can be used to suppress the icon, even in prototyping mode, if desired.
 
 The default is to enable (show) the text icon (if in prototyping mode).
 
@@ -528,6 +528,17 @@ use-indicator-for-no-arg-action
 This behaviour is enabled by default.
 
 
+|
+[[causeway.viewer.wicket.use-indicator-for-sortable-column]]
+causeway.viewer.wicket. +
+use-indicator-for-sortable-column
+
+| 
+| Whether to show an indicator for a sortable column (that is an up-down arrow icon).
+
+This behaviour is disabled by default.
+
+
 |
 [[causeway.viewer.wicket.welcome.text]]
 causeway.viewer.wicket.welcome. +
@@ -545,7 +556,7 @@ wicket-source-plugin
 | 
 | Whether the Wicket source plugin should be enabled; if so, the markup includes links to the Wicket source.
 
-This behaviour is disabled by default. Please be aware that enabloing it can substantially impact performance.
+This behaviour is disabled by default. Please be aware that enabling it can substantially impact performance.
 
 
 
diff --git a/ln-tooling-jar.sh b/ln-tooling-jar.sh
new file mode 100755
index 0000000000..145ffae8a4
--- /dev/null
+++ b/ln-tooling-jar.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+
+#
+# prereq to running preview.sh
+#
+# NB: this script assumes that the tooling jar has been built previously
+#     and is available in the local maven repo
+#
+#
+
+m2repo=~/.m2/repository
+version=1.0.0-SNAPSHOT
+artifact=causewaystuff-tooling-cli
+target=tooling/cli/target
+
+mkdir -p $target
+rm -f $target/$artifact.jar
+ln -s $m2repo/io/github/causewaystuff/$artifact/$version/$artifact-$version-spring-boot.jar $target/$artifact.jar
\ No newline at end of file
diff --git a/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc b/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
index 88c4cdc42b..9898d00afa 100644
--- a/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
+++ b/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
@@ -2,7 +2,10 @@
 
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-The `AsciiDoc` value type is intended to render HTML markup that is authored using https://asciidoctor.org/[AsciiDoc] markup language.
+The xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDoc.adoc[] value type is intended to render HTML markup that is authored using https://asciidoctor.org/[AsciiDoc(tor)] markup language.
+
+In addition, this module provides a number of variants: xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDocXml.adoc[], xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDocJson.adoc[],  xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDocYaml.adoc[] and xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDocJava.adoc[].
+These are used to render XML, JSON or YAML as AsciiDoc link:https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/[source blocks].
 
 A common use case is to render help pages or technical manuals.
 
diff --git a/valuetypes/asciidoc/applib/src/main/java/module-info.java b/valuetypes/asciidoc/applib/src/main/java/module-info.java
index 24cb1ef2a9..bf95ddc001 100644
--- a/valuetypes/asciidoc/applib/src/main/java/module-info.java
+++ b/valuetypes/asciidoc/applib/src/main/java/module-info.java
@@ -32,4 +32,5 @@ module org.apache.causeway.valuetypes.asciidoc.applib {
     requires org.apache.causeway.core.config;
     requires spring.boot.autoconfigure;
     requires java.net.http;
+    requires org.asciidoctor.asciidoctorj.api;
 }
\ No newline at end of file
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/CausewayModuleValAsciidocApplib.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/CausewayModuleValAsciidocApplib.java
index 1ab3ab4375..759735bdcb 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/CausewayModuleValAsciidocApplib.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/CausewayModuleValAsciidocApplib.java
@@ -138,7 +138,7 @@ public class CausewayModuleValAsciidocApplib {
         }
 
         @Override
-        public void process(final Document document, final PreprocessorReader reader) {
+        public Reader process(final Document document, final PreprocessorReader reader) {
 
             var state = State.DISABLED;
 
@@ -174,7 +174,10 @@ public class CausewayModuleValAsciidocApplib {
             }
 
             reader.restoreLines(processedLines);
+
+            return reader;
         }
+
     }
 
     @org.asciidoctor.extension.Name("plantuml")
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
index 1b4d696cd7..72dc1a8a38 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
@@ -43,31 +43,18 @@ import lombok.experimental.Accessors;
 @org.apache.causeway.applib.annotation.Value
 @EqualsAndHashCode
 @XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
-public final class AsciiDoc implements Serializable {
-
-    private static final long serialVersionUID = 1L;
+public final class AsciiDoc extends AsciiDocAbstract {
 
     public static AsciiDoc valueOf(final String adoc) {
         return new AsciiDoc(adoc);
     }
 
-    @Getter private final String adoc;
-
-    @EqualsAndHashCode.Exclude
-    @Getter(lazy = true, value = AccessLevel.PRIVATE)
-    @Accessors(fluent = true)
-    private final String html = AdocToHtmlConverter.instance().adocToHtml(getAdoc());
-
     public AsciiDoc() {
         this(null);
     }
 
     public AsciiDoc(final String adoc) {
-        this.adoc = adoc !=null ? adoc : "";
-    }
-
-    public String asHtml() {
-        return html();
+        super(adoc, null);
     }
 
     public boolean isEqualTo(final AsciiDoc other) {
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocAbstract.java
similarity index 54%
copy from valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
copy to valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocAbstract.java
index 1b4d696cd7..34e8eddd20 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocAbstract.java
@@ -19,65 +19,52 @@
 package org.apache.causeway.valuetypes.asciidoc.applib.value;
 
 import java.io.Serializable;
-import java.util.Objects;
 
-import javax.inject.Named;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-
-import org.apache.causeway.applib.value.Markup;
-import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib;
 import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib.AdocToHtmlConverter;
-import org.apache.causeway.valuetypes.asciidoc.applib.jaxb.AsciiDocJaxbAdapter;
 
 import lombok.AccessLevel;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.experimental.Accessors;
 
-/**
- * Immutable value type holding pre-rendered HTML.
- *
- * @since 2.0 {@index}
- */
-@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDoc")
-@org.apache.causeway.applib.annotation.Value
+
 @EqualsAndHashCode
-@XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
-public final class AsciiDoc implements Serializable {
+public abstract class AsciiDocAbstract implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    public static AsciiDoc valueOf(final String adoc) {
-        return new AsciiDoc(adoc);
-    }
+    @Getter final String adoc;
 
-    @Getter private final String adoc;
+    @EqualsAndHashCode.Exclude
+    private final String sourceLanguage;
 
     @EqualsAndHashCode.Exclude
     @Getter(lazy = true, value = AccessLevel.PRIVATE)
     @Accessors(fluent = true)
-    private final String html = AdocToHtmlConverter.instance().adocToHtml(getAdoc());
+    private final String html = AdocToHtmlConverter.instance().adocToHtml(
+            String.format("%s%s%s",
+                    sourceLanguage != null ? String.format("[source,%s]\n====\n", sourceLanguage) : "",
+                    adoc,
+                    sourceLanguage != null ? "====\n" : ""
+            ));
 
-    public AsciiDoc() {
-        this(null);
+    public AsciiDocAbstract(String sourceLanguage) {
+        this(null, sourceLanguage);
     }
 
-    public AsciiDoc(final String adoc) {
-        this.adoc = adoc !=null ? adoc : "";
+    public AsciiDocAbstract(
+            final String adoc,
+            final String sourceLanguage
+    ) {
+        this.adoc = blankIfNull(adoc);
+        this.sourceLanguage = sourceLanguage;
     }
 
     public String asHtml() {
         return html();
     }
 
-    public boolean isEqualTo(final AsciiDoc other) {
-        return Objects.equals(this, other);
-    }
-
-    @Override
-    public String toString() {
-        return String.format("AsciiDoc[length=%d,content=%s]",
-                adoc.length(), Markup.summarizeHtmlAsTitle(adoc));
+    private static String blankIfNull(String str) {
+        return str != null ? str : "";
     }
-
 }
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocJava.java
similarity index 60%
copy from valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
copy to valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocJava.java
index 1b4d696cd7..795afda424 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocJava.java
@@ -18,7 +18,8 @@
  */
 package org.apache.causeway.valuetypes.asciidoc.applib.value;
 
-import java.io.Serializable;
+import lombok.EqualsAndHashCode;
+
 import java.util.Objects;
 
 import javax.inject.Named;
@@ -26,57 +27,38 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.causeway.applib.value.Markup;
 import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib;
-import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib.AdocToHtmlConverter;
 import org.apache.causeway.valuetypes.asciidoc.applib.jaxb.AsciiDocJaxbAdapter;
 
-import lombok.AccessLevel;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.experimental.Accessors;
-
 /**
- * Immutable value type holding pre-rendered HTML.
+ * Immutable value type holding Java text rendered using an <a href="https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/">Asciidoc source block</a>
  *
  * @since 2.0 {@index}
  */
-@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDoc")
+@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDocJava")
 @org.apache.causeway.applib.annotation.Value
-@EqualsAndHashCode
+@EqualsAndHashCode(callSuper = true)
 @XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
-public final class AsciiDoc implements Serializable {
-
-    private static final long serialVersionUID = 1L;
+public final class AsciiDocJava extends AsciiDocAbstract {
 
-    public static AsciiDoc valueOf(final String adoc) {
-        return new AsciiDoc(adoc);
+    public static AsciiDocJava valueOf(final String adoc) {
+        return new AsciiDocJava(adoc);
     }
 
-    @Getter private final String adoc;
-
-    @EqualsAndHashCode.Exclude
-    @Getter(lazy = true, value = AccessLevel.PRIVATE)
-    @Accessors(fluent = true)
-    private final String html = AdocToHtmlConverter.instance().adocToHtml(getAdoc());
-
-    public AsciiDoc() {
+    public AsciiDocJava() {
         this(null);
     }
 
-    public AsciiDoc(final String adoc) {
-        this.adoc = adoc !=null ? adoc : "";
-    }
-
-    public String asHtml() {
-        return html();
+    public AsciiDocJava(final String adoc) {
+        super(adoc, "java");
     }
 
-    public boolean isEqualTo(final AsciiDoc other) {
+    public boolean isEqualTo(final AsciiDocJava other) {
         return Objects.equals(this, other);
     }
 
     @Override
     public String toString() {
-        return String.format("AsciiDoc[length=%d,content=%s]",
+        return String.format("AsciiDocXml[length=%d,content=%s]",
                 adoc.length(), Markup.summarizeHtmlAsTitle(adoc));
     }
 
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocJson.java
similarity index 60%
copy from valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
copy to valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocJson.java
index 1b4d696cd7..2ed2933bb8 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocJson.java
@@ -18,7 +18,8 @@
  */
 package org.apache.causeway.valuetypes.asciidoc.applib.value;
 
-import java.io.Serializable;
+import lombok.EqualsAndHashCode;
+
 import java.util.Objects;
 
 import javax.inject.Named;
@@ -26,57 +27,38 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.causeway.applib.value.Markup;
 import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib;
-import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib.AdocToHtmlConverter;
 import org.apache.causeway.valuetypes.asciidoc.applib.jaxb.AsciiDocJaxbAdapter;
 
-import lombok.AccessLevel;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.experimental.Accessors;
-
 /**
- * Immutable value type holding pre-rendered HTML.
+ * Immutable value type holding Json text rendered using an <a href="https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/">Asciidoc source block</a>
  *
  * @since 2.0 {@index}
  */
-@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDoc")
+@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDocJson")
 @org.apache.causeway.applib.annotation.Value
-@EqualsAndHashCode
+@EqualsAndHashCode(callSuper = true)
 @XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
-public final class AsciiDoc implements Serializable {
-
-    private static final long serialVersionUID = 1L;
+public final class AsciiDocJson extends AsciiDocAbstract {
 
-    public static AsciiDoc valueOf(final String adoc) {
-        return new AsciiDoc(adoc);
+    public static AsciiDocJson valueOf(final String adoc) {
+        return new AsciiDocJson(adoc);
     }
 
-    @Getter private final String adoc;
-
-    @EqualsAndHashCode.Exclude
-    @Getter(lazy = true, value = AccessLevel.PRIVATE)
-    @Accessors(fluent = true)
-    private final String html = AdocToHtmlConverter.instance().adocToHtml(getAdoc());
-
-    public AsciiDoc() {
+    public AsciiDocJson() {
         this(null);
     }
 
-    public AsciiDoc(final String adoc) {
-        this.adoc = adoc !=null ? adoc : "";
-    }
-
-    public String asHtml() {
-        return html();
+    public AsciiDocJson(final String adoc) {
+        super(adoc, "json");
     }
 
-    public boolean isEqualTo(final AsciiDoc other) {
+    public boolean isEqualTo(final AsciiDocJson other) {
         return Objects.equals(this, other);
     }
 
     @Override
     public String toString() {
-        return String.format("AsciiDoc[length=%d,content=%s]",
+        return String.format("AsciiDocXml[length=%d,content=%s]",
                 adoc.length(), Markup.summarizeHtmlAsTitle(adoc));
     }
 
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocXml.java
similarity index 60%
copy from valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
copy to valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocXml.java
index 1b4d696cd7..ebaf1a6e07 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocXml.java
@@ -18,7 +18,8 @@
  */
 package org.apache.causeway.valuetypes.asciidoc.applib.value;
 
-import java.io.Serializable;
+import lombok.EqualsAndHashCode;
+
 import java.util.Objects;
 
 import javax.inject.Named;
@@ -26,57 +27,38 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.causeway.applib.value.Markup;
 import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib;
-import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib.AdocToHtmlConverter;
 import org.apache.causeway.valuetypes.asciidoc.applib.jaxb.AsciiDocJaxbAdapter;
 
-import lombok.AccessLevel;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.experimental.Accessors;
-
 /**
- * Immutable value type holding pre-rendered HTML.
+ * Immutable value type holding XML rendered using an <a href="https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/">Asciidoc source block</a>
  *
  * @since 2.0 {@index}
  */
-@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDoc")
+@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDocXml")
 @org.apache.causeway.applib.annotation.Value
 @EqualsAndHashCode
 @XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
-public final class AsciiDoc implements Serializable {
-
-    private static final long serialVersionUID = 1L;
+public final class AsciiDocXml extends AsciiDocAbstract {
 
-    public static AsciiDoc valueOf(final String adoc) {
-        return new AsciiDoc(adoc);
+    public static AsciiDocXml valueOf(final String adoc) {
+        return new AsciiDocXml(adoc);
     }
 
-    @Getter private final String adoc;
-
-    @EqualsAndHashCode.Exclude
-    @Getter(lazy = true, value = AccessLevel.PRIVATE)
-    @Accessors(fluent = true)
-    private final String html = AdocToHtmlConverter.instance().adocToHtml(getAdoc());
-
-    public AsciiDoc() {
+    public AsciiDocXml() {
         this(null);
     }
 
-    public AsciiDoc(final String adoc) {
-        this.adoc = adoc !=null ? adoc : "";
-    }
-
-    public String asHtml() {
-        return html();
+    public AsciiDocXml(final String adoc) {
+        super(adoc, "xml");
     }
 
-    public boolean isEqualTo(final AsciiDoc other) {
+    public boolean isEqualTo(final AsciiDocXml other) {
         return Objects.equals(this, other);
     }
 
     @Override
     public String toString() {
-        return String.format("AsciiDoc[length=%d,content=%s]",
+        return String.format("AsciiDocXml[length=%d,content=%s]",
                 adoc.length(), Markup.summarizeHtmlAsTitle(adoc));
     }
 
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocYaml.java
similarity index 60%
copy from valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
copy to valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocYaml.java
index 1b4d696cd7..b9b1f8548d 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/value/AsciiDocYaml.java
@@ -18,7 +18,8 @@
  */
 package org.apache.causeway.valuetypes.asciidoc.applib.value;
 
-import java.io.Serializable;
+import lombok.EqualsAndHashCode;
+
 import java.util.Objects;
 
 import javax.inject.Named;
@@ -26,57 +27,38 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.causeway.applib.value.Markup;
 import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib;
-import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib.AdocToHtmlConverter;
 import org.apache.causeway.valuetypes.asciidoc.applib.jaxb.AsciiDocJaxbAdapter;
 
-import lombok.AccessLevel;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.experimental.Accessors;
-
 /**
- * Immutable value type holding pre-rendered HTML.
+ * Immutable value type holding Yaml rendered using an <a href="https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/">Asciidoc source block</a>
  *
  * @since 2.0 {@index}
  */
-@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDoc")
+@Named(CausewayModuleValAsciidocApplib.NAMESPACE + ".AsciiDocYaml")
 @org.apache.causeway.applib.annotation.Value
-@EqualsAndHashCode
+@EqualsAndHashCode(callSuper = true)
 @XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
-public final class AsciiDoc implements Serializable {
-
-    private static final long serialVersionUID = 1L;
+public final class AsciiDocYaml extends AsciiDocAbstract {
 
-    public static AsciiDoc valueOf(final String adoc) {
-        return new AsciiDoc(adoc);
+    public static AsciiDocYaml valueOf(final String adoc) {
+        return new AsciiDocYaml(adoc);
     }
 
-    @Getter private final String adoc;
-
-    @EqualsAndHashCode.Exclude
-    @Getter(lazy = true, value = AccessLevel.PRIVATE)
-    @Accessors(fluent = true)
-    private final String html = AdocToHtmlConverter.instance().adocToHtml(getAdoc());
-
-    public AsciiDoc() {
+    public AsciiDocYaml() {
         this(null);
     }
 
-    public AsciiDoc(final String adoc) {
-        this.adoc = adoc !=null ? adoc : "";
-    }
-
-    public String asHtml() {
-        return html();
+    public AsciiDocYaml(final String adoc) {
+        super(adoc, "yaml");
     }
 
-    public boolean isEqualTo(final AsciiDoc other) {
+    public boolean isEqualTo(final AsciiDocYaml other) {
         return Objects.equals(this, other);
     }
 
     @Override
     public String toString() {
-        return String.format("AsciiDoc[length=%d,content=%s]",
+        return String.format("AsciiDocXml[length=%d,content=%s]",
                 adoc.length(), Markup.summarizeHtmlAsTitle(adoc));
     }
 
diff --git a/valuetypes/asciidoc/persistence-jdo/pom.xml b/valuetypes/asciidoc/persistence-jdo/pom.xml
index c56827fa0a..73781ce16f 100644
--- a/valuetypes/asciidoc/persistence-jdo/pom.xml
+++ b/valuetypes/asciidoc/persistence-jdo/pom.xml
@@ -53,6 +53,10 @@
 			<groupId>org.datanucleus</groupId>
 			<artifactId>datanucleus-core</artifactId>
 		</dependency>
-	</dependencies>
+        <dependency>
+            <groupId>org.apache.causeway.valuetypes</groupId>
+            <artifactId>causeway-valuetypes-asciidoc-applib</artifactId>
+        </dependency>
+    </dependencies>
 
 </project>
diff --git a/valuetypes/asciidoc/applib/src/main/java/module-info.java b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocJavaConverter.java
similarity index 51%
copy from valuetypes/asciidoc/applib/src/main/java/module-info.java
copy to valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocJavaConverter.java
index 24cb1ef2a9..4e818cc662 100644
--- a/valuetypes/asciidoc/applib/src/main/java/module-info.java
+++ b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocJavaConverter.java
@@ -16,20 +16,30 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-module org.apache.causeway.valuetypes.asciidoc.applib {
-    exports org.apache.causeway.valuetypes.asciidoc.applib;
-    exports org.apache.causeway.valuetypes.asciidoc.applib.value;
-    exports org.apache.causeway.valuetypes.asciidoc.applib.jaxb;
+package org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters;
 
-    requires asciidoctorj.api;
-    requires java.inject;
-    requires java.xml.bind;
-    requires lombok;
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.commons;
-    requires spring.context;
-    requires spring.core;
-    requires org.apache.causeway.core.config;
-    requires spring.boot.autoconfigure;
-    requires java.net.http;
-}
\ No newline at end of file
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocJava;
+import org.datanucleus.store.types.converters.TypeConverter;
+
+/**
+ * @since 2.0 {@index}
+ */
+public class CausewayAsciiDocJavaConverter implements TypeConverter<AsciiDocJava, String>{
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public String toDatastoreType(final AsciiDocJava memberValue) {
+        return memberValue != null
+                ? memberValue.getAdoc()
+                : null;
+    }
+
+    @Override
+    public AsciiDocJava toMemberType(final String datastoreValue) {
+        return datastoreValue != null
+                ? AsciiDocJava.valueOf(datastoreValue)
+                : null;
+    }
+
+}
diff --git a/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocJsonConverter.java b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocJsonConverter.java
new file mode 100644
index 0000000000..984b34bc87
--- /dev/null
+++ b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocJsonConverter.java
@@ -0,0 +1,47 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters;
+
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocJson;
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocXml;
+
+import org.datanucleus.store.types.converters.TypeConverter;
+
+/**
+ * @since 2.0 {@index}
+ */
+public class CausewayAsciiDocJsonConverter implements TypeConverter<AsciiDocJson, String>{
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public String toDatastoreType(final AsciiDocJson memberValue) {
+        return memberValue != null
+                ? memberValue.getAdoc()
+                : null;
+    }
+
+    @Override
+    public AsciiDocJson toMemberType(final String datastoreValue) {
+        return datastoreValue != null
+                ? AsciiDocJson.valueOf(datastoreValue)
+                : null;
+    }
+
+}
diff --git a/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocXmlConverter.java b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocXmlConverter.java
new file mode 100644
index 0000000000..fafa956263
--- /dev/null
+++ b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocXmlConverter.java
@@ -0,0 +1,48 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters;
+
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocXml;
+
+import org.datanucleus.store.types.converters.TypeConverter;
+
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDoc;
+
+/**
+ * @since 2.0 {@index}
+ */
+public class CausewayAsciiDocXmlConverter implements TypeConverter<AsciiDocXml, String>{
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public String toDatastoreType(final AsciiDocXml memberValue) {
+        return memberValue != null
+                ? memberValue.getAdoc()
+                : null;
+    }
+
+    @Override
+    public AsciiDocXml toMemberType(final String datastoreValue) {
+        return datastoreValue != null
+                ? AsciiDocXml.valueOf(datastoreValue)
+                : null;
+    }
+
+}
diff --git a/valuetypes/asciidoc/applib/src/main/java/module-info.java b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocYamlConverter.java
similarity index 51%
copy from valuetypes/asciidoc/applib/src/main/java/module-info.java
copy to valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocYamlConverter.java
index 24cb1ef2a9..f3e40325db 100644
--- a/valuetypes/asciidoc/applib/src/main/java/module-info.java
+++ b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocYamlConverter.java
@@ -16,20 +16,30 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-module org.apache.causeway.valuetypes.asciidoc.applib {
-    exports org.apache.causeway.valuetypes.asciidoc.applib;
-    exports org.apache.causeway.valuetypes.asciidoc.applib.value;
-    exports org.apache.causeway.valuetypes.asciidoc.applib.jaxb;
+package org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters;
 
-    requires asciidoctorj.api;
-    requires java.inject;
-    requires java.xml.bind;
-    requires lombok;
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.commons;
-    requires spring.context;
-    requires spring.core;
-    requires org.apache.causeway.core.config;
-    requires spring.boot.autoconfigure;
-    requires java.net.http;
-}
\ No newline at end of file
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocYaml;
+import org.datanucleus.store.types.converters.TypeConverter;
+
+/**
+ * @since 2.0 {@index}
+ */
+public class CausewayAsciiDocYamlConverter implements TypeConverter<AsciiDocYaml, String>{
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public String toDatastoreType(final AsciiDocYaml memberValue) {
+        return memberValue != null
+                ? memberValue.getAdoc()
+                : null;
+    }
+
+    @Override
+    public AsciiDocYaml toMemberType(final String datastoreValue) {
+        return datastoreValue != null
+                ? AsciiDocYaml.valueOf(datastoreValue)
+                : null;
+    }
+
+}
diff --git a/valuetypes/asciidoc/persistence-jdo/src/main/resources/plugin.xml b/valuetypes/asciidoc/persistence-jdo/src/main/resources/plugin.xml
index 9292a78423..4ee29f5ca9 100644
--- a/valuetypes/asciidoc/persistence-jdo/src/main/resources/plugin.xml
+++ b/valuetypes/asciidoc/persistence-jdo/src/main/resources/plugin.xml
@@ -33,6 +33,30 @@
                 dfg="false"
                 converter-name="causeway.ext.asciidoc-string" />
     </extension>
+    <extension point="org.datanucleus.java_type">
+        <java-type
+                name="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocXml"
+                dfg="false"
+                converter-name="causeway.ext.asciidocxml-string" />
+    </extension>
+    <extension point="org.datanucleus.java_type">
+        <java-type
+                name="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocJson"
+                dfg="false"
+                converter-name="causeway.ext.asciidocjson-string" />
+    </extension>
+    <extension point="org.datanucleus.java_type">
+        <java-type
+                name="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocYaml"
+                dfg="false"
+                converter-name="causeway.ext.asciidocyaml-string" />
+    </extension>
+    <extension point="org.datanucleus.java_type">
+        <java-type
+                name="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocJava"
+                dfg="false"
+                converter-name="causeway.ext.asciidocjava-string" />
+    </extension>
 
     <!--
     http://www.datanucleus.org/extensions/type_converter.html
@@ -44,6 +68,34 @@
                 datastore-type="java.lang.String"
                 converter-class="org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters.CausewayAsciiDocConverter"/>
     </extension>
+    <extension point="org.datanucleus.type_converter">
+        <type-converter
+                name="causeway.ext.asciidocxml-string"
+                member-type="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocXml"
+                datastore-type="java.lang.String"
+                converter-class="org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters.CausewayAsciiDocXmlConverter"/>
+    </extension>
+    <extension point="org.datanucleus.type_converter">
+        <type-converter
+                name="causeway.ext.asciidocjson-string"
+                member-type="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocJson"
+                datastore-type="java.lang.String"
+                converter-class="org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters.CausewayAsciiDocJsonConverter"/>
+    </extension>
+    <extension point="org.datanucleus.type_converter">
+        <type-converter
+                name="causeway.ext.asciidocyaml-string"
+                member-type="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocYaml"
+                datastore-type="java.lang.String"
+                converter-class="org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters.CausewayAsciiDocYamlConverter"/>
+    </extension>
+    <extension point="org.datanucleus.type_converter">
+        <type-converter
+                name="causeway.ext.asciidocjava-string"
+                member-type="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocJava"
+                datastore-type="java.lang.String"
+                converter-class="org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters.CausewayAsciiDocJavaConverter"/>
+    </extension>
 
 
 </plugin>
diff --git a/valuetypes/asciidoc/persistence-jpa/pom.xml b/valuetypes/asciidoc/persistence-jpa/pom.xml
index d2b07970e1..4308bd7c41 100644
--- a/valuetypes/asciidoc/persistence-jpa/pom.xml
+++ b/valuetypes/asciidoc/persistence-jpa/pom.xml
@@ -48,7 +48,11 @@
 			<groupId>org.apache.causeway.core</groupId>
 			<artifactId>causeway-core-metamodel</artifactId>
 		</dependency>
+        <dependency>
+            <groupId>org.apache.causeway.valuetypes</groupId>
+            <artifactId>causeway-valuetypes-asciidoc-applib</artifactId>
+        </dependency>
 
-	</dependencies>
+    </dependencies>
 
 </project>
diff --git a/valuetypes/asciidoc/applib/src/main/java/module-info.java b/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocJavaConverter.java
similarity index 50%
copy from valuetypes/asciidoc/applib/src/main/java/module-info.java
copy to valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocJavaConverter.java
index 24cb1ef2a9..5d3dfebfe2 100644
--- a/valuetypes/asciidoc/applib/src/main/java/module-info.java
+++ b/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocJavaConverter.java
@@ -16,20 +16,31 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-module org.apache.causeway.valuetypes.asciidoc.applib {
-    exports org.apache.causeway.valuetypes.asciidoc.applib;
-    exports org.apache.causeway.valuetypes.asciidoc.applib.value;
-    exports org.apache.causeway.valuetypes.asciidoc.applib.jaxb;
+package org.apache.causeway.valuetypes.asciidoc.persistence.jpa.converters;
 
-    requires asciidoctorj.api;
-    requires java.inject;
-    requires java.xml.bind;
-    requires lombok;
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.commons;
-    requires spring.context;
-    requires spring.core;
-    requires org.apache.causeway.core.config;
-    requires spring.boot.autoconfigure;
-    requires java.net.http;
-}
\ No newline at end of file
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocJava;
+
+/**
+ * @since 2.0 {@index}
+ */
+@Converter(autoApply = true)
+public class CausewayAsciiDocJavaConverter implements AttributeConverter<AsciiDocJava, String>{
+
+    @Override
+    public String convertToDatabaseColumn(final AsciiDocJava memberValue) {
+        return memberValue != null
+                ? memberValue.getAdoc()
+                : null;
+    }
+
+    @Override
+    public AsciiDocJava convertToEntityAttribute(final String datastoreValue) {
+        return datastoreValue != null
+                ? AsciiDocJava.valueOf(datastoreValue)
+                : null;
+    }
+
+}
diff --git a/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocJsonConverter.java b/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocJsonConverter.java
new file mode 100644
index 0000000000..65255268f4
--- /dev/null
+++ b/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocJsonConverter.java
@@ -0,0 +1,47 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.causeway.valuetypes.asciidoc.persistence.jpa.converters;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDoc;
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocJson;
+
+/**
+ * @since 2.0 {@index}
+ */
+@Converter(autoApply = true)
+public class CausewayAsciiDocJsonConverter implements AttributeConverter<AsciiDocJson, String>{
+
+    @Override
+    public String convertToDatabaseColumn(final AsciiDocJson memberValue) {
+        return memberValue != null
+                ? memberValue.getAdoc()
+                : null;
+    }
+
+    @Override
+    public AsciiDocJson convertToEntityAttribute(final String datastoreValue) {
+        return datastoreValue != null
+                ? AsciiDocJson.valueOf(datastoreValue)
+                : null;
+    }
+
+}
diff --git a/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocXmlConverter.java b/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocXmlConverter.java
new file mode 100644
index 0000000000..ee65a5da30
--- /dev/null
+++ b/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocXmlConverter.java
@@ -0,0 +1,47 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.causeway.valuetypes.asciidoc.persistence.jpa.converters;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDoc;
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocXml;
+
+/**
+ * @since 2.0 {@index}
+ */
+@Converter(autoApply = true)
+public class CausewayAsciiDocXmlConverter implements AttributeConverter<AsciiDocXml, String>{
+
+    @Override
+    public String convertToDatabaseColumn(final AsciiDocXml memberValue) {
+        return memberValue != null
+                ? memberValue.getAdoc()
+                : null;
+    }
+
+    @Override
+    public AsciiDocXml convertToEntityAttribute(final String datastoreValue) {
+        return datastoreValue != null
+                ? AsciiDocXml.valueOf(datastoreValue)
+                : null;
+    }
+
+}
diff --git a/valuetypes/asciidoc/applib/src/main/java/module-info.java b/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocYamlConverter.java
similarity index 50%
copy from valuetypes/asciidoc/applib/src/main/java/module-info.java
copy to valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocYamlConverter.java
index 24cb1ef2a9..b87eca6eb3 100644
--- a/valuetypes/asciidoc/applib/src/main/java/module-info.java
+++ b/valuetypes/asciidoc/persistence-jpa/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jpa/converters/CausewayAsciiDocYamlConverter.java
@@ -16,20 +16,31 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-module org.apache.causeway.valuetypes.asciidoc.applib {
-    exports org.apache.causeway.valuetypes.asciidoc.applib;
-    exports org.apache.causeway.valuetypes.asciidoc.applib.value;
-    exports org.apache.causeway.valuetypes.asciidoc.applib.jaxb;
+package org.apache.causeway.valuetypes.asciidoc.persistence.jpa.converters;
 
-    requires asciidoctorj.api;
-    requires java.inject;
-    requires java.xml.bind;
-    requires lombok;
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.commons;
-    requires spring.context;
-    requires spring.core;
-    requires org.apache.causeway.core.config;
-    requires spring.boot.autoconfigure;
-    requires java.net.http;
-}
\ No newline at end of file
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDocYaml;
+
+/**
+ * @since 2.0 {@index}
+ */
+@Converter(autoApply = true)
+public class CausewayAsciiDocYamlConverter implements AttributeConverter<AsciiDocYaml, String>{
+
+    @Override
+    public String convertToDatabaseColumn(final AsciiDocYaml memberValue) {
+        return memberValue != null
+                ? memberValue.getAdoc()
+                : null;
+    }
+
+    @Override
+    public AsciiDocYaml convertToEntityAttribute(final String datastoreValue) {
+        return datastoreValue != null
+                ? AsciiDocYaml.valueOf(datastoreValue)
+                : null;
+    }
+
+}