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 2025/10/19 11:31:54 UTC
(causeway) branch CAUSEWAY-3866 updated (63ee9f22b70 -> 7eeea412b4a)
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a change to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
discard 63ee9f22b70 CAUSEWAY-3866: cleans up queryDSL and parent pom docs a little
discard 6d6c0cf2da6 CAUSEWAY-3866: removes reference to JScience
discard a64381e01d7 CAUSEWAY-3866: reconcile two pages both listing value types
discard 53f575fbe4a CAUSEWAY-3866: removes references to joda
discard 23b49adaeca adds docs for @Table and @Transient
discard 8557057dd8c CAUSEWAY-3866: adds docs for Embeddable, Entity, value types
discard e559f73d47d CAUSEWAY-3866: moves module-info.java (for jpa/applib) from src/main/java-jigsaw ...
discard 93ab0b1f820 CAUSEWAY-3866: fixes up CausewayPresets
discard 08373648d18 CAUSEWAY-3866: more tidy up
discard 8fdddfdfff2 CAUSEWAY-3866: replaces references on javax.xml.bind to jakarta.xml.bind
discard f83ecffdc76 CAUSEWAY-3866: removes resteasy references
discard b9fda43f92f CAUSEWAY-3866: removes references to shiro
discard eee67f8dfd7 CAUSEWAY-3866: removes references to shiro.ini
discard 1135734c12d CAUSEWAY-3866: removes more references to JDO in .adoc etc
discard 21b514c239b CAUSEWAY-3866: cleaned up docs for simpleapp and helloworld app some
discard c01d997c6e7 CAUSEWAY-3866: removes 'JDO' references
discard 95b54486f54 CAUSEWAY-3866: removes javax.jdo reference
discard b47ee1756ed CAUSEWAY-3866: updates references to javax.inject.Named
discard 3f4c549a9e8 CAUSEWAY-3866: updates references to javax.inject.Provider
discard 995f65232bc CAUSEWAY-3866: updates references to javax.annotation
discard f8c4ec57881 CAUSEWAY-3866: updates references to javax.validation.constraints and javax.annotation
discard bdfab6ab341 CAUSEWAY-3866: updates references to javax.persistence
discard 87acedba75e CAUSEWAY-3866: removes references to javax.jdo.annotation
discard 7c83d21d6e3 CAUSEWAY-3866: removes references to JdoSupportService, also TransactionService#nextTransaction
discard ac05932f543 CAUSEWAY-3866: removes more jdo and datanucleus references
discard a6cf672682e CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
discard 972c31c087a CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
discard 9507e82e3fc CAUSEWAY-3866: removes more jdo references
discard 2ec8c14e8a5 CAUSEWAY-3866: removes more jdo references
discard b6678969b06 CAUSEWAY-3866: updating docs is all for v4
discard 9b2a3e51f25 CAUSEWAY-3866: updating docs, removing references to JDO
discard cfe5e18b3a4 CAUSEWAY-3866: updating docs, removing references to JDO
discard 9badc113fd3 CAUSEWAY-3866: removes further JDO stuff: .adoc and unreferenced java libs/impls
discard b6ddf390c59 adds 4.0.0-M1 release notes
discard 0690c96de56 improves release procedure a little
add 4360224b576 Bump org.eclipse.persistence:org.eclipse.persistence.asm
add ce96ba9077b Merge pull request #3160 from apache/dependabot/maven/main/org.eclipse.persistence-org.eclipse.persistence.asm-9.9.0
add b06e17a6439 Bump com.icegreen:greenmail-junit5 from 2.1.6 to 2.1.7
add 3c6ce58e726 Merge pull request #3159 from apache/dependabot/maven/main/com.icegreen-greenmail-junit5-2.1.7
add 9dbcddbb54b Bump org.owasp:dependency-check-maven from 12.1.6 to 12.1.7
add 418258ea984 Merge pull request #3173 from apache/dependabot/maven/main/org.owasp-dependency-check-maven-12.1.7
add 1ac92c89911 Bump com.approvaltests:approvaltests from 25.4.3 to 25.6.0
add 47e1e1ad9fb Merge pull request #3172 from apache/dependabot/maven/main/com.approvaltests-approvaltests-25.6.0
add 8541bd028f8 Bump org.jacoco:jacoco-maven-plugin from 0.8.13 to 0.8.14
add 95abc220f99 Merge pull request #3161 from apache/dependabot/maven/main/org.jacoco-jacoco-maven-plugin-0.8.14
add e967cc4aa09 Bump io.cucumber:messages from 30.0.0 to 30.1.0
add 49c2742bf74 Merge pull request #3162 from apache/dependabot/maven/main/io.cucumber-messages-30.1.0
add 0dfbd094c6f CAUSEWAY-2445: introduces a playbook for local verify only (Antora)
add ac4980e38e2 CAUSEWAY-2445: adds site-deploy (antora CI)
add 517bf77d891 udpates project.build.outputTimestamp
add 2257950b9ac CAUSEWAY-3898: updates relesae procedure docs
add 961a364e2e4 CAUSEWAY-3898: updates relesae procedure docs some more (no more bom)
add ebdb05f15c7 CAUSEWAY-3898: updates relesae procedure docs some more (mvn versions:set)
add aaf78d1a886 CAUSEWAY-3898: mvn versions:set
add 7c177ac35c3 CAUSEWAY-3898: adds distributionManagement to bom/pom.xml
add 952bc82be8f CAUSEWAY-3898: improves release docs
add a6566930538 CAUSEWAY-3898: removes checksum plugin from starters; there is no source to check
add 0d39d20cfdc adds missing stuff to root pom.xml for release
add a332cba17bf adds back in distributionManagement for bom
add 989b5d0bf64 adds the missing sourceReleaseAssemlyDescriptor property
add 569fea3782e also removes the deploy skip property for aggregator, cos we _do_ want the source to be deployed (uploaded)
add 52dedde7aee adopts apache release parent
add d37a0089913 attaches source-release.zip so that it is uploaded to nexus
add 433f33ad7cd adds gpg plugin to bom/pom.xml
add c902e3657ca CAUSEWAY-3898: resetting version
add ce7a4d35259 CAUSEWAY-3898: updates release procedure docs
add c8d5001d156 updating release verification process docs
add fda3eb6a3e7 fixes (?) verify script
add a1ba656219a further fixes to release procedure
add b1c88e0656a minor update to release procedure
new db9e5d2692e improves release procedure a little
new 4f9c0bf0b52 adds 4.0.0-M1 release notes
new a741f1b9dcd Merge branch 'release-4.0.0-M1-RC1'
new 98e458de058 CAUSEWAY-3866: removes further JDO stuff: .adoc and unreferenced java libs/impls
new 71b0af20d09 CAUSEWAY-3866: updating docs, removing references to JDO
new 828befe9c07 CAUSEWAY-3866: updating docs, removing references to JDO
new 257709bc159 CAUSEWAY-3866: updating docs is all for v4
new 1dab47595f3 CAUSEWAY-3866: removes more jdo references
new 2c403d5f71b CAUSEWAY-3866: removes more jdo references
new 5dc15521738 CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
new 144c7bba6e4 CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
new d174c8e05f6 CAUSEWAY-3866: removes more jdo and datanucleus references
new 87fb552b0f8 CAUSEWAY-3866: removes references to JdoSupportService, also TransactionService#nextTransaction
new b72cc67e9f9 CAUSEWAY-3866: removes references to javax.jdo.annotation
new beae5990fe4 CAUSEWAY-3866: updates references to javax.persistence
new 464fdcc9728 CAUSEWAY-3866: updates references to javax.validation.constraints and javax.annotation
new 9ca6900f0d6 CAUSEWAY-3866: updates references to javax.annotation
new f0e3b384b8b CAUSEWAY-3866: updates references to javax.inject.Provider
new 2d2afe89266 CAUSEWAY-3866: updates references to javax.inject.Named
new 25763d6b308 CAUSEWAY-3866: removes javax.jdo reference
new 525e80ffbe0 CAUSEWAY-3866: removes 'JDO' references
new f8f3f78ebb0 CAUSEWAY-3866: cleaned up docs for simpleapp and helloworld app some
new 77ecdb59415 CAUSEWAY-3866: removes more references to JDO in .adoc etc
new 3a152a1f30b CAUSEWAY-3866: removes references to shiro.ini
new e8399e4689d CAUSEWAY-3866: removes references to shiro
new 8bf012fcce2 CAUSEWAY-3866: removes resteasy references
new 7592e629430 CAUSEWAY-3866: replaces references on javax.xml.bind to jakarta.xml.bind
new 5c514b0ef5a CAUSEWAY-3866: more tidy up
new b07ead6cfdb CAUSEWAY-3866: fixes up CausewayPresets
new b3bdc9b7b98 CAUSEWAY-3866: moves module-info.java (for jpa/applib) from src/main/java-jigsaw ...
new 5420d89b3b9 CAUSEWAY-3866: adds docs for Embeddable, Entity, value types
new f2b1c9c436e adds docs for @Table and @Transient
new fdff79b721a CAUSEWAY-3866: removes references to joda
new 09f9f4dccff CAUSEWAY-3866: reconcile two pages both listing value types
new 04a22bef8f4 CAUSEWAY-3866: removes reference to JScience
new 7eeea412b4a CAUSEWAY-3866: cleans up queryDSL and parent pom docs a little
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (63ee9f22b70)
\
N -- N -- N refs/heads/CAUSEWAY-3866 (7eeea412b4a)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 36 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
....yml~disabled.txt => ci-build-site-no-push.yml} | 4 +-
.../modules/ROOT/pages/cutting-a-release.adoc | 220 ++++++---------------
.../modules/ROOT/pages/verifying-releases.adoc | 2 +-
.../verify-process-docker-container-prep.adoc | 3 +-
.../modules/ROOT/partials/verify-process.adoc | 4 +-
.../playbooks/{site.NEXT.yml => site-deploy.yml} | 157 +++++++--------
antora/playbooks/{site.yml => site-verify.yml} | 12 +-
antora/pom.xml | 2 +-
api/applib/pom.xml | 2 +-
api/schema/pom.xml | 2 +-
bom/pom.xml | 53 ++++-
commons/pom.xml | 2 +-
core/codegen-bytebuddy/pom.xml | 2 +-
core/config/pom.xml | 2 +-
core/interaction/pom.xml | 2 +-
core/internaltestsupport/pom.xml | 2 +-
core/metamodel/pom.xml | 2 +-
core/mmtest/pom.xml | 2 +-
core/mmtestsupport/pom.xml | 2 +-
core/pom.xml | 2 +-
core/runtime/pom.xml | 2 +-
core/runtimeservices/pom.xml | 2 +-
core/security/pom.xml | 2 +-
core/transaction/pom.xml | 2 +-
core/webapp/pom.xml | 2 +-
extensions/core/commandlog/applib/pom.xml | 2 +-
extensions/core/commandlog/persistence-jpa/pom.xml | 2 +-
extensions/core/commandlog/pom.xml | 2 +-
extensions/core/docgen/help/pom.xml | 2 +-
extensions/core/docgen/pom.xml | 2 +-
extensions/core/excel/applib/pom.xml | 2 +-
extensions/core/excel/fixture/pom.xml | 2 +-
extensions/core/excel/integtests/pom.xml | 2 +-
extensions/core/excel/pom.xml | 2 +-
extensions/core/excel/testing/pom.xml | 2 +-
extensions/core/executionlog/applib/pom.xml | 2 +-
.../core/executionlog/persistence-jpa/pom.xml | 2 +-
extensions/core/executionlog/pom.xml | 2 +-
extensions/core/executionoutbox/applib/pom.xml | 2 +-
.../core/executionoutbox/persistence-jpa/pom.xml | 2 +-
extensions/core/executionoutbox/pom.xml | 2 +-
extensions/core/executionoutbox/restclient/pom.xml | 2 +-
.../core/executionrepublisher/applib/pom.xml | 2 +-
extensions/core/executionrepublisher/pom.xml | 2 +-
extensions/core/flyway/impl/pom.xml | 2 +-
extensions/core/flyway/pom.xml | 2 +-
extensions/core/layoutloaders/github/pom.xml | 2 +-
extensions/core/layoutloaders/pom.xml | 2 +-
extensions/core/titlecache/applib/pom.xml | 2 +-
extensions/core/titlecache/caffeine/pom.xml | 2 +-
extensions/core/titlecache/pom.xml | 2 +-
extensions/pom.xml | 2 +-
extensions/security/audittrail/applib/pom.xml | 2 +-
.../security/audittrail/persistence-jpa/pom.xml | 2 +-
extensions/security/audittrail/pom.xml | 2 +-
extensions/security/secman/applib/pom.xml | 2 +-
.../security/secman/delegated-springoauth2/pom.xml | 2 +-
.../security/secman/encryption-jbcrypt/pom.xml | 2 +-
.../security/secman/encryption-spring/pom.xml | 2 +-
extensions/security/secman/integration/pom.xml | 2 +-
extensions/security/secman/persistence-jpa/pom.xml | 2 +-
extensions/security/secman/pom.xml | 2 +-
extensions/security/sessionlog/applib/pom.xml | 2 +-
.../security/sessionlog/persistence-jpa/pom.xml | 2 +-
extensions/security/sessionlog/pom.xml | 2 +-
extensions/security/spring-oauth2/pom.xml | 2 +-
extensions/vro/cors/impl/pom.xml | 2 +-
extensions/vro/cors/pom.xml | 2 +-
extensions/vw/fullcalendar/applib/pom.xml | 2 +-
extensions/vw/fullcalendar/pom.xml | 2 +-
.../vw/fullcalendar/wicket/integration/pom.xml | 2 +-
extensions/vw/fullcalendar/wicket/pom.xml | 2 +-
extensions/vw/fullcalendar/wicket/ui/pom.xml | 2 +-
extensions/vw/pdfjs/applib/pom.xml | 2 +-
extensions/vw/pdfjs/metamodel/pom.xml | 2 +-
extensions/vw/pdfjs/pom.xml | 2 +-
extensions/vw/pdfjs/wicket/integration/pom.xml | 2 +-
extensions/vw/pdfjs/wicket/pom.xml | 2 +-
extensions/vw/pdfjs/wicket/ui/pom.xml | 2 +-
extensions/vw/sse/applib/pom.xml | 2 +-
extensions/vw/sse/metamodel/pom.xml | 2 +-
extensions/vw/sse/pom.xml | 2 +-
extensions/vw/sse/wicket/pom.xml | 2 +-
extensions/vw/tabular/applib/pom.xml | 2 +-
extensions/vw/tabular/excel/pom.xml | 2 +-
extensions/vw/tabular/pdf/pom.xml | 2 +-
extensions/vw/tabular/pom.xml | 2 +-
mavendeps/pom.xml | 2 +-
mavendeps/webapp/pom.xml | 2 +-
parent/pom.xml | 42 +---
persistence/commons/pom.xml | 2 +-
persistence/jdbc/pom.xml | 2 +-
persistence/jpa/applib/pom.xml | 2 +-
persistence/jpa/eclipselink/pom.xml | 2 +-
persistence/jpa/integration/pom.xml | 2 +-
persistence/jpa/metamodel/pom.xml | 2 +-
persistence/jpa/pom.xml | 2 +-
persistence/querydsl/applib/pom.xml | 2 +-
persistence/querydsl/integration/pom.xml | 2 +-
persistence/querydsl/jpa/pom.xml | 2 +-
persistence/querydsl/metamodel/pom.xml | 2 +-
persistence/querydsl/pom.xml | 2 +-
persistence/querydsl/testsupport/pom.xml | 2 +-
pom.xml | 82 ++++----
regressiontests/base-jpa/pom.xml | 2 +-
regressiontests/base/pom.xml | 2 +-
regressiontests/bootstrapping/pom.xml | 2 +-
regressiontests/cmdexecauditsess/generic/pom.xml | 2 +-
.../cmdexecauditsess/persistence-jpa/pom.xml | 2 +-
regressiontests/cmdexecauditsess/pom.xml | 2 +-
regressiontests/config/pom.xml | 4 +-
regressiontests/core-wrapperfactory/pom.xml | 2 +-
regressiontests/cucumber/pom.xml | 2 +-
regressiontests/domainmodel/pom.xml | 2 +-
regressiontests/eventhandling/pom.xml | 2 +-
regressiontests/factory/pom.xml | 2 +-
regressiontests/interact/pom.xml | 2 +-
regressiontests/persistence-jpa/pom.xml | 2 +-
regressiontests/pom.xml | 2 +-
regressiontests/publishing-jpa/pom.xml | 2 +-
regressiontests/rest-jpa/pom.xml | 2 +-
regressiontests/value/pom.xml | 2 +-
regressiontests/viewers-common/pom.xml | 2 +-
regressiontests/viewers-jpa/pom.xml | 2 +-
scripts/ci/_print-environment.sh | 1 +
scripts/verify-causeway-release.sh | 24 +--
security/bypass/pom.xml | 2 +-
security/keycloak/pom.xml | 2 +-
security/simple/pom.xml | 2 +-
security/spring/pom.xml | 2 +-
starters/pom.xml | 35 +---
testing/archtestsupport/applib/pom.xml | 2 +-
testing/archtestsupport/pom.xml | 2 +-
testing/fakedata/applib/pom.xml | 2 +-
testing/fakedata/fixtures/pom.xml | 2 +-
testing/fakedata/integtests/pom.xml | 2 +-
testing/fakedata/pom.xml | 2 +-
testing/fixtures/applib/pom.xml | 2 +-
testing/fixtures/pom.xml | 2 +-
testing/h2console/pom.xml | 2 +-
testing/h2console/ui/pom.xml | 2 +-
testing/hsqldbmgr/pom.xml | 2 +-
testing/hsqldbmgr/ui/pom.xml | 2 +-
testing/integtestsupport/applib/pom.xml | 2 +-
testing/integtestsupport/pom.xml | 2 +-
testing/pom.xml | 2 +-
testing/specsupport/applib/pom.xml | 4 +-
testing/specsupport/pom.xml | 2 +-
testing/unittestsupport/applib/pom.xml | 2 +-
testing/unittestsupport/pom.xml | 2 +-
valuetypes/asciidoc/applib/pom.xml | 2 +-
valuetypes/asciidoc/builder/pom.xml | 2 +-
valuetypes/asciidoc/metamodel/pom.xml | 2 +-
valuetypes/asciidoc/persistence-jpa/pom.xml | 2 +-
valuetypes/asciidoc/pom.xml | 2 +-
valuetypes/asciidoc/ui/pom.xml | 2 +-
valuetypes/asciidoc/ui/wicket/pom.xml | 2 +-
valuetypes/markdown/applib/pom.xml | 2 +-
valuetypes/markdown/metamodel/pom.xml | 2 +-
valuetypes/markdown/persistence-jpa/pom.xml | 2 +-
valuetypes/markdown/pom.xml | 2 +-
valuetypes/markdown/ui/pom.xml | 2 +-
valuetypes/markdown/ui/wicket/pom.xml | 2 +-
valuetypes/pom.xml | 2 +-
valuetypes/vega/applib/pom.xml | 2 +-
valuetypes/vega/metamodel/pom.xml | 2 +-
valuetypes/vega/persistence-jpa/pom.xml | 2 +-
valuetypes/vega/pom.xml | 2 +-
valuetypes/vega/ui/pom.xml | 2 +-
valuetypes/vega/ui/wicket/pom.xml | 2 +-
viewers/commons/applib/pom.xml | 2 +-
viewers/commons/model/pom.xml | 2 +-
viewers/commons/pom.xml | 2 +-
viewers/commons/prism/pom.xml | 2 +-
viewers/commons/services/pom.xml | 2 +-
viewers/graphql/applib/pom.xml | 2 +-
viewers/graphql/model/pom.xml | 2 +-
viewers/graphql/pom.xml | 2 +-
viewers/graphql/test/pom.xml | 2 +-
viewers/graphql/test2/pom.xml | 2 +-
viewers/graphql/testsupport/pom.xml | 2 +-
viewers/graphql/viewer/pom.xml | 2 +-
viewers/restfulobjects/applib/pom.xml | 2 +-
viewers/restfulobjects/client/pom.xml | 2 +-
viewers/restfulobjects/pom.xml | 2 +-
viewers/restfulobjects/rendering/pom.xml | 2 +-
viewers/restfulobjects/test/pom.xml | 2 +-
viewers/restfulobjects/viewer/pom.xml | 2 +-
viewers/wicket/applib/pom.xml | 2 +-
viewers/wicket/model/pom.xml | 2 +-
viewers/wicket/pom.xml | 2 +-
viewers/wicket/ui-test/pom.xml | 2 +-
viewers/wicket/ui/pom.xml | 2 +-
viewers/wicket/viewer/pom.xml | 2 +-
194 files changed, 444 insertions(+), 561 deletions(-)
rename .github/workflows/{ci-build-site-no-push.yml~disabled.txt => ci-build-site-no-push.yml} (96%)
copy antora/playbooks/{site.NEXT.yml => site-deploy.yml} (87%)
copy antora/playbooks/{site.yml => site-verify.yml} (97%)
(causeway) 23/36: CAUSEWAY-3866: removes more references to JDO in .adoc etc
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 77ecdb5941595eeee3033bdb59965f5e16cda470
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 15:29:02 2025 +0100
CAUSEWAY-3866: removes more references to JDO in .adoc etc
---
causeway-tooling.yml | 1 -
.../sections/causeway.persistence.commons.adoc | 4 +-
.../sections/causeway.persistence.schema.adoc | 7 ++-
.../changetracking/EntityChangeTracker.java | 3 +-
...yPersistenceJdoMetaModelRoleAndPermissions.java | 53 ----------------------
.../scripts/SeedUsersAndRolesFixtureScript.java | 1 -
.../adoc/modules/starters/pages/simpleapp.adoc | 2 +-
7 files changed, 7 insertions(+), 64 deletions(-)
diff --git a/causeway-tooling.yml b/causeway-tooling.yml
index 67ebeb2bdce..584096ffd33 100644
--- a/causeway-tooling.yml
+++ b/causeway-tooling.yml
@@ -35,7 +35,6 @@ commands:
Persistence: org.apache.causeway.persistence
"Persistence Commons": "org.apache.causeway.persistence:causeway-persistence-commons.*"
- JDO: "org.apache.causeway.persistence:causeway-persistence-jdo.*"
JPA: "org.apache.causeway.persistence:causeway-persistence-jpa.*"
Security: org.apache.causeway.security
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/causeway.persistence.commons.adoc b/core/config/src/main/adoc/modules/config/pages/sections/causeway.persistence.commons.adoc
index c5a98025fbd..06bd6653eb2 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/causeway.persistence.commons.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/causeway.persistence.commons.adoc
@@ -31,7 +31,7 @@ suppress-auto-flush
| true
| Normally any query submitted to `RepositoryService#allMatches(Query)` will trigger a flush first, unless auto-flush has been disabled.
-However, this auto-flush behaviour can be troublesome if the query occurs as a side-effect of the evaluation of a derived property, whose value in turn is enlisted by an implementation of a subscriber (in particular `EntityPropertyChangeSubscriber`) which captures the value of all properties (both persisted and derived). However, this behaviour can (at least under JDO), result in a `ConcurrentModificationException`.
+However, this auto-flush behaviour can be troublesome if the query occurs as a side effect of the evaluation of a derived property, whose value in turn is enlisted by an implementation of a subscriber (in particular `EntityPropertyChangeSubscriber`) which captures the value of all properties (both persisted and derived). However, this behaviour may result in a `ConcurrentModificationException`.
By default, `EntityChangeTracker` will therefore temporarily suppress any auto-flushing while this is ongoing. The purpose of this configuration property is to never suppress, ie always autoflush.
@@ -42,7 +42,7 @@ causeway.persistence.commons. +
repository-service. +
disable-auto-flush
-|
+|
| Normally any queries are automatically preceded by flushing pending executions.
This key allows this behaviour to be disabled.
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/causeway.persistence.schema.adoc b/core/config/src/main/adoc/modules/config/pages/sections/causeway.persistence.schema.adoc
index 8bfb139ae26..e4f9654b300 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/causeway.persistence.schema.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/causeway.persistence.schema.adoc
@@ -16,16 +16,15 @@ include::../section-hooks/causeway.persistence.schema~pre.adoc[]
causeway.persistence.schema. +
additional-orm-files
-|
-| Does lookup additional "mapping-files" in META-INF/orm-_name_.xml (equivalent to "mapping-file" entries in persistence.xml) and adds these to those that are already configured the _Spring Data_ way (if any). NOTE: not implemented for JDO
-
+|
+| Does lookup additional "mapping-files" in META-INF/orm-_name_.xml (equivalent to "mapping-file" entries in persistence.xml) and adds these to those that are already configured the _Spring Data_ way (if any).
|
[[causeway.persistence.schema.auto-create-schemas]]
causeway.persistence.schema. +
auto-create-schemas
-|
+|
| List of additional schemas to be auto-created.
Explicitly creates given list of schemas by using the specified `#getCreateSchemaSqlTemplate()` to generate the actual SQL statement against the configured data-source.
diff --git a/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/EntityChangeTracker.java b/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/EntityChangeTracker.java
index cbf02787e05..effd156780f 100644
--- a/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/EntityChangeTracker.java
+++ b/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/EntityChangeTracker.java
@@ -59,8 +59,7 @@ public interface EntityChangeTracker extends DisposableBean {
* </p>
*
* @param entity
- * @param propertyChangeRecordSupplier - optional parameter (as a performance optimization)
- * to provide the pre-computed {@link PropertyChangeRecord}s from the ORM. JPA does this, JDO does not.
+ * @param propertyChangeRecordSupplier - provide the pre-computed {@link PropertyChangeRecord}s from the ORM; supported by JPA.
*/
void enlistUpdating(ManagedObject entity, @Nullable Function<ManagedObject, Can<PropertyChangeRecord>> propertyChangeRecordSupplier);
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayPersistenceJdoMetaModelRoleAndPermissions.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayPersistenceJdoMetaModelRoleAndPermissions.java
deleted file mode 100644
index ed16402b9da..00000000000
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayPersistenceJdoMetaModelRoleAndPermissions.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.extensions.secman.applib.role.seed;
-
-import org.apache.causeway.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionMode;
-import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionRule;
-import org.apache.causeway.extensions.secman.applib.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
-
-/**
- * Sets up a role with access to the menu actions to download the JDO metamodel.
- *
- * @since 2.0 {@index}
- */
-public class CausewayPersistenceJdoMetaModelRoleAndPermissions
-extends AbstractRoleAndPermissionsFixtureScript {
-
- private static final String SERVICE_LOGICAL_TYPE_NAME = "causeway.persistence.jdo.JdoMetamodelMenu";
-
- public static final String ROLE_NAME = SERVICE_LOGICAL_TYPE_NAME.replace(".","-");
-
- public CausewayPersistenceJdoMetaModelRoleAndPermissions() {
- super(ROLE_NAME, "Access to download the JDO metamodel");
- }
-
- @Override
- protected void execute(ExecutionContext executionContext) {
- newPermissions(
- ApplicationPermissionRule.ALLOW,
- ApplicationPermissionMode.CHANGING,
- Can.of(
- ApplicationFeatureId.newType(SERVICE_LOGICAL_TYPE_NAME)
- )
- );
- }
-}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/seed/scripts/SeedUsersAndRolesFixtureScript.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/seed/scripts/SeedUsersAndRolesFixtureScript.java
index b62fb6d4a15..b03d06daa3b 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/seed/scripts/SeedUsersAndRolesFixtureScript.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/seed/scripts/SeedUsersAndRolesFixtureScript.java
@@ -50,7 +50,6 @@
import org.apache.causeway.extensions.secman.applib.role.seed.CausewayExtSecmanAdminRoleAndPermissions;
import org.apache.causeway.extensions.secman.applib.role.seed.CausewayExtSecmanRegularUserRoleAndPermissions;
import org.apache.causeway.extensions.secman.applib.role.seed.CausewayExtSessionLogRoleAndPermissions;
-import org.apache.causeway.extensions.secman.applib.role.seed.CausewayPersistenceJdoMetaModelRoleAndPermissions;
import org.apache.causeway.extensions.secman.applib.role.seed.CausewaySudoImpersonateRoleAndPermissions;
import org.apache.causeway.extensions.secman.applib.role.seed.CausewayViewerRestfulObjectsSwaggerRoleAndPermissions;
import org.apache.causeway.extensions.secman.applib.seed.SeedSecurityModuleService;
diff --git a/starters/adoc/modules/starters/pages/simpleapp.adoc b/starters/adoc/modules/starters/pages/simpleapp.adoc
index eb560d818b3..cde1ec72b3e 100644
--- a/starters/adoc/modules/starters/pages/simpleapp.adoc
+++ b/starters/adoc/modules/starters/pages/simpleapp.adoc
@@ -914,7 +914,7 @@ If you run into issues, please don't hesitate to ask for help on the users maili
The application is configured by default uses H2 as an inmemory database, with <<fixtures,fixtures>> used to populate the database with representative data.
To deploy to production though of course will require a persistent database, and the schema of the tables will be explicitly managed.
-Although both JDO and JPA can automatically create the database schema, many development teams choose to manage the schema externally to the ORM.
+Although xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] can automatically create the database schema, many development teams choose to manage the schema externally to the ORM.
A popular tool to do this is link:https://flywaydb.org/[Flyway], and Spring Boot provides automatic support for it using link:https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties-data-migration[these configuration properties].
(causeway) 25/36: CAUSEWAY-3866: removes references to shiro
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit e8399e4689dc3a0b60b21c6bcb2074449aca3595
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 17:58:59 2025 +0100
CAUSEWAY-3866: removes references to shiro
---
README.adoc | 6 +-
.../causeway-in-pictures.adoc | 4 +-
.../CausewayModuleExtSecmanDelegatedShiro.adoc | 12 -
.../realm/CausewayModuleExtSecmanShiroRealm.adoc | 27 -
.../secman/delegated/shiro/util/ShiroUtils.adoc | 15 -
.../modules/ROOT/pages/2024/3.0.0/mignotes.adoc | 2 +-
.../modules/ROOT/pages/2024/3.0.0/relnotes.adoc | 40 +-
.../ROOT/partials/2024/2.0.0/_relnotes.adoc | 11 +-
.../ROOT/partials/2024/2.1.0/_relnotes.adoc | 2 +-
causeway-tooling.yml | 2 +-
core/config/generateConfigDocs.groovy | 7 -
.../adoc/modules/config/pages/sections/_nav.adoc | 1 -
.../pages/sections/causeway.security.shiro.adoc | 29 -
.../main/adoc/modules/webapp/pages/webmodules.adoc | 10 +-
.../main/adoc/modules/webapp/pages/webmodules.html | 851 +++++++++++++++++++++
.../images/secman-shiro-architecture.drawio.svg | 4 -
.../secman-shiro-delegate-architecture.drawio.svg | 4 -
.../secman/adoc/modules/secman/pages/about.adoc | 5 -
.../adoc/modules/secman/pages/setting-up.adoc | 9 +-
.../secman/applib/user/dom/AccountType.java | 12 +-
.../secman/applib/user/dom/ApplicationUser.java | 7 +-
.../integration/authorizor/AuthorizorSecman.java | 11 -
.../adoc/modules/spring-oauth2/pages/about.adoc | 92 ++-
regressiontests/incubating/pom.xml | 12 -
.../test/resources/shiro-secman-ldap-cached.ini | 55 --
.../src/test/resources/shiro-secman-ldap.ini | 51 --
.../incubating/src/test/resources/shiro-secman.ini | 31 -
.../incubating/src/test/resources/shiro-simple.ini | 58 --
security/adoc/modules/ROOT/pages/about.adoc | 1 -
.../adoc/modules/ROOT/partials/component-nav.adoc | 1 -
valuetypes/vega/adoc/modules/vega/pages/about.adoc | 2 +-
.../auth/AuthenticationStrategyBasicAuth.java | 7 -
32 files changed, 971 insertions(+), 410 deletions(-)
diff --git a/README.adoc b/README.adoc
index 54227d55886..1722560ae83 100644
--- a/README.adoc
+++ b/README.adoc
@@ -25,8 +25,10 @@ Apache Causeway automatically generates the UI from the domain classes.
=== Sign-in
-Apache Causeway integrates with http://shiro.apache.org[Apache Shiro] as well as link:https://spring.io/projects/spring-security[Spring Security] and link:https://www.keycloak.org/[Keycloak].
-When using Shiro, the core framework supports file-based realms, while the __SecMan__ extension provides a well-featured subdomain of users, roles and permissions against features derived from the Apache Causeway metamodel.
+Apache Causeway integrates with link:https://spring.io/projects/spring-security[Spring Security] and link:https://www.keycloak.org/[Keycloak] for authentication concerns, typically in combination with OAuth2.
+These are usually combined with the __SecMan__ module, which provides a set of domain entities that model an authenticaiton model: users, roles and permissions against features derived from the Apache Causeway metamodel.
+The SecMan user is mapped to the authentical principle provided by Spring or Keycloak.
+Alternatively, SecMan can perform its own local authentication.
image::https://raw.githubusercontent.com/apache/causeway/main/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/010-login.png[link="https://raw.githubusercontent.com/apache/causeway/main/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/010-login.png"]
diff --git a/antora/components/docs/modules/ROOT/pages/what-is-apache-causeway/causeway-in-pictures.adoc b/antora/components/docs/modules/ROOT/pages/what-is-apache-causeway/causeway-in-pictures.adoc
index 6f9ba6c1276..84248d8cd1b 100644
--- a/antora/components/docs/modules/ROOT/pages/what-is-apache-causeway/causeway-in-pictures.adoc
+++ b/antora/components/docs/modules/ROOT/pages/what-is-apache-causeway/causeway-in-pictures.adoc
@@ -16,9 +16,9 @@ Let's start with the basics...
=== Sign-in
-Apache Causeway integrates with a variety of authentication mechanisms, including link:http://shiro.apache.org[Apache Shiro], link:https://spring.io/projects/spring-security[Spring Security] and link:https://www.keycloak.org/[Keycloak].
+Apache Causeway integrates with a variety of authentication mechanisms, including link:https://spring.io/projects/spring-security[Spring Security] and link:https://www.keycloak.org/[Keycloak].
-The xref:security:ROOT:about.adoc[SecMan extension] provides a well-features subdomain of users, roles and permissions against features derived from the Apache Causeway metamodel.
+The xref:security:ROOT:about.adoc[SecMan extension] provides a well-featured subdomain of users, roles and permissions against features derived from the Apache Causeway metamodel.
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/CausewayModuleExtSecmanDelegatedShiro.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/CausewayModuleExtSecmanDelegatedShiro.adoc
deleted file mode 100644
index 20fc2f3d263..00000000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/CausewayModuleExtSecmanDelegatedShiro.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= CausewayModuleExtSecmanDelegatedShiro
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleExtSecmanDelegatedShiro.java
-----
-class CausewayModuleExtSecmanDelegatedShiro {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.adoc
deleted file mode 100644
index 17c0b2b02c0..00000000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= CausewayModuleExtSecmanShiroRealm
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleExtSecmanShiroRealm.java
-----
-class CausewayModuleExtSecmanShiroRealm {
- CausewayModuleExtSecmanShiroRealm() // <.>
- V execute(Supplier<V> closure)
- V doExecute(Supplier<V> closure)
-}
-----
-
-<.> xref:#CausewayModuleExtSecmanShiroRealm_[CausewayModuleExtSecmanShiroRealm()]
-+
---
-Configures a _org.apache.shiro.authz.permission.PermissionResolver_ that knows how to process the permission strings that are provided by Causeway' xref:refguide:core:index/security/authorization/Authorizor.adoc[Authorizor] for Shiro.
---
-
-== Members
-
-[#CausewayModuleExtSecmanShiroRealm_]
-=== CausewayModuleExtSecmanShiroRealm()
-
-Configures a _org.apache.shiro.authz.permission.PermissionResolver_ that knows how to process the permission strings that are provided by Causeway' xref:refguide:core:index/security/authorization/Authorizor.adoc[Authorizor] for Shiro.
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/util/ShiroUtils.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/util/ShiroUtils.adoc
deleted file mode 100644
index e315d34ade6..00000000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/delegated/shiro/util/ShiroUtils.adoc
+++ /dev/null
@@ -1,15 +0,0 @@
-= ShiroUtils
-: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 [...]
-
-== API
-
-[source,java]
-.ShiroUtils.java
-----
-class ShiroUtils {
- RealmSecurityManager getSecurityManager()
- CausewayModuleExtSecmanShiroRealm getCausewayModuleSecurityRealm()
- boolean isSingleRealm()
-}
-----
-
diff --git a/antora/components/relnotes/modules/ROOT/pages/2024/3.0.0/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2024/3.0.0/mignotes.adoc
index 34063197469..04e560d142f 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2024/3.0.0/mignotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2024/3.0.0/mignotes.adoc
@@ -8,7 +8,7 @@ To upgrade from v2.0 to v3.0:
* move up to Java 17 (minimum)
* update namespaces from `javax` to `jakarta`
-* if you are using the xref:security:shiro:about.adoc[Shiro security] module, this will need to choose a different security implementation.
+* if you have been using the _Shiro security_ module, this will need to choose a different security implementation.
This last point is discussed xref:#simple-security-replacement-for-shiro[below].
diff --git a/antora/components/relnotes/modules/ROOT/pages/2024/3.0.0/relnotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2024/3.0.0/relnotes.adoc
index 80bd027f70f..26df38c9fe9 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2024/3.0.0/relnotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2024/3.0.0/relnotes.adoc
@@ -5,26 +5,26 @@
:page-partial:
-After almost six years effort (!), v2.0.0 and v3.0.0 are the first official releases of Apache Causeway, now re-platformed to run on Spring Boot.
-The two versions are being released at the same time.
-
-
-The v3.0.0 release is broadly equivalent to the v2.0.0 release.
-As such, see the xref:2024/2.0.0/relnotes.adoc[2.0.0] release notes for full details of the features available in this release.
-
-However, 3.0.0:
-
-* targets Spring Boot 3.x (instead of Spring Boot 2.x)
-* targets Java 17 (instead of Java 11)
-
-It also uses the `jakarta` namespace rather than `javax`.
-
-
-There is one functional change, namely that support for xref:security:shiro:about.adoc[Shiro security] module has been dropped (for now).
-See the xref:relnotes:ROOT:2024/3.0.0/mignotes.adoc#simple-security-replacement-for-shiro[migration notes] for options.
-
-
-include::partial$2024/2.0.0/_relnotes.adoc[]
+// After almost six years effort (!), v2.0.0 and v3.0.0 are the first official releases of Apache Causeway, now re-platformed to run on Spring Boot.
+// The two versions are being released at the same time.
+//
+//
+// The v3.0.0 release is broadly equivalent to the v2.0.0 release.
+// As such, see the xref:2024/2.0.0/relnotes.adoc[2.0.0] release notes for full details of the features available in this release.
+//
+// However, 3.0.0:
+//
+// * targets Spring Boot 3.x (instead of Spring Boot 2.x)
+// * targets Java 17 (instead of Java 11)
+//
+// It also uses the `jakarta` namespace rather than `javax`.
+//
+//
+// There is one functional change, namely that support for _Shiro security_ module has been dropped.
+// See the xref:relnotes:ROOT:2024/3.0.0/mignotes.adoc#simple-security-replacement-for-shiro[migration notes] for options.
+//
+//
+// include::partial$2024/2.0.0/_relnotes.adoc[]
diff --git a/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc b/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
index 7718e747a7c..9b61ba332f0 100644
--- a/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
@@ -59,7 +59,7 @@ Other highlights
* xref:pjpa:ROOT:about.adoc[Persistence using JPA] has been added through an integration of EclipseLink.
+
-Persistence using JDO continues to be supported through the integration with DataNucleus.
+Persistence using JDO continues to be supported through the integration with _DataNucleus_.
+
[NOTE]
====
@@ -85,8 +85,13 @@ In particular, "encapsulated" mode mean that the properties and collections of e
** supported custom scalar value types and composite types
+
-This includes xref:valuetypes:asciidoc:about.adoc[AsciiDoc], xref:valuetypes:markdown:about.adoc[Markdown], xref:valuetypes:jodatime:about.adoc[Jodatime] and xref:valuetypes:vega:about.adoc[Vega]
-(link:https://vega.github.io/vega-lite/[Vega-lite], "a grammar of interactive graphics").
+This includes xref:valuetypes:asciidoc:about.adoc[AsciiDoc]
+, xref:valuetypes:markdown:about.adoc[Markdown],
+_Jodatime_ and _Vega_
+////
+xref:valuetypes:vega:about.adoc[Vega]
+////
+ (link:https://vega.github.io/vega-lite/[Vega-lite], "a grammar of interactive graphics").
** mixin classes annotated as `@Action`, `@Property` or `@Collection`
diff --git a/antora/components/relnotes/modules/ROOT/partials/2024/2.1.0/_relnotes.adoc b/antora/components/relnotes/modules/ROOT/partials/2024/2.1.0/_relnotes.adoc
index 90d9133d54f..90dd6e2a4f3 100644
--- a/antora/components/relnotes/modules/ROOT/partials/2024/2.1.0/_relnotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/partials/2024/2.1.0/_relnotes.adoc
@@ -56,7 +56,7 @@
| Shiro
| 1.13.0
a| (dropped)
-| xref:security:shiro:about.adoc[]
+|
|===
diff --git a/causeway-tooling.yml b/causeway-tooling.yml
index 584096ffd33..a9fec618bc8 100644
--- a/causeway-tooling.yml
+++ b/causeway-tooling.yml
@@ -40,7 +40,7 @@ commands:
Security: org.apache.causeway.security
Bypass: "org.apache.causeway.security:causeway-security-bypass.*"
Keycloak: "org.apache.causeway.security:causeway-security-keycloak.*"
- Shiro: "org.apache.causeway.security:causeway-security-shiro.*"
+ Simple: "org.apache.causeway.security:causeway-security-simple.*"
Spring: "org.apache.causeway.security:causeway-security-spring.*"
Viewer: org.apache.causeway.viewer
diff --git a/core/config/generateConfigDocs.groovy b/core/config/generateConfigDocs.groovy
index d452bb411cc..b7f53803733 100644
--- a/core/config/generateConfigDocs.groovy
+++ b/core/config/generateConfigDocs.groovy
@@ -138,13 +138,6 @@ groups+= new PropertyGroup() {{
searchOrder = 200
}}
-groups+= new PropertyGroup() {{
- prefix = "causeway.security.shiro"
- name = "Shiro Security Implementation"
- properties: []
- searchOrder = 501
-}}
-
groups+= new PropertyGroup() {{
prefix = "causeway.security.keycloak"
name = "Keycloak Security Implementation"
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc b/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
index 818efac76a1..7efd132672d 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
@@ -8,7 +8,6 @@
** xref:refguide:config:sections/causeway.persistence.schema.adoc[Core Persistence Schema]
** xref:refguide:config:sections/causeway.persistence.commons.adoc[Core Persistence Commons]
** xref:refguide:config:sections/causeway.prototyping.adoc[Prototyping]
-** xref:refguide:config:sections/causeway.security.shiro.adoc[Shiro Security Implementation]
** xref:refguide:config:sections/causeway.security.keycloak.adoc[Keycloak Security Implementation]
** xref:refguide:config:sections/causeway.security.spring.adoc[Spring Security Implementation]
** xref:refguide:config:sections/causeway.viewer.common.adoc[Common Config for Viewers]
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/causeway.security.shiro.adoc b/core/config/src/main/adoc/modules/config/pages/sections/causeway.security.shiro.adoc
deleted file mode 100644
index ecc0ff0cf10..00000000000
--- a/core/config/src/main/adoc/modules/config/pages/sections/causeway.security.shiro.adoc
+++ /dev/null
@@ -1,29 +0,0 @@
-= Shiro Security Implementation
-:page-role: -toc -narrow
-
-
-: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 [...]
-
-include::../section-hooks/causeway.security.shiro~pre.adoc[]
-
-[cols="3a,2a,5a", options="header"]
-|===
-|Property
-|Default
-|Description
-|
-[[causeway.security.shiro.auto-logout-if-already-authenticated]]
-causeway.security.shiro. +
-auto-logout-if-already- +
-authenticated
-
-|
-| If the Shiro subject is found to be still authenticated, then will be logged out anyway and then re-authenticated.
-
-Applies only to the Restful Objects viewer.
-
-
-
-|===
-
-include::../section-hooks/causeway.security.shiro~post.adoc[]
diff --git a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
index d73fdae1790..656387b93fb 100644
--- a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
+++ b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
@@ -18,21 +18,13 @@ The `@jakarta.annotation.Priority` annotation is used to ensure that the request
|servlet?
|Notes
-|WebModule +
-Shiro
-|FIRST + 100
-|Yes
-|/*
-|
-|Either this or spring
-
|WebModule +
SpringSecurity
|FIRST + 100
|Yes
|/*
|
-|Either this or shiro
+|
|WebModule +
LogOnExceptionLogger
diff --git a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.html b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.html
new file mode 100644
index 00000000000..ec0e60ee571
--- /dev/null
+++ b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.html
@@ -0,0 +1,851 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 2.0.23">
+<title>WebModule interface</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
+a{background:none}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
+dfn{font-style:italic}
+hr{height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type=checkbox],input[type=radio]{padding:0}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,::before,::after{box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:0}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.square{list-style-type:square}
+ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
+table thead,table tfoot{background:#f7f8f7}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt{background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.center{margin-left:auto;margin-right:auto}
+.stretch{width:100%}
+.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
+.clearfix::after,.float-group::after{clear:both}
+:not(pre).nobreak{word-wrap:normal}
+:not(pre).nowrap{white-space:nowrap}
+:not(pre).pre-wrap{white-space:pre-wrap}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
+pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
+pre>code{display:block}
+pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menuref{color:#000}
+.menuseq b:not(.caret),.menuref{font-weight:inherit}
+.menuseq{word-spacing:-.02em}
+.menuseq b.caret{font-size:1.25em;line-height:.8}
+.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
+b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
+b.button::before{content:"[";padding:0 3px 0 2px}
+b.button::after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
+#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
+#content{margin-top:1.25em}
+#content::before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
+#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span::before{content:"\00a0\2013\00a0"}
+#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark::before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber::after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+@media screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
+#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
+@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
+#content{margin-bottom:.625em}
+.sect1{padding-bottom:.625em}
+@media screen and (min-width:768px){#content{margin-bottom:1.25em}
+.sect1{padding-bottom:1.25em}}
+.sect1:last-child{padding-bottom:0}
+.sect1+.sect1{border-top:1px solid #e7e7e9}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol> [...]
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
+@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
+.listingblock:hover code[data-lang]::before{display:block}
+.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
+.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.prettyprint{background:#f7f7f8}
+pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
+pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
+pre.prettyprint li code[data-lang]::before{opacity:1}
+pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
+table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
+table.linenotable td.code{padding-left:.75em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
+.verseblock{margin:0 1em 1.25em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
+.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
+.quoteblock.abstract{margin:0 1em 1.25em;display:block}
+.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
+.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
+.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
+.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
+.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
+p.tableblock:last-child{margin-bottom:0}
+td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
+td.tableblock>.content>:last-child{margin-bottom:-1.25em}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all>*>tr>*{border-width:1px}
+table.grid-cols>*>tr>*{border-width:0 1px}
+table.grid-rows>*>tr>*{border-width:1px 0}
+table.frame-all{border-width:1px}
+table.frame-ends{border-width:1px 0}
+table.frame-sides{border-width:0 1px}
+table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
+table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
+table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
+table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
+ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
+ul.unstyled,ol.unstyled{margin-left:0}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+ul.inline>li{margin-left:1.25em}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+td.hdlist2{word-wrap:anywhere}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
+.colist td:not([class]):first-child img{max-width:none}
+.colist td:not([class]):last-child{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
+.imageblock.left{margin:.25em .625em 1.25em 0}
+.imageblock.right{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background:#00fafa}
+.black{color:#000}
+.black-background{background:#000}
+.blue{color:#0000bf}
+.blue-background{background:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background:#fa00fa}
+.gray{color:#606060}
+.gray-background{background:#7d7d7d}
+.green{color:#006000}
+.green-background{background:#007d00}
+.lime{color:#00bf00}
+.lime-background{background:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background:#7d0000}
+.navy{color:#000060}
+.navy-background{background:#00007d}
+.olive{color:#606000}
+.olive-background{background:#7d7d00}
+.purple{color:#600060}
+.purple-background{background:#7d007d}
+.red{color:#bf0000}
+.red-background{background:#fa0000}
+.silver{color:#909090}
+.silver-background{background:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background:#fafa00}
+span.icon>.fa{cursor:default}
+a span.icon>.fa{cursor:inherit}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]::after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+@page{margin:1.25cm .75cm}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
+html{font-size:80%}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
+abbr[title]::after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#header,#content,#footnotes,#footer{max-width:none}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span::before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]::before{display:block}
+#footer{padding:0 .9375em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
+.sect1{padding:0!important}
+.sect1+.sect1{border:0}
+#footer{background:none}
+#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
+@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/styles/github.min.css">
+<style>
+/*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
+.tabs {
+ margin-bottom: 1.25em;
+}
+
+.tablist > ul {
+ display: flex;
+ flex-wrap: wrap;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.tablist > ul li {
+ align-items: center;
+ background-color: #fff;
+ cursor: pointer;
+ display: flex;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 0.25em 1em;
+ position: relative;
+}
+
+.tablist > ul li:focus-visible {
+ outline: none;
+}
+
+.tablist.ulist,
+.tablist.ulist > ul li {
+ margin: 0;
+}
+
+.tablist.ulist > ul li + li {
+ margin-left: 0.25em;
+}
+
+.tabs .tablist li::after {
+ content: "";
+ display: block;
+ height: 1px;
+ position: absolute;
+ bottom: -1px;
+ left: 0;
+ right: 0;
+}
+
+.tabs.is-loading .tablist li:not(:first-child),
+.tabs:not(.is-loading) .tablist li:not(.is-selected) {
+ background-color: #f5f5f5;
+}
+
+.tabs.is-loading .tablist li:first-child::after,
+.tabs:not(.is-loading) .tablist li.is-selected::after {
+ background-color: #fff;
+}
+
+/*
+.tabs:not(.is-loading) .tablist li,
+.tabs:not(.is-loading) .tablist li::after {
+ transition: background-color 200ms ease-in-out;
+}
+*/
+
+.tablist > ul p {
+ line-height: inherit;
+ margin: 0;
+}
+
+.tabpanel {
+ background-color: #fff;
+ padding: 1.25em;
+}
+
+.tablist > ul li,
+.tabpanel {
+ border: 1px solid #dcdcdc;
+}
+
+.tablist > ul li {
+ border-bottom: 0;
+}
+
+.tabs.is-loading .tabpanel + .tabpanel,
+.tabs:not(.is-loading) .tabpanel.is-hidden {
+ display: none;
+}
+
+.tabpanel > :first-child {
+ margin-top: 0;
+}
+
+/* #content is a signature of the Asciidoctor standalone HTML output */
+#content .tabpanel > :last-child,
+#content .tabpanel > :last-child > :last-child,
+#content .tabpanel > :last-child > :last-child > li:last-child > :last-child {
+ margin-bottom: 0;
+}
+
+.tablecontainer {
+ overflow-x: auto;
+}
+
+#content .tablecontainer {
+ margin-bottom: 1.25em;
+}
+
+#content .tablecontainer > table.tableblock {
+ margin-bottom: 0;
+}
+</style>
+</head>
+<body id="webmodule-interface" class="article">
+<div id="header">
+<h1><code>WebModule</code> interface</h1>
+</div>
+<div id="content">
+<div class="paragraph">
+<p>The <code>WebModule</code> interface allows modules to dynamically configure <code>Filter</code>s, <code>Servlet</code>s and <code>ServletContextListener</code>s.
+The <code>@jakarta.annotation.Priority</code> annotation is used to ensure that the request chain is sequenced correctly.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. WebModules (priority determines filter sequence, earliest first)</caption>
+<colgroup>
+<col style="width: 23.0769%;">
+<col style="width: 15.3846%;">
+<col style="width: 7.6923%;">
+<col style="width: 11.5384%;">
+<col style="width: 11.5384%;">
+<col style="width: 30.7694%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Web module</th>
+<th class="tableblock halign-center valign-top"><code>@Priority</code></th>
+<th class="tableblock halign-center valign-top">listener?</th>
+<th class="tableblock halign-center valign-top">filter?</th>
+<th class="tableblock halign-center valign-top">servlet?</th>
+<th class="tableblock halign-left valign-top">Notes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+Shiro</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>FIRST + 100</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>Yes</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/*</code></p></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>Either this or spring</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+SpringSecurity</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>FIRST + 100</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>Yes</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/*</code></p></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>Either this or shiro</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+LogOnExceptionLogger</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>EARLY - 100</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"></div></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/wicket<br>
+/restful</code></p></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>Filter is passthru, with no side-effects.<br>
+Mapping depends on which viewers configured.</p>
+</div>
+<div class="paragraph">
+<p>Although priority is relatively early, the filter is registered to be last in pipeline.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+Cors</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>EARLY</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"></div></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/wicket<br>
+/restful</code></p></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>Mapping depends on which viewers configured.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+TemplateResources</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>MIDPOINT - 100</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"></div></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>*.thtml</code></p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>*.thtml</code></p></td>
+<td class="tableblock halign-left valign-top"><div class="content"></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+JaxrsResteasy4</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>MIDPOINT - 80</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>Yes</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/restful</code></p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/restful</code></p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>Filters mapped to servlet</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+Wicket</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>MIDPOINT - 80</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"></div></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/wicket</code></p></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-left valign-top"><div class="content"></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+ServerSentEvents</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>MIDPOINT</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"></div></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/sse</code></p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>servlet only, so priority doesn’t really matter.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
+H2Console</code></p></td>
+<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
+<p>MIDPOINT</p>
+</div></div></td>
+<td class="tableblock halign-center valign-top"><div class="content"></div></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/db/*</code></p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>servlet only, so priority doesn’t really matter.</p>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div id="footer">
+<div id="footer-text">
+Last updated 2025-10-18 09:04:11 +0100
+</div>
+</div>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/highlight.min.js"></script>
+<script>
+if (!hljs.initHighlighting.called) {
+ hljs.initHighlighting.called = true
+ ;[].slice.call(document.querySelectorAll('pre.highlight > code[data-lang]')).forEach(function (el) { hljs.highlightBlock(el) })
+}
+</script>
+<script>
+;(function () { /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
+ 'use strict'
+
+ var config = (document.currentScript || {}).dataset || {}
+ var forEach = Array.prototype.forEach
+
+ init(document.querySelectorAll('.tabs'))
+
+ function init (tabsBlocks) {
+ if (!tabsBlocks.length) return
+ forEach.call(tabsBlocks, function (tabs) {
+ var syncIds = tabs.classList.contains('is-sync') ? {} : undefined
+ var tablist = tabs.querySelector('.tablist ul')
+ tablist.setAttribute('role', 'tablist')
+ var start
+ forEach.call(tablist.querySelectorAll('li'), function (tab, idx) {
+ tab.tabIndex = -1
+ tab.setAttribute('role', tab.classList.add('tab') || 'tab')
+ var id, anchor, syncId
+ if (!(id = tab.id) && (anchor = tab.querySelector('a[id]'))) {
+ id = tab.id = anchor.parentNode.removeChild(anchor).id
+ }
+ var panel = id && tabs.querySelector('.tabpanel[aria-labelledby~="' + id + '"]')
+ if (!panel) return idx ? undefined : toggleSelected(tab, true) // invalid state
+ syncIds && (((syncId = tab.textContent.trim()) in syncIds) ? (syncId = undefined) : true) &&
+ (syncIds[(tab.dataset.syncId = syncId)] = tab)
+ idx || (syncIds && (start = { tab: tab, panel: panel })) ? toggleHidden(panel, true) : toggleSelected(tab, true)
+ tab.setAttribute('aria-controls', panel.id)
+ panel.setAttribute('role', 'tabpanel')
+ var onClick = syncId === undefined ? activateTab : activateTabSync
+ tab.addEventListener('click', onClick.bind({ tabs: tabs, tab: tab, panel: panel }))
+ })
+ if (!tabs.closest('.tabpanel')) {
+ forEach.call(tabs.querySelectorAll('.tabpanel table.tableblock'), function (table) {
+ var container = Object.assign(document.createElement('div'), { className: 'tablecontainer' })
+ table.parentNode.insertBefore(container, table).appendChild(table)
+ })
+ }
+ if (start) {
+ var syncGroupId
+ for (var i = 0, lst = tabs.classList, len = lst.length, className; i !== len; i++) {
+ if (!(className = lst.item(i)).startsWith('data-sync-group-id=')) continue
+ tabs.dataset.syncGroupId = syncGroupId = lst.remove(className) || className.slice(19).replace(/\u00a0/g, ' ')
+ break
+ }
+ if (syncGroupId === undefined) tabs.dataset.syncGroupId = syncGroupId = Object.keys(syncIds).sort().join('|')
+ var preferredSyncId = 'syncStorageKey' in config &&
+ window[(config.syncStorageScope || 'local') + 'Storage'].getItem(config.syncStorageKey + '-' + syncGroupId)
+ var tab = preferredSyncId && syncIds[preferredSyncId]
+ tab && Object.assign(start, { tab: tab, panel: document.getElementById(tab.getAttribute('aria-controls')) })
+ toggleSelected(start.tab, true) || toggleHidden(start.panel, false)
+ }
+ })
+ onHashChange()
+ toggleClassOnEach(tabsBlocks, 'is-loading', 'remove')
+ window.setTimeout(toggleClassOnEach.bind(null, tabsBlocks, 'is-loaded', 'add'), 0)
+ window.addEventListener('hashchange', onHashChange)
+ }
+
+ function activateTab (e) {
+ var tab = this.tab
+ var tabs = this.tabs || (this.tabs = tab.closest('.tabs'))
+ var panel = this.panel || (this.panel = document.getElementById(tab.getAttribute('aria-controls')))
+ querySelectorWithSiblings(tabs, '.tablist .tab', 'tab').forEach(function (el) {
+ toggleSelected(el, el === tab)
+ })
+ querySelectorWithSiblings(tabs, '.tabpanel', 'tabpanel').forEach(function (el) {
+ toggleHidden(el, el !== panel)
+ })
+ if (!this.isSync && 'syncStorageKey' in config && 'syncGroupId' in tabs.dataset) {
+ var storageKey = config.syncStorageKey + '-' + tabs.dataset.syncGroupId
+ window[(config.syncStorageScope || 'local') + 'Storage'].setItem(storageKey, tab.dataset.syncId)
+ }
+ if (!e) return
+ var loc = window.location
+ var hashIdx = loc.hash ? loc.href.indexOf('#') : -1
+ if (~hashIdx) window.history.replaceState(null, '', loc.href.slice(0, hashIdx))
+ e.preventDefault()
+ }
+
+ function activateTabSync (e) {
+ activateTab.call(this, e)
+ var thisTabs = this.tabs
+ var thisTab = this.tab
+ var initialY = thisTabs.getBoundingClientRect().y
+ forEach.call(document.querySelectorAll('.tabs'), function (tabs) {
+ if (tabs === thisTabs || tabs.dataset.syncGroupId !== thisTabs.dataset.syncGroupId) return
+ querySelectorWithSiblings(tabs, '.tablist .tab', 'tab').forEach(function (tab) {
+ if (tab.dataset.syncId === thisTab.dataset.syncId) activateTab.call({ tabs: tabs, tab: tab, isSync: true })
+ })
+ })
+ var shiftedBy = thisTabs.getBoundingClientRect().y - initialY
+ if (shiftedBy && (shiftedBy = Math.round(shiftedBy))) window.scrollBy({ top: shiftedBy, behavior: 'instant' })
+ }
+
+ function querySelectorWithSiblings (scope, selector, siblingClass) {
+ var el = scope.querySelector(selector)
+ if (!el) return []
+ var result = [el]
+ while ((el = el.nextElementSibling) && el.classList.contains(siblingClass)) result.push(el)
+ return result
+ }
+
+ function toggleClassOnEach (elements, className, method) {
+ forEach.call(elements, function (el) {
+ el.classList[method](className)
+ })
+ }
+
+ function toggleHidden (el, state) {
+ el.classList[(el.hidden = state) ? 'add' : 'remove']('is-hidden')
+ }
+
+ function toggleSelected (el, state) {
+ el.setAttribute('aria-selected', '' + state)
+ el.classList[state ? 'add' : 'remove']('is-selected')
+ el.tabIndex = state ? 0 : -1
+ }
+
+ function onHashChange () {
+ var id = window.location.hash.slice(1)
+ if (!id) return
+ var tab = document.getElementById(~id.indexOf('%') ? decodeURIComponent(id) : id)
+ if (!(tab && tab.classList.contains('tab'))) return
+ 'syncId' in tab.dataset ? activateTabSync.call({ tab: tab }) : activateTab.call({ tab: tab })
+ }
+})()
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/extensions/security/secman/adoc/modules/secman/images/secman-shiro-architecture.drawio.svg b/extensions/security/secman/adoc/modules/secman/images/secman-shiro-architecture.drawio.svg
deleted file mode 100644
index 075789aafa5..00000000000
--- a/extensions/security/secman/adoc/modules/secman/images/secman-shiro-architecture.drawio.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Do not edit this file with editors other than diagrams.net -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="561px" height="501px" viewBox="-0.5 -0.5 561 501" content="<mxfile host="drawio-plugin" modified="2023-03-12T12:17:36.085Z" agent="5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36" etag="ICZ1pFXdRWcyuA63m1Up" version="20.5.3" type="embed"><diagram id="Y7d [...]
\ No newline at end of file
diff --git a/extensions/security/secman/adoc/modules/secman/images/secman-shiro-delegate-architecture.drawio.svg b/extensions/security/secman/adoc/modules/secman/images/secman-shiro-delegate-architecture.drawio.svg
deleted file mode 100644
index 296eb55387a..00000000000
--- a/extensions/security/secman/adoc/modules/secman/images/secman-shiro-delegate-architecture.drawio.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Do not edit this file with editors other than diagrams.net -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="626px" height="301px" viewBox="-0.5 -0.5 626 301" content="<mxfile host="drawio-plugin" modified="2023-03-12T12:34:27.216Z" agent="5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36" etag="uTJLy7pY6FNuKWcGzEC7" version="20.5.3" type="embed"><diagram id="Y7d [...]
\ No newline at end of file
diff --git a/extensions/security/secman/adoc/modules/secman/pages/about.adoc b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
index 7c70267540d..59f21d927a0 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/about.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
@@ -17,7 +17,6 @@ Permissions can be defined at different scopes, and can either allow or veto acc
The set of permissions (to features) is derived completely from your application's metamodel; in essence the permissions are "type-safe".
SecMan can be used just for authorization, or it can be used in conjunction with any of the other xref:refguide:core:index/security/authentication/Authenticator.adoc[Authenticator] implementations, for example xref:security:spring:about.adoc[Spring] or xref:security:keycloak:about.adoc[Keycloak].
-This integration is discussed in more detail <<shiro-integration,below>>.
== Users, Roles and Permissions
@@ -218,7 +217,6 @@ Secman leverages Spring's `org.springframework.security.crypto.password.Password
The `encryption-jbcrypt` module provides an implementation using the link:https://www.mindrot.org/projects/jBCrypt/[jBCrypt] library.
-[#shiro-integration]
== Using other Authenticators
While SecMan does provide an implementation of the xref:refguide:core:index/security/authentication/Authenticator.adoc[] SPI, it's also possible to use an alternative `Authenticator` implementation; for example as provided by:
@@ -231,7 +229,6 @@ for more details, see xref:setting-up-with-spring-oauth2.adoc[]
+
for more details, see xref:setting-up-with-keycloak.adoc[]
-
Secman is still responsible for authorization.
== SecMan's structure
@@ -246,7 +243,5 @@ As you might expect, they are intended for use with xref:pjpa:ROOT:about.adoc[JP
* the Model module (`causeway-extensions-secman-model`) defines view models to represent the feature application features, and also contains business logic as mixins to the API (and therefore contributed to the appropriate concrete entity).
-* the Shiro realm module (`causeway-extensions-secman-shiro-realm`) provides the Shiro realm interface that delegates to the Secman database (see discussion <<shiro-integration,above>>)
-
* the jbcrypt encryption module (`causeway-extensions-secman-encryption-jbcrypt`) provides an implementation of Spring's `org.springframework.security.crypto.password.PasswordEncoder` SPI so that passwords are persisted securely using link:https://www.mindrot.org/projects/jBCrypt/[jBCrypt].
diff --git a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
index 2c460e7ac56..50eb219d1e6 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
@@ -79,13 +79,6 @@ public class AppManifest {
<.> use Jbcrypt to encrypt passwords
<.> fixture script support
-In addition, you will probably want to *remove* the `CausewayModuleSecurityShiro.class` dependency so that SecMan can take care of both authentication _and_ authorisation.
-
-[NOTE]
-====
-It also possible to use SecMan in conjunction with Shiro, as described xref:setting-up-with-shiro.adoc[here].
-The primary use case is to support delegated users that Shiro authenticates externally using LDAP, for example.
-====
[#configure-properties]
== Configuration Properties
@@ -368,7 +361,7 @@ public class UserToRole__bob_allRoles extends AbstractUserAndRolesFixtureScript
The password is encrypted, not stored in plain text.
<.> email address
<.> application tenancy
-<.> local account (rather than delegated, see xref:setting-up-with-shiro.adoc[])
+<.> local account (rather than delegated, see xref:setting-up-with-spring-oauth2.adoc[] or xref:setting-up-with-keycloak.adoc[]).
<.> application-specific roles
<.> regular user access (always required).
*Note* that this expects that the default regular user role has been left as its default value.
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/AccountType.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/AccountType.java
index 4ef17ffb503..3f897e98b89 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/AccountType.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/AccountType.java
@@ -21,14 +21,20 @@
import org.apache.causeway.commons.internal.base._Strings;
/**
- * Whether the user's account is local enabled (user/password) or
- * delegated (eg LDAP), as per
- * {@code org.apache.causeway.extensions.secman.shiro.CausewayModuleExtSecmanShiroRealm#setDelegateAuthenticationRealm(org.apache.shiro.realm.AuthenticatingRealm)}.
+ * Whether the user's account is defined by locally (Secman itself is the authenticator) or instead if there's a
+ * different security module that has responsibility for authentication (for example Spring Security with OAuth2).
+ * This is the delegate model.
*
* @since 2.0 {@index}
*/
public enum AccountType {
+ /**
+ * Secman itself is the authenticator.
+ */
LOCAL,
+ /**
+ * Another security module performs the primary authentication, for example Spring Security with OAuth2.
+ */
DELEGATED;
public boolean isLocal() {
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUser.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUser.java
index ca9bca6c637..a7680326adb 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUser.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUser.java
@@ -633,10 +633,9 @@ class Persistence {
for (final RoleMemento role : currentUser.roles()) {
final String roleName = role.name();
if(adminRoleName.equals(roleName)) return true;
-
- // format could also be realmName:roleName, eg. with Shiro
- // since we don't know what the realm's name is (depends on its configuration in shiro.ini),
- // simply check that the last part matches the role name.
+ // format might also be realmName:roleName
+ // since we don't know what the realm's name,
+ // we simply check that the last part matches the role name.
if(roleName.endsWith(adminRoleSuffix)) return true;
}
return false;
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authorizor/AuthorizorSecman.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authorizor/AuthorizorSecman.java
index 6e76deee697..294e38b29c5 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authorizor/AuthorizorSecman.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authorizor/AuthorizorSecman.java
@@ -50,17 +50,6 @@
import org.jspecify.annotations.NonNull;
/**
- * <p>
- * Note that this service has an earlier precedence than <code>AuthorizorShiro</code>.
- * Conversely, <code>AuthenticatorShiro</code> overrides
- * {@link org.apache.causeway.extensions.secman.integration.authenticator.AuthenticatorSecman}.
- * </p>
- *
- * <p>
- * Therefore if both shiro and secman are configured, then shiro will be used for authentication, while secman will be
- * used for authorization.
- * </p>
- *
* @since 2.0 {@index}
*/
@Service
diff --git a/extensions/security/spring-oauth2/src/main/adoc/modules/spring-oauth2/pages/about.adoc b/extensions/security/spring-oauth2/src/main/adoc/modules/spring-oauth2/pages/about.adoc
index 17854602a10..529fa854ade 100644
--- a/extensions/security/spring-oauth2/src/main/adoc/modules/spring-oauth2/pages/about.adoc
+++ b/extensions/security/spring-oauth2/src/main/adoc/modules/spring-oauth2/pages/about.adoc
@@ -5,7 +5,9 @@
This guide describes the integration of Spring security's OAuth2 client.
-Authentication is done via OAuth2 and authorization via either Shiro or Secman.
+Authentication is done via OAuth2 and authorization can be done using another implementation, typically using xref:security:secman:about.adoc[Secman security] module (with roles/permissions defined as domain entities).
+But if the roles/permissions are static then using the xref:security:simple:about.adoc[Simple security] module is another alternative.
+We show both integrations on this page.
include::docs:mavendeps:partial$setup-and-configure-dependencyManagement.adoc[leveloffset=+1]
@@ -37,7 +39,7 @@ Using this, it provides an implementation of the xref:security:spring:about.adoc
[#walk-through-oauth2]
-== Walk-through (Oauth with Github and Shiro authorizor)
+== Walk-through (Oauth with Github and Simple authorizor)
Using Spring Security we can configure your app with various authentication providers.
In this section we describe how to modify the xref:docs:starters:helloworld.adoc[HelloWorld] starter app to use link:https://github.com[github] as an OAuth2 provider.
@@ -55,32 +57,66 @@ In your application's xref:userguide::modules.adoc#appmanifest[App Manifest], im
@Import({
...
CausewayModuleExtSpringSecurityOAuth2.class, // <.>
- AuthorizorShiro.class, // <.>
+ SimpleAuthorizor.class, // <.>
...
})
public class AppManifest {
}
----
<.> The `CausewayModuleExtSpringSecurityOAuth2` module brings in a transitive dependency on `CausewayModuleSecuritySpring`.
-<.> An implementation of `Authorizor` is also required.
-For the purpose of this walkthrough, we'll use the implementation provided by xref:security:shiro:about.adoc[Shiro], namely `AuthorizorShiro`.
+Add in the corresponding Maven dependency:
+
+[source,xml,subs="attributes+"]
+.pom.xml
+----
+<dependencies>
+ ...
+ <dependency>
+ <groupId>org.apache.causeway.extensions</groupId>
+ <artifactId>causeway-extensions-spring-security-oauth2</artifactId>
+
+ <version>{page-causewayreleaseversion}</version>
+ </dependency>
+ ...
+</dependencies>
+----
+
+To use the Simple authorizor, add in a reference to its authorizor:
+
+[source,java]
+.AppManifest.java
+----
+@Configuration
+@Import({
+ ...
+ CausewayModuleExtSpringSecurityOAuth2.class,
+ SimpleAuthorizor.class, // <.>
+ ...
+})
+public class AppManifest {
+}
+----
+<.> reference `SimpleAuthorizor` directly.
++
[IMPORTANT]
====
-Make sure that no other `CausewayModuleSecurityXxx` module is imported, either directly or indirectly.
+We do _not_ reference all of `CausewayModuleSecuritySimple` module, as that would bring in the `SimpleAuthenticator` service, which we don't require.
====
-To use the Shiro authorizor, also add in the corresponding dependency:
+We also need to add a dependency in Maven:
[source,xml,subs="attributes+"]
.pom.xml
----
<dependencies>
+ ...
<dependency>
<groupId>org.apache.causeway.security</groupId>
- <artifactId>causeway-security-shiro</artifactId>
+ <artifactId>causeway-security-simple</artifactId>
<version>{page-causewayreleaseversion}</version>
</dependency>
+ ...
</dependencies>
----
@@ -135,31 +171,39 @@ Next, add in `LoginController` to the `AppManifest`.
@Import({
...
CausewayModuleExtSpringSecurityOAuth2.class,
- AuthorizorShiro.class,
+ SimpleAuthorizor.class,
LoginController.class,
...
})
public class AppManifest {
+
}
----
-Next configure authenticationStrategy and permissionResolver for realms, and add the userId:
+=== Configure permissions
-[source,ini]
-.shiro.ini
+With xref:security:simple:about.adoc[Simple] security module, roles and permissions are provided by a `SimpleRealm` service.
+This can be created for example as a bean within `AppManifest`:
+
+[source,java]
+.AppManifest.java
----
-[main]
-authenticationStrategy=org.apache.causeway.extensions.secman.delegated.shiro.realm.AuthenticationStrategyForSecMan
-securityManager.authenticator.authenticationStrategy = $authenticationStrategy
-securityManager.realms = $iniRealm
-permissionResolver = org.apache.causeway.security.shiro.authorization.CausewayPermissionResolver
-iniRealm.permissionResolver = $permissionResolver
-...
-[users]
-...
-your.id = ,admin_role
-...
+// ...
+public class AppManifest {
+
+ @Bean
+ public SimpleRealm realm() { // <.>
+ String unusedPassword = null;
+ return new SimpleRealm()
+ .addRole("admin_role", id->Grant.CHANGE)
+ .addUser("danhaywood@apache.org", unusedPassword, List.of("admin_role"))
+;
+ }
+}
----
+<.> return a realm of required roles and permissions
+
+Consult the xref:security:simple:about.adoc[Simple] security module documentation for further details on creating a `SimpleRealm`.
Lastly (and optionally), the swagger/REST API is not configured for oauth2, so we replace the `index.html` page with one to redirect straight to the xref:vw::about.adoc[Wicket Viewer]:
@@ -269,7 +313,7 @@ public class AppManifest {
// ...
}
----
-<.> Using secman for permissions (rather than Shiro, as was described in the xref:#walk-through-oauth2[github walkthrough] above)
+<.> Using secman for permissions
<.> We'll use Spring APIs to configure the authentication flows
For the purpose of this walkthrough, we'll use the implementation provided by xref:security:secman:setting-up-with-spring-oauth2.adoc[SecMan].
diff --git a/regressiontests/incubating/pom.xml b/regressiontests/incubating/pom.xml
index a742c1b3e9e..e646c23af3d 100644
--- a/regressiontests/incubating/pom.xml
+++ b/regressiontests/incubating/pom.xml
@@ -64,12 +64,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.causeway.security</groupId>
- <artifactId>causeway-security-shiro</artifactId>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>org.apache.causeway.extensions</groupId>
<artifactId>causeway-extensions-secman-integration</artifactId>
@@ -94,12 +88,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-secman-delegated-shiro</artifactId>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-test-framework</artifactId>
diff --git a/regressiontests/incubating/src/test/resources/shiro-secman-ldap-cached.ini b/regressiontests/incubating/src/test/resources/shiro-secman-ldap-cached.ini
deleted file mode 100644
index da9f9ddbf3b..00000000000
--- a/regressiontests/incubating/src/test/resources/shiro-secman-ldap-cached.ini
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-[main]
-
-contextFactory = org.apache.causeway.extensions.shirorealmldap.realm.impl.CausewayLdapContextFactory
-contextFactory.url = ldap://localhost:10389
-contextFactory.authenticationMechanism = simple
-contextFactory.systemAuthenticationMechanism = simple
-contextFactory.systemUsername = uid=admin,ou=system
-contextFactory.systemPassword = secret
-
-ldapRealm = org.apache.causeway.extensions.shirorealmldap.realm.impl.CausewayLdapRealm
-ldapRealm.contextFactory = $contextFactory
-ldapRealm.searchBase = ou=groups,o=mojo
-ldapRealm.groupObjectClass = groupOfUniqueNames
-ldapRealm.uniqueMemberAttribute = uniqueMember
-ldapRealm.uniqueMemberAttributeValueTemplate = uid={0}
-
-authenticationStrategy=org.apache.causeway.extensions.secman.delegated.shiro.realm.AuthenticationStrategyForSecMan
-causewayModuleSecurityRealm=org.apache.causeway.extensions.secman.delegated.shiro.realm.CausewayModuleExtSecmanShiroRealm
-causewayModuleSecurityRealm.delegateAuthenticationRealm=$ldapRealm
-causewayModuleSecurityRealm.authenticationCachingEnabled = true
-
-cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
-
-securityManager.authenticator.authenticationStrategy = $authenticationStrategy
-securityManager.realms = $causewayModuleSecurityRealm
-securityManager.cacheManager = $cacheManager
-
-[users]
-# unused
-
-[roles]
-# unused
-
-
-
-
diff --git a/regressiontests/incubating/src/test/resources/shiro-secman-ldap.ini b/regressiontests/incubating/src/test/resources/shiro-secman-ldap.ini
deleted file mode 100644
index 338714a551e..00000000000
--- a/regressiontests/incubating/src/test/resources/shiro-secman-ldap.ini
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-[main]
-
-contextFactory = org.apache.causeway.extensions.shirorealmldap.realm.impl.CausewayLdapContextFactory
-contextFactory.url = ldap://localhost:10389
-contextFactory.authenticationMechanism = simple
-contextFactory.systemAuthenticationMechanism = simple
-contextFactory.systemUsername = uid=admin,ou=system
-contextFactory.systemPassword = secret
-
-ldapRealm = org.apache.causeway.extensions.shirorealmldap.realm.impl.CausewayLdapRealm
-ldapRealm.contextFactory = $contextFactory
-ldapRealm.searchBase = ou=groups,o=mojo
-ldapRealm.groupObjectClass = groupOfUniqueNames
-ldapRealm.uniqueMemberAttribute = uniqueMember
-ldapRealm.uniqueMemberAttributeValueTemplate = uid={0}
-
-authenticationStrategy=org.apache.causeway.extensions.secman.delegated.shiro.realm.AuthenticationStrategyForSecMan
-causewayModuleSecurityRealm=org.apache.causeway.extensions.secman.delegated.shiro.realm.CausewayModuleExtSecmanShiroRealm
-causewayModuleSecurityRealm.delegateAuthenticationRealm=$ldapRealm
-
-securityManager.authenticator.authenticationStrategy = $authenticationStrategy
-securityManager.realms = $causewayModuleSecurityRealm
-
-[users]
-# unused
-
-[roles]
-# unused
-
-
-
-
diff --git a/regressiontests/incubating/src/test/resources/shiro-secman.ini b/regressiontests/incubating/src/test/resources/shiro-secman.ini
deleted file mode 100644
index 59085f0c100..00000000000
--- a/regressiontests/incubating/src/test/resources/shiro-secman.ini
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-[main]
-
-authenticationStrategy=org.apache.causeway.extensions.secman.delegated.shiro.realm.AuthenticationStrategyForSecMan
-causewayModuleSecurityRealm=org.apache.causeway.extensions.secman.delegated.shiro.realm.CausewayModuleExtSecmanShiroRealm
-
-securityManager.authenticator.authenticationStrategy = $authenticationStrategy
-securityManager.realms = $causewayModuleSecurityRealm
-
-[users]
-[roles]
-
-
diff --git a/regressiontests/incubating/src/test/resources/shiro-simple.ini b/regressiontests/incubating/src/test/resources/shiro-simple.ini
deleted file mode 100644
index bc528951943..00000000000
--- a/regressiontests/incubating/src/test/resources/shiro-simple.ini
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-[main]
-
-
-# to use .ini file
-securityManager.realms = $iniRealm
-
-
-# -----------------------------------------------------------------------------
-# Users and their assigned roles
-#
-# Each line conforms to the format defined in the
-# org.apache.shiro.realm.text.TextConfigurationRealm#setUserDefinitions JavaDoc
-# -----------------------------------------------------------------------------
-
-[users]
-# user = password, role1, role2, role3, ...
-
-
-sven = pass, admin_role
-dick = pass, user_role
-bob = pass, user_role
-joe = pass, user_role
-
-
-
-# -----------------------------------------------------------------------------
-# Roles with assigned permissions
-#
-# Each line conforms to the format defined in the
-# org.apache.shiro.realm.text.TextConfigurationRealm#setRoleDefinitions JavaDoc
-# -----------------------------------------------------------------------------
-
-[roles]
-# role = perm1, perm2, perm3, ...
-# perm in format: packageName:className:memberName:r,w
-
-user_role = *:HelloWorldObjects:*:*,\
- *:HelloWorldObject:*:*
-admin_role = *
diff --git a/security/adoc/modules/ROOT/pages/about.adoc b/security/adoc/modules/ROOT/pages/about.adoc
index 417e7328486..c3dbea08115 100644
--- a/security/adoc/modules/ROOT/pages/about.adoc
+++ b/security/adoc/modules/ROOT/pages/about.adoc
@@ -26,7 +26,6 @@ There are several implementations of these SPIs to choose from; these make up th
include::security:bypass:partial$module-nav.adoc[]
include::security:simple:partial$module-nav.adoc[]
-include::security:shiro:partial$module-nav.adoc[]
include::security:keycloak:partial$module-nav.adoc[]
include::security:spring:partial$module-nav.adoc[]
diff --git a/security/adoc/modules/ROOT/partials/component-nav.adoc b/security/adoc/modules/ROOT/partials/component-nav.adoc
index 600dbb3c239..492bac46868 100644
--- a/security/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/security/adoc/modules/ROOT/partials/component-nav.adoc
@@ -2,7 +2,6 @@ include::security:ROOT:partial$module-nav.adoc[]
include::security:core:partial$module-nav.adoc[]
include::security:bypass:partial$module-nav.adoc[]
-include::security:shiro:partial$module-nav.adoc[]
include::security:keycloak:partial$module-nav.adoc[]
include::security:spring:partial$module-nav.adoc[]
diff --git a/valuetypes/vega/adoc/modules/vega/pages/about.adoc b/valuetypes/vega/adoc/modules/vega/pages/about.adoc
index 3e8abd113f0..7557b21a378 100644
--- a/valuetypes/vega/adoc/modules/vega/pages/about.adoc
+++ b/valuetypes/vega/adoc/modules/vega/pages/about.adoc
@@ -63,7 +63,7 @@ In those modules where there are domain objects that use the `Vega` value type:
CausewayModuleValVegaApplib.class,
// ...
})
-public class MyModule { ... }
+public class MyModule { }
----
In addition, in the webapp module of your application, add the following dependencies:
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/webmodule/auth/AuthenticationStrategyBasicAuth.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/webmodule/auth/AuthenticationStrategyBasicAuth.java
index c908806b8c7..57bca402495 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/webmodule/auth/AuthenticationStrategyBasicAuth.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/webmodule/auth/AuthenticationStrategyBasicAuth.java
@@ -49,13 +49,6 @@ public InteractionContext lookupValid(
final HttpServletRequest httpServletRequest,
final HttpServletResponse httpServletResponse) {
- // Basic auth should never create sessions!
- // However, telling this Shiro here, is a fragile approach.
- //TODO[2156] do this somewhere else (more coupled with shiro)
- httpServletRequest.setAttribute(
- "org.apache.shiro.subject.support.DefaultSubjectContext.SESSION_CREATION_ENABLED",
- Boolean.FALSE);
-
var digest = getBasicAuthDigest(httpServletRequest);
if (digest == null) {
return null;
(causeway) 12/36: CAUSEWAY-3866: removes more jdo and datanucleus references
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit d174c8e05f6086830d4e9466af0e7666e26eec88
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 13:17:01 2025 +0100
CAUSEWAY-3866: removes more jdo and datanucleus references
---
.../applib-classes/pages/mixees-and-mixins.adoc | 24 ---
.../applib-classes/partials/module-nav.adoc | 5 -
.../partials/the-theory/naked-objects-pattern.adoc | 2 +-
.../applib/services/repository/EntityState.java | 17 +-
core/metamodel/src/main/java/module-info.java | 7 -
...oveDatanucleusPersistableTypesFacetFactory.java | 66 -------
.../RemoveDnPrefixedMethodsFacetFactory.java | 48 -----
extensions/core/excel/integtests/translations.pot | 129 -------------
.../setup-and-configure-mavendeps-jdo.adoc | 25 ---
.../incubating/log4j2-debug-persistence.xml | 28 +--
regressiontests/incubating/pom.xml | 6 -
.../testdomain/shiro/AbstractShiroTest.java | 148 ---------------
.../testdomain/shiro/ShiroSecmanLdapTest.java | 200 ---------------------
.../shiro/ShiroSecmanLdap_restfulStressTest.java | 140 ---------------
.../causeway/testdomain/shiro/ShiroSecmanTest.java | 142 ---------------
.../causeway/testdomain/shiro/ShiroSimpleTest.java | 91 ----------
.../adoc/modules/starters/pages/simpleapp.adoc | 2 -
testing/fakedata/integtests/translations.pot | 25 ---
18 files changed, 4 insertions(+), 1101 deletions(-)
diff --git a/antora/components/refguide/modules/applib-classes/pages/mixees-and-mixins.adoc b/antora/components/refguide/modules/applib-classes/pages/mixees-and-mixins.adoc
index 90060d39df3..aff8ed941cf 100644
--- a/antora/components/refguide/modules/applib-classes/pages/mixees-and-mixins.adoc
+++ b/antora/components/refguide/modules/applib-classes/pages/mixees-and-mixins.adoc
@@ -49,30 +49,6 @@ Two mixins contribute to this interface:
These allow the view model/DTO to be seriailized, respectively, as XML and as the XSD schema for said XML.
-
-[[Persistable]]
-== Persistable
-
-
-All JDO domain entities implement the DataNucleus `Persistable` role interface as a result of the enhancer process (the fully qualified class name is `org.datanucleus.enhancement.Persistable`).
-
-Using this, the following mixins (actions and properties) are available for all JDO entities:
-
-* xref:refguide:persistence:index/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.adoc[Persistable_downloadJdoMetadata]
-
-* xref:refguide:persistence:index/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.adoc[Persistable_datanucleusVersionLong] (property)
-+
-only visible if the entity is annotated with `javax.jdo.annotations.Version` and the `version` field introduced by enhancing can be cast to `Long`.
-
-* xref:refguide:persistence:index/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.adoc[Persistable_datanucleusVersionTimestamp] (property)
-+
-only visible if the entity is annotated with `javax.jdo.annotations.Version` and the `version` field introduced by enhancing can be cast to `java.sql.Timestamp`.
-
-As a developer you do not need to write any code to obtain the mixins that contribute to this interface.
-
-These mixin properties/actions are all associated with the "Metadata" fieldset.
-
-
== Security
Domain objects that are created, updated or otherwise associated with a user can implement the xref:refguide:applib:index/mixins/security/HasUsername.adoc[HasUsername] mixee interface.
diff --git a/antora/components/refguide/modules/applib-classes/partials/module-nav.adoc b/antora/components/refguide/modules/applib-classes/partials/module-nav.adoc
index 29f289228e1..13e4584774c 100644
--- a/antora/components/refguide/modules/applib-classes/partials/module-nav.adoc
+++ b/antora/components/refguide/modules/applib-classes/partials/module-nav.adoc
@@ -41,11 +41,6 @@
*** xref:refguide:applib:index/mixins/dto/Dto_downloadXml.adoc[Dto_downloadXml]
*** xref:refguide:applib:index/mixins/dto/Dto_downloadXsd.adoc[Dto_downloadXsd]
-*** JDO
-**** xref:refguide:persistence:index/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.adoc[Persistable_downloadJdoMetadata]
-**** xref:refguide:persistence:index/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.adoc[Persistable_datanucleusVersionLong] (property)
-**** xref:refguide:persistence:index/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.adoc[Persistable_datanucleusVersionTimestamp] (property)
-
*** Command Log
**** xref:refguide:extensions:index/commandlog/applib/contributions/Object_recentCommands.adoc[Object_recentCommands]
**** xref:refguide:extensions:index/commandlog/applib/contributions/HasInteractionId_commandLogEntry.adoc[HasInteraction_commandLogEntry]
diff --git a/antora/components/userguide/modules/ROOT/partials/the-theory/naked-objects-pattern.adoc b/antora/components/userguide/modules/ROOT/partials/the-theory/naked-objects-pattern.adoc
index 568d077f0c0..2327974769e 100644
--- a/antora/components/userguide/modules/ROOT/partials/the-theory/naked-objects-pattern.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/the-theory/naked-objects-pattern.adoc
@@ -39,7 +39,7 @@ You might also want to read Richard's link:{attachmentsdir}/core-concepts/Pawson
== Object Interface Mapping
Another -- more technical -- way to think about the naked objects pattern is as an _object interface mapper_, or `OIM`.
-Just as an ORM (such as link:http://datanucleus.org[DataNucleus] or link:http://hibernate.org[Hibernate]) maps domain entities to a database, you can think of the naked objects pattern as representing the concept of mapping domain objects to a user interface.
+Just as an ORM (such as link:http://www.eclipse.dev/eclipselink.org[EclipseLink] or link:http://hibernate.org[Hibernate]) maps domain entities to a database, you can think of the naked objects pattern as representing the concept of mapping domain objects to a user interface.
We sometimes use this idea to explain naked objects to a developer audience.
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
index ccc96abfd71..174ecd1b68d 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
@@ -62,19 +62,7 @@ public enum EntityState {
*/
DETACHED(true),
/**
- * This entity state is not<h1>JDO specific</h1>
- * Object with this state is an entity that no longer attached to a
- * persistence session and cannot be re-attached.
- * In other words: changes to the entity will <i>not</i>
- * be tracked nor flushed back to the database.
- * <p>
- * JDO distinguishes between DETACHED and HOLLOW,
- * by virtue of {@code javax.jdo.option.detachAllOnCommit=false}.
- * <p>
- * (Unfortunately, we have not found a way to recover _OIDs_ from _hollow_ entities, as used for serialization post commit.
- * We have instead implemented a workaround using the <code>DnStateManagerForHollow</code> class).
- *
- * @see "https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#lifecycle"
+ * @deprecated - This entity state is no longer in use; was specific to JDO/DataNucleus object store, now retired.
*/
@Deprecated // JDO specific
HOLLOW(true),
@@ -85,8 +73,7 @@ public enum EntityState {
*/
TRANSIENT_OR_REMOVED(false),
/**
- * <h1>JDO specific</h1>
- * Not supported by JPA. (Cannot distinguish between TRANSIENT and REMOVED.)
+ * @deprecated - This entity state is no longer in use; was specific to JDO/DataNucleus object store, now retired.
*/
@Deprecated // JDO specific
REMOVED(false)
diff --git a/core/metamodel/src/main/java/module-info.java b/core/metamodel/src/main/java/module-info.java
index 8731f9e0390..bce3eed5164 100644
--- a/core/metamodel/src/main/java/module-info.java
+++ b/core/metamodel/src/main/java/module-info.java
@@ -73,13 +73,6 @@
exports org.apache.causeway.core.metamodel.facets.properties.update.modify;
exports org.apache.causeway.core.metamodel.facets.value.semantics;
- exports org.apache.causeway.core.metamodel.facets.object.parented
- to org.apache.causeway.persistence.jdo.metamodel;
- exports org.apache.causeway.core.metamodel.facets.object.ignore.datanucleus
- to org.apache.causeway.persistence.jdo.metamodel;
- exports org.apache.causeway.core.metamodel.facets.object.ignore.jdo
- to org.apache.causeway.persistence.jdo.metamodel;
-
exports org.apache.causeway.core.metamodel.interactions;
exports org.apache.causeway.core.metamodel.interactions.acc;
exports org.apache.causeway.core.metamodel.interactions.managed;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java
deleted file mode 100644
index be8b1249fd9..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.core.metamodel.facets.object.ignore.datanucleus;
-
-import java.util.List;
-
-import jakarta.inject.Inject;
-
-import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.commons.internal.factory._InstanceUtil;
-import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-
-/**
- * Removes all methods inherited from <tt>org.datanucleus.enhancement.Persistable</tt> (if datanucleus 4.1.x is on the classpath).
- */
-public class RemoveDatanucleusPersistableTypesFacetFactory
-extends FacetFactoryAbstract {
-
- private final List<ResolvedMethod> datanucleusPersistableMethodsToIgnore = _Lists.newArrayList();
-
- @Inject
- public RemoveDatanucleusPersistableTypesFacetFactory(final MetaModelContext mmc) {
- super(mmc, FeatureType.OBJECTS_ONLY);
-
- final String typeToIgnoreIfOnClasspath = "org.datanucleus.enhancement.Persistable";
- try {
- Class<?> typeToIgnore = _InstanceUtil.loadClass(typeToIgnoreIfOnClasspath);
- addMethodsToBeIgnored(typeToIgnore);
- } catch(Exception ex) {
- // ignore
- }
- }
-
- private void addMethodsToBeIgnored(final Class<?> typeToIgnore) {
- getClassCache()
- .streamPublicMethods(typeToIgnore)
- .forEach(datanucleusPersistableMethodsToIgnore::add);
- }
-
- @Override
- public void process(final ProcessClassContext processClassContext) {
- for (final ResolvedMethod mapt : datanucleusPersistableMethodsToIgnore) {
- processClassContext.removeMethod(mapt.name(), null, mapt.paramTypes());
- }
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/datanucleus/RemoveDnPrefixedMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/datanucleus/RemoveDnPrefixedMethodsFacetFactory.java
deleted file mode 100644
index b1fb58d4630..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/datanucleus/RemoveDnPrefixedMethodsFacetFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.core.metamodel.facets.object.ignore.datanucleus;
-
-import jakarta.inject.Inject;
-
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-
-/**
- * Removes all methods with prefix "dn" (as introduced by DataNucleus enhancement).
- */
-public class RemoveDnPrefixedMethodsFacetFactory
-extends FacetFactoryAbstract {
-
- @Inject
- public RemoveDnPrefixedMethodsFacetFactory(final MetaModelContext mmc) {
- super(mmc, FeatureType.OBJECTS_ONLY);
- }
-
- @Override
- public void process(final ProcessClassContext context) {
-
- getClassCache()
- .streamPublicMethods(context.getCls())
- .filter(method->method.name().startsWith("dn"))
- .forEach(context::removeMethod);
-
- }
-
-}
diff --git a/extensions/core/excel/integtests/translations.pot b/extensions/core/excel/integtests/translations.pot
index 97977bd0874..f9bac6b94a3 100644
--- a/extensions/core/excel/integtests/translations.pot
+++ b/extensions/core/excel/integtests/translations.pot
@@ -51,7 +51,6 @@ msgstr ""
#: org.apache.causeway.applib.services.layout.Object_downloadLayoutXml#act()
#: org.apache.causeway.applib.services.layout.Object_openRestApi#act()
#: org.apache.causeway.applib.services.layout.Object_rebuildMetamodel#act()
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_downloadJdoMetadata#act()
#: org.apache.causeway.extensions.excel.fixtures.demoapp.demomodule.contributions.ExcelDemoToDoItem_export#act()
#: org.apache.causeway.extensions.excel.fixtures.demoapp.demomodule.contributions.ExcelDemoToDoItem_export2#act()
msgid "Act"
@@ -98,11 +97,6 @@ msgid "Attachment"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract$ChangeType#AUDIT_ENTRY
-msgid "Audit Entry"
-msgstr ""
-
-
#: org.apache.causeway.extensions.excel.fixtures.demoapp.demomodule.dom.bulkupdate.BulkUpdateMenuForDemoToDoItem#bulkUpdateManager()
msgid "Bulk Update Manager"
msgstr ""
@@ -138,21 +132,11 @@ msgid "Chores"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#targetClass
-msgid "Class"
-msgstr ""
-
-
#: org.apache.causeway.core.runtime.services.i18n.po.TranslationServicePoMenu#resetTranslationCache()
msgid "Clear translation cache"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract$ChangeType#COMMAND
-msgid "Command"
-msgstr ""
-
-
#: org.apache.causeway.applib.services.layout.LayoutService$Style#COMPLETE
#: org.apache.causeway.extensions.excel.fixtures.demoapp.demomodule.dom.bulkupdate.BulkUpdateLineItemForDemoToDoItem#complete
#: org.apache.causeway.extensions.excel.fixtures.demoapp.demomodule.dom.bulkupdate.BulkUpdateManagerForDemoToDoItem#complete
@@ -230,16 +214,6 @@ msgid "Description"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract
-msgid "Detail"
-msgstr ""
-
-
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract
-msgid "Domain Change"
-msgstr ""
-
-
#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.Category$2#Domestic
msgid "Domestic"
msgstr ""
@@ -250,11 +224,6 @@ msgid "Download Demo Pivotsheet"
msgstr ""
-#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem#downloadJdoMetadata()
-msgid "Download Jdo Metadata"
-msgstr ""
-
-
#: org.apache.causeway.applib.AbstractViewModel#downloadLayoutXml()
#: org.apache.causeway.applib.ViewModel#downloadLayoutXml()
#: org.apache.causeway.applib.domain.DomainObjectList#downloadLayoutXml()
@@ -383,7 +352,6 @@ msgstr ""
#: org.apache.causeway.applib.services.dto.Dto_downloadXsd#act(java.lang.String,org.apache.causeway.applib.services.jaxb.JaxbService$CausewaySchemas)
#: org.apache.causeway.applib.services.layout.LayoutServiceMenu#downloadMenuBarsLayout(java.lang.String,org.apache.causeway.applib.services.menu.MenuBarsService$Type)
#: org.apache.causeway.applib.services.layout.Object_downloadLayoutXml#act(java.lang.String,org.apache.causeway.applib.services.layout.LayoutService$Style)
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_downloadJdoMetadata#act(java.lang.String)
msgid "File name"
msgstr ""
@@ -420,17 +388,6 @@ msgid "Housework"
msgstr ""
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusIdLong#prop()
-#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem#datanucleusIdLong()
-msgid "Id"
-msgstr ""
-
-
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract
-msgid "Identifiers"
-msgstr ""
-
-
#: org.apache.causeway.applib.services.jaxb.JaxbService$CausewaySchemas#IGNORE
msgid "Ignore"
msgstr ""
@@ -471,18 +428,10 @@ msgid "Marketing"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#targetAction
msgid "Member"
msgstr ""
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusIdLong
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusVersionLong
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusVersionTimestamp
-msgid "Metadata"
-msgstr ""
-
-
#: org.apache.causeway.applib.services.layout.LayoutService$Style#MINIMAL
msgid "Minimal"
msgstr ""
@@ -504,21 +453,11 @@ msgid "Notes"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#targetStr
-msgid "Object"
-msgstr ""
-
-
#: org.apache.causeway.applib.domain.DomainObjectList#objects
msgid "Objects"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#openTargetObject()
-msgid "Open"
-msgstr ""
-
-
#: org.apache.causeway.applib.AbstractViewModel#openRestApi()
#: org.apache.causeway.applib.ViewModel#openRestApi()
#: org.apache.causeway.applib.domain.DomainObjectList#openRestApi()
@@ -580,16 +519,6 @@ msgid "Parameters"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#postValue
-msgid "Post Value"
-msgstr ""
-
-
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#preValue
-msgid "Pre Value"
-msgstr ""
-
-
#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem#previousCost
msgid "Previous Cost"
msgstr ""
@@ -615,11 +544,6 @@ msgid "Prop"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#propertyId
-msgid "Property Id"
-msgstr ""
-
-
#: org.apache.causeway.applib.services.fixturespec.FixtureScriptsDefault
#: org.apache.causeway.applib.services.hsqldb.HsqlDbManagerMenu
#: org.apache.causeway.applib.services.layout.LayoutServiceMenu
@@ -636,16 +560,6 @@ msgid "Public"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract$ChangeType#PUBLISHED_EVENT
-msgid "Published Event"
-msgstr ""
-
-
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract$ChangeType#PUBLISHED_INTERACTION
-msgid "Published Interaction"
-msgstr ""
-
-
#: org.apache.causeway.applib.AbstractViewModel#rebuildMetamodel()
#: org.apache.causeway.applib.ViewModel#rebuildMetamodel()
#: org.apache.causeway.applib.domain.DomainObjectList#rebuildMetamodel()
@@ -760,21 +674,6 @@ msgid "Switch To Writing Translations"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract
-msgid "Target"
-msgstr ""
-
-
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract
-msgid "TargetStr"
-msgstr ""
-
-
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#timestamp
-msgid "Timestamp"
-msgstr ""
-
-
#: org.apache.causeway.extensions.excel.fixtures.demoapp.demomodule.dom.bulkupdate.BulkUpdateLineItemForDemoToDoItem#toDoItem
#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem
msgid "To Do Item"
@@ -796,16 +695,6 @@ msgid "To Do Items Not Yet Complete"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#transactionId
-msgid "Transaction Id"
-msgstr ""
-
-
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#type
-msgid "Type"
-msgstr ""
-
-
#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem#updateCosts()
msgid "Update Costs"
msgstr ""
@@ -821,35 +710,17 @@ msgid "Upload Spreadsheet"
msgstr ""
-#: org.apache.causeway.objectstore.jdo.applib.service.DomainChangeJdoAbstract#user
-msgid "User"
-msgstr ""
-
-
#: org.apache.causeway.applib.services.config.ConfigurationProperty#value
msgid "Value"
msgstr ""
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusVersionLong#prop()
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusVersionTimestamp#prop()
-#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem#datanucleusVersionLong()
-#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem#datanucleusVersionTimestamp()
-msgid "Version"
-msgstr ""
-
#: org.apache.causeway.applib.services.swagger.SwaggerService$Format#YAML
msgid "Yaml"
msgstr ""
-#: org.apache.causeway.applib.services.layout.Object_downloadLayoutXml
-#: org.apache.causeway.applib.services.layout.Object_openRestApi
-#: org.apache.causeway.applib.services.layout.Object_rebuildMetamodel
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_downloadJdoMetadata
-msgid "datanucleusIdLong"
-msgstr ""
#: org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem
diff --git a/mavendeps/adoc/modules/mavendeps/partials/setup-and-configure-mavendeps-jdo.adoc b/mavendeps/adoc/modules/mavendeps/partials/setup-and-configure-mavendeps-jdo.adoc
deleted file mode 100644
index 71520e680db..00000000000
--- a/mavendeps/adoc/modules/mavendeps/partials/setup-and-configure-mavendeps-jdo.adoc
+++ /dev/null
@@ -1,25 +0,0 @@
-= Maven pom.xml
-
-: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 [...]
-:page-partial:
-
-
-include::docs:mavendeps:partial$setup-and-configure-dependencyManagement.adoc[leveloffset=+1]
-
-
-== Dependency
-
-For every Maven module that includes JDO entities, add the following dependency:
-
-[source,xml]
-.pom.xml
-----
-<dependencies>
- <dependency>
- <groupId>org.apache.causeway.persistence</groupId>
- <artifactId>causeway-persistence-jdo-datanucleus</artifactId>
- <type>pom</type>
- </dependency>
-</dependencies>
-----
-
diff --git a/regressiontests/incubating/log4j2-debug-persistence.xml b/regressiontests/incubating/log4j2-debug-persistence.xml
index 1aec9b2b7bb..0bf7dc69df8 100644
--- a/regressiontests/incubating/log4j2-debug-persistence.xml
+++ b/regressiontests/incubating/log4j2-debug-persistence.xml
@@ -40,36 +40,10 @@ under the License.
<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-
- <logger name="DataNucleus.Persistence" level="debug"/>
- <logger name="DataNucleus.Transaction" level="debug"/>
- <logger name="DataNucleus.Datastore.Schema" level="debug"/>
- <logger name="DataNucleus.Datastore.Native" level="debug"/>
-
+
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
-<!-- # DataNucleus Logging Categories -->
-<!-- DataNucleus.Persistence - All messages relating to the persistence process -->
-<!-- DataNucleus.Transaction - All messages relating to transactions -->
-<!-- DataNucleus.Connection - All messages relating to Connections. -->
-<!-- DataNucleus.Query - All messages relating to queries -->
-<!-- DataNucleus.Cache - All messages relating to the DataNucleus Cache -->
-<!-- DataNucleus.MetaData - All messages relating to MetaData -->
-<!-- DataNucleus.Datastore - All general datastore messages -->
-<!-- DataNucleus.Datastore.Schema - All schema related datastore log messages -->
-<!-- DataNucleus.Datastore.Persist - All datastore persistence messages -->
-<!-- DataNucleus.Datastore.Retrieve - All datastore retrieval messages -->
-<!-- DataNucleus.Datastore.Native - Log of all 'native' statements sent to the datastore -->
-<!-- DataNucleus.General - All general operational messages -->
-<!-- DataNucleus.Lifecycle - All messages relating to object lifecycle changes -->
-<!-- DataNucleus.ValueGeneration - All messages relating to value generation -->
-<!-- DataNucleus.Enhancer - All messages from the DataNucleus Enhancer. -->
-<!-- DataNucleus.SchemaTool - All messages from DataNucleus SchemaTool -->
-<!-- DataNucleus.JDO - All messages general to JDO -->
-<!-- DataNucleus.JPA - All messages general to JPA -->
-<!-- DataNucleus.JCA - All messages relating to Connector JCA. -->
-<!-- DataNucleus.IDE - Messages from the DataNucleus IDE. -->
\ No newline at end of file
diff --git a/regressiontests/incubating/pom.xml b/regressiontests/incubating/pom.xml
index 3d70405a6fb..a742c1b3e9e 100644
--- a/regressiontests/incubating/pom.xml
+++ b/regressiontests/incubating/pom.xml
@@ -58,12 +58,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.causeway.persistence</groupId>
- <artifactId>causeway-persistence-jdo-datanucleus</artifactId>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>org.apache.causeway.testing</groupId>
<artifactId>causeway-testing-fixtures-applib</artifactId>
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/AbstractShiroTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/AbstractShiroTest.java
deleted file mode 100644
index 483bbe078ac..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/AbstractShiroTest.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.shiro;
-
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.UnavailableSecurityManagerException;
-import org.apache.shiro.config.Ini;
-import org.apache.shiro.ini.IniSecurityManagerFactory;
-import org.apache.shiro.lang.util.LifecycleUtils;
-import org.apache.shiro.mgt.SecurityManager;
-import org.apache.shiro.subject.Subject;
-import org.apache.shiro.subject.support.SubjectThreadState;
-import org.apache.shiro.util.ThreadContext;
-import org.apache.shiro.util.ThreadState;
-
-import org.apache.causeway.applib.services.inject.ServiceInjector;
-import org.apache.causeway.commons.internal.assertions._Assert;
-//import org.apache.causeway.security.shiro.webmodule.WebModuleShiro.EnvironmentLoaderListenerForCauseway;
-
-import lombok.SneakyThrows;
-import lombok.val;
-
-/**
- *
- * This class was initially copied over from the ApacheDS user Guide, however it has/had
- * some glitches with inconsistent LocalThread (subjectThreadState) context.
- * <p>
- * IniSecurityManagerFactory was deprecated in Shiro 1.4, but we could not find a migration guide yet.
- *
- */
-@SuppressWarnings("deprecation")
-class AbstractShiroTest {
-
- private static ThreadState subjectThreadState;
-
- public AbstractShiroTest() {
- }
-
- /**
- * Allows subclasses to set the currently executing {@link Subject} instance.
- *
- * @param subject the Subject instance
- */
- protected void setSubject(final Subject subject) {
- clearSubject();
- subjectThreadState = createThreadState(subject);
- subjectThreadState.bind();
- }
-
- protected Subject getSubject() {
- return SecurityUtils.getSubject();
- }
-
- protected ThreadState createThreadState(final Subject subject) {
- return new SubjectThreadState(subject);
- }
-
- /**
- * Clears Shiro's thread state, ensuring the thread remains clean for future test execution.
- */
- protected void clearSubject() {
- doClearSubject();
- }
-
- private static void doClearSubject() {
-
- Subject subject = ThreadContext.getSubject();
- if(subject!=null) {
- ThreadContext.unbindSubject();
- }
-
- if (subjectThreadState != null) {
- subjectThreadState.clear();
- subjectThreadState = null;
- }
- }
-
- @SneakyThrows
- protected static void setSecurityManager(final ServiceInjector serviceInjector, final String iniResource) {
-
- val ini = Ini.fromResourcePath(iniResource);
- val factory = new IniSecurityManagerFactory(ini);
- val securityManager = factory.getInstance();
-
- /*TODO[ISIS-3275] shiro-web no jakarta API support
- val listener = new EnvironmentLoaderListenerForCauseway(serviceInjector);
- listener.injectServicesIntoRealms(securityManager);
- */
-
-//debug
-// ini.getSections().forEach(section->{
-// section.entrySet().forEach(es->{
-// System.out.println("" + es.getKey() + "=" +es.getValue());
-// });
-// });
-
- setSecurityManager(securityManager);
- }
-
- protected static void setSecurityManager(final SecurityManager securityManager) {
- try {
- // guard against SecurityManager already being set
- getSecurityManager();
- throw new IllegalStateException("It seems a previous test, did not cleanup the its SecurityManager.");
- } catch (UnavailableSecurityManagerException e) {
- // happy case, fall through
- }
- SecurityUtils.setSecurityManager(securityManager);
-
- _Assert.assertEquals(securityManager, SecurityUtils.getSecurityManager(), "expected same object");
- }
-
- protected static SecurityManager getSecurityManager() {
- return SecurityUtils.getSecurityManager();
- }
-
- public static void tearDownShiro() {
- doClearSubject();
- try {
- SecurityManager securityManager = getSecurityManager();
- LifecycleUtils.destroy(securityManager);
- } catch (UnavailableSecurityManagerException e) {
- //we don't care about this when cleaning up the test environment
- //(for example, maybe the subclass is a unit test and it didn't
- // need a SecurityManager instance because it was using only
- // mock Subject instances)
- }
- SecurityUtils.setSecurityManager(null);
-
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanLdapTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanLdapTest.java
deleted file mode 100644
index 38c56a72a64..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanLdapTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.shiro;
-
-import jakarta.inject.Inject;
-
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.CredentialsException;
-import org.apache.shiro.authc.DisabledAccountException;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-import org.apache.causeway.applib.services.inject.ServiceInjector;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.extensions.secman.delegated.shiro.realm.CausewayModuleExtSecmanShiroRealm;
-import org.apache.causeway.extensions.secman.encryption.spring.CausewayModuleExtSecmanEncryptionSpring;
-import org.apache.causeway.extensions.secman.integration.CausewayModuleExtSecmanIntegration;
-import org.apache.causeway.extensions.secman.jdo.CausewayModuleExtSecmanPersistenceJdo;
-import org.apache.causeway.extensions.secman.jdo.role.dom.ApplicationRoleRepository;
-import org.apache.causeway.extensions.secman.jdo.user.dom.ApplicationUserRepository;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdoAndShiro;
-import org.apache.causeway.testdomain.jdo.JdoTestDomainPersona;
-import org.apache.causeway.testdomain.ldap.LdapConstants;
-import org.apache.causeway.testdomain.ldap.LdapServerService;
-import org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScripts;
-
-import lombok.val;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdoAndShiro.class,
- },
- properties = {
- //"logging.config=log4j2-test.xml",
- "logging.config=log4j2-debug-persistence.xml",
- //CausewayPresets.DebugPersistence,
- //"datanucleus.schema.autoCreateDatabase=true",
- })
-@Import({
-
- // Embedded LDAP server for testing
- LdapServerService.class,
-
- // Security Manager Extension (secman)
- CausewayModuleExtSecmanIntegration.class,
- CausewayModuleExtSecmanShiroRealm.class,
- CausewayModuleExtSecmanPersistenceJdo.class,
- CausewayModuleExtSecmanEncryptionSpring.class,
-})
-@PropertySources({
- @PropertySource(CausewayPresets.DatanucleusAutocreateNoValidate)
-})
-class ShiroSecmanLdapTest extends AbstractShiroTest {
-
- @Inject FixtureScripts fixtureScripts;
- @Inject LdapServerService ldapServerService;
- @Inject ApplicationUserRepository applicationUserRepository;
- @Inject ApplicationRoleRepository applicationRoleRepository;
- //@Inject SecmanConfiguration securityConfig;
- @Inject ServiceInjector serviceInjector;
-
- @BeforeEach
- void beforeEach() {
-
- setSecurityManager(serviceInjector, "classpath:shiro-secman-ldap.ini");
-
- // given
- fixtureScripts.runPersona(JdoTestDomainPersona.SvenApplicationUser);
- }
-
- @AfterEach
- void afterEach() {
- tearDownShiro();
- }
-
- @Test
- void loginLogoutRoundtrip() {
-
- val secMan = SecurityUtils.getSecurityManager();
- assertNotNull(secMan);
-
- val subject = SecurityUtils.getSubject();
- assertNotNull(subject);
- assertFalse(subject.isAuthenticated());
-
- val token = new UsernamePasswordToken(
- LdapConstants.SVEN_PRINCIPAL,
- "pass");
-
- subject.login(token);
- assertTrue(subject.isAuthenticated());
-
- subject.logout();
- assertFalse(subject.isAuthenticated());
-
- }
-
- @Test
- void login_withAccountOnlyKnownToLdap() {
-
- val secMan = getSecurityManager();
- assertNotNull(secMan);
-
- val subject = SecurityUtils.getSubject();
- assertNotNull(subject);
- assertFalse(subject.isAuthenticated());
-
- val username = LdapConstants.OLAF_PRINCIPAL;
- val token = new UsernamePasswordToken(
- username,
- "pass");
-
- // default behavior is to create the account within the DB but leave it disabled
- assertThrows(DisabledAccountException.class, ()->{
- subject.login(token);
- });
-
- val olafUser = applicationUserRepository.findByUsername(username).orElse(null);
- assertNotNull(olafUser);
- assertNotNull(olafUser.getStatus());
- assertFalse(olafUser.getStatus().isUnlocked());
- }
-
- @Test
- void login_withInvalidPassword() {
-
- val secMan = SecurityUtils.getSecurityManager();
- assertNotNull(secMan);
-
- val subject = SecurityUtils.getSubject();
- assertNotNull(subject);
- assertFalse(subject.isAuthenticated());
-
- val token = new UsernamePasswordToken(
- LdapConstants.SVEN_PRINCIPAL,
- "invalid-pass");
-
- assertThrows(CredentialsException.class, ()->{
- subject.login(token);
- });
-
- assertFalse(subject.isAuthenticated());
-
- }
-
- @Test
- void login_withNonExistentUser() {
-
- val secMan = SecurityUtils.getSecurityManager();
- assertNotNull(secMan);
-
- val subject = SecurityUtils.getSubject();
- assertNotNull(subject);
- assertFalse(subject.isAuthenticated());
-
- val username = "non-existent-user";
- val token = new UsernamePasswordToken(
- username,
- "invalid-pass");
-
- assertThrows(CredentialsException.class, ()->{
- subject.login(token);
- });
-
- assertFalse(subject.isAuthenticated());
-
- val nonUser = applicationUserRepository.findByUsername(username);
- assertNull(nonUser);
-
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanLdap_restfulStressTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanLdap_restfulStressTest.java
deleted file mode 100644
index fb3615aaaf7..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanLdap_restfulStressTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.shiro;
-
-import static java.time.Duration.ofMillis;
-
-import jakarta.inject.Inject;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTimeout;
-
-import org.apache.causeway.applib.services.inject.ServiceInjector;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.extensions.secman.delegated.shiro.realm.CausewayModuleExtSecmanShiroRealm;
-import org.apache.causeway.extensions.secman.encryption.spring.CausewayModuleExtSecmanEncryptionSpring;
-import org.apache.causeway.extensions.secman.integration.CausewayModuleExtSecmanIntegration;
-import org.apache.causeway.extensions.secman.jdo.CausewayModuleExtSecmanPersistenceJdo;
-import org.apache.causeway.security.shiro.webmodule.WebModuleShiro;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdoAndShiro;
-import org.apache.causeway.testdomain.jdo.JdoTestDomainPersona;
-import org.apache.causeway.testdomain.ldap.LdapServerService;
-import org.apache.causeway.testdomain.util.rest.RestEndpointService;
-import org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScripts;
-import org.apache.causeway.viewer.restfulobjects.viewer.CausewayModuleViewerRestfulObjectsViewer;
-
-import lombok.val;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdoAndShiro.class
- },
- properties = {
- //"logging.config=log4j2-test.xml",
- "logging.config=log4j2-debug-persistence.xml",
- "server.servlet.session.persistent=false", // defaults to false
- },
- webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-@Import({
-
- // Restful server
- CausewayModuleViewerRestfulObjectsViewer.class,
- RestEndpointService.class,
-
- // Embedded LDAP server for testing
- LdapServerService.class,
-
- // Security Manager Extension (secman)
- CausewayModuleExtSecmanIntegration.class,
- CausewayModuleExtSecmanShiroRealm.class,
- CausewayModuleExtSecmanPersistenceJdo.class,
- CausewayModuleExtSecmanEncryptionSpring.class,
-})
-@PropertySources({
- @PropertySource(CausewayPresets.DatanucleusAutocreateNoValidate)
-})
-//XXX "does not work, when executed in sequence with other regressiontests
-class ShiroSecmanLdap_restfulStressTest extends AbstractShiroTest {
-
- @Inject FixtureScripts fixtureScripts;
- @Inject RestEndpointService restService;
- @Inject LdapServerService ldapServerService;
-// @Inject ApplicationUserRepository applicationUserRepository;
-// @Inject ApplicationRoleRepository applicationRoleRepository;
-// @Inject SecmanConfiguration securityConfig;
- @Inject ServiceInjector serviceInjector;
-
- @BeforeAll
- static void setup() {
- WebModuleShiro.setShiroIniResource("classpath:shiro-secman-ldap.ini");
- }
-
- @BeforeEach
- void beforeEach() {
-
- setSecurityManager(serviceInjector, "classpath:shiro-secman-ldap.ini");
-
- // given
- fixtureScripts.runPersona(JdoTestDomainPersona.SvenApplicationUser);
- }
-
- @AfterEach
- void afterEach() {
- tearDownShiro();
- }
-
- @Test
- void stressTheRestEndpoint() {
-
- val useRequestDebugLogging = false;
- val restfulClient = restService.newClient(useRequestDebugLogging);
-
- assertTimeout(ofMillis(5000), ()->{
-
- for(int i=0; i<100; ++i) {
- val digest = restService.getHttpSessionInfo(restfulClient)
- .ifFailure(Assertions::fail);
-
- val httpSessionInfo = digest.getValue().orElseThrow();
-
- assertNotNull(httpSessionInfo);
-
- // impersonation in UserService means that we _do_ now get
- // an httpSession as a side-effect
- //assertEquals("no http-session", httpSessionInfo);
- assertEquals("http-session attribute names: {}", httpSessionInfo);
-
- }
-
- });
-
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanTest.java
deleted file mode 100644
index 462059b8285..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.shiro;
-
-import jakarta.inject.Inject;
-
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.CredentialsException;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.TestPropertySource;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-import org.apache.causeway.applib.services.inject.ServiceInjector;
-import org.apache.causeway.core.config.CausewayConfiguration;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.extensions.secman.delegated.shiro.realm.CausewayModuleExtSecmanShiroRealm;
-import org.apache.causeway.extensions.secman.encryption.spring.CausewayModuleExtSecmanEncryptionSpring;
-import org.apache.causeway.extensions.secman.integration.CausewayModuleExtSecmanIntegration;
-import org.apache.causeway.extensions.secman.jdo.CausewayModuleExtSecmanPersistenceJdo;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdoAndShiro;
-
-import lombok.val;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdoAndShiro.class,
- })
-@Import({
- // Security Manager Extension (secman)
- CausewayModuleExtSecmanIntegration.class,
- CausewayModuleExtSecmanShiroRealm.class,
- CausewayModuleExtSecmanPersistenceJdo.class,
- CausewayModuleExtSecmanEncryptionSpring.class,
-})
-@TestPropertySource(CausewayPresets.UseLog4j2Test)
-class ShiroSecmanTest extends AbstractShiroTest {
-
- @Inject CausewayConfiguration causewayConfig;
- @Inject ServiceInjector serviceInjector;
-
- @BeforeEach
- void beforeEach() {
- setSecurityManager(serviceInjector, "classpath:shiro-secman-ldap.ini");
- }
-
- @AfterEach
- void afterEach() {
- tearDownShiro();
- }
-
- @Test
- void loginLogoutRoundtrip() {
-
- val secMan = getSecurityManager();
- assertNotNull(secMan);
-
- val subject = SecurityUtils.getSubject();
- assertNotNull(subject);
- assertFalse(subject.isAuthenticated());
-
- val token = new UsernamePasswordToken(
- causewayConfig.getExtensions().getSecman().getSeed().getAdmin().getUserName(),
- causewayConfig.getExtensions().getSecman().getSeed().getAdmin().getPassword());
-
- subject.login(token);
- assertTrue(subject.isAuthenticated());
-
- subject.logout();
- assertFalse(subject.isAuthenticated());
-
- }
-
- @Test
- void login_withInvalidPassword() {
-
- val secMan = SecurityUtils.getSecurityManager();
- assertNotNull(secMan);
-
- val subject = SecurityUtils.getSubject();
- assertNotNull(subject);
- assertFalse(subject.isAuthenticated());
-
- val token = new UsernamePasswordToken(
- causewayConfig.getExtensions().getSecman().getSeed().getAdmin().getUserName(),
- "invalid-pass");
-
- assertThrows(CredentialsException.class, ()->{
- subject.login(token);
- });
-
- assertFalse(subject.isAuthenticated());
-
- }
-
- @Test
- void login_withNonExistentUser() {
-
- val secMan = SecurityUtils.getSecurityManager();
- assertNotNull(secMan);
-
- val subject = SecurityUtils.getSubject();
- assertNotNull(subject);
- assertFalse(subject.isAuthenticated());
-
- val token = new UsernamePasswordToken(
- "non-existent-user",
- "invalid-pass");
-
- assertThrows(CredentialsException.class, ()->{
- subject.login(token);
- });
-
- assertFalse(subject.isAuthenticated());
-
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSimpleTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSimpleTest.java
deleted file mode 100644
index ee134252a15..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSimpleTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.shiro;
-
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.subject.Subject;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import org.apache.causeway.applib.services.inject.ServiceInjector;
-
-import lombok.val;
-
-class ShiroSimpleTest extends AbstractShiroTest {
-
- @BeforeAll
- static void beforeClass() {
-
- val serviceInjector = Mockito.mock(ServiceInjector.class);
-
- //0. Build and set the SecurityManager used to build Subject instances used in your tests
- // This typically only needs to be done once per class if your shiro.ini doesn't change,
- // otherwise, you'll need to do this logic in each test that is different
- setSecurityManager(serviceInjector, "classpath:shiro-simple.ini");
- }
-
- @AfterAll
- static void tearDownSubject() {
- tearDownShiro();
- }
-
- @BeforeEach
- void setUp() {
- //1. Build the Subject instance for the test to run:
- val subjectUnderTest = new Subject.Builder(getSecurityManager()).buildSubject();
- //2. Bind the subject to the current thread:
- setSubject(subjectUnderTest);
- }
-
- @AfterEach
- void cleanUp() {
- //3. Unbind the subject from the current thread:
- clearSubject();
- }
-
- @Test
- void loginLogoutRoundtrip() {
-
- val secMan = SecurityUtils.getSecurityManager();
- assertNotNull(secMan);
-
- val subject = SecurityUtils.getSubject();
- assertNotNull(subject);
- assertFalse(subject.isAuthenticated());
-
- val token = (AuthenticationToken) new UsernamePasswordToken("sven", "pass");
- subject.login(token);
- assertTrue(subject.isAuthenticated());
-
- subject.logout();
- assertFalse(subject.isAuthenticated());
-
- }
-
-}
diff --git a/starters/adoc/modules/starters/pages/simpleapp.adoc b/starters/adoc/modules/starters/pages/simpleapp.adoc
index 34969fa272b..a5c6b6f4081 100644
--- a/starters/adoc/modules/starters/pages/simpleapp.adoc
+++ b/starters/adoc/modules/starters/pages/simpleapp.adoc
@@ -1045,8 +1045,6 @@ spring.datasource.password=simpleapp
#causeway.persistence.schema.create-schema-sql-template= (use flyway instead)
causeway.persistence.schema.auto-create-schemas=
-# DataNucleus, and must use camelCase rather than kebab-case
-datanucleus.schema.autoCreateAll=false
----
Flyway in turn reads the migration scripts under `db.migration` package (in `src/main/resources` of the `webapp` module).
diff --git a/testing/fakedata/integtests/translations.pot b/testing/fakedata/integtests/translations.pot
index a75e53bf4df..3714893d6bc 100644
--- a/testing/fakedata/integtests/translations.pot
+++ b/testing/fakedata/integtests/translations.pot
@@ -246,9 +246,7 @@ msgid "HSQL DB Manager"
msgstr ""
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusIdLong#prop()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#datanucleusIdLong()
msgid "Id"
msgstr ""
@@ -298,13 +296,6 @@ msgid "Member"
msgstr ""
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusIdLong
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusVersionLong
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusVersionTimestamp
-msgid "Metadata"
-msgstr ""
-
-
#: org.apache.causeway.applib.services.layout.LayoutService$Style#MINIMAL
msgid "Minimal"
msgstr ""
@@ -788,14 +779,6 @@ msgid "Value"
msgstr ""
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusVersionLong#prop()
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_datanucleusVersionTimestamp#prop()
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#datanucleusVersionLong()
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#datanucleusVersionTimestamp()
-msgid "Version"
-msgstr ""
-
-
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.EnumOf3#VISA
msgid "Visa"
msgstr ""
@@ -811,14 +794,6 @@ msgid "Yaml"
msgstr ""
-#: org.apache.causeway.applib.services.layout.Object_downloadLayoutXml
-#: org.apache.causeway.applib.services.layout.Object_openRestApi
-#: org.apache.causeway.applib.services.layout.Object_rebuildMetamodel
-#: org.apache.causeway.core.metamodel.services.jdosupport.Persistable_downloadJdoMetadata
-msgid "datanucleusIdLong"
-msgstr ""
-
-
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#someInt
msgid "description of some int"
msgstr ""
(causeway) 15/36: CAUSEWAY-3866: updates references to javax.persistence
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit beae5990fe4f4d59e52c70c87326bda40923d6f6
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 14:04:15 2025 +0100
CAUSEWAY-3866: updates references to javax.persistence
---
.../modules/applib-ant/partials/about/jpa.adoc | 6 ++---
.../petclinic/pages/030-petowner-entity.adoc | 4 ++--
.../userguide/modules/ROOT/pages/value-types.adoc | 2 +-
.../modules/ROOT/partials/domain-entities/jpa.adoc | 26 ++++++++++++----------
.../ROOT/partials/domain-services/crud.adoc | 12 +++++-----
.../modules/ROOT/pages/dependency-injection.adoc | 6 ++---
.../jpa/adoc/modules/ROOT/pages/mapping-guide.adoc | 4 ++--
.../ROOT/pages/setup-and-configuration.adoc | 4 ++--
.../CausewayModulePersistenceJpaEclipselink.java | 2 +-
.../jpa/eclipselink/config/ElSettings.java | 1 -
10 files changed, 35 insertions(+), 32 deletions(-)
diff --git a/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc b/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
index 631fce26214..fcc9f96d1a0 100644
--- a/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
+++ b/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
@@ -16,7 +16,7 @@ The table below lists the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] annotations
|Applies to
-|xref:refguide:applib-ant:Entity.adoc[@javax.persistence. +
+|xref:refguide:applib-ant:Entity.adoc[@jakarta.persistence. +
Entity]
|Flags that the class is an entity, creating an abstraction layer through which the Causeway framework interacts with the underlying persistent domain object.
@@ -40,13 +40,13 @@ Causeway also parses the following JPA annotations, but the metadata is currentl
|Applies to
-|`@javax.persistence. +
+|`@jakarta.persistence. +
Transient`
|Unused
|Persistence
|Property
-|`@javax.persistence. +
+|`@jakarta.persistence. +
Table`
|Unused
|Persistence
diff --git a/antora/components/tutorials/modules/petclinic/pages/030-petowner-entity.adoc b/antora/components/tutorials/modules/petclinic/pages/030-petowner-entity.adoc
index c5cc45181d6..df9fc3139ad 100644
--- a/antora/components/tutorials/modules/petclinic/pages/030-petowner-entity.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/030-petowner-entity.adoc
@@ -889,7 +889,7 @@ mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles
[source,java]
.EmailAddress.java
----
-@javax.persistence.Embeddable // <.>
+@jakarta.persistence.Embeddable // <.>
@org.apache.causeway.applib.annotation.Value // <.>
@lombok.EqualsAndHashCode // <.>
public class EmailAddress implements Serializable { // <.>
@@ -1033,7 +1033,7 @@ The returned string would appear in URLs or bookmarks, for example.
[source,java]
.PetOwner.java
----
-@javax.persistence.Embedded // <.>
+@jakarta.persistence.Embedded // <.>
@Getter @Setter
@Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL) // <.>
@PropertyLayout(fieldSetId = "contact", sequence = "1.2")
diff --git a/antora/components/userguide/modules/ROOT/pages/value-types.adoc b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
index aea3302f2cd..2173df1b54f 100644
--- a/antora/components/userguide/modules/ROOT/pages/value-types.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
@@ -377,7 +377,7 @@ As we can see, this is not the simplest of APIs, but the simplification it bring
We're not quite finished with the glue code, unfortunately.
Chances are that you will want to persist the new value to the database, which means that the object store also requires its own SPI to be implemented.
-For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store, implement the `javax.persistence.AttributeConverter` SPI.
+For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store, implement the `jakarta.persistence.AttributeConverter` SPI.
For example:
[source,java]
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc b/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
index 00dc4edc826..c53981d99be 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
@@ -12,28 +12,30 @@ See the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink object store] documentation fo
== Class definition
-For the domain class itself, this will be the `@javax.persistence.Entity` annotation and probably the `@javax.persistence.Table` annotation, as well as others to define indices and queries.
+For the domain class itself, this will be the `@jakarta.persistence.Entity` annotation and probably the `@jakarta.persistence.Table` annotation, as well as others to define indices and queries.
[source,java]
----
-@javax.persistence.Entity // <.>
-@javax.persistence.Table(
- schema= "simple" // <.>
+import jakarta.persistence.*;
+
+@Entity // <.>
+@Table(
+ schema= "simple" // <.>
// ...
)
-@EntityListeners(CausewayEntityListener.class) // <.>
-@Named("simple.SimpleObject") // <.>
-@DomainObject // <.>
+@EntityListeners(CausewayEntityListener.class) // <.>
+@Named("simple.SimpleObject") // <.>
+@DomainObject // <.>
public class SimpleObject {
- @javax.persistence.Id // <.>
- @javax.persistence.GeneratedValue(strategy = GenerationType.AUTO) // <3>
- @javax.persistence.Column(name = "id", nullable = false) // <.>
+ @Id // <.>
+ @GeneratedValue(strategy = GenerationType.AUTO) // <3>
+ @Column(name = "id", nullable = false) // <.>
private Long id;
- @javax.persistence.Version // <.>
- @javax.persistence.Column(name = "version", nullable = false) // <5>
+ @Version // <.>
+ @Column(name = "version", nullable = false) // <5>
@PropertyLayout(fieldSetId = "metadata", sequence = "999")
@Getter @Setter
private long version;
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/crud.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/crud.adoc
index 862077f3cf7..b030ce9a3f1 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/crud.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/crud.adoc
@@ -168,22 +168,24 @@ public interface UserRepository extends Repository<User, Long> {
and Spring Data will create an implementation based on naming conventions.
See the link:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference[Spring Data] documentation for further details.
-It is also possible to declare JPQL queries , either on the repository method (using `javax.persistence.Query`) or on the entity (using `javax.persistence.NamedQuery`).
+It is also possible to declare JPQL queries , either on the repository method (using `jakarta.persistence.Query`) or on the entity (using `jakarta.persistence.NamedQuery`).
On the entity, declare a named query, eg:
[source,java]
----
-@javax.persistence.Entity
-@javax.persistence.NamedQueries({
- @javax.persistence.NamedQuery( // <.>
+import jakarta.persistence.*;
+
+@Entity
+@NamedQueries({
+ @NamedQuery( // <.>
name = "Customer.findByNameLike", // <.>
query = "SELECT c " + // <.>
"FROM Customer c " + // <.>
"WHERE c.name LIKE :name" // <.>
)
})
-...
+// ...
public class Customer {
// ...
}
diff --git a/persistence/jpa/adoc/modules/ROOT/pages/dependency-injection.adoc b/persistence/jpa/adoc/modules/ROOT/pages/dependency-injection.adoc
index 183ad712bb6..1c5da1dc2dc 100644
--- a/persistence/jpa/adoc/modules/ROOT/pages/dependency-injection.adoc
+++ b/persistence/jpa/adoc/modules/ROOT/pages/dependency-injection.adoc
@@ -9,9 +9,9 @@ For JPA, this requires that the following boilerplate:
[source,java]
----
-import javax.persistence.EntityListeners;
-import org.apache.causeway.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
+import jakarta.persistence.EntityListeners;
+import org.apache.causeway.persistence.jpa.applib.integration.CausewayEntityListener;
-@EntityListeners(JpaEntityInjectionPointResolver.class)
+@EntityListeners(CausewayEntityListener.class)
public class SomeEntity ... { /* ... */ }
----
diff --git a/persistence/jpa/adoc/modules/ROOT/pages/mapping-guide.adoc b/persistence/jpa/adoc/modules/ROOT/pages/mapping-guide.adoc
index d399210714c..791e9ec041b 100644
--- a/persistence/jpa/adoc/modules/ROOT/pages/mapping-guide.adoc
+++ b/persistence/jpa/adoc/modules/ROOT/pages/mapping-guide.adoc
@@ -162,7 +162,7 @@ public class MyEntity ... {
<.> the property as it is understood by Apache Causeway.
-TIP: if you have multiple instancs of an `@Embedded` type, the `@javax.persistence.AttributeOverrides` and `@javax.persistence.AttributeOverride` provide a standardised way of fine-tuning the column definitions.
+TIP: if you have multiple instancs of an `@Embedded` type, the `@jakarta.persistence.AttributeOverrides` and `@jakarta.persistence.AttributeOverride` provide a standardised way of fine-tuning the column definitions.
==== Clobs
@@ -191,4 +191,4 @@ public class MyEntity ... {
<.> the property as it is understood by Apache Causeway.
-TIP: if you have multiple instances of an `@Embedded` type, the `@javax.persistence.AttributeOverrides` and `@javax.persistence.AttributeOverride` provide a standardised way of fine-tuning the column definitions.
+TIP: if you have multiple instances of an `@Embedded` type, the `@jakarta.persistence.AttributeOverrides` and `@jakarta.persistence.AttributeOverride` provide a standardised way of fine-tuning the column definitions.
diff --git a/persistence/jpa/adoc/modules/ROOT/pages/setup-and-configuration.adoc b/persistence/jpa/adoc/modules/ROOT/pages/setup-and-configuration.adoc
index 789209cfb0c..456d03f85ac 100644
--- a/persistence/jpa/adoc/modules/ROOT/pages/setup-and-configuration.adoc
+++ b/persistence/jpa/adoc/modules/ROOT/pages/setup-and-configuration.adoc
@@ -74,11 +74,11 @@ is set to `false`
+
is set to `create-or-extend-tables`
-* `javax.persistence.bean.manager`
+* "jakarta.persistence.bean.manager"
+
is set to an Apache Causeway implementation, to assist with dependency injection into entities.
-Generally these should not be changed, though if there is a requirement, then provide a subclasse alternate implementation of `org.apache.causeway.persistence.jpa.eclipselink.config.ElSettings` with an earlier `@Priority` precedence.
+Generally these should not be changed, though if there is a requirement, then provide an alternate implementation of `org.apache.causeway.persistence.jpa.eclipselink.config.ElSettings` with an earlier `@Priority` precedence.
To set other EclipseLink configuration properties, use a subclass of xref:refguide:persistence:index/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.adoc[] and override `getVendorProperties()`.
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
index e7a68cdf9aa..29c8df92492 100644
--- a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
@@ -179,7 +179,7 @@ public DataAccessException translateExceptionIfPossible(final RuntimeException e
if(translatedEx!=null) return translatedEx;
}
- /* (null-able) converts javax.persistence exceptions to Spring's hierarchy
+ /* (null-able) converts jakarta.persistence exceptions to Spring's hierarchy
* However, don't let
* org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(RuntimeException)
* translate those 2 generic ones ... */
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/config/ElSettings.java b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/config/ElSettings.java
index 6d5a1d95eab..dc0d8f08c46 100644
--- a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/config/ElSettings.java
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/config/ElSettings.java
@@ -72,7 +72,6 @@ protected Map<String, Object> createMap() {
// setup defaults
jpaProps.put(PersistenceUnitProperties.WEAVING, "false");
- //jpaProps.put(PersistenceUnitProperties.LOGGING_LEVEL, SessionLog.FINER_LABEL); //debug logging
jpaProps.put(PersistenceUnitProperties.DDL_GENERATION, PersistenceUnitProperties.CREATE_OR_EXTEND);
jpaProps.put(PersistenceUnitProperties.CDI_BEANMANAGER, new BeanManagerForEntityListeners(serviceInjectorProvider));
(causeway) 36/36: CAUSEWAY-3866: cleans up queryDSL and parent pom docs a little
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 7eeea412b4a662d0f4b0bef2f340e0e0b32f478c
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 19 12:16:13 2025 +0100
CAUSEWAY-3866: cleans up queryDSL and parent pom docs a little
---
.../attachments/algolia-search/algolia-config.json | 2 +-
.../components/docs/modules/ROOT/pages/about.adoc | 1 +
.../ROOT/partials/module-nav/components.adoc | 2 +
.../ROOT/pages/setup-and-configuration.adoc | 107 ++++++++++++++++++++-
...nd-configuration-for-persistence-mechanism.adoc | 104 --------------------
.../parent-pom/images/pom-hierarchy.drawio.png | Bin 184350 -> 295914 bytes
starters/adoc/modules/parent-pom/pages/about.adoc | 25 +++--
7 files changed, 118 insertions(+), 123 deletions(-)
diff --git a/antora/components/comguide/modules/ROOT/attachments/algolia-search/algolia-config.json b/antora/components/comguide/modules/ROOT/attachments/algolia-search/algolia-config.json
index a09a402d55c..2cdb1c728a4 100644
--- a/antora/components/comguide/modules/ROOT/attachments/algolia-search/algolia-config.json
+++ b/antora/components/comguide/modules/ROOT/attachments/algolia-search/algolia-config.json
@@ -7,7 +7,7 @@
"https://causeway.apache.org/sitemap.xml"
],
"stop_urls": [
- "https://causeway[.]apache[.]org/(docs|comguide|conguide|setupguide|relnotes|refguide|userguide|core|security|extensions|valuetypes|vro|vw|pjdo|pjpa|testing|tutorials|incubator|regressiontests)/(2.0.0|2.0.0-RC2|2.0.0-RC1|2.0.0-M9|2.0.0-M8|2.0.0-M7|2.0.0-M6|2.0.0-M5)/.*",
+ "https://causeway[.]apache[.]org/(docs|comguide|conguide|setupguide|relnotes|refguide|userguide|core|security|extensions|valuetypes|vro|vw|gqlv|querydsl|pjdo|pjpa|testing|tutorials|incubator|regressiontests)/(2.0.0|2.0.0-RC2|2.0.0-RC1|2.0.0-M9|2.0.0-M8|2.0.0-M7|2.0.0-M6|2.0.0-M5)/.*",
"https://causeway[.]apache[.]org/versions/(1.17.0|1.16.2|1.16.1|1.16.0|1.15.1|1.15.0|1.14.0|1.13.2|1.13.2|1.13.1|1.13.0|1.12.2|1.12.1|1.12.0|1.11.1|1.11.0)/.*"
],
"selectors": {
diff --git a/antora/components/docs/modules/ROOT/pages/about.adoc b/antora/components/docs/modules/ROOT/pages/about.adoc
index 7655c9d1ff1..d5557fcb1a3 100644
--- a/antora/components/docs/modules/ROOT/pages/about.adoc
+++ b/antora/components/docs/modules/ROOT/pages/about.adoc
@@ -89,6 +89,7 @@ _Viewers_
_Persistence_
* xref:pjpa:ROOT:about.adoc[JPA (EclipseLink)]
+* xref:querydsl:ROOT:about.adoc[QueryDSL]
|
diff --git a/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc b/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
index 0dc6dbdd128..08474b5f74b 100644
--- a/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
+++ b/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
@@ -19,4 +19,6 @@
** Persistence
*** xref:pjpa:ROOT:about.adoc[]
+*** xref:querydsl:ROOT:about.adoc[]
+
diff --git a/persistence/querydsl/adoc/modules/ROOT/pages/setup-and-configuration.adoc b/persistence/querydsl/adoc/modules/ROOT/pages/setup-and-configuration.adoc
index a990b749560..aad48991d84 100644
--- a/persistence/querydsl/adoc/modules/ROOT/pages/setup-and-configuration.adoc
+++ b/persistence/querydsl/adoc/modules/ROOT/pages/setup-and-configuration.adoc
@@ -15,11 +15,108 @@ include::docs:mavendeps:partial$setup-and-configure-dependencyManagement.adoc[le
This section describes the required changes to use QueryDSL if using xref:pjpa::about.adoc[JPA] as your persistence mechanism.
-:querydsl-implementation: jpa
-:querydsl-implementation-capitalized: Jpa
-:querydsl-annotation-processor: com.querydsl.apt.jpa.JPAAnnotationProcessor
-
-include::partial$setup-and-configuration-for-persistence-mechanism.adoc[]
+=== Dependency
+
+In the webapp module of your application, add the following dependency:
+
+[source,xml,subs="attributes+"]
+.pom.xml
+----
+<dependencies>
+ <dependency>
+ <groupId>org.apache.causeway.persistence</groupId>
+ <artifactId>causeway-persistence-querydsl-jpa</artifactId>
+ </dependency>
+</dependencies>
+----
+
+=== AppManifest
+
+In your application's `AppManifest` (top-level Spring `@Configuration` used to bootstrap the app), import the appropriate module:
+
+[source,java,subs="attributes+"]
+.AppManifest.java
+----
+@Configuration
+@Import({
+ ...
+ CausewayModulePersistenceQueryDslJpa.class,
+ ...
+})
+public class AppManifest {
+}
+----
+
+
+=== Module with entities
+
+In every module that contains entities, it's necessary to generate the "Q" classes that are used in turn to construct the queries.
+This requires several changes to the module's `pom.xml` file.
+
+* add the build plugin
++
+[source,xml,subs="attributes+"]
+.pom.xml
+----
+<build>
+ <plugins>
+ ...
+ <plugin>
+ <groupId>com.mysema.maven</groupId>
+ <artifactId>apt-maven-plugin</artifactId>
+ <version>{sema-plugin-version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>
+ target/generated-sources/java
+ </outputDirectory>
+ <processor>
+ com.querydsl.apt.jpa.JPAAnnotationProcessor
+ </processor>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ ...
+ </plugins>
+</build>
+----
+
+* add a dependency to the `querydsl-apt` annotation processor:
++
+[source,xml,subs="attributes+"]
+.pom.xml
+----
+<dependencies>
+ ...
+ <dependency>
+ <groupId>com.querydsl</groupId>
+ <artifactId>querydsl-apt</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ ...
+</dependencies>
+----
+
+
+* (recommended, usually required) add a dependency to the querydsl-applib module:
++
+[source,xml,subs="attributes+"]
+.pom.xml
+----
+<dependencies>
+ ...
+ <dependency>
+ <groupId>org.apache.causeway.persistence</groupId>
+ <artifactId>causeway-persistence-querydsl-applib</artifactId>
+ </dependency>
+ ...
+</dependencies>
+----
diff --git a/persistence/querydsl/adoc/modules/ROOT/partials/setup-and-configuration-for-persistence-mechanism.adoc b/persistence/querydsl/adoc/modules/ROOT/partials/setup-and-configuration-for-persistence-mechanism.adoc
deleted file mode 100644
index 90bafb7eab4..00000000000
--- a/persistence/querydsl/adoc/modules/ROOT/partials/setup-and-configuration-for-persistence-mechanism.adoc
+++ /dev/null
@@ -1,104 +0,0 @@
-: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 [...]
-
-=== Dependency
-
-In the webapp module of your application, add the following dependency:
-
-[source,xml,subs="attributes+"]
-.pom.xml
-----
-<dependencies>
- <dependency>
- <groupId>org.apache.causeway.persistence</groupId>
- <artifactId>causeway-persistence-querydsl-{querydsl-implementation}</artifactId>
- </dependency>
-</dependencies>
-----
-
-=== AppManifest
-
-In your application's `AppManifest` (top-level Spring `@Configuration` used to bootstrap the app), import the appropriate module:
-
-[source,java,subs="attributes+"]
-.AppManifest.java
-----
-@Configuration
-@Import({
- ...
- CausewayModulePersistenceQueryDsl{querydsl-implementation-capitalized}.class,
- ...
-})
-public class AppManifest {
-}
-----
-
-
-=== Module with entities
-
-In every module that contains entities, it's necessary to generate the "Q" classes that are used in turn to construct the queries.
-This requires several changes to the module's `pom.xml` file.
-
-* add the build plugin
-+
-[source,xml,subs="attributes+"]
-.pom.xml
-----
-<build>
- <plugins>
- ...
- <plugin>
- <groupId>com.mysema.maven</groupId>
- <artifactId>apt-maven-plugin</artifactId>
- <version>{sema-plugin-version}</version>
- <executions>
- <execution>
- <goals>
- <goal>process</goal>
- </goals>
- <configuration>
- <outputDirectory>
- target/generated-sources/java
- </outputDirectory>
- <processor>
- {querydsl-annotation-processor}
- </processor>
- </configuration>
- </execution>
- </executions>
- </plugin>
- ...
- </plugins>
-</build>
-----
-
-* add a dependency to the `querydsl-apt` annotation processor:
-+
-[source,xml,subs="attributes+"]
-.pom.xml
-----
-<dependencies>
- ...
- <dependency>
- <groupId>com.querydsl</groupId>
- <artifactId>querydsl-apt</artifactId>
- <scope>provided</scope>
- </dependency>
- ...
-</dependencies>
-----
-
-
-* (recommended, usually required) add a dependency to the querydsl-applib module:
-+
-[source,xml,subs="attributes+"]
-.pom.xml
-----
-<dependencies>
- ...
- <dependency>
- <groupId>org.apache.causeway.persistence</groupId>
- <artifactId>causeway-persistence-querydsl-applib</artifactId>
- </dependency>
- ...
-</dependencies>
-----
diff --git a/starters/adoc/modules/parent-pom/images/pom-hierarchy.drawio.png b/starters/adoc/modules/parent-pom/images/pom-hierarchy.drawio.png
index 005b5255e55..1b01389573f 100644
Binary files a/starters/adoc/modules/parent-pom/images/pom-hierarchy.drawio.png and b/starters/adoc/modules/parent-pom/images/pom-hierarchy.drawio.png differ
diff --git a/starters/adoc/modules/parent-pom/pages/about.adoc b/starters/adoc/modules/parent-pom/pages/about.adoc
index fb36b7abb21..fdcc66c3021 100644
--- a/starters/adoc/modules/parent-pom/pages/about.adoc
+++ b/starters/adoc/modules/parent-pom/pages/about.adoc
@@ -61,22 +61,21 @@ These all set up `<dependencyManagement>/<dependencies>` entries for all of the
[#surefire-configuration]
== Surefire Configuration
-The parent pom configuresthe Maven surefire plugin to execute multiple times, based on test class suffix.
-The suffixes are:
+:asterisk: *
-* `Test` (unit tests, if any)
-+
-this will explicitly _exclude_ any integration tests, though, as defined by ...
+The parent pom configures the Maven surefire plugin to execute multiple times, based on test class name.
+These must match
-* `IntegTest` (integ tests, if any)
+* *`{asterisk}Test{asterisk}.java`* (unit tests)
++
+Test classes named "{asterisk}Testing.java", "{asterisk}IntegTest{asterisk}.java" and "{asterisk}Abstract{asterisk}.java" are all excluded.
-// for 2.0.0-M6, add:
-//* `IntegBddSpecs` (BDD specs, if any)
+* *`{asterisk}IntegTest{asterisk}.java`* (integration tests)
++
+Test classes named "{asterisk}Abstract{asterisk}.java" are excluded.
-[NOTE]
-====
-in 2.0.0-M5 there is a bug in that the `default-test` (default) execution is also implicitly configured, meaning that unit tests and integ tests are executed twice, and BDD specs (if any)are executed once.
+* *`{asterisk}Spec{asterisk}.java`* (Cucumber BDD specs)
++
+Test classes named "{asterisk}Test.java", "{asterisk}Testing.java", "{asterisk}IntegTest{asterisk}.java" and "{asterisk}Abstract{asterisk}.java" are all excluded.
-This has been fixed for the next milestone, with a separate execution defined for BDD specs.
-====
(causeway) 32/36: adds docs for @Table and @Transient
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit f2b1c9c436ef3a4992d0abcf0e706a701dd6cd34
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 19 10:33:03 2025 +0100
adds docs for @Table and @Transient
---
.../refguide/modules/applib-ant/pages/Column.adoc | 5 +++
.../modules/applib-ant/pages/Embeddable.adoc | 4 ++
.../refguide/modules/applib-ant/pages/Entity.adoc | 4 +-
.../refguide/modules/applib-ant/pages/Table.adoc | 25 +++++++++++--
.../modules/applib-ant/pages/Transient.adoc | 43 ++++++++++++++++++++++
.../modules/applib-ant/partials/about/jpa.adoc | 39 ++++++++++----------
6 files changed, 96 insertions(+), 24 deletions(-)
diff --git a/antora/components/refguide/modules/applib-ant/pages/Column.adoc b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
index aaf2a9d4761..481142dd2f2 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Column.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
@@ -186,3 +186,8 @@ public void setDoc(final Clob doc) {
this.doc = ClobJpaEmbeddable.fromClob(doc);
}
----
+
+
+== See Also
+
+- link:https://jakarta.ee/specifications/persistence/3.0/apidocs/jakarta.persistence/jakarta/persistence/Column[@Column] (JPA API javadoc)
diff --git a/antora/components/refguide/modules/applib-ant/pages/Embeddable.adoc b/antora/components/refguide/modules/applib-ant/pages/Embeddable.adoc
index 6c2f0091d38..dec5cbb3e39 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Embeddable.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Embeddable.adoc
@@ -79,3 +79,7 @@ public class Customer {
<.> Renders the address using AsciiDoc
<.> Allows the state of the embedded object to be updated (or replaced).
+== See Also
+
+- link:https://jakarta.ee/specifications/persistence/3.0/apidocs/jakarta.persistence/jakarta/persistence/Embeddable[@Embeddable] (JPA API javadoc)
+- link:https://jakarta.ee/specifications/persistence/3.0/apidocs/jakarta.persistence/jakarta/persistence/Embedded[@Embedded] (JPA API javadoc)
diff --git a/antora/components/refguide/modules/applib-ant/pages/Entity.adoc b/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
index 36ddf736735..5375ec68c75 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
@@ -38,4 +38,6 @@ Causeway parses the `@Entity` annotation from the Java source code; it does not
This means that it the `@Entity` annotation must be used rather than the equivalent XML metadata.
====
-...
+== See Also
+
+- link:https://jakarta.ee/specifications/persistence/3.0/apidocs/jakarta.persistence/jakarta/persistence/Entity[@Entity] (JPA API javadoc)
diff --git a/antora/components/refguide/modules/applib-ant/pages/Table.adoc b/antora/components/refguide/modules/applib-ant/pages/Table.adoc
index d08b0c5ab99..b935ec6a064 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Table.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Table.adoc
@@ -4,9 +4,28 @@
: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 [...]
-// TODO: 3866 - to complete
-The JPA `@jakarta.persistence.Table` provides metadata describing how JPA ...
+The `@Table` annotation is part of the Jakarta Persistence API (JPA) and is used to specify the primary table for a mapped entity.
+By default, the table name is assumed to be the same as the entity name, but `@Table` allows customization of the table name and other table-level details.
-Apache Causeway also parses and interprets this annotation in order to ...
+Although this annotation is recognised by Causeway, its metadata is currently unused.
+== Usage
+
+Annotate your entity class with `@Table` to define the table mapping:
+
+[source,java]
+----
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
+
+@Entity
+@Table(name = "customers")
+public class Customer {
+ // ...
+}
+----
+
+== See Also
+
+- link:https://jakarta.ee/specifications/persistence/3.0/apidocs/jakarta.persistence/jakarta/persistence/Table[@Table] (JPA API javadoc)
diff --git a/antora/components/refguide/modules/applib-ant/pages/Transient.adoc b/antora/components/refguide/modules/applib-ant/pages/Transient.adoc
new file mode 100644
index 00000000000..79386f6a94a
--- /dev/null
+++ b/antora/components/refguide/modules/applib-ant/pages/Transient.adoc
@@ -0,0 +1,43 @@
+[#jakarta-persistence-Transient]
+= @Transient (jpa)
+
+: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 `@Transient` annotation is part of the Jakarta Persistence API (JPA) and is used to indicate that a field or property of an entity should not be persisted to the database.
+Fields marked with `@Transient` are ignored by the JPA provider during persistence operations.
+
+Such fields are useful for temporary, calculated, or helper fields that should not be stored.
+In particular, injected services should be annotated with `@Transient`
+
+Although this annotation is recognised by Causeway, its metadata is currently unused.
+
+== Usage
+
+Annotate a field or getter in your entity class with `@Transient` to exclude it from persistence:
+
+[source,java]
+----
+import jakarta.persistence.Entity;
+import jakarta.persistence.Transient;
+
+@Entity
+public class Product {
+
+ @Column(length=100)
+ private String name;
+
+ // ...
+
+ @Transient // <.>
+ @Inject
+ private RepositoryService repositoryService;
+}
+----
+<.> indicates that this injected service should be ignored so far as persistence goes.
+
+
+== See Also
+
+- link:https://jakarta.ee/specifications/persistence/3.0/apidocs/jakarta.persistence/jakarta/persistence/Transient[@Transient] (JPA API javadoc)
+
diff --git a/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc b/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
index bec4ef2ff53..10810fef007 100644
--- a/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
+++ b/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
@@ -15,17 +15,6 @@ The table below lists the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] annotations
|Layer
|Applies to
-|xref:refguide:applib-ant:Embeddable.adoc[@jakarta. +
-persistence. +
-Embeddable]
-|Indicates that the class is an embeddable (and ideally immutable) value object.
-Embeddable objects are stored in-line with a containing entity (which uses the `@Embedded` annotation to do so).
-
-
-|Domain / persistence
-|Class
-
-
|xref:refguide:applib-ant:Entity.adoc[@jakarta. +
persistence. +
Entity]
@@ -50,21 +39,31 @@ Causeway also parses the following JPA annotations, but the metadata is currentl
|Layer
|Applies to
-
-|`@jakarta. +
+|xref:refguide:applib-ant:Embeddable.adoc[@jakarta. +
persistence. +
-Transient`
-|Unused
-|Persistence
-|Property
+Embeddable]
+|Indicates that the class is an embeddable object, stored in-line with a containing entity (which uses the `@Embedded` annotation to do so).
+
+
+|Domain / persistence
+|Class
+
-|`@jakarta. +
+
+|xref:refguide:applib-ant:Embeddable.adoc[@jakarta. +
persistence. +
-Table`
-|Unused
+Table]
+|Indicates the schema and table to which the entity is mapped.
+If not specified, then the default schema is used and the class name is used as the table.
|Persistence
|Class
+|xref:refguide:applib-ant:Embeddable.adoc[@jakarta. +
+persistence. +
+Transient]
+|Indicates that the property should _not_ be persisted as a column in the mapped table.
+|Persistence
+|Property
|===
(causeway) 05/36: CAUSEWAY-3866: updating docs, removing references to JDO
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 71b0af20d093c5c224a98a0da5f6ed36cf9b224d
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 15 07:09:34 2025 +0100
CAUSEWAY-3866: updating docs, removing references to JDO
---
.../comguide/modules/ROOT/pages/starter-apps.adoc | 7 +-
.../components/docs/modules/ROOT/pages/about.adoc | 1 -
.../ROOT/pages/landing-page/components.adoc | 10 +--
.../what-is-apache-causeway/screencasts-older.txt | 12 ---
.../hooks/DomainObject_021-logicalTypeName.adoc | 9 +-
.../annotation/hooks/DomainObject_022-nature.adoc | 2 +-
.../annotation/hooks/Property_021-optionality.adoc | 14 ++--
.../annotation/hooks/Property_023-maxLength.adoc | 2 +-
.../pages/index/value/hooks/Blob_usage-notes.adoc | 30 ++++---
.../pages/index/value/hooks/Clob_usage-notes.adoc | 25 +++---
.../refguide/modules/applib-ant/pages/Column.adoc | 22 +++--
.../refguide/modules/applib-ant/pages/Digits.adoc | 3 +-
.../modules/applib-ant/pages/Discriminator.adoc | 68 ---------------
.../refguide/modules/applib-ant/pages/Entity.adoc | 94 ++-------------------
.../modules/applib-ant/pages/NotPersistent.adoc | 19 -----
.../modules/applib-ant/pages/Nullable.adoc | 6 +-
.../refguide/modules/applib-ant/pages/Pattern.adoc | 1 +
.../applib-ant/pages/PersistenceCapable.adoc | 93 ---------------------
.../modules/applib-ant/pages/PrimaryKey.adoc | 20 -----
.../modules/applib-ant/pages/Table.adoc} | 12 +--
.../modules/applib-ant/partials/module-nav.adoc | 9 +-
.../refguide/modules/applib-svc/pages/about.adoc | 2 +-
.../2.0.0-M1/mignotes/removed-annotations.adoc | 4 +-
.../ROOT/partials/2024/2.0.0/_relnotes.adoc | 7 +-
.../ROOT/partials/2024/2.1.0/_relnotes.adoc | 2 +-
.../setupguide/modules/eclipse/pages/about.adoc | 2 +-
.../setupguide/modules/intellij/pages/about.adoc | 6 +-
.../modules/ROOT/partials/_deployment-options.adoc | 7 +-
.../ROOT/partials/domain-entities/_intro.adoc | 2 +-
.../ROOT/partials/domain-services/crud.adoc | 97 ++++++----------------
.../ROOT/partials/meta-annotations/_intro.adoc | 2 +-
.../properties-collections-actions/actions.adoc | 6 +-
.../collections.adoc | 10 +--
.../modules/ROOT/partials/view-models/_intro.adoc | 2 +-
.../causeway/applib/annotation/Optionality.java | 11 +--
.../applib/services/metrics/package-info.java | 2 +-
.../applib/services/repository/package-info.java | 2 +-
core/adoc/modules/ROOT/pages/about.adoc | 2 +-
.../src/main/adoc/modules/config/pages/about.adoc | 4 +-
.../main/adoc/modules/metamodel/pages/events.adoc | 2 +-
.../adoc/modules/commandlog/pages/about.adoc | 2 +-
.../adoc/modules/executionlog/pages/about.adoc | 2 +-
.../adoc/modules/executionoutbox/pages/about.adoc | 2 +-
.../flyway/adoc/modules/flyway/pages/about.adoc | 12 +--
.../secman/adoc/modules/secman/pages/about.adoc | 9 +-
mavendeps/adoc/modules/mavendeps/pages/about.adoc | 4 +-
.../jpa/applib/types/BlobJpaEmbeddable.java | 9 +-
.../jpa/applib/types/ClobJpaEmbeddable.java | 9 +-
.../adoc/modules/starters/pages/helloworld.adoc | 36 ++++----
.../adoc/modules/integtestsupport/pages/about.adoc | 15 +---
.../adoc/modules/unittestsupport/pages/about.adoc | 10 +--
51 files changed, 183 insertions(+), 558 deletions(-)
diff --git a/antora/components/comguide/modules/ROOT/pages/starter-apps.adoc b/antora/components/comguide/modules/ROOT/pages/starter-apps.adoc
index cd2f8366033..8c13c4037d3 100644
--- a/antora/components/comguide/modules/ROOT/pages/starter-apps.adoc
+++ b/antora/components/comguide/modules/ROOT/pages/starter-apps.adoc
@@ -4,15 +4,12 @@
: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 [...]
-== Simpleapp Maintenance (JDO and JPA)
+== Simpleapp Maintenance
When making updates for simpleapp, to the current snapshot:
. make change to `{page-causewaycurrmajorversion}-jpa-SNAPSHOT`
-// . forward port from `{page-causewaycurrmajorversion}-jpa-SNAPSHOT` to `{page-causewaynextmajorversion}-jpa-SNAPSHOT`
-. merge down from `{page-causewaycurrmajorversion}-jpa-SNAPSHOT` to `{page-causewaycurrmajorversion}-jdo-SNAPSHOT`
-// . forward port from `{page-causewaycurrmajorversion}-jdo-SNAPSHOT` to `{page-causewaynextmajorversion}-jdo-SNAPSHOT`
-// . merge down from `{page-causewaynextmajorversion}-jpa-SNAPSHOT` to `{page-causewaynextmajorversion}-jdo-SNAPSHOT` (should be a no-op)
+. forward port from `{page-causewaycurrmajorversion}-jpa-SNAPSHOT` to `{page-causewaynextmajorversion}-jpa-SNAPSHOT`
[NOTE]
====
diff --git a/antora/components/docs/modules/ROOT/pages/about.adoc b/antora/components/docs/modules/ROOT/pages/about.adoc
index b21986be327..7655c9d1ff1 100644
--- a/antora/components/docs/modules/ROOT/pages/about.adoc
+++ b/antora/components/docs/modules/ROOT/pages/about.adoc
@@ -89,7 +89,6 @@ _Viewers_
_Persistence_
* xref:pjpa:ROOT:about.adoc[JPA (EclipseLink)]
-* xref:pjdo:ROOT:about.adoc[JDO (DataNucleus)]
|
diff --git a/antora/components/docs/modules/ROOT/pages/landing-page/components.adoc b/antora/components/docs/modules/ROOT/pages/landing-page/components.adoc
index 0d2e81c17c9..bc4b12b079b 100644
--- a/antora/components/docs/modules/ROOT/pages/landing-page/components.adoc
+++ b/antora/components/docs/modules/ROOT/pages/landing-page/components.adoc
@@ -33,15 +33,7 @@ Presents your domain objects in JSON representations, compliant either with link
== Persistence
-The framework allows xref:userguide:ROOT:domain-entities.adoc[domain entities] to be persisted using either:
-
-* the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store
-+
-for use with JPA and link:https://spring.io/projects/spring-data-jpa[Spring Data JPA].
-
-* the xref:pjdo:ROOT:about.adoc[JDO/DataNucleus object store]
-+
-for use with the JDO API.
+The framework allows xref:userguide:ROOT:domain-entities.adoc[domain entities] to be persisted using the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store, for use with JPA and link:https://spring.io/projects/spring-data-jpa[Spring Data JPA].
Alternatively, you can "roll your own" (by implementing the xref:refguide:applib:index/ViewModel.adoc[ViewModel] interface) and persist with any data persistence technology that is supported by Spring Boot.
diff --git a/antora/components/docs/modules/ROOT/pages/what-is-apache-causeway/screencasts-older.txt b/antora/components/docs/modules/ROOT/pages/what-is-apache-causeway/screencasts-older.txt
index 10158e6b4bf..4c9ce1910ca 100644
--- a/antora/components/docs/modules/ROOT/pages/what-is-apache-causeway/screencasts-older.txt
+++ b/antora/components/docs/modules/ROOT/pages/what-is-apache-causeway/screencasts-older.txt
@@ -46,18 +46,6 @@ _A run-through of the main features of the http://github.com/apache/causeway-app
-|Setting up Eclipse +
-
-_How to import an Apache Causeway maven-based application into Eclipse and configure to use with JDO/DataNucleus_ +
-
-NB: when configuring DataNucleus for the *dom* project, make sure you are in the 'Java perspective', not the 'Java EE perspective'). +
-
-Learn more xref:setupguide:eclipse:about.adoc[here]
-
-|video::RgcYfjQ8yJA[youtube,width="420px",height="315px"]
-
-
-
|Setting up IntelliJ +
_How to import an Apache Causeway maven-based application into IntelliJ and run the app._ +
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainObject_021-logicalTypeName.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainObject_021-logicalTypeName.adoc
index d440e0ae918..ef0e61d176f 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainObject_021-logicalTypeName.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainObject_021-logicalTypeName.adoc
@@ -33,14 +33,7 @@ public class Order {
The rules of precedence are:
. `@DomainObject#logicalTypeName`
-. ORM-specific:
-
-.. JDO: xref:refguide:applib-ant:PersistenceCapable.adoc[@PersistenceCapable], if at least the `schema` attribute is defined.
-+
-If both `schema` and `table` are defined, then the value is "`schema.table`".
-If only `schema` is defined, then the value is "`schema.className`".
-
-.. (JPA) `@Table#schema()`.
+. ORM-specific, `@Table#schema()`.
. Fully qualified class name of the entity.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainObject_022-nature.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainObject_022-nature.adoc
index 707382aac1c..632f81eb9b5 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainObject_022-nature.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainObject_022-nature.adoc
@@ -24,7 +24,7 @@ Specifically, the nature must be one of:
* `ENTITY`
+
-indicates that the domain object is an entity whose persistence is managed internally by Apache Causeway, using the JDO/DataNucleus objectstore.
+indicates that the domain object is an entity whose persistence is managed internally by Apache Causeway, using the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] objectstore.
* `MIXIN`
+
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
index 94f5f844951..3437b101268 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
@@ -8,11 +8,11 @@ By default, Apache Causeway assumes that all properties of an domain object or v
The xref:applib:index/annotation/Property.adoc#optionality[optionality()] attribute allows this to be relaxed.
The attribute is also supported for xref:refguide:applib:index/annotation/Parameter.adoc#optionality[parameters].
-That said, properties are most commonly defined on persistent domain objects (entities), in which case the JDO xref:refguide:applib-ant:Column.adoc[@Column] should be specified.
+That said, properties are most commonly defined on persistent domain objects (entities), in which case the JPA xref:refguide:applib-ant:Column.adoc[@Column] should be specified.
Apache Causeway can infer the maxLength directly from the equivalent @Column#length() annotation.
-That said, properties are most commonly defined on persistent domain objects (entities), in which case the JDO xref:refguide:applib-ant:Column.adoc[@Column] will in any case need to be specified.
-Apache Causeway can infer the `optionality` semantic directly from the equivalent `@Column#allowsNull()` annotation/attribute.
+That said, properties are most commonly defined on persistent domain objects (entities), in which case the JPA xref:refguide:applib-ant:Column.adoc[@Column] will in any case need to be specified.
+Apache Causeway can infer the `optionality` semantic directly from the equivalent `@Column#nullable()` annotation/attribute.
For example:
@@ -35,16 +35,16 @@ In this case there is no need for the `@Property#optionality` attribute.
== Mismatched defaults
-If the `@Column#allowsNull` attribute is omitted and the `@Property#optionality() attribute is also omitted, then note that Causeway' defaults and JDO's defaults differ.
+If the `@Column#nullable` attribute is omitted and the `@Property#optionality() attribute is also omitted, then note that Causeway' defaults and JDO's defaults differ.
Specifically, Causeway always assumes properties are mandatory, whereas JDO specifies that primitives are mandatory, but all reference types are optional.
When Apache Causeway initializes it checks for these mismatches during its metamodel validation phase, and will fail to boot ("fail-fast") if there is a mismatch.
-The fix is usually to add the `@Column#allowsNull()` annotation/attribute.
+The fix is usually to add the `@Column#nullable()` annotation/attribute.
== Superclass inheritance type
-There is one case (at least) it may be necessary to annotate the property with both `@Column#allowsNull` and also `@Property#optionality()`.
-If the property is logically mandatory and is in a subclass, but the mapping of the class hierarchy is to store both the superclass and subclass(es) into a single table (ie a "roll-up" mapping using `javax.jdo.annotations.InheritanceStrategy#SUPERCLASS_TABLE`), then JDO requires that the property is annotated as `@Column#allowsNull="true"`: its value will be not defined for other subclasses.
+There is one case (at least) it may be necessary to annotate the property with both `@Column#nullable` and also `@Property#optionality()`.
+If the property is logically mandatory and is in a subclass, but the mapping of the class hierarchy is to store both the superclass and subclass(es) into a single table (ie a "roll-up" mapping using `javax.jdo.annotations.InheritanceStrategy#SUPERCLASS_TABLE`), then JDO requires that the property is annotated as `@Column#nullable=true`: its value will be not defined for other subclasses.
In this case we therefore require both annotations.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_023-maxLength.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_023-maxLength.adoc
index 64d539b6e3f..ae559970b0b 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_023-maxLength.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_023-maxLength.adoc
@@ -8,7 +8,7 @@
The xref:applib:index/annotation/Property.adoc#maxLength[maxLength()] attribute applies only to `String` properties, indicating the maximum number of characters that the user may enter (for example in a text field in the UI).
The attribute It is ignored if applied to properties of any other type.
-That said, properties are most commonly defined on persistent domain objects (entities), in which case the JDO xref:refguide:applib-ant:Column.adoc[@Column] will in any case need to be specified.
+That said, properties are most commonly defined on persistent domain objects (entities), in which case the JPA xref:refguide:applib-ant:Column.adoc[@Column] will in any case need to be specified.
Apache Causeway can infer the `maxLength` semantic directly from the equivalent `@Column#length()` annotation/attribute.
For example:
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc
index 652e75d6267..e6399fc5cc8 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc
@@ -4,20 +4,24 @@
== Usage Notes
-If using xref:pjdo:ROOT:about.adoc[JDO/DataNucleus], `Blob` properties can be mapped using:
+If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], `Blob` properties can be mapped using the xref:refguide:persistence:index/jpa/applib/types/BlobJpaEmbeddable.adoc[]:
[source,java]
----
-@javax.jdo.annotations.Persistent(defaultFetchGroup="false")
- @javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
- @javax.jdo.annotations.Column(name = "attachment_name"),
- @javax.jdo.annotations.Column(name = "attachment_mimetype"),
- @javax.jdo.annotations.Column(name = "attachment_bytes", jdbcType = "BLOB", sqlType = "BLOB")
- })
-@Property(optionality = Optionality.OPTIONAL)
-@Getter @Setter
-private Blob attachment;
-----
-
-If the property is mandatory, add `allowsNull = "false` for each of the ``@Column``s.
+@AttributeOverrides({
+ @AttributeOverride(name="name", column=@Column(name="attachment_name")),
+ @AttributeOverride(name="mimeType",column=@Column(name="attachment_mimeType")),
+ @AttributeOverride(name="bytes", column=@Column(name="attachment_bytes"))
+})
+@Embedded
+private BlobJpaEmbeddable attachment;
+@Property()
+@PropertyLayout()
+public Blob getPdf() {
+ return BlobJpaEmbeddable.toBlob(pdf);
+}
+public void setPdf(final Blob pdf) {
+ this.pdf = BlobJpaEmbeddable.fromBlob(pdf);
+}
+----
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc
index f79a2930be7..f74f612ac59 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc
@@ -2,21 +2,26 @@
: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 [...]
:page-partial:
-
== Usage Notes
-If using xref:pjdo:ROOT:about.adoc[JDO/DataNucleus], `Clob` properties can be mapped using:
+If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], `Blob` properties can be mapped using the xref:refguide:persistence:index/jpa/applib/types/ClobJpaEmbeddable.adoc[]:
[source,java]
----
-@javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
- @javax.jdo.annotations.Column(name = "doc_name"),
- @javax.jdo.annotations.Column(name = "doc_mimetype"),
- @javax.jdo.annotations.Column(name = "doc_chars", jdbcType = "CLOB", sqlType = "CLOB")
+@AttributeOverrides({
+ @AttributeOverride(name="name", column=@Column(name="doc_name")),
+ @AttributeOverride(name="mimeType",column=@Column(name="doc_mimeType")),
+ @AttributeOverride(name="bytes", column=@Column(name="doc_bytes"))
})
-@Property( optionality = Optionality.OPTIONAL )
@Getter @Setter
-private Clob doc;
-----
+private ClobJpaEmbeddable doc;
-If the property is mandatory, add `allowsNull = "false` for each of the ``@Column``s.
+@Property()
+@PropertyLayout()
+public Clob getDoc() {
+ return ClobJpaEmbeddable.toClob(doc);
+}
+public void setDoc(final Clob doc) {
+ this.doc = ClobJpaEmbeddable.fromClob(doc);
+}
+----
diff --git a/antora/components/refguide/modules/applib-ant/pages/Column.adoc b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
index 65602681f70..f04ab36ad42 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Column.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
@@ -1,27 +1,25 @@
-[#javax-jdo-annotation-Column]
-= @Column (jdo)
+[#jakarta-persistence-Column]
+= @Column (jpa)
: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 [...]
+// TODO: 3866 - to update, this mostly refers to JDO.
-The JDO `@javax.jdo.annotation.Column` provides metadata describing how JDO/DataNucleus should persist the property to a database RDBMS table column (or equivalent concept for other persistence stores).
+The JPA `@jakarta.persistence.Column` provides metadata describing how JPA should persist the property to a database RDBMS table column (or equivalent concept for other persistence stores).
Apache Causeway also parses and interprets this annotation in order to build up aspects of its metamodel.
[NOTE]
====
-Apache Causeway parses the `@Column` annotation from the Java source code; it does not query the JDO metamodel.
-This means that it the `@Column` annotation must be used rather than the equivalent `<column>` link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/orm/schema_mapping.html[XML metadata].
-
-Moreover, while JDO/DataNucleus will recognize annotations on either the field or the getter method, Apache Causeway (currently) only inspects the getter method.
-Therefore ensure that the annotation is placed there.
+Apache Causeway parses the `@Column` annotation from the Java source code; it does not query the JPA metamodel.
+This means that it the `@Column` annotation must be used rather than XML metadata..
====
This section identifies which attributes of `@Column` are recognized and used by Apache Causeway.
[#nullability]
== Nullability
-
+ñ
The `allowsNull` attribute is used to specify if a property is mandatory or is optional.
For example:
@@ -29,7 +27,7 @@ For example:
[source,java]
----
public class Customer {
- @javax.jdo.annotations.Column(allowsNull="true")
+ @jakarta.persistence.Column(nullable=true˜)
public String getMiddleInitial() { /* ... */ }
public void setMiddleInitial(String middleInitial) { /* ... */ }
----
@@ -37,12 +35,12 @@ public class Customer {
Causeway also provides xref:refguide:applib:index/annotation/Property.adoc#optionality[@Property#optionality] attribute.
If both are specified, Apache Causeway will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.
-You should also be aware that in the lack of either the `@Column#allowsNull` or the `@Property#optionality` attributes, that the JDO and Apache Causeway defaults differ.
+You should also be aware that in the lack of either the `@Column#nullable` or the `@Property#optionality` attributes, that the JDO and Apache Causeway defaults differ.
Apache Causeway rule is straight-forward: properties are assumed to be required.
JDO on the other hand specifies that only primitive types are mandatory; everything else is assumed to be optional.
Therefore a lack of either annotation can also trigger the fail-fast validation check.
-In the vast majority of cases you should be fine just to add the `@Column#allowsNull` attribute to the getter.
+In the vast majority of cases you should be fine just to add the `@Column#nullable` attribute to the getter.
But see the documentation for xref:refguide:applib:index/annotation/Property.adoc#optionality[@Property#optionality] attribute for discussion on one or two minor edge cases.
[#length-for-strings]
diff --git a/antora/components/refguide/modules/applib-ant/pages/Digits.adoc b/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
index 7f2bb50fe1f..cfa01d53e1e 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
@@ -4,6 +4,7 @@
: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 [...]
+// TODO: 3866 - remove
The `@javax.validation.constraints.Digits` annotation is recognized by Apache Causeway as a means to specify the precision for properties and action parameters of type `java.math.BigDecimal`.
@@ -27,7 +28,7 @@ public void setCost(final BigDecimal cost) {
:null;
}
----
-<.> the xref:refguide:applib-ant:Column.adoc[@Column#scale] attribute must be ...
+<.> the ˜xref:refguide:applib-ant:Column.adoc[@Column#scale] attribute must be ...
<.> ... consistent with `@Digits#fraction()`
<.> the correct idiom when setting a new value is to normalized to the correct scale
diff --git a/antora/components/refguide/modules/applib-ant/pages/Discriminator.adoc b/antora/components/refguide/modules/applib-ant/pages/Discriminator.adoc
deleted file mode 100644
index 4a0af0f4459..00000000000
--- a/antora/components/refguide/modules/applib-ant/pages/Discriminator.adoc
+++ /dev/null
@@ -1,68 +0,0 @@
-[#javax-jdo-annotation-Discrimnator]
-= @Discriminator (`jdo`)
-
-: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 `@javax.jdo.annotation.Discriminator` is used by JDO/DataNucleus to specify how to discriminate between subclasses of an inheritance hierarchy.
-
-It is valid to add a `@Discriminator` for any class, even those not part of an explicitly mapped inheritance hierarchy.
-Apache Causeway also checks for this annotation, and if present will use the `@Discriminator#value()` as the object type, a unique alias for the object's class name.
-
-[NOTE]
-====
-Causeway parses the `@Discriminator` annotation from the Java source code; it does not query the JDO metamodel.
-This means that it the `@Discriminator` annotation must be used rather than the equivalent `<discriminator>` link:https://www.datanucleus.org/products/accessplatform_6_0/jdo/metadata_xml.html[XML metadata].
-====
-
-This value is used internally to generate a string representation of an objects identity (the `Oid`).
-This can appear in several contexts, including:
-
-* as the value of `Bookmark#getObjectType()` and in the `toString()` value of `Bookmark`
-(see xref:refguide:applib:index/services/bookmark/BookmarkService.adoc[BookmarkService])
-* in the serialization of `OidDto` in the xref:refguide:schema:cmd.adoc[command] and xref:refguide:schema:ixn.adoc[interaction] schemas
-* in the URLs of the xref:vro:ROOT:about.adoc[RestfulObjects viewer]
-* in the URLs of the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)]
-* in XML snapshots generated by the xref:refguide:applib:index/services/xmlsnapshot/XmlSnapshotService.adoc[XmlSnapshotService]
-
-== Examples
-
-For example:
-
-[source,java]
-----
-@javax.jdo.annotations.Discriminator(value="custmgmt.Customer")
-public class Customer {
- ...
-}
-----
-
-has an object type of `custmgmt.Customer`.
-
-== Precedence
-
-The rules of precedence for determining a domain object's object type are:
-
-1. xref:refguide:applib-ant:Discriminator.adoc[@Discriminator]
-2. `@DomainObject#logicalTypeName`
-3. xref:refguide:applib-ant:PersistenceCapable.adoc[@PersistenceCapable], if at least the `schema` attribute is defined.
-+
-If both `schema` and `table` are defined, then the value is "`schema.table`".
-If only `schema` is defined, then the value is "`schema.className`".
-
-4. Fully qualified class name of the entity.
-
-[TIP]
-====
-This might be obvious, but to make explicit: we recommend that you always specify an object type for your domain objects.
-
-Otherwise, if you refactor your code (change class name or move package), then any externally held references to the OID of the object will break.
-At best this will require a data migration in the database; at worst it could cause external clients accessing data through the xref:vro:ROOT:about.adoc[Restful Objects] viewer to break.
-====
-
-[NOTE]
-====
-If the object type is not unique across all domain classes then the framework will fail-fast and fail to boot.
-An error message will be printed in the log to help you determine which classes have duplicate object tyoes.
-====
diff --git a/antora/components/refguide/modules/applib-ant/pages/Entity.adoc b/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
index 71c12350ade..b09b856f1e9 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
@@ -1,96 +1,18 @@
-[#javax-jdo-annotation-PersistenceCapable]
-= @PersistenceCapable (jdo)
+[#jakarta-persistence-Entity]
+= @Entity (jpa)
: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 [...]
+// TODO: 3866 - to update
+The `@jakarta.persistence.Entity` is used by JPA to indicate that a class is a domain entity to be persisted to the database.
-The `@javax.jdo.annotation.PersistenceCapable` is used by JDO/DataNucleus to indicate that a class is a domain entity to be persisted to the database.
-
-Apache Causeway also checks for this annotation, and if the `@PersistenceCapable#schema` attribute is present will use it to form the object type.
+Apache Causeway also checks for this annotation ...
[NOTE]
====
-Causeway parses the `@PersistenceCapable` annotation from the Java source code; it does not query the JDO metamodel.
-This means that it the `@PersistenceCapable` annotation must be used rather than the equivalent `<class>` link:https://www.datanucleus.org/products/accessplatform_6_0/jdo/metadata_xml.html[XML metadata].
-
-Moreover, while JDO/DataNucleus will recognize annotations on either the field or the getter method, Apache Causeway (currently) only inspects the getter method.
-Therefore ensure that the annotation is placed there.
-====
-
-This value is used internally to generate a string representation of an objects identity (the `Oid`).
-This can appear in several contexts, including:
-
-* as the value of `Bookmark#getObjectType()` and in the `toString()` value of `Bookmark`
-(see xref:refguide:applib:index/services/bookmark/BookmarkService.adoc[BookmarkService])
-* in the serialization of `OidDto` in the xref:refguide:schema:cmd.adoc[command] and xref:refguide:schema:ixn.adoc[interaction] schemas
-* in the URLs of the xref:vro:ROOT:about.adoc[RestfulObjects viewer]
-* in the URLs of the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)]
-* in XML snapshots generated by the xref:refguide:applib:index/services/xmlsnapshot/XmlSnapshotService.adoc[XmlSnapshotService]
-
-
-The actual format of the object type used by Apache Causeway for the concatenation of `schema()` and `@PersistenceCapable#table()`.
-If the `table()` is not present, then the class' simple name is used instead.
-
-== Examples
-
-For example:
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable(schema="custmgmt")
-public class Customer {
- ...
-}
-----
-
-has an object type of `custmgmt.Customer`, while:
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable(schema="custmgmt", table="Address")
-public class AddressImpl {
- ...
-}
-----
-
-has an object type of `custmgmt.Address`.
-
-On the other hand:
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable(table="Address")
-public class AddressImpl {
- ...
-}
-----
-
-does _not_ correspond to an object type, because the `schema` attribute is missing.
-
-== Precedence
-
-The rules of precedence for determining a domain object's object type are:
-
-1. xref:refguide:applib-ant:Discriminator.adoc[@Discriminator]
-2. `@DomainObject#logicalTypeName`
-3. xref:refguide:applib-ant:PersistenceCapable.adoc[@PersistenceCapable], if at least the `schema` attribute is defined.
-+
-If both `schema` and `table` are defined, then the value is "`schema.table`".
-If only `schema` is defined, then the value is "`schema.className`".
-
-4. Fully qualified class name of the entity.
-
-[TIP]
-====
-This might be obvious, but to make explicit: we recommend that you always specify an object type for your domain objects.
-
-Otherwise, if you refactor your code (change class name or move package), then any externally held references to the OID of the object will break.
-At best this will require a data migration in the database; at worst it could cause external clients accessing data through the xref:vro:ROOT:about.adoc[Restful Objects] viewer to break.
+Causeway parses the `@Entity` annotation from the Java source code; it does not query the JPA metamodel.
+This means that it the `@Entity` annotation must be used rather than the equivalent XML metadata.
====
-[NOTE]
-====
-If the object type is not unique across all domain classes then the framework will fail-fast and fail to boot.
-An error message will be printed in the log to help you determine which classes have duplicate object tyoes.
-====
+...
diff --git a/antora/components/refguide/modules/applib-ant/pages/NotPersistent.adoc b/antora/components/refguide/modules/applib-ant/pages/NotPersistent.adoc
deleted file mode 100644
index cea9e5d8e92..00000000000
--- a/antora/components/refguide/modules/applib-ant/pages/NotPersistent.adoc
+++ /dev/null
@@ -1,19 +0,0 @@
-[#javax-jdo-annotation-NotPersistent]
-= @NotPersistent (jdo)
-
-: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 `@javax.jdo.annotation.NotPersistent` annotation is used by JDO/DataNucleus to indicate that a property should not be persisted to the database.
-
-Apache Causeway also uses this annotation, though (currently) only in the very minimal way to suppress checking of inconsistent metadata between JDO and Causeway annotations (eg `@Column#allowsNull()` vs `@Property#optionality()`, or `@Column#length()` and `@Property#maxLength()`).
-
-[NOTE]
-====
-The framework parses the `@NotPersistent` annotation from the Java source code; it does not query the JDO metamodel.
-This means that it the `@NotPersistent` annotation must be used rather than the equivalent `<field>` link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/fields_properties.html[XML metadata].
-
-Moreover, while JDO/DataNucleus will recognize annotations on either the field or the getter method, Apache Causeway (currently) only inspects the getter method.
-Therefore ensure that the annotation is placed there.
-====
-
diff --git a/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc b/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
index 746a39b6493..e23ded529ff 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
@@ -3,6 +3,8 @@
: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 [...]
+// TODO: 3866 - remove
+
Apache Causeway' defaults for properties and parameters is that they are mandatory unless otherwise stated.
The `@javax.annotation.Nullable` annotation is recognized by Apache Causeway for both properties and parameters as means to indicate that the property/parameter is not mandatory.
@@ -33,13 +35,13 @@ public Customer updateName(@javax.annotation.Nullable final String name) {
Apache Causeway does provide several other ways to specify optionality: using the
xref:refguide:applib:index/annotation/Property.adoc#optionality[@Property#optionality()] /
xref:refguide:applib:index/annotation/Parameter.adoc#optionality[@Parameter#optionality()] annotation.
-For properties, the optionality can also be inferred from the xref:refguide:applib-ant:Column.adoc#nullability[@Column#allowsNull()] attribute.
+For properties, the optionality can also be inferred from the JPA xref:refguide:applib-ant:Column.adoc#nullability[@Column#nullable()] attribute.
[TIP]
====
See the
xref:refguide:applib:index/annotation/Property.adoc#optionality[@Property#optionality()] documentation for a much fuller discussion on the relationship between using the Apache Causeway annotations vs
-xref:refguide:applib-ant:Column.adoc#nullability[@Column#allowsNull()].
+xref:refguide:applib-ant:Column.adoc#nullability[@Column#nullable()].
====
If more than one method is specified then the framework will validate that there are no incompatibilities (and fail to boot otherwise).
diff --git a/antora/components/refguide/modules/applib-ant/pages/Pattern.adoc b/antora/components/refguide/modules/applib-ant/pages/Pattern.adoc
index 47d61e2b18b..de330fed4ea 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Pattern.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Pattern.adoc
@@ -3,6 +3,7 @@
: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 [...]
+// TODO: 3866 - remove
The `@javax.validation.constraints.Pattern` annotation is recognized by Apache Causeway as a means to specify a regular expression constraint for properties and action parameters of type `java.lang.String`.
diff --git a/antora/components/refguide/modules/applib-ant/pages/PersistenceCapable.adoc b/antora/components/refguide/modules/applib-ant/pages/PersistenceCapable.adoc
deleted file mode 100644
index ac815b39825..00000000000
--- a/antora/components/refguide/modules/applib-ant/pages/PersistenceCapable.adoc
+++ /dev/null
@@ -1,93 +0,0 @@
-[#javax-jdo-annotation-PersistenceCapable]
-= @PersistenceCapable (jdo)
-
-: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 `@javax.jdo.annotation.PersistenceCapable` is used by JDO/DataNucleus to indicate that a class is a domain entity to be persisted to the database.
-
-Apache Causeway also checks for this annotation, and if the `@PersistenceCapable#schema` attribute is present will use it to form the object type.
-
-[NOTE]
-====
-Causeway parses the `@PersistenceCapable` annotation from the Java source code; it does not query the JDO metamodel.
-This means that it the `@PersistenceCapable` annotation must be used rather than the equivalent `<class>` link:https://www.datanucleus.org/products/accessplatform_6_0/jdo/metadata_xml.html[XML metadata].
-====
-
-This value is used internally to generate a string representation of an objects identity (the `Oid`).
-This can appear in several contexts, including:
-
-* as the value of `Bookmark#getObjectType()` and in the `toString()` value of `Bookmark`
-(see xref:refguide:applib:index/services/bookmark/BookmarkService.adoc[BookmarkService])
-* in the serialization of `OidDto` in the xref:refguide:schema:cmd.adoc[command] and xref:refguide:schema:ixn.adoc[interaction] schemas
-* in the URLs of the xref:vro:ROOT:about.adoc[RestfulObjects viewer]
-* in the URLs of the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)]
-* in XML snapshots generated by the xref:refguide:applib:index/services/xmlsnapshot/XmlSnapshotService.adoc[XmlSnapshotService]
-
-
-The actual format of the object type used by Apache Causeway for the concatenation of `schema()` and `@PersistenceCapable#table()`.
-If the `table()` is not present, then the class' simple name is used instead.
-
-== Examples
-
-For example:
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable(schema="custmgmt")
-public class Customer {
- ...
-}
-----
-
-has an object type of `custmgmt.Customer`, while:
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable(schema="custmgmt", table="Address")
-public class AddressImpl {
- ...
-}
-----
-
-has an object type of `custmgmt.Address`.
-
-On the other hand:
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable(table="Address")
-public class AddressImpl {
- ...
-}
-----
-
-does _not_ correspond to an object type, because the `schema` attribute is missing.
-
-== Precedence
-
-The rules of precedence for determining a domain object's object type are:
-
-1. xref:refguide:applib-ant:Discriminator.adoc[@Discriminator]
-2. `@DomainObject#logicalTypeName`
-3. xref:refguide:applib-ant:PersistenceCapable.adoc[@PersistenceCapable], if at least the `schema` attribute is defined.
-+
-If both `schema` and `table` are defined, then the value is "`schema.table`".
-If only `schema` is defined, then the value is "`schema.className`".
-
-4. Fully qualified class name of the entity.
-
-[TIP]
-====
-This might be obvious, but to make explicit: we recommend that you always specify an object type for your domain objects.
-
-Otherwise, if you refactor your code (change class name or move package), then any externally held references to the OID of the object will break.
-At best this will require a data migration in the database; at worst it could cause external clients accessing data through the xref:vro:ROOT:about.adoc[Restful Objects] viewer to break.
-====
-
-[NOTE]
-====
-If the object type is not unique across all domain classes then the framework will fail-fast and fail to boot.
-An error message will be printed in the log to help you determine which classes have duplicate object tyoes.
-====
diff --git a/antora/components/refguide/modules/applib-ant/pages/PrimaryKey.adoc b/antora/components/refguide/modules/applib-ant/pages/PrimaryKey.adoc
deleted file mode 100644
index 5f0c991c69f..00000000000
--- a/antora/components/refguide/modules/applib-ant/pages/PrimaryKey.adoc
+++ /dev/null
@@ -1,20 +0,0 @@
-[#javax-jdo-annotation-PrimaryKey]
-= @PrimaryKey (jdo)
-
-: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 `@javax.jdo.annotation.PrimaryKey` annotation is used by JDO/DataNucleus to indicate that a property is used as the primary key for an entity with application-managed identity.
-
-Apache Causeway also uses this annotation in a very minimal way: to ensure that the framework's own logic to initialize newly instantiated objects (eg using xref:refguide:applib:index/services/factory/FactoryService.adoc[FactoryService#create(...)] does not touch the primary key, and also to ensure that the primary key property is always disabled (read-only).
-
-[NOTE]
-====
-Apache Causeway parses the `@NotPersistent` annotation from the Java source code; it does not query the JDO metamodel.
-This means that it the `@NotPersistent` annotation must be used rather than the equivalent `<field>` link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/application_identity.html[XML metadata].
-
-Moreover, while JDO/DataNucleus will recognize annotations on either the field or the getter method, Apache Causeway (currently) only inspects the getter method.
-Therefore ensure that the annotation is placed there.
-====
-
diff --git a/antora/components/userguide/modules/ROOT/partials/meta-annotations/_intro.adoc b/antora/components/refguide/modules/applib-ant/pages/Table.adoc
similarity index 59%
copy from antora/components/userguide/modules/ROOT/partials/meta-annotations/_intro.adoc
copy to antora/components/refguide/modules/applib-ant/pages/Table.adoc
index 08fffaf8346..d08b0c5ab99 100644
--- a/antora/components/userguide/modules/ROOT/partials/meta-annotations/_intro.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Table.adoc
@@ -1,12 +1,12 @@
-[[introduction]]
-= Introduction
+[#jakarta-persistence-Table]
+= @Table (jpa)
: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 [...]
-:page-partial:
+// TODO: 3866 - to complete
+The JPA `@jakarta.persistence.Table` provides metadata describing how JPA ...
+
+Apache Causeway also parses and interprets this annotation in order to ...
-Apache Causeway supports the use of meta-annotations, as does Spring Boot and the ORM (xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] from Eclipse 2.7 supporting JPA 2.2, xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] for DN 6.x).
-This allows you to define custom annotations that are more descriptive of your domain model, and meta-annotate your custom annotations with those of Apache Causeway, Spring or the ORM.
-In your domain model, you can just use the custom annotation.
diff --git a/antora/components/refguide/modules/applib-ant/partials/module-nav.adoc b/antora/components/refguide/modules/applib-ant/partials/module-nav.adoc
index 82033e893b9..fa00e8a2f53 100644
--- a/antora/components/refguide/modules/applib-ant/partials/module-nav.adoc
+++ b/antora/components/refguide/modules/applib-ant/partials/module-nav.adoc
@@ -50,11 +50,8 @@
** JPA
*** xref:refguide:applib-ant:Entity.adoc[@Entity]
-
-** JDO
+*** xref:refguide:applib-ant:Table.adoc[@Table]
+*** xref:refguide:applib-ant:Transient.adoc[@Transient]
*** xref:refguide:applib-ant:Column.adoc[@Column]
-*** xref:refguide:applib-ant:Discriminator.adoc[@Discriminator]
-*** xref:refguide:applib-ant:NotPersistent.adoc[@NotPersistent]
-*** xref:refguide:applib-ant:PersistenceCapable.adoc[@PersistenceCapable]
-*** xref:refguide:applib-ant:PrimaryKey.adoc[@PrimaryKey]
+
diff --git a/antora/components/refguide/modules/applib-svc/pages/about.adoc b/antora/components/refguide/modules/applib-svc/pages/about.adoc
index 3c562586649..2004d5e61b7 100644
--- a/antora/components/refguide/modules/applib-svc/pages/about.adoc
+++ b/antora/components/refguide/modules/applib-svc/pages/about.adoc
@@ -87,7 +87,7 @@ public class Customer {
You may also need to `@Import` the module that contains the service into your application's `AppManifest` (though all of the services in core will be available automatically).
-For objects that are already persisted, the service is automatically injected just after the object is rehydrated by JDO/DataNucleus.
+For objects that are already persisted, the service is automatically injected just after the object is rehydrated by JPA/EclipseLink.
For transient objects (instantiated programmatically), the xref:refguide:applib:index/services/factory/FactoryService.adoc[FactoryService#viewModel(...)] or the xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService#detachedEntity(...)]'s will automatically inject the services.
diff --git a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
index f7095d51b2d..10b95aeba54 100644
--- a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
+++ b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
@@ -139,7 +139,7 @@ Similarly, the `Bulk.InteractionContext` domain service is replaced with the lin
|
|Either link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Property_optionality[@Property#optionality()] or link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Parameter_optionality[@Parameter#optionality()].
-For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Column_allowsNull[@Column#allowsNull()]
+For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Column_allowsNull[@Column#nullable()]
Can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Nullable[@Nullable] for either properties or parameters.
|`@Mask`
@@ -172,7 +172,7 @@ For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guid
|
|Either link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Property_optionality[@Property#optionality()] or link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Parameter_optionality[@Parameter#optionality()].
-For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Column_allowsNull[@Column#allowsNull()]
+For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Column_allowsNull[@Column#nullable()]
Can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Nullable[@Nullable] for either properties or parameters.
|`@Named`
diff --git a/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc b/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
index 1fb9d1718d3..5f195b5a5ea 100644
--- a/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
@@ -50,7 +50,7 @@
| DataNucleus
| 6.0.7
| 6.0.7
-| xref:pjdo::about.adoc[]
+| JDO
|===
@@ -59,12 +59,11 @@ Other highlights
* xref:pjpa:ROOT:about.adoc[Persistence using JPA] has been added through an integration of EclipseLink.
+
-xref:pjdo::about.adoc[Persistence using JDO] continues to be supported through the integration with DataNucleus.
+Persistence using JDO continues to be supported through the integration with DataNucleus.
+
[NOTE]
====
-We use EclipseLink rather than Hibernate because the latter is licensed using LGPL, which is incompatible with ASF licensing.
-In addition, EclipseLink is the reference implementation for JPA.
+We use EclipseLink rather than Hibernate because historically the latter was licensed using LGPL, which is incompatible with ASF licensing.
====
+
diff --git a/antora/components/relnotes/modules/ROOT/partials/2024/2.1.0/_relnotes.adoc b/antora/components/relnotes/modules/ROOT/partials/2024/2.1.0/_relnotes.adoc
index 9a592e391b4..90d9133d54f 100644
--- a/antora/components/relnotes/modules/ROOT/partials/2024/2.1.0/_relnotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/partials/2024/2.1.0/_relnotes.adoc
@@ -51,7 +51,7 @@
| DataNucleus
| 6.0.7
| 6.0.7
-| xref:pjdo::about.adoc[]
+| JDO
| Shiro
| 1.13.0
diff --git a/antora/components/setupguide/modules/eclipse/pages/about.adoc b/antora/components/setupguide/modules/eclipse/pages/about.adoc
index 7e73ae7916f..1bda73a87e6 100644
--- a/antora/components/setupguide/modules/eclipse/pages/about.adoc
+++ b/antora/components/setupguide/modules/eclipse/pages/about.adoc
@@ -271,7 +271,7 @@ If you consistently hit problems, then the final recourse is to disable the auto
//
//In the context of Apache Causeway, this is very useful for contributed actions and mixins and also view models; you should then be able to write these actions and have them be picked up without restarting the application.
//
-//Changing persisting domain entities is more problematic, for two reasons: the JDO/DataNucleus enhancer needs to run on domain entities, and also at runtime JDO/DataNucleus would need to rebuild its own metamodel.
+//Changing persisting domain entities is more problematic becaue at runtime the JPA persistence mechanism would need to rebuild its own metamodel.
//You may find that adding actions will work, but adding new properties or collections is much less likely to.
//
//For details of setting up DCEVM, see the xref:setupguide:intellij:hints-and-tips.adoc#setting-up-dcevm[corresponding section] in the IntelliJ documentation.
diff --git a/antora/components/setupguide/modules/intellij/pages/about.adoc b/antora/components/setupguide/modules/intellij/pages/about.adoc
index 9a915df14ac..2beb8d211ec 100644
--- a/antora/components/setupguide/modules/intellij/pages/about.adoc
+++ b/antora/components/setupguide/modules/intellij/pages/about.adoc
@@ -69,7 +69,7 @@ image::040-other-settings-compiler/020-annotation-processor.png[width="1000px"]
[TIP]
====
-If using xref:pjdo:ROOT:about.adoc[JDO/DataNucleus], this setting enables the generation of the `Q*` classes for DataNucleus type-safe queries.
+If using QueryDSL, this setting enables the generation of the `Q*` classes for type-safe queries.
It is also required for frameworks such as link:https://projectlombok.org[Lombok].
====
@@ -115,9 +115,7 @@ Let's see how to run both the app and the tests.
We run the application by creating a Run configuration, using `Run > Edit Configurations`.
-There is one complication, which is the ORM.
-If the app uses xref:pjpa:ROOT:about.adoc[JPA], then dynamic class weaving should be configured.
-If the app uses xref:pjdo:ROOT:about.adoc[JDO], then Datanucleus enhancer should be configured.
+We also configure dynamic class weaving for the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] ORM.
=== Running the App (JPA)
diff --git a/antora/components/userguide/modules/ROOT/partials/_deployment-options.adoc b/antora/components/userguide/modules/ROOT/partials/_deployment-options.adoc
index 154109574a9..68353ec6c0e 100644
--- a/antora/components/userguide/modules/ROOT/partials/_deployment-options.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/_deployment-options.adoc
@@ -23,10 +23,7 @@ The principal implementation is the xref:vw:ROOT:about.adoc[Web UI (Wicket viewe
The framework provides a xref:extensions:ROOT:about.adoc[number of these].
Deploying on Apache Causeway means that the framework also manages object persistence.
-Again this is pluggable.
-There are two implementations, either xref:pjdo:ROOT:about.adoc[JDO (DataNucleus)] or xref:pjpa:ROOT:about.adoc[JPA (EclipseLink)].
-These are normally used with an RDBMS, though in principle could be used with NoSQL databases.
-JDO/DataNucleus historically has link:https://www.datanucleus.org/products/accessplatform/datastores/datastores.html[extensive support] for NoSQL, though JPA/EclipseLink also has link:https://wiki.eclipse.org/EclipseLink/FAQ/NoSQL[some support] also.
+Again this is pluggable, currently only the xref:pjpa:ROOT:about.adoc[JPA (EclipseLink)] implementation is supported.
[#deploy-with-custom-controllers]
@@ -67,7 +64,7 @@ At the time of writing there are a couple being developed, link:https://github.c
Another framework that implements the RO spec is the link:https://github.com/NakedObjectsGroup/NakedObjectsFramework[Naked Objects Framework] (on .NET).
It provides a complete generic UI tested against its own RO implementation.
-As for the human-usable generic UI discussed xref:#deploy-with-a-generic-ui[above], the framework manages object persistence, for example using the JDO/DataNucleus objectstore.
+As for the human-usable generic UI discussed xref:#deploy-with-a-generic-ui[above], the framework manages object persistence, for example using the JPA/EclipseLink objectstore.
It is perfectly possible to deploy the RESTful API alongside an auto-generated webapp; both work from the same domain object model.
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-entities/_intro.adoc b/antora/components/userguide/modules/ROOT/partials/domain-entities/_intro.adoc
index 908bd7f63b5..b6b0f0c3f0c 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-entities/_intro.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-entities/_intro.adoc
@@ -5,7 +5,7 @@
:page-partial:
Most domain objects that the end-user interacts with are likely to be _domain entities_, such as `Customer`, `Order`, `Product` and so on.
-These are persistent objects and which are mapped to a relational database using either xref:pjpa::about.adoc[JPA/EclipseLink] or xref:pjdo::about.adoc[JDO/DataNucleus] ORM.
+These are persistent objects and which are mapped to a relational database using xref:pjpa::about.adoc[JPA/EclipseLink] ORM.
Some domain entities are really aggregates, a combination of multiple objects.
A commonly cited example of this is an `Order`, which really consists of both a root `Order` entity and a collection of ``OrderItem``s.
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/crud.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/crud.adoc
index 3924877ea35..862077f3cf7 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/crud.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/crud.adoc
@@ -113,17 +113,32 @@ repositoryService.persistAndFlush(customer);
When an object is persisted the framework will emit `ObjectPersistingEvent` and `ObjectPersistedEvent` xref:userguide:ROOT:events.adoc#lifecycle-events[lifecycle events].
-=== Persistence by Reachability (JDO)
+=== Persistence by Reachability (JPA)
-If using xref:pjdo:ROOT:about.adoc[JDO/DataNucleus], it is possible to configure ORM to automatically persist domain entities if they are associated with other already-persistent entities.
-This avoid the need to explicitly call "persist".
+If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], it is possible to configure ORM to automatically persist domain entities if they are associated with other already-persistent entities.
+This avoids the need to explicitly call "persist".
-This is done using xref:refguide:config:sections/datanucleus.adoc#datanucleus.persistence-by-reachability-at-commit[persistence-by-reachability] configuration property:
+This is done by annotating the relationship with a `CascadeType` of `CascadeType.PERSIST` or `CascadeType.ALL`.
+For example:
-[source,ini]
-.application.properties
+[source,java]
----
-datanucleus.persistence-by-reachability-at-commit=true
+@Entity
+public class Parent {
+ @OneToMany(cascade = CascadeType.PERSIST)
+ private List<Child> children = new ArrayList<>();
+}
+
+@Entity
+public class Child {
+ @ManyToOne
+ private Parent parent;
+}
+
+// Usage:
+Parent p = new Parent();
+p.getChildren().add(new Child());
+em.persist(p);
----
One downside is that the code is arguably less easy to debug, and there may be performance implications.
@@ -205,73 +220,9 @@ public class CustomerRepository {
<.> The `:name` parameter in the query JPQL string, and its corresponding value
-[[finding-jdo]]
-=== Finding Objects (JDO)
-
-
-In the case of xref:pjdo:ROOT:about.adoc[JDO/DataNucleus], it typically requires a JDOQL query defined on the domain entity, and a corresponding repository service for that domain entity type.
-This repository calls the framework-provided xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService] to actually submit the query.
-
-For example:
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable
-@javax.jdo.annotations.Queries({
- @javax.jdo.annotations.Query( // <.>
- name = "findByName", // <.>
- value = "SELECT " // <.>
- + "FROM com.mydomain.myapp.Customer " // <.>
- + "WHERE name.indexOf(:name) >= 0 ") // <.>
-})
-...
-public class Customer {
- // ...
-}
-----
-<.> There may be several `@Query` annotations, nested within a `@Queries` annotation, defining queries using JDOQL.
-<.> Defines the name of the query.
-<.> The definition of the query, using JDOQL syntax.
-<.> The fully-qualified class name.
-Must correspond to the class on which the annotation is defined (the framework checks this automatically on bootstrapping).
-<.> The predicate, expressed using Java syntax.
-In this particular query, is an implementation of a LIKE "name%" query.
-
-and in the corresponding repository, use xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService]:
-
-[source,java]
-----
-import org.springframework.stereotype.Repository;
-import lombok.RequiredArgsConstructor;
-
-@Repository
-@RequiredArgsConstructor(onConstructor_ = {@Inject} )
-public class CustomerRepository {
-
- private final RepositoryService repositoryService;
-
- public List<Customer> findByName(String name) {
- return repositoryService.allMatches( // <.>
- Query.named(Customer.class, "findByName") // <.>
- .withParameter("name", name); // <.>
- }
-
-}
-----
-<.> The xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService] is a generic facade over the ORM API.
-<.> Specifies the class that is annotated with @Query, along with the `@Query#name` attribute
-<.> The `:name` parameter in the query JDOQL string, and its corresponding value
-
-Whenever a query is submitted, the framework will automatically "flush" any pending changes.
-This ensures that the database query runs against an up-to-date table so that all matching instances (with respect to the current transaction) are correctly retrieved.
-
-When an object is loaded from the database the framework will emit `ObjectLoadedEvent` xref:userguide:ROOT:events.adoc#lifecycle-events[lifecycle event].
-
-=== Type-safe queries
+// TODO: QueryDSL usage.
-DataNucleus also supports type-safe queries; these can be executed using the xref:refguide:persistence:index/jdo/applib/services/JdoSupportService.adoc[JdoSupportService] (JDO-specific) domain service.
-See xref:refguide:persistence:index/jdo/applib/services/JdoSupportService.adoc#type-safe-jdoql-queries[JdoSupportService] for further details.
[[updating]]
== Updating Objects
@@ -283,7 +234,7 @@ That said, it is possible to "flush" pending changes:
* xref:refguide:applib:index/services/xactn/TransactionService.adoc[TransactionService] acts at the Apache Causeway layer, and flushes any pending object persistence or object deletions
-* (if using xref:pjdo:ROOT:about.adoc[JDO/DataNucleus]), the xref:refguide:persistence:index/jdo/applib/services/JdoSupportService.adoc[JdoSupportService] domain service can be used reach down to the underlying JDO API, and perform a flush of pending object updates also.
+* (if using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink]), the xref:refguide:persistence:index/jpa/applib/services/JpaSupportService.adoc[JpaSupportService] domain service can be used reach down to the underlying JPA API (`EntityManager`), and perform a flush of pending object updates also.
When an object is updated the framework will emit `ObjectUpdatingEvent` and `ObjectUpdatedEvent` xref:userguide:ROOT:events.adoc#lifecycle-events[lifecycle events].
diff --git a/antora/components/userguide/modules/ROOT/partials/meta-annotations/_intro.adoc b/antora/components/userguide/modules/ROOT/partials/meta-annotations/_intro.adoc
index 08fffaf8346..a3a724efa60 100644
--- a/antora/components/userguide/modules/ROOT/partials/meta-annotations/_intro.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/meta-annotations/_intro.adoc
@@ -6,7 +6,7 @@
-Apache Causeway supports the use of meta-annotations, as does Spring Boot and the ORM (xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] from Eclipse 2.7 supporting JPA 2.2, xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] for DN 6.x).
+Apache Causeway supports the use of meta-annotations, as does Spring Boot and the ORM (xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] from Eclipse 2.7 supporting JPA 2.2.
This allows you to define custom annotations that are more descriptive of your domain model, and meta-annotate your custom annotations with those of Apache Causeway, Spring or the ORM.
In your domain model, you can just use the custom annotation.
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
index 19f672bfae6..b7f00dc298a 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
@@ -194,7 +194,7 @@ public Order invoice(
return this;
}
-@Column(allowsNull="true") // <.>
+@Column(nullable=true) // <.>
@Property
@Getter @Setter
private LocalDate shipBy;
@@ -202,7 +202,7 @@ private LocalDate shipBy;
<.> Specifies the parameter is optional.
<.> Specifies the corresponding property is optional.
+
-Note that this uses an ORM-specific mechanism to specify the same semantics (in this case, using JDO/DataNucleus' `@Column#allowsNull()`.)
+Note that this uses an ORM-specific mechanism to specify the same semantics (in this case, using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink]' `@Column#nullable()`.)
See also xref:userguide:ROOT:meta-annotations.adoc#properties-vs-parameters[properties vs parameters].
@@ -214,7 +214,7 @@ For example:
[source,java]
----
-import javax.jdo.annotations.Column;
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
index dcc15353011..d4eeb2e1a64 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
@@ -18,9 +18,9 @@ And collections properties will also have a number of annotations:
* Apache Causeway defines its own xref xref:refguide:applib:index/annotation/Collection.adoc[@Collection] annotation for capturing domain semantics.
It also provides a xref:refguide:applib:index/annotation/CollectionLayout.adoc[@CollectionLayout] for UI hints (though the information in this annotation may instead be provided by a supplementary xref:userguide:ROOT:ui-layout-and-hints.adoc#object-layout[.layout.xml] file)
-* the collections of domain entities are often annotated with ORM annotation(s).
-In the case of JDO/DataNucleus annotations this is most notably `javax.jdo.annotations.Persistent`.
-Other annotations can be used to specify if the association is bidirectional, and whether to define a link table or not to hold foreign key columns.
+* the collections of domain entities will typically be annotated with ORM annotation(s).
+In the case of xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], this is most notably `jakarta.persistence.Entity`.
+The collection itself will likely have its own ORM-specific annotations, to specify for example if the association is bidirectional, supports cascading deletes, or whether to define a link table or not to hold foreign key columns.
* for the collections of view models, then JAXB annotations such as link:https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementWrapper.html[@javax.xml.bind.annotation.XmlElementWrapper] and link:https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElement.html[@javax.xml.bind.annotation.XmlElement] will be present
@@ -96,8 +96,8 @@ public class ChildObject
<.> mandatory; every child must reference its parent
<.> cannot be edited directly
-Generally speaking you should use `SortedSet` for collection types (as opposed to `Set`, `List` or `Collection`).
-JDO/Datanucleus does support the mapping of these other types, but RDBMS are set-oriented, so using this type introduces the least friction.
+Generally speaking you should use `Set` for collection types (as opposed to `List` or `Collection`).
+
== Maps
diff --git a/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc b/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
index aca24de714f..d5569f88778 100644
--- a/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
@@ -75,7 +75,7 @@ Because such entities are responsible for their own state management, they can b
=== Externally-managed entities
Sometimes the entities that make up your application are persisted not in the local database but reside in some other system, for example accessible only through a SOAP web service.
-Logically that data might still be considered a domain entity and we might want to associate behaviour with it, however it cannot be modelled as a domain entity if only because JDO/DataNucleus doesn't know about the entity nor how to retrieve or update it.
+Logically that data might still be considered a domain entity and we might want to associate behaviour with it, however it cannot be modelled as a domain entity since JPA/EclipseLink doesn't know about the entity nor how to retrieve or update it.
There are a couple of ways around this: we could either replicate the data somehow from the external system into the Causeway-managed database (in which case it is once again just another domain entity), or we could set up a stub/proxy for the externally managed entity.
This proxy would hold the reference to the externally-managed domain entity (eg an external id), as well as the "smarts" to know how to interact with that entity (by making SOAP web service calls etc).
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Optionality.java b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Optionality.java
index d5e37b0886d..4841a5732d8 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Optionality.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Optionality.java
@@ -18,6 +18,8 @@
*/
package org.apache.causeway.applib.annotation;
+import jakarta.persistence.Column;
+
/**
* Whether the property or parameter is optional or is required (aka mandatory).
* @since 1.x {@index}
@@ -40,15 +42,14 @@ public enum Optionality {
OPTIONAL,
/**
- * Indicates that the property is required (even if the JDO <code>javax.jdo.annotations.Column</code> annotation
+ * Indicates that the property is required (even if the JPA {@link jakarta.persistence.Column} annotation
* says otherwise).
*
* <p>
- * When using the JDO/DataNucleus objectstore, it is sometimes necessary to annotate a property as optional
- * (using <code>javax.jdo.annotations.Column#allowsNull()</code> set to <code>true</code>), even if the property is
+ * When using the JPA/EclipseLink objectstore, it is sometimes necessary to annotate a property as optional
+ * (using {@link Column#nullable()} set to <code>true</code>), even if the property is
* logically mandatory. For example, this can occur when the property is in a subtype class that has been
- * "rolled up" to the superclass table using <code>javax.jdo.annotations.Inheritance</code>> with the
- * <code>javax.jdo.annotations.InheritanceStrategy#SUPERCLASS_TABLE</code> superclass strategy.
+ * "rolled up" to the superclass table using {@link jakarta.persistence.Inheritance} strategy of {@link jakarta.persistence.InheritanceType#SINGLE_TABLE}
* </p>
*
* <p>
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/metrics/package-info.java b/api/applib/src/main/java/org/apache/causeway/applib/services/metrics/package-info.java
index 35be9587635..5d8a39daab7 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/metrics/package-info.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/metrics/package-info.java
@@ -19,7 +19,7 @@
/**
* The {@link org.apache.causeway.applib.services.metrics.MetricsService} is a request-scoped domain service that hooks
- * into the JDO/DataNucleus ObjectStore to provide a number of counters relating to numbers of object loaded,
+ * into the underlying objectStore to provide a number of counters relating to numbers of object loaded,
* dirtied etc.
*
*
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/package-info.java b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/package-info.java
index 409054541a0..0ee1db7e537 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/package-info.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/package-info.java
@@ -20,7 +20,7 @@
/**
* The {@link org.apache.causeway.applib.services.repository.RepositoryService} collects together methods for creating,
* persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the
- * JDO/DataNucleus objectstore.
+ * underlying objectstore.
*
*
*/
diff --git a/core/adoc/modules/ROOT/pages/about.adoc b/core/adoc/modules/ROOT/pages/about.adoc
index 60264bf643d..28c75694184 100644
--- a/core/adoc/modules/ROOT/pages/about.adoc
+++ b/core/adoc/modules/ROOT/pages/about.adoc
@@ -48,7 +48,7 @@ filters and servlets into the web request pipeline.
As a simplification, the xref:core:metamodel:about.adoc[] module handles domain types (cf `java.lang.Class`) while the xref:core:runtime:about.adoc[] and xref:core:runtimeservices:about.adoc[] modules handle domain object instances (cf `java.lang.Object`).
-That said, Spring Boot is responsible for instantiating domain service instances, while the persistence mechanisms (xref:pjpa:ROOT:about.adoc[JPA] and xref:pjdo:ROOT:about.adoc[JDO]) -- which are not part of the `core` modules -- handle the lifecycle of entity instances.
+That said, Spring Boot is responsible for instantiating domain service instances, while the persistence mechanism (xref:pjpa:ROOT:about.adoc[JPA/EclipseLink]) -- not part of the `core` modules -- handle the lifecycle of entity instances.
There are also two `core` modules not listed above, because their documentation are both part of the end-user docs:
diff --git a/core/config/src/main/adoc/modules/config/pages/about.adoc b/core/config/src/main/adoc/modules/config/pages/about.adoc
index f8d330ee18a..53ac05af0f8 100644
--- a/core/config/src/main/adoc/modules/config/pages/about.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/about.adoc
@@ -148,8 +148,6 @@ public class AppManifest {
There are several security implementations, precisely one must be selected
<.> Enables xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] for persistence.
+
-Alternatively, `CausewayModuleJdoDataNucleus5.class` would be specified in order to use xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] instead.
-+
Optional (though if omitted then only xref:userguide:ROOT:view-models.adoc[view models] may be used, with hand-rolled persistence).
<.> Enables the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)].
@@ -173,7 +171,7 @@ The remainder of this guide lists the various configuration properties available
=== CausewayConfiguration domain service
Applications can discover the current configuration properties for the framework (under the `causeway` top-level key) by injecting the `CausewayConfiguration` domain service.
-There are similar domain services for xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] (`EclipselinkConfiguration`), xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] (`DatanucleusConfiguration`) and RestEasy (`RestEasyConfiguration`), as used by xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)].
+There are similar domain services for xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] (`EclipselinkConfiguration`) and RestEasy (`RestEasyConfiguration`), as used by xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)].
Applications can also create their own configuration properties file; the xref:docs:starters:simpleapp.adoc[simpleapp] starter app provides an example.
diff --git a/core/metamodel/src/main/adoc/modules/metamodel/pages/events.adoc b/core/metamodel/src/main/adoc/modules/metamodel/pages/events.adoc
index 141fcd58c00..86c5e021f57 100644
--- a/core/metamodel/src/main/adoc/modules/metamodel/pages/events.adoc
+++ b/core/metamodel/src/main/adoc/modules/metamodel/pages/events.adoc
@@ -186,7 +186,7 @@ RS -u-> UED :emits
RS -u-> RNG :emits
note top of RNG
-JDO/Datanucleus
+JPA/Eclipselink
does not support
something like a
"Removed Event".
diff --git a/extensions/core/commandlog/adoc/modules/commandlog/pages/about.adoc b/extensions/core/commandlog/adoc/modules/commandlog/pages/about.adoc
index f78a075e0be..3e49f2b538b 100644
--- a/extensions/core/commandlog/adoc/modules/commandlog/pages/about.adoc
+++ b/extensions/core/commandlog/adoc/modules/commandlog/pages/about.adoc
@@ -4,7 +4,7 @@
: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 _Command Log_ module provides an implementation of xref:refguide:applib:index/services/publishing/spi/CommandSubscriber.adoc[] SPI that persists xref:refguide:applib:index/services/command/Command.adoc[Command]s using either the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] or xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] object store.
+The _Command Log_ module provides an implementation of xref:refguide:applib:index/services/publishing/spi/CommandSubscriber.adoc[] SPI that persists xref:refguide:applib:index/services/command/Command.adoc[Command]s using the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] object store.
One use case is to combine with the xref:security:audittrail:about.adoc[] extension.
The _Command Log_ module logs the action invocations or property edits that the end-user makes, while the _audit trail_ logs the resultant changes in state to domain objects.
diff --git a/extensions/core/executionlog/adoc/modules/executionlog/pages/about.adoc b/extensions/core/executionlog/adoc/modules/executionlog/pages/about.adoc
index f21ab456d7b..f1ca9c504a5 100644
--- a/extensions/core/executionlog/adoc/modules/executionlog/pages/about.adoc
+++ b/extensions/core/executionlog/adoc/modules/executionlog/pages/about.adoc
@@ -4,7 +4,7 @@
: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 _Execution Log_ extension provides an implementation of xref:refguide:applib:index/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] that persists xref:refguide:applib:index/services/iactn/Execution.adoc[Execution]s using either the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] or xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] object store.
+The _Execution Log_ extension provides an implementation of xref:refguide:applib:index/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] that persists xref:refguide:applib:index/services/iactn/Execution.adoc[Execution]s using either the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] object store.
One use case is to combine with the xref:security:audittrail:about.adoc[] extension.
diff --git a/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc b/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
index 30b5d79acc3..fb23c8b28a9 100644
--- a/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
+++ b/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
@@ -4,7 +4,7 @@
: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 _Execution Outbox_ module provides an implementation of xref:refguide:applib:index/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] that persists xref:refguide:applib:index/services/iactn/Execution.adoc[Execution]s into an "outbox" (using either the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] or xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] object store).
+The _Execution Outbox_ module provides an implementation of xref:refguide:applib:index/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] that persists xref:refguide:applib:index/services/iactn/Execution.adoc[Execution]s into an "outbox" (using the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] object store).
The purpose of the "outbox" is to act as a temporary store of executions to be propogated to other "downstream" systems.
The module also provides a REST API, a rest client and DTOs to represent the payloads between these two services.
diff --git a/extensions/core/flyway/adoc/modules/flyway/pages/about.adoc b/extensions/core/flyway/adoc/modules/flyway/pages/about.adoc
index 8c3d5981796..988dd780719 100644
--- a/extensions/core/flyway/adoc/modules/flyway/pages/about.adoc
+++ b/extensions/core/flyway/adoc/modules/flyway/pages/about.adoc
@@ -76,23 +76,15 @@ causeway.persistence.schema.auto-create-schemas= // <.>
<.> whether Flyway should automatically create schemas ; see link:https://flywaydb.org/documentation/configuration/parameters/createSchemas[flyway.createSchemas] for more info
<.> instruct Apache Causeway to _not_ attempt to create schemas
-The ORM should also be configured to _not_ automatically create tables:
+The ORM should also be configured to _not_ automatically create tables.
+If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], then:
-* if using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], then:
-+
[source,properties]
.application.properties
----
eclipselink.ddl-generation=none
----
-* if using xref:pjdo:ROOT:about.adoc[JDO/DataNucleus], then:
-+
-[source,properties]
-.application.properties
-----
-datanucleus.schema.autoCreateAll=false
-----
== Managing different variants
diff --git a/extensions/security/secman/adoc/modules/secman/pages/about.adoc b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
index 0860a846ab6..b62210e20fe 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/about.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
@@ -199,10 +199,9 @@ If a user is not permitted to view/edit an object, then it is only the viewer co
You may therefore wish to implement multi-tenancy at a "deeper" level, at the persistence layer).
This would prevent the object from being retrieved into memory in the first place, almost certainly more performant and obviously also secure because the viewer cannot render an object that hasn't been retrieved.
-One implementation (for multi-tenancy at the persistence layer) is to use capabilities of the ORM.
-* xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] supports link:link:https://www.datanucleus.org/products/accessplatform/jdo/persistence.html#multitenancy[multi-tenancy] through the link:https://www.datanucleus.org/products/accessplatform_5_1/jdo/annotations.html#MultiTenant_Class[@MultiTenant] annotation and `datanucleus.tenantId` or `datanucleus.tenantProvider` configuration properties.
-* xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] supports 3 different types of multi-tenancy, described in the documentation for the link https://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_multitenant.htm[@Multitenant] annotation.
+One implementation (for multi-tenancy at the persistence layer) is to use capabilities of the ORM.
+xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] supports 3 different types of multi-tenancy, described in the documentation for the link https://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_multitenant.htm[@Multitenant] annotation.
Another alternative is to move the responsibility for managing tenancy into the relational database itself.
This will obviously vary by vendor.
@@ -234,8 +233,8 @@ SecMan consists of a number of Maven submodules:
* the API module (`causeway-extensions-secman-api`) defines a set of interfaces for the xref:refguide:extensions:index/secman/applib/user/dom/ApplicationUser.adoc[ApplicationUser], xref:refguide:extensions:index/secman/applib/role/dom/ApplicationRole.adoc[ApplicationRole],
xref:refguide:extensions:index/secman/applib/permission/dom/ApplicationPermission.adoc[ApplicationPermission] and xref:refguide:extensions:index/secman/applib/tenancy/dom/ApplicationTenancy.adoc[ApplicationTenancy] entities.
-* the two persistence modules (`causeway-extensions-secman-persistence-jpa` and `causeway-extensions-secman-persistence-jdo`) provide concrete implementations of the APIs for JPA and JDO respectively.
-As you might expect, they are intended for use with xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] and xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] persistence mechanisms respectively; use one or the other.
+* the persistence module `causeway-extensions-secman-persistence-jpa` provides a concrete implementations of the APIs for JPA.
+As you might expect, they are intended for use with xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism.
* the Model module (`causeway-extensions-secman-model`) defines view models to represent the feature application features, and also contains business logic as mixins to the API (and therefore contributed to the appropriate concrete entity).
diff --git a/mavendeps/adoc/modules/mavendeps/pages/about.adoc b/mavendeps/adoc/modules/mavendeps/pages/about.adoc
index 57fe7fd09df..0327b0489f3 100644
--- a/mavendeps/adoc/modules/mavendeps/pages/about.adoc
+++ b/mavendeps/adoc/modules/mavendeps/pages/about.adoc
@@ -27,9 +27,9 @@ For convenience, it includes:
However, it does _not_ include a security implementation, a viewer implementation or a persistence implementation, which you should add as required:
-* security, add _one_ of xref:security:spring:about.adoc[Spring], xref:security:keycloak:about.adoc[Keycloak], xref:security:shiro:about.adoc[Shiro] or xref:security:simple:about.adoc[Simple], xref:security:bypass:about.adoc[Bypass] if prototyping
+* security, add _one_ of xref:security:spring:about.adoc[Spring], xref:security:keycloak:about.adoc[Keycloak] or xref:security:simple:about.adoc[Simple]; or xref:security:bypass:about.adoc[Bypass] if prototyping
-* for persistence, add _one_ of xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] or xref:pjdo:ROOT:about.adoc[JDO/DataNucleus].
+* for persistence, add xref:pjpa:ROOT:about.adoc[JPA/Eclipselink].
* viewer, you will almost certainly want to add xref:vw:ROOT:about.adoc[Wicket] and you might also add xref:vro:ROOT:about.adoc[Restful Objects].
diff --git a/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/types/BlobJpaEmbeddable.java b/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/types/BlobJpaEmbeddable.java
index be4b335e9a3..7a134fcda23 100644
--- a/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/types/BlobJpaEmbeddable.java
+++ b/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/types/BlobJpaEmbeddable.java
@@ -54,6 +54,11 @@
* Example usage:
*
* <pre>
+ * @AttributeOverrides({
+ * @AttributeOverride(name="name", column=@Column(name="attachment_name")),
+ * @AttributeOverride(name="mimeType",column=@Column(name="attachment_mimeType")),
+ * @AttributeOverride(name="bytes", column=@Column(name="attachment_bytes"))
+ * })
* @Embedded
* private BlobJpaEmbeddable pdf;
*
@@ -69,8 +74,8 @@
* </p>
*
* <p>
- * Lastly; note that {@link jakarta.persistence.AttributeOverrides} and {@link jakarta.persistence.AttributeOverride}
- * provide a standardised way of fine-tuning the column definitions.
+ * The {@link jakarta.persistence.AttributeOverrides} and {@link jakarta.persistence.AttributeOverride} attributes
+ * allow the column definitions to be fine-tuned.
* </p>
* @since 2.x {@index}
*/
diff --git a/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/types/ClobJpaEmbeddable.java b/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/types/ClobJpaEmbeddable.java
index cc45cccebac..0a813e0afa0 100644
--- a/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/types/ClobJpaEmbeddable.java
+++ b/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/types/ClobJpaEmbeddable.java
@@ -53,6 +53,11 @@
* <p>
* Example usage:
* <pre>
+ * @AttributeOverrides({
+ * @AttributeOverride(name="name", column=@Column(name="doc_name")),
+ * @AttributeOverride(name="mimeType",column=@Column(name="doc_mimeType")),
+ * @AttributeOverride(name="bytes", column=@Column(name="doc_bytes"))
+ * })
* @Embedded
* private ClobJpaEmbeddable xml;
*
@@ -68,8 +73,8 @@
* </p>
*
* <p>
- * Lastly; note that {@link jakarta.persistence.AttributeOverrides} and {@link jakarta.persistence.AttributeOverride}
- * provide a standardised way of fine-tuning the column definitions.
+ * The {@link jakarta.persistence.AttributeOverrides} and {@link jakarta.persistence.AttributeOverride} annotations
+ * allow the column definitions to be fine-tuned..
* </p>
*
* @since 2.x {@index}
diff --git a/starters/adoc/modules/starters/pages/helloworld.adoc b/starters/adoc/modules/starters/pages/helloworld.adoc
index aa5d5c02c9d..458213ca3e2 100644
--- a/starters/adoc/modules/starters/pages/helloworld.adoc
+++ b/starters/adoc/modules/starters/pages/helloworld.adoc
@@ -334,38 +334,45 @@ The helloworld starter app doesn't provide any examples of these.
==== AppManifest
The "app manifest" is the top-level Spring `@Configuration`.
-In the case of the helloworld starter app *for the `jdo` branch* the `AppManifest` looks like this:
+In the case of the helloworld starter app the `AppManifest` looks like this:
[source,java]
.AppManifest.java
----
@Configuration
@Import({
+ CausewayModuleApplibMixins.class, // <.>
+ CausewayModuleApplibChangeAndExecutionLoggers.class, // <1>
+
CausewayModuleCoreRuntimeServices.class, // <.>
- CausewayModuleSecurityShiro.class, // <.>
- CausewayModuleJdoDataNucleus5.class, // <.>
- CausewayModuleViewerRestfulObjectsJaxrsResteasy4.class, // <.>
+ CausewayModuleSecuritySimple.class, // <.>
+ CausewayModulePersistenceJpaEclipselink.class, // <.>
+ CausewayModuleViewerRestfulObjectsViewer.class, // <.>
+ CausewayModuleViewerGraphqlViewer.class, // <.>
+ CausewayModuleViewerWicketApplibMixins.class, // <.>
CausewayModuleViewerWicketViewer.class, // <.>
CausewayModuleTestingH2ConsoleUi.class, // <.>
-
- HelloWorldModule.class // <.>
+ HelloWorldModule.class // <.>
})
@PropertySource(CausewayPresets.NoTranslations) // <.>
public class AppManifest {
}
----
-
+<.> Provides various optional framework-provided mixins in the UI, such as the `objectIdentifier` and `logicalTypeName` properties
<.> Mandatory - specifies the core of the Apache Causeway framework
-<.> Enables the Shiro security mechanism.
+<.> Enables the Simple security mechanism.
There are several security implementations, precisely one must be selected
-<.> Enables JDO/DataNucleus for persistence.
+<.> Enables xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] for persistence.
Optional (though if omitted then only xref:userguide:ROOT:view-models.adoc[view models] may be used, with hand-rolled persistence).
-<.> Enables the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)] (ie REST API).
+<.> Enables the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)]
+
+<.> Enables the xref:gqlv:ROOT:about.adoc[GraphQL API (GraphQL viewer])
+<.> Enables various optional mixins provided by the xref:vw:ROOT:about.adoc[Wicket viewer], for example the `clearHints()` action.
<.> Enables the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)]
<.> Enables the H2 Console (menu from the "Prototyping" menu), applicable only if running against h2 in-memory database.
@@ -375,15 +382,6 @@ Optional (though if omitted then only xref:userguide:ROOT:view-models.adoc[view
<.> Normally configuration properties are picked up from Spring Boot's `application.properties` or `application.yml` files, but additional properties can be overridden directly.
This particular one disables the framework's i18n support using the `CausewayPresets` convenience class.
-For the `jpa` branch the `AppManifest` is almost identical, just replacing:
-
-* `CausewayModuleJdoDataNucleus5.class,`
-
-with:
-
-* `CausewayModuleJpaEclipseLink.class,`
-
-This bootstraps the JPA as the ORM instead of JDO.
[#helloworldapp]
==== HelloWorldApp
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
index 4199e66b3de..9583e25310c 100644
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
+++ b/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
@@ -145,7 +145,7 @@ public abstract class ApplicationIntegTestAbstract extends CausewayIntegrationTe
@Configuration
@Import({
CausewayModuleCoreRuntimeServices.class,
- CausewayModuleJdoDataNucleus5.class,
+ CausewayModuleJpaEclipseLink.class,
CausewayModuleSecurityBypass.class,
CausewayModuleTestingFixturesApplib.class,
ApplicationModule.class //<1>
@@ -158,7 +158,7 @@ public abstract class ApplicationIntegTestAbstract extends CausewayIntegrationTe
You can see that these are very similar, what's different is the module referenced.
-They both also force an in-memory database, with JDO/DataNucleus ORM configured to autocreate the database schema.
+They both also force an in-memory database, with the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] ORM configured to autocreate the database schema.
=== Faster bootstrapping
@@ -629,14 +629,3 @@ Thus, the setup fixture runs the setup for the "inner-most" "leaf-level" modules
-== Hints-n-Tips
-
-[TIP]
-.Using JDO/DataNucleus
-====
-When running integration tests through the IDE, and if using the JDO/DataNucleus ORM, then make sure the module(s) with entities have been enhanced first.
-
-If using IntelliJ, we recommend creating a run Maven configuration that runs `datanucleus:enhance`, and then pinning the configuration once run as a tab in the "Debug" window for easy access.
-
-image::pin-enhance-run-configuration.png[width="400px"]
-====
diff --git a/testing/unittestsupport/adoc/modules/unittestsupport/pages/about.adoc b/testing/unittestsupport/adoc/modules/unittestsupport/pages/about.adoc
index 72e41533163..d30cf578a1d 100644
--- a/testing/unittestsupport/adoc/modules/unittestsupport/pages/about.adoc
+++ b/testing/unittestsupport/adoc/modules/unittestsupport/pages/about.adoc
@@ -180,16 +180,10 @@ public class SortedSetsContractTestAll extends SortedSetsContractTestAbstract {
----
-If using an RDBMS for persistence then we strongly recommend that you implement this test, for several reasons:
+If using an RDBMS for persistence that supports `SortedSet` then we strongly recommend that you implement this test.
-* first, ``Set``s align more closely to the relational model than do ``List``s.
-A ``List`` must have an additional index to specify order.
+TIP: The xref:refguide:applib:index/util/ObjectContracts.adoc[ObjectContracts] utility class substantially simplifies the task of implementing `Comparable` in your domain classes.
-* second, `SortedSet` is preferable to `Set` because then the order is well-defined and predictable (to an end user, to the programmer).
-+
-The xref:refguide:applib:index/util/ObjectContracts.adoc[ObjectContracts] utility class substantially simplifies the task of implementing `Comparable` in your domain classes.
-
-* third, if the relationship is bidirectional then the ORM (JDO/DataNucleus) will automatically maintain the relationship.
(causeway) 18/36: CAUSEWAY-3866: updates references to javax.inject.Provider
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit f0e3b384b8be1bdb5de95cff4e40fcd614bfb932
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 09:16:48 2025 +0100
CAUSEWAY-3866: updates references to javax.inject.Provider
---
.../tutorials/modules/petclinic/pages/010-getting-started.adoc | 2 +-
.../modules/ROOT/partials/domain-services/inject-services.adoc | 10 +++++-----
.../modules/ROOT/partials/domain-services/overriding.adoc | 2 +-
.../modules/ROOT/partials/domain-services/progmodel.adoc | 2 +-
.../modules/ROOT/partials/domain-services/scoped-services.adoc | 8 ++++----
.../userguide/modules/ROOT/partials/modules/decoupling.adoc | 2 +-
.../ROOT/partials/properties-collections-actions/actions.adoc | 2 +-
.../partials/properties-collections-actions/properties.adoc | 2 +-
.../userguide/modules/ROOT/partials/the-theory/metamodel.adoc | 2 +-
testing/adoc/modules/ROOT/pages/about.adoc | 4 ++--
10 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc b/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
index c9fb644b91c..88a9dffa9bf 100644
--- a/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
@@ -131,7 +131,7 @@ Map these onto the fields of the "simple object" entity, and the action buttons
It's common for each entity (or more precisely, aggregate root) to have a corresponding domain service, acting as its repository.
This abstraction hides the details of interacting with the persistence data store.
-Domain services are automatically injected wherever they are required, using `@javax.inject.Inject`.
+Domain services are automatically injected wherever they are required, using `@jakarta.inject.Inject`.
Apache Causeway applications therefore generally follow the _hexagonal architecture_ (aka the _ports and adapters_ architecture).
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/inject-services.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/inject-services.adoc
index a3147c8f2a1..e0bc5ba3350 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/inject-services.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/inject-services.adoc
@@ -11,7 +11,7 @@ Since this is a core capability of Spring, it's worth checking out Spring's link
[TIP]
====
-Injection is requested using the JEE link:https://docs.oracle.com/javaee/7/api/javax/inject/Inject.html[@javax.inject.Inject] annotation.
+Injection is requested using the JEE `@jakarta.inject.Inject` annotation.
This is described in Spring's documentation, link:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-standard-annotations[using JSR330 standard annotations].
It is also possible to use Spring's own link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html[@Autowired] annotation.
@@ -93,7 +93,7 @@ For example, setter injection is:
[source,java]
----
-import javax.inject.Inject;
+import jakarta.inject.Inject;
public class Customer {
...
@@ -113,7 +113,7 @@ Some of the boilerplate can be removed using Project Lombok:
[source,java]
----
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import lombok.Setter;
public class Customer {
@@ -128,7 +128,7 @@ If you want to use field injection, then this is simply:
[source,java]
----
-import javax.inject.Inject;
+import jakarta.inject.Inject;
public class Customer {
...
@@ -154,7 +154,7 @@ It's also possible to inject a list of services:
[source,java]
----
-import javax.inject.Inject;
+import jakarta.inject.Inject;
public class DocumentService {
...
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/overriding.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/overriding.adoc
index af3b502ef80..c2dfff88e6c 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/overriding.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/overriding.adoc
@@ -3,7 +3,7 @@
: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 [...]
:page-partial:
-Apache Causeway runs on top of Spring Boot, and relies on Spring Boot for dependency injection using `@javax.inject.Inject`.
+Apache Causeway runs on top of Spring Boot, and relies on Spring Boot for dependency injection using `@jakarta.inject.Inject`.
The `@jakarta.annotation.Priority` annotation is used to prioritize multiple service implementations.
This allows any framework-provided domain service to be replaced by a user-defined one if required, simply by assigning it with an earlier precedence (= higher priority).
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/progmodel.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/progmodel.adoc
index 3fe7ac735d4..6f61c68aaf0 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/progmodel.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/progmodel.adoc
@@ -11,7 +11,7 @@ Domain services that are visible in the UI or REST API are annotated with xref:r
link:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Service.html[@Service]
or link:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Repository.html[@Repository].
-Once declared, domain services can be injected into other domain objects (*including* entities and view models) using `@javax.inject.Inject`.
+Once declared, domain services can be injected into other domain objects (*including* entities and view models) using `@jakarta.inject.Inject`.
There's more on this topic xref:domain-services.adoc#injecting-services[below].
=== Nature of Service
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/scoped-services.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/scoped-services.adoc
index 8a9fbbf3434..b1d4c043f33 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/scoped-services.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/scoped-services.adoc
@@ -25,12 +25,12 @@ public class MyService {
}
----
-Unlike application-scoped services, these request-scoped services must be injected using a slightly different idiom (borrowed from CDI), using a `javax.inject.Provider`.
+Unlike application-scoped services, these request-scoped services must be injected using a slightly different idiom (borrowed from CDI), using a `jakarta.inject.Provider`.
For example:
[source,java]
----
-import javax.inject.Provider;
+import jakarta.inject.Provider;
public class SomeClient {
...
@@ -50,8 +50,8 @@ To use that service, the idiom would be:
[source,java]
----
-import javax.inject.Inject;
-import javax.inject.Provider;
+import jakarta.inject.Inject;
+import jakarta.inject.Provider;
public class Customer {
...
diff --git a/antora/components/userguide/modules/ROOT/partials/modules/decoupling.adoc b/antora/components/userguide/modules/ROOT/partials/modules/decoupling.adoc
index 9f25b1cb581..0bbcef743cc 100644
--- a/antora/components/userguide/modules/ROOT/partials/modules/decoupling.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/modules/decoupling.adoc
@@ -10,7 +10,7 @@ The key features that Apache Causeway provides to support this are:
* dependency injection of services
+
-Both xref:refguide:applib-svc:about.adoc[framework-defined] domain services and application-defined services (eg repositories and factories) are injected everywhere, using the `@javax.inject.Inject` annotation (Spring's `@Autowired` can also be used).
+Both xref:refguide:applib-svc:about.adoc[framework-defined] domain services and application-defined services (eg repositories and factories) are injected everywhere, using the `@jakarta.inject.Inject` annotation (Spring's `@Autowired` can also be used).
+
By "everywhere", we mean not just into xref:domain-services.adoc[domain services], but _also_ can be injected into xref:domain-entities.adoc[domain entities], xref:view-models.adoc[view models] and xref:mixins.adoc[mixins].
This enables us to implement behaviourally complete domain objects (if we so wish).
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
index 033bfbfb8b0..1faa755a1b8 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
@@ -82,7 +82,7 @@ public List<Product> autoComplete0AddToBasket( // <.>
String searchTerm) {
return productRepository.find(searchTerm); // <.>
}
-@javax.inject.Inject
+@jakarta.inject.Inject
ProductRepository productRepository;
----
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
index 44e9935fb84..79f1c4a51c3 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
@@ -157,7 +157,7 @@ For example:
[source,java]
----
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import jakarta.persistence.Column;
import jakarta.persistence.Transient;
import lombok.Getter;
diff --git a/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc b/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
index 634283fe7da..12bfe1ddf86 100644
--- a/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
@@ -15,7 +15,7 @@ Notably the metamodel is xref:userguide:btb:programming-model.adoc[extensible];
Most of the annotations recognized by the framework are defined by the Apache Causeway framework itself.
For example the `@Title` annotation -- which identifies how the framework should derive a human-readable label for each rendered domain object -- is part of the `org.apache.causeway.applib.annotations` package.
-However the framework also recognizes certain other JEE annotations such as `@javax.inject.Inject` (used for dependency injection).
+However the framework also recognizes certain other JEE annotations such as `@jakarta.inject.Inject` (used for dependency injection).
The framework integrates an ORM for persistence, specifically DataNucleus and the JDO API and since version 2.0.0, JPA (Eclipselink) is supported as well.
Both JDO and JPA can map to both relational databases and also to various NoSQL objectstores such as MongoDB or Neo4J.
diff --git a/testing/adoc/modules/ROOT/pages/about.adoc b/testing/adoc/modules/ROOT/pages/about.adoc
index e4f7d1b7b6e..faae915d690 100644
--- a/testing/adoc/modules/ROOT/pages/about.adoc
+++ b/testing/adoc/modules/ROOT/pages/about.adoc
@@ -80,11 +80,11 @@ Although integration tests re (necessarily) slower than unit tests, they are not
Spring Boot will automatically inject dependencies into integration tests and services, and Apache Causeway extends this to also inject services into every domain object (entity or view model).
This is most useful when writing unit tests; simply mock out the service and inject into the domain object.
-There are a number of syntaxes supported, but the simplest is to use `@javax.inject.Inject` annotation; for example:
+There are a number of syntaxes supported, but the simplest is to use `@jakarta.inject.Inject` annotation; for example:
[source,java]
----
-@javax.inject.Inject
+@jakarta.inject.Inject
CustomerRepository customers;
----
(causeway) 29/36: CAUSEWAY-3866: fixes up CausewayPresets
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit b07ead6cfdbc996420b87e84e5fada41a8798e97
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 22:23:13 2025 +0100
CAUSEWAY-3866: fixes up CausewayPresets
---
.../presets/DebugCausewayInteraction.properties | 7 +++--
.../core/config/presets/DebugDiscovery.properties | 5 ++--
.../DebugInteractionScopedServices.properties | 1 +
.../core/config/presets/DebugMetaModel.properties | 7 +++--
.../presets/DebugProgrammingModel.properties | 9 +++---
.../DebugTransactionScopedServices.properties | 1 +
.../presets/H2InMemory_withUniqueSchema.properties | 5 ++--
.../core/config/presets/IntrospectFully.properties | 5 ++--
.../config/presets/IntrospectLazily.properties | 5 ++--
.../core/config/presets/NoTranslations.properties | 5 ++--
.../config/presets/SilenceMetaModel.properties | 7 +++--
.../presets/SilenceProgrammingModel.properties | 34 ++++++++++------------
.../core/config/presets/SilenceWicket.properties | 5 ++--
13 files changed, 53 insertions(+), 43 deletions(-)
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugCausewayInteraction.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugCausewayInteraction.properties
index 216f1853f48..19f73bc14ab 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugCausewayInteraction.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugCausewayInteraction.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
@@ -15,4 +16,4 @@
# specific language governing permissions and limitations
# under the License.
-logging.level.org.apache.causeway.core.runtimeservices.session.CausewayInteractionFactoryDefault = DEBUG
+logging.level.org.apache.causeway.core.runtimeservices.session.InteractionServiceDefault = DEBUG
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugDiscovery.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugDiscovery.properties
index b9e81fd4c40..ee79149cf51 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugDiscovery.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugDiscovery.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugInteractionScopedServices.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugInteractionScopedServices.properties
index ab612d577b6..530492cd3df 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugInteractionScopedServices.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugInteractionScopedServices.properties
@@ -1,3 +1,4 @@
+#
# 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
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugMetaModel.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugMetaModel.properties
index efc00686ed7..ab29a55d928 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugMetaModel.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugMetaModel.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
@@ -15,4 +16,4 @@
# specific language governing permissions and limitations
# under the License.
-logging.level.org.apache.causeway.core.metamodel.specloader.SpecificationLoaderDefault = DEBUG
+logging.level.org.apache.causeway.core.metamodel.spec.impl.SpecificationLoaderDefault = DEBUG
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugProgrammingModel.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugProgrammingModel.properties
index 3e1993b963c..82b6919b73a 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugProgrammingModel.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugProgrammingModel.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
@@ -15,5 +16,5 @@
# specific language governing permissions and limitations
# under the License.
-logging.level.org.apache.causeway.core.metamodel.specloader.ProgrammingModelServiceDefault = DEBUG
-logging.level.org.apache.causeway.core.metamodel.specloader.specimpl.FacetedMethodsBuilder = DEBUG
+logging.level.org.apache.causeway.core.metamodel.spec.impl.ProgrammingModelDefault = DEBUG
+logging.level.org.apache.causeway.core.metamodel.spec.impl.FacetedMethodsBuilder = DEBUG
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties
index 94d9ecbd42f..c868a8cc54f 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties
@@ -1,3 +1,4 @@
+#
# 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
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/H2InMemory_withUniqueSchema.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/H2InMemory_withUniqueSchema.properties
index 3e3ce263f97..b84dfb5eb18 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/H2InMemory_withUniqueSchema.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/H2InMemory_withUniqueSchema.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/IntrospectFully.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/IntrospectFully.properties
index 4030f1fd1ba..4f2d4829e6b 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/IntrospectFully.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/IntrospectFully.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/IntrospectLazily.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/IntrospectLazily.properties
index ac9cae82060..c3ff12ef71b 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/IntrospectLazily.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/IntrospectLazily.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/NoTranslations.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/NoTranslations.properties
index 902cb28c230..c9aa23b86a5 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/NoTranslations.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/NoTranslations.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceMetaModel.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceMetaModel.properties
index 8c73de5f0c0..b1539dd3588 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceMetaModel.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceMetaModel.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
@@ -15,4 +16,4 @@
# specific language governing permissions and limitations
# under the License.
-logging.level.org.apache.causeway.core.metamodel.specloader.SpecificationLoaderDefault = WARN
+logging.level.org.apache.causeway.core.metamodel.spec.impl.SpecificationLoaderDefault = WARN
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceProgrammingModel.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceProgrammingModel.properties
index 086429e53df..846d39628b5 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceProgrammingModel.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceProgrammingModel.properties
@@ -1,22 +1,20 @@
#
-# 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.
+# 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.
-logging.level.org.apache.causeway.core.metamodel.specloader.ProgrammingModelServiceDefault = WARN
-logging.level.org.apache.causeway.core.metamodel.specloader.specimpl.FacetedMethodsBuilder = WARN
+logging.level.org.apache.causeway.core.metamodel.spec.impl.ProgrammingModelDefault = WARN
+logging.level.org.apache.causeway.core.metamodel.spec.impl.FacetedMethodsBuilder = WARN
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceWicket.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceWicket.properties
index 7862d5c75f9..862855e0128 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceWicket.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/SilenceWicket.properties
@@ -1,3 +1,4 @@
+#
# 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
@@ -5,9 +6,9 @@
# 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
(causeway) 14/36: CAUSEWAY-3866: removes references to javax.jdo.annotation
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit b72cc67e9f9f2cb54e636a5f8712364ab8784be7
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 13:53:17 2025 +0100
CAUSEWAY-3866: removes references to javax.jdo.annotation
---
.../applib/pages/index/annotation/Optionality.adoc | 2 +-
.../applib/pages/index/annotation/Property.adoc | 2 +-
.../hooks/PropertyLayout_31_typicalLength.adoc | 3 +-
.../annotation/hooks/Property_021-optionality.adoc | 7 +-
.../annotation/hooks/Property_023-maxLength.adoc | 5 +-
.../RepositoryService_020-examples-and-usage.adoc | 62 +-
.../refguide/modules/applib-ant/pages/Column.adoc | 13 +-
.../refguide/modules/applib-ant/pages/Digits.adoc | 16 +-
.../ROOT/partials/2024/2.0.0/_relnotes.adoc | 1 +
.../further-business-logic-worked-examples.txt | 708 ---------------------
.../modules/ROOT/partials/domain-entities/jpa.adoc | 24 +-
.../properties-collections-actions/actions.adoc | 12 +-
.../causeway/applib/annotation/Property.java | 4 +-
.../commons/internal/reflection/_ClassCache.java | 7 -
.../internal/reflection/_ClassCacheUtil.java | 27 +-
.../config/beans/CausewayBeanTypeClassifier.java | 3 -
.../demoapp/todomodule/dom/ExcelDemoToDoItem.java | 47 --
extensions/vw/pdfjs/fixtures/.gitignore | 1 -
extensions/vw/pdfjs/fixtures/pom.xml | 70 --
.../src/main/java/META-INF/persistence.xml | 26 -
.../wicket/pdfjs/fixture/PdfjsFixturesModule.java | 35 -
.../demomodule/dom/PdfJsDemoObjectWithBlob.java | 123 ----
.../dom/PdfJsDemoObjectWithBlobMenu.java | 68 --
...fJsDemoObjectWithBlob_createUpTo5_fakeData.java | 133 ----
.../PdfJsDemoObjectWithBlob_tearDown.java | 32 -
.../adoc/modules/starters/pages/helloworld.adoc | 3 +-
.../adoc/modules/starters/pages/simpleapp.adoc | 3 +-
.../demomodule/dom/FakeDataDemoObjectWithAll.java | 29 -
.../adoc/modules/ROOT/pages/hints-and-tips.adoc | 1 -
.../ROOT/pages/hints-and-tips/troubleshooting.adoc | 88 ---
30 files changed, 76 insertions(+), 1479 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
index 7986afc8f93..29d75476652 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
@@ -30,7 +30,7 @@ Indicates that the property or parameter is not required.
<.> xref:#MANDATORY[MANDATORY]
+
--
-Indicates that the property is required (even if the JDO `javax.jdo.annotations.Column` annotation says otherwise).
+Indicates that the property is required (even if the JPA `jakarta.persistence.Column` annotation says otherwise).
--
<.> xref:#NOT_SPECIFIED[NOT_SPECIFIED]
+
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Property.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Property.adoc
index 19974e6d642..d4cc4b5d78c 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Property.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Property.adoc
@@ -199,7 +199,7 @@ NOTE: this will usually be supplemented by a JDO or JPA-specific annotation to i
Indicates whether the property should be included or excluded from mementos.
-To ensure that the property is actually not persisted in the objectstore, also annotate with the JDO annotation `javax.jdo.annotations.NotPersistent`
+To ensure that the property is actually not persisted in the objectstore, also annotate with the JPA annotation `jakarta.persistence.Transient`
[#mustSatisfy]
=== mustSatisfy
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/PropertyLayout_31_typicalLength.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/PropertyLayout_31_typicalLength.adoc
index fc935505179..2d9313b8fa1 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/PropertyLayout_31_typicalLength.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/PropertyLayout_31_typicalLength.adoc
@@ -15,12 +15,13 @@ For example:
[source,java]
----
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
public class Customer {
- @javax.jdo.annotations.Column(length=30)
+ @Column(length=30)
@ParameterLayout(typicalLength=20)
@Getter @Setter
private String firstName;
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
index baff5b7898c..624b90201f2 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
@@ -84,17 +84,16 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType;
+import lombok.*;
@Entity
@Inheritance(type = InheritanceType.SINGLE_TABLE)
public class CreditCardPaymentMethod extends PaymentMethod {
- @javax.jdo.annotations.Column(allowsNull="true")
+ @Column(nullable=true)
+ @Getter @Setter
private String cardNumber;
- public String getCardNumber() { return this.cardNumber; }
- public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; }
-
// ...
}
----
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_023-maxLength.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_023-maxLength.adoc
index ae559970b0b..35285cec8c6 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_023-maxLength.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_023-maxLength.adoc
@@ -15,12 +15,13 @@ For example:
[source,java]
----
-import lombok.Getter;
+import jakarta.persistence.Column;
+import lombok.*;
import lombok.Setter;
public class Customer {
- @javax.jdo.annotations.Column(length=30)
+ @Column(length=30)
@Getter @Setter
private String firstName;
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_020-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_020-examples-and-usage.adoc
index 936b3b54449..895ed1efb9e 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_020-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_020-examples-and-usage.adoc
@@ -114,60 +114,52 @@ public void addExcludedProduct() {
There are two subtypes of the `Query` API, namely `NamedQuery` and `AllInstancesQuery`.
The former is the more important, as it identifies a named query and a set of parameter/argument tuples, and is executed server-side.
-For example, using JDO a `ToDoItem` could be annotated:
+For example, using JPA an entity could be annotated:
[source,java]
----
-@javax.jdo.annotations.Queries( {
- @javax.jdo.annotations.Query(
- name = "findByAtPathAndComplete", language = "JDOQL", // <.>
- value = "SELECT "
- + "FROM todoapp.dom.module.todoitem.ToDoItem "
- + "WHERE atPath.indexOf(:atPath) == 0 " // <.>
- + " && complete == :complete"), // <.>
- // ...
+@NamedQueries({
+ @NamedQuery(
+ name = "SimpleObject.findByNameLike", // <.>
+ query = "SELECT so " +
+ "FROM SimpleObject so " +
+ "WHERE so.name LIKE :name" // <.>
+ )
+})
})
-public class ToDoItem ... {
+public class SimpleObject ... {
// ...
}
----
-<1> name of the query
-<2> defines the `atPath` parameter
-<3> defines the `complete` parameter
+<.> name of the query
+<.> defines the `name` parameter
-This JDO query definitions are used in the `ToDoItemRepositoryImplUsingJdoql` service:
+This query definition is then typically used in a corresponding repository service:
[source,java]
----
-import org.springframework.stereotype.Service;
-
-@Service
-public class ToDoItemRepositoryImplUsingJdoql implements ToDoItemRepositoryImpl {
- @Programmatic
- public List<ToDoItem> findByAtPathAndCategory(final String atPath, final Category category) {
- return repositoryService.allMatches(
- Query.named(ToDoItem.class, "findByAtPathAndCategory") // <.>
- .withParameter("atPath", atPath) // <.>
- .withParameter("category", category)); // <.>
- }
- ...
- @javax.inject.Inject
- RepositoryService repositoryService;
+import org.apache.causeway.applib.services.repository.RepositoryService;
+
+public List<SimpleObject> findByNameLike(
+ @Name final String name) {
+ return repositoryService.allMatches(
+ Query.named(SimpleObject.class, "SimpleObject.findByNameLike") // <.>
+ .withParameter("name", "%" + name + "%")); // <.>
}
+
+@Inject RepositoryService repositoryService; // <.>
----
-<1> corresponds to the "findByAtPathAndCategory" JDO named query
-<2> provide argument for the `atPath` parameter.
-<3> provide argument for the `category` parameter.
+<1> name of the query
+<2> argument for the `name` parameter.
+<3> generic repository service, provided by Causeway
[TIP]
====
-It is also possible to use the Spring Data repositories, using xref:refguide:persistence:index/jpa/applib/services/JpaSupportService.adoc[JpaSupportService].
+It is also possible to use the Spring Data repositories, which automatically generate an implementation based on the method signature.
+Or, you could use the xref:querydsl:ROOT:about.adoc[QueryDSL] integration.
====
-
-
-
== See also
Supporting classes used by the API:
diff --git a/antora/components/refguide/modules/applib-ant/pages/Column.adoc b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
index 40103bb7000..01380b0cc7c 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Column.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
@@ -91,10 +91,17 @@ For example:
[source,java]
----
+import jakarta.persistence.Column;
+import lombok.*;
+
public class Customer {
- @javax.jdo.annotations.Column(length=10, scale=2)
- public BigDecimal getTotalOrdersToDate() { /* ... */ }
- public void setTotalOrdersToDate(BigDecimal totalOrdersToDate) { /* ... */ }
+
+ @Column(length=10, scale=2)
+ @Getter @Setter
+ private BigDecimal totalOrdersToDate;
+
+ //...
+}
----
For ``BigDecimal``s it is also possible to specify the xref:refguide:applib-ant:Digits.adoc[@Digits] annotation, whose form is `@Digits(integer, fraction)`.
diff --git a/antora/components/refguide/modules/applib-ant/pages/Digits.adoc b/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
index cfa01d53e1e..5f405655164 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
@@ -1,5 +1,5 @@
-[#javax-validation-constraints-Digits]
-= @Digits (javax.validation)
+[#jakarta-validation-constraints-Digits]
+= @Digits (jakarta.validation.constraints)
: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 [...]
@@ -12,16 +12,18 @@ For example:
[source,java]
----
-@javax.jdo.annotations.Column(
+import jakarta.persistence.Column;
+import jakarta.validation.constraints.Digits;
+import lombok.Getter;
+
+@Column(
scale=2 // <.>
)
-@javax.validation.constraints.Digits(
+@Digits(
integer=10,
fraction=2 // <.>
)
-public BigDecimal getCost() {
- return cost;
-}
+@Getter
public void setCost(final BigDecimal cost) {
this.cost = cost!=null
? cost.setScale(2, BigDecimal.ROUND_HALF_EVEN) // <.>
diff --git a/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc b/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
index 5f195b5a5ea..7718e747a7c 100644
--- a/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/partials/2024/2.0.0/_relnotes.adoc
@@ -64,6 +64,7 @@ Persistence using JDO continues to be supported through the integration with Dat
[NOTE]
====
We use EclipseLink rather than Hibernate because historically the latter was licensed using LGPL, which is incompatible with ASF licensing.
+(Hibernate v7 is licensed under Apache License, however, so this opens up the possibility of providing a JPA/Hibernate object store in the future).
====
+
diff --git a/antora/components/tutorials/modules/petclinic/pages/further-business-logic-worked-examples.txt b/antora/components/tutorials/modules/petclinic/pages/further-business-logic-worked-examples.txt
deleted file mode 100644
index 016e26d378a..00000000000
--- a/antora/components/tutorials/modules/petclinic/pages/further-business-logic-worked-examples.txt
+++ /dev/null
@@ -1,708 +0,0 @@
-= Adding further business logic - Worked Examples
-
-: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 [...]
-
-// LATER
-
-//Let's remind ourselves of the original use cases we identified; some of these have been implemented already (admittedly, not all with tests around them):
-//
-//* create an `PetOwner` : yes, implemented
-//
-//* add and remove ``Pet``s for said `PetOwner` : yes, implemented.
-//
-//* book a `Pet` in for a `Visit`: yes, implemented.
-//
-//* enter an `outcome` and `cost` of a `Visit`: not yet
-//
-//* allow an `PetOwner` to pay for a `Visit`: not yet
-//
-//* find ``Visit``s not yet paid and overdue (more than 28 days old): not yet
-//
-//* delete an `PetOwner` and its ``Pet``s and ``Visit``s, so long as there are no unpaid ``Visit``s: partly.
-//We currently just delete everything.
-//
-//In this section we'll implement the missing functionality, along with unit or integration tests as necessary.
-//
-//
-//== Enter an outcome
-//
-//An outcome for a `Visit` consists of a diagnosis, and also the cost to be paid by the ``Pet``'s `PetOwner`.
-//
-//image::Visit-enterOutcome.png[width="800px",link="_images/Visit-enterOutcome.png"]
-//
-//=== Solution
-//
-//[source,bash,subs="attributes+"]
-//----
-//git checkout tags/{tag-version}/330-enter-an-outcome
-//mvn clean package jetty:run
-//----
-//
-//
-//=== Exercise
-//
-//* add a new integration test, `Visit_enterOutcome_IntegTest`,
-//+
-//[source,java]
-//----
-//public class Visit_enterOutcome_IntegTest extends PetClinicModuleIntegTestAbstract {
-//
-// Visit visit;
-//
-// @Before
-// public void setup() {
-// // given
-// Owner owner = runBuilderScript(Owner_enum.JOHN_SMITH);
-// Pet pet = owner.getPets().first();
-// visit = wrap(mixin(Pet_visits.class, pet)).coll().iterator().next();
-// }
-//
-// @Test
-// public void happy_case() {
-//
-// // when
-// String diagnosis = someRandomDiagnosis();
-// BigDecimal cost = someRandomCost();
-//
-// wrap(visit).enterOutcome(diagnosis, cost);
-//
-// // then
-// assertThat(visit.getDiagnosis()).isEqualTo(diagnosis);
-// assertThat(visit.getCost()).isEqualTo(cost);
-// }
-//
-// private BigDecimal someRandomCost() {
-// return new BigDecimal(20.00 + fakeDataService.doubles().upTo(30.00d));
-// }
-//
-// private String someRandomDiagnosis() {
-// return fakeDataService.lorem().paragraph(3);
-// }
-//
-// @Inject
-// FakeDataService fakeDataService;
-//}
-//----
-//
-//* in `Visit`, add in the two new properties and action.
-//+
-//[source,java]
-//----
-//@Action(semantics = SemanticsOf.IDEMPOTENT)
-//public Visit enterOutcome(
-// @Parameter(maxLength = 4000)
-// @ParameterLayout(multiLine = 5)
-// final String diagnosis,
-// final BigDecimal cost) {
-// this.diagnosis = diagnosis;
-// this.cost = cost;
-// return this;
-//}
-//
-//@javax.jdo.annotations.Column(allowsNull = "true", length = 4000)
-//@Property(editing = Editing.DISABLED, editingDisabledReason = "Use 'enter outcome' action")
-//@PropertyLayout(multiLine = 5)
-//@Getter @Setter
-//private String diagnosis;
-//
-//@javax.jdo.annotations.Column(allowsNull = "true", length = 6, scale = 2)
-//@Property(editing = Editing.DISABLED, editingDisabledReason = "Use 'enter outcome' action")
-//@Getter @Setter
-//private BigDecimal cost;
-//
-//----
-//
-//* update `Visit.layout.xml` for the two new properties and action.
-//
-//* add in some further integration tests to ensure that the properties cannot be edited directly:
-//+
-//[source,java]
-//----
-//@Test
-//public void cannot_edit_outcome_directly() {
-//
-// // expecting
-// expectedExceptions.expect(DisabledException.class);
-// expectedExceptions.expectMessage("Use 'enter outcome' action");
-//
-// // when
-// String diagnosis = someRandomDiagnosis();
-// wrap(visit).setDiagnosis(diagnosis);
-//}
-//
-//@Test
-//public void cannot_edit_cost_directly() {
-//
-// // expecting
-// expectedExceptions.expect(DisabledException.class);
-// expectedExceptions.expectMessage("Use 'enter outcome' action");
-//
-// // when
-// BigDecimal cost = someRandomCost();
-//
-// wrap(visit).setCost(cost);
-//}
-//----
-//
-//
-//== Pay for a visit
-//
-//We'll support this use case through a new action "paid", on the `Visit` domain entity.
-//
-//To support the testing (and with half an eye to a future use case) we'll also implement a "findNotPaid" query on the `Visits` repository domain service.
-//
-//=== Solution
-//
-//[source,bash,subs="attributes+"]
-//----
-//git checkout tags/{tag-version}/340-pay-for-a-visit
-//mvn clean package jetty:run
-//----
-//
-//
-//=== Exercise
-//
-//Let's first work on the happy case:
-//
-//* Update `Visit` with a new `paid()` action and `paidOn` property.
-//Also inject `ClockService`:
-//+
-//[source,java]
-//----
-//@Action(semantics = SemanticsOf.IDEMPOTENT)
-//public Visit paid() {
-// paidOn = clockService.now();
-// return this;
-//}
-//
-//@javax.jdo.annotations.Column(allowsNull = "true")
-//@Property(editing = Editing.DISABLED, editingDisabledReason = "Use 'paid' action")
-//@Getter @Setter
-//private LocalDate paidOn;
-//
-//...
-//
-//@Inject
-//ClockService clockService;
-//----
-//
-//* Update the `Visits` domain service repository to find ``Visit``s that haven't been paid:
-//+
-//[source,java]
-//----
-//@Programmatic
-//public java.util.List<Visit> findNotPaid() {
-// TypesafeQuery<Visit> q = causewayJdoSupport.newTypesafeQuery(Visit.class);
-// final QVisit cand = QVisit.candidate();
-// q = q.filter(
-// cand.paidOn.eq(q.parameter("paidOn", LocalDateTime.class)
-// )
-// );
-// return q.setParameter("paidOn", null)
-// .executeList();
-//}
-//----
-//
-//* Extend `PetOwnerBuilderScript` so that all but the last `Visit` for each ``PetOwner``'s ``Pet``s has been paid.
-//+
-//Add some further supporting methods:
-//+
-//[source,java]
-//----
-//private String someDiagnosis() {
-// return fakeDataService.lorem().paragraph(fakeDataService.ints().between(1, 3));
-//}
-//
-//private BigDecimal someCost() {
-// return new BigDecimal(20.00 + fakeDataService.doubles().upTo(30.00d));
-//}
-//----
-//+
-//In the `execute(...)`, update the `for` loop so that all ``Visit``s have an outcome and all but the last (for each ``PetOwner``) has been paid:
-//+
-//[source,java]
-//----
-//for (int i = 0; i < petDatum.numberOfVisits; i++) {
-// ...
-// LocalDateTime someTimeInPast = ...
-// Visit visit = ...
-// wrap(visit).enterOutcome(someDiagnosis(), someCost());
-// if(i != petDatum.numberOfVisits - 1) {
-// setTimeTo(ec, someTimeInPast.plusDays(fakeDataService.ints().between(10,30)));
-// wrap(visit).paid();
-// }
-//}
-//----
-//
-//
-//== Prevent payment for a visit twice
-//
-//We've already seen that it's possible to validate arguments to actions; for example that a `Visit` can only be booked in the future.
-//But if a `Visit` has already been paid for, then we don't want the user to be able to even attempt to invoke the action.
-//
-//The framework provides three different types of pre-condition checks:
-//
-//* "See it?" - should the action/property be visible at all, or has it been hidden?
-//
-//* "Use it" - if visible, then can the action/property be used or has it been disabled (greyed out)
-//
-//* "Do it" - if the action/property is ok to be used (action invoked/property edited) then are the proposed action arguments or new property value valid, or are they invalid?
-//
-//Or in other words, "see it, use it, do it".
-//
-//As with validation, disablement can be defined either declaratively (annotations) or imperatively (supporting methods).
-//Let's see how an imperative supporting method can be used to implement this particular requirement (that a visit can't be paid for twice).
-//
-//=== Solution
-//
-//[source,bash,subs="attributes+"]
-//----
-//git checkout tags/{tag-version}/350-prevent-payment-for-a-visit-twice
-//mvn clean package jetty:run
-//----
-//
-//
-//=== Exercise
-//
-//* update `Visit_pay_IntegTest` to ensure cannot enter into the `paidOn` property directly:
-//+
-//[source,java]
-//----
-//@Test
-//public void cannot_edit_paidOn_directly() {
-//
-// // expecting
-// expectedExceptions.expect(DisabledException.class);
-// expectedExceptions.expectMessage("Use 'paid on' action");
-//
-// // when
-// wrap(visit).setPaidOn(clockService.now());
-//}
-//----
-//
-//* now, add in the test that asserts that a `Visit` cannot be paid more than once:
-//+
-//[source,java]
-//----
-//@Test
-//public void cannot_pay_more_than_once() {
-//
-// // given
-// wrap(visit).paid();
-// assertThat(visits.findNotPaid()).asList().doesNotContain(visit);
-//
-// // expecting
-// expectedExceptions.expect(DisabledException.class);
-// expectedExceptions.expectMessage("Already paid");
-//
-// // when
-// wrap(visit).paid();
-//}
-//----
-//
-//* and finally update `Visit`.
-//This is done using a supporting method.
-//+
-//[source,java]
-//----
-//public String disablePaid() {
-// return getPaidOn() != null ? "Already paid": null;
-//}
-//----
-//
-//
-//== Find ``Visit``s not yet paid and overdue
-//
-//In the previous scenario we implemented `Visits#findNotPaid()`.
-//Since this is pretty important information, let's surface that to the end-user by adding it to the home page dashboard.
-//
-//We could also go a little further by allowing the user to use the dashboard to update visits that have been paid.
-//This is a good example of how a view model can support specific business processes, in this case saving the end-user from having to navigate down to each and every one of the ``Visit``s.
-//
-//=== Solution
-//
-//[source,bash,subs="attributes+"]
-//----
-//git checkout tags/{tag-version}/360-find-visits-not-yet-paid-and-overdue
-//mvn clean package jetty:run
-//----
-//
-//image::Dashboard-overdue.png[width="800px",link="_images/Dashboard-overdue.png"]
-//
-//=== Exercise
-//
-//
-//* update `Dashboard`:
-//+
-//[source,java]
-//----
-//@CollectionLayout(defaultView = "table")
-//public List<Visit> getOverdue() {
-// List<Visit> notPaid = visits.findNotPaid();
-// LocalDateTime thirtyDaysAgo = clockService.nowAsLocalDateTime().minusDays(30);
-// return notPaid.stream()
-// .filter(x -> x.getVisitAt().isBefore(thirtyDaysAgo)) // <1>
-// .collect(Collectors.toList());
-//}
-//
-//@Action(semantics = SemanticsOf.IDEMPOTENT, associateWith = "overdue") // <2>
-//public Dashboard paid(List<Visit> visits) {
-// for (Visit visit : visits) {
-// if(visit.getPaidOn() == null) {
-// visit.paid();
-// }
-// }
-// return this;
-//}
-//
-//@javax.inject.Inject
-//Visits visits;
-//
-//@javax.inject.Inject
-//ClockService clockService;
-//----
-//<1> An alternative (better?) design would have been to add a new query method in `Visits` to find those overdue, avoiding the client-side filtering that we see above.
-//<2> The "associateWith" annotation results in checkboxes alongside the "overdue" collection, with the collection providing the set of values for the parameter.
-//
-//
-//* update `Dashboard.layout.xml` also
-//
-//* write a new `Dashboard_paid_IntegTest` integration test:
-//+
-//[source,java]
-//----
-//public class Dashboard_paid_IntegTest extends PetClinicModuleIntegTestAbstract {
-//
-// Dashboard dashboard;
-//
-// @Before
-// public void setup() {
-// // given
-// runFixtureScript(new PersonaEnumPersistAll<>(Owner_enum.class));
-// dashboard = homePageProvider.dashboard();
-// }
-//
-// @Test
-// public void happy_case() {
-//
-// // given
-// List<Visit> overdue = dashboard.getOverdue();
-// assertThat(overdue).isNotEmpty();
-//
-// // when
-// wrap(dashboard).paid(overdue);
-//
-// // then
-// List<Visit> overdueAfter = dashboard.getOverdue();
-// assertThat(overdueAfter).isEmpty();
-//
-// for (Visit visit : overdue) {
-// assertThat(visit.getDiagnosis()).isNotNull();
-// assertThat(visit.getPaidOn()).isNotNull();
-// }
-// }
-//
-// @Inject
-// HomePageProvider homePageProvider;
-//}
-//----
-//
-//* Running the integration test at this point will produce a null pointer exception.
-//That's because the framework has had no opportunity to inject any domain services into the `Dashboard`.
-//+
-//Under normal runtime cases this doesn't matter because the only caller of the method is the framework itself, and when the domain object is rendered the framework will automatically ensure that any domain sevices are injected.
-//+
-//In an integration test this doesn't occur, and so we need to manually inject the services.
-//It makes most sense to do this in `HomePageProvider`; we use the framework-provided `ServiceRegistry2` domain service:
-//+
-//[source,java]
-//----
-//@HomePage
-//public Dashboard dashboard() {
-// return serviceRegistry2.injectServicesInto(new Dashboard());
-//}
-//@Inject
-//ServiceRegistry2 serviceRegistry2;
-//----
-//
-//
-//
-//== Digression: Hiding Columns in Tables
-//
-//We could improve the dashboard a little.
-//After all, in the "overdue" collection there's no point in showing the "paidOn"; the value will always be null.
-//Also, the "reason" column is also somewhat superfluous (as, arguably, is the "diagnosis" column):
-//
-//image::Dashboard-overdue-ui-hints.png[width="800px",link="_images/Dashboard-overdue-ui-hints.png"]
-//
-//The framework offers two different ways to address this, so we'll show both.
-//
-//=== Solution
-//
-//[source,bash,subs="attributes+"]
-//----
-//git checkout tags/{tag-version}/370-digression-hiding-columns-in-tables
-//mvn clean package jetty:run
-//----
-//
-//
-//=== Exercise
-//
-//* The first technique is within the Java code; one could think of this as an implication within the "application layer".
-//+
-//We use a domain service that implements `TableColumnOrderService` as an SPI to "advise" the framework on how to render the collection.
-//Traditionally such classes are implemented as a nested static class, in this case of `Dashboard`:
-//+
-//[source,java]
-//----
-//@DomainService(nature = NatureOfService.DOMAIN)
-//public static class RemovePaidOnFromOverdue extends TableColumnOrderService.Default {
-// @Override
-// public List<String> orderParented(
-// final Object parent,
-// final String collectionId,
-// final Class<?> collectionType,
-// final List<String> propertyIds) {
-// if (parent instanceof Dashboard && "overdue".equalsIgnoreCase(collectionId)) {
-// propertyIds.remove("paidOn");
-// }
-// return propertyIds;
-// }
-//}
-//----
-//+
-//The above code removes the "paidOn" column.
-//
-//* The second technique is to exploit the fact that the HTML generated by the framework is liberally annotated with domain class identifiers.
-//The column can therefore be removed by supplying the appropriate CSS.
-//We could think of this as an implementation within the presentation layer.
-//+
-//In the `src/main/webapp/css/application.css` file, add:
-//+
-//[source,css]
-//----
-//.domainapp-modules-impl-dashboard-Dashboard .entityCollection .overdue .Visit-reason {
-// display: none;
-//}
-//----
-//
-//
-//
-//== Another Digression: Icons and CSS
-//
-//In the same way that titles can be specified imperatively, so too can icons, using the `iconName()` method.
-//One use case is for a domain object that has several states: the `iconName()` defines a suffix which is used to lookup different icons (eg "ToDoItem-notDone.png" and "ToDoItem-done.png").
-//
-//Similarly, it's possible to specify CSS hints imperatively using the `cssClass()`.
-//This returns a simple string that is added as a CSS class wherever the object is rendered in the UI.
-//
-//In this exercise we'll use a different icon for the various species of `Pet`:
-//
-//image::Pet-icons.png[width="800px",link="_images/Pet-icons.png"]
-//
-//Let's also use a strike-through text for all ``Visit``s that are paid when rendered within a collection:
-//
-//image::Visits-paid-strikethrough.png[width="800px",link="_images/Visits-paid-strikethrough.png"]
-//
-//
-//
-//
-//=== Solution
-//
-//[source,bash,subs="attributes+"]
-//----
-//git checkout tags/{tag-version}/380-another-digression-icons-and-css
-//mvn clean package jetty:run
-//----
-//
-//
-//
-//=== Exercise
-//
-//For the icons:
-//
-//* add new icons for each of the pet species: `Pet-dog.png`, `Pet-cat.png`, `Pet-hamster.dog` and `Pet-budgerigar.png`
-//
-//* add an `iconName()` method to `Pet`:
-//+
-//[source,java]
-//----
-//public String iconName() {
-// return getPetSpecies().name().toLowerCase();
-//}
-//----
-//
-//
-//For the CSS class:
-//
-//* add a `cssClass()` method to `Visit`:
-//+
-//[source,java]
-//----
-//public String cssClass() {
-// boolean isPaid = getPaidOn() != null;
-// return isPaid ? "paid": null;
-//}
-//----
-//
-//
-//* update `application.css`:
-//
-//[source,css]
-//----
-//.entityCollection .domainapp-modules-impl-visits-dom-Visit .paid {
-// text-decoration: line-through;
-// color: lightgrey;
-//}
-//----
-//
-//
-//== Delete an `PetOwner` provided no unpaid ``Visit``s
-//
-//=== Solution
-//
-//[source,bash,subs="attributes+"]
-//----
-//git checkout tags/{tag-version}/390-delete-an-owner-provided-no-unpaid-visits
-//mvn clean package jetty:run
-//----
-//
-//
-//=== Exercise
-//
-//We don't want `PetOwner` (in the `pets` module) to check for unpaid ``Visit``s, because that would create a cyclic dependency between modules.
-//Instead, we'll use a subscriber in the `visits` module which can veto any attempt to delete an owner if there are unpaid visits.
-//
-//For this, we arrange for the `PetOwner` to emit an action domain event when its `delete()` action is invoked.
-//In fact, the event will be emitted by the framework up to five times: to check if the action is visible, if it is disabled, if it's valid, pre-execute and post-execute.
-//The subscriber in the ``visits`` module will therefore potentially veto on the disable phase.
-//
-//* in the `Visits` repository, add `findNotPaidBy` method to find any unpaid ``Visit``s for an `PetOwner`:
-//+
-//[source,java]
-//----
-//@Programmatic
-//public java.util.List<Visit> findNotPaidBy(Owner owner) {
-// TypesafeQuery<Visit> q = causewayJdoSupport.newTypesafeQuery(Visit.class);
-// final QVisit cand = QVisit.candidate();
-// q = q.filter(
-// cand.paidOn.eq(q.parameter("paidOn", LocalDateTime.class)
-// ).and(
-// cand.pet.owner.eq(q.parameter("owner", Owner.class))
-// )
-// );
-// return q.setParameter("paidOn", null)
-// .setParameter("owner", owner)
-// .executeList();
-//}
-//----
-//
-//* update `PetOwner`'s `delete()` action so that it emits an action domain event.
-//+
-//[source,java]
-//----
-//import org.apache.causeway.applib.services.eventbus.ActionDomainEvent;
-//...
-//public static class Delete extends ActionDomainEvent<Owner> {} // <1>
-//@Action(
-// domainEvent = Delete.class // <2>
-// semantics = SemanticsOf.NON_IDEMPOTENT // <3>
-//)
-//public void delete() {
-// final String title = titleService.titleOf(this);
-// messageService.informUser(String.format("'%s' deleted", title));
-// repositoryService.removeAndFlush(this);
-//}
-//----
-//<1> declare the event, and
-//<2> emit it
-//<3> change from `NON_IDEMPOTENT_ARE_YOU_SURE` (due to a bug in the framework).
-//
-//* add a new integration test:
-//+
-//[source,java]
-//----
-//public class Owner_delete_IntegTest extends PetClinicModuleIntegTestAbstract {
-//
-// @Test
-// public void can_delete_if_there_are_no_unpaid_visits() {
-//
-// // given
-// runFixtureScript(Owner_enum.FRED_HUGHES.builder());
-//
-// Owner owner = Owner_enum.FRED_HUGHES.findUsing(serviceRegistry);
-// List<Visit> any = visits.findNotPaidBy(owner);
-// assertThat(any).isEmpty();
-//
-// // when
-// wrap(owner).delete();
-//
-// // then
-// Owner ownerAfter = Owner_enum.FRED_HUGHES.findUsing(serviceRegistry);
-// assertThat(ownerAfter).isNull();
-// }
-//
-// @Test
-// public void cannot_delete_with_unpaid_visits() {
-//
-// // given
-// runFixtureScript(Owner_enum.MARY_JONES.builder());
-//
-// Owner owner = Owner_enum.MARY_JONES.findUsing(serviceRegistry);
-// List<Visit> any = visits.findNotPaidBy(owner);
-// assertThat(any).isNotEmpty();
-//
-// // expect
-// expectedExceptions.expect(DisabledException.class);
-// expectedExceptions.expectMessage("This owner still has unpaid visit(s)");
-//
-// // when
-// wrap(owner).delete();
-// }
-//
-// @Inject
-// Visits visits;
-//}
-//----
-//
-//* add the subscriber to veto the action if required:
-//+
-//[source,java]
-//----
-//@DomainService(nature = NatureOfService.DOMAIN)
-//public class VetoDeleteOfOwnerWithUnpaidVisits
-// extends org.apache.causeway.applib.AbstractSubscriber {
-//
-// @org.axonframework.eventhandling.annotation.EventHandler
-// public void on(Owner.Delete ev) {
-//
-// switch (ev.getEventPhase()) {
-// case DISABLE:
-// Collection<Visit> visitsForPet = visits.findNotPaidBy(ev.getSource());
-// if (!visitsForPet.isEmpty()) {
-// ev.veto("This owner still has unpaid visit(s)");
-// }
-// break;
-// }
-// }
-//
-// @javax.inject.Inject
-// Visits visits;
-//}
-//----
-//
-//* finally, in `PetClinicModuleIntegTestAbstract`, we need to make a small adjustment to use the same event bus implementation as the production app:
-//+
-//[source,java]
-//----
-//super(new PetClinicModule()
-// .withAdditionalServices(DeploymentCategoryProviderForTesting.class)
-// .withConfigurationProperty("causeway.services.eventbus.implementation","axon") // <1>
-// .withConfigurationProperty(TranslationServicePo.KEY_PO_MODE, "write")
-//);
-//----
-//<1> specify Axon as the event bus implementation
-//
-//
-//
-//
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc b/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
index 25feb8399e3..00dc4edc826 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
@@ -122,24 +122,16 @@ These are used by repository domain services to query for instances of the entit
[source,java]
----
-...
-@javax.persistence.NamedQueries({
- @javax.persistence.NamedQuery( // <.>
- name = "findByNameLike", // <.>
- query = "SELECT so " + // <.>
- "FROM SimpleObject so " +
- "WHERE so.name LIKE :name"
- )
-})
+import jakarta.persistence.*;
-@javax.jdo.annotations.Queries({
- @javax.jdo.annotations.Query( // <.>
- name = "findByName", // <.>
- value = "SELECT " // <.>
- + "FROM domainapp.modules.simple.dom.impl.SimpleObject " // <.>
- + "WHERE name.indexOf(:name) >= 0 ") // <.>
+@NamedQueries({
+ @NamedQuery( // <.>
+ name = "SimpleObject.findByNameLike", // <.>
+ query = "SELECT so " + // <.>
+ "FROM SimpleObject so " +
+ "WHERE so.name LIKE :name"
+ )
})
-...
public class SimpleObject { /* ... */ }
----
<.> There may be several `@NamedQuery` annotations, nested within a `@NamedQueries` annotation) defines queries using JPAQL.
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
index b7f00dc298a..705918793d4 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
@@ -178,7 +178,7 @@ For example:
[source,java]
----
-import javax.jdo.annotations.Column;
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
import org.joda.time.LocalDate;
@@ -186,15 +186,15 @@ import org.joda.time.LocalDate;
@Action(semantics=SemanticsOf.IDEMPOTENT)
public Order invoice(
PaymentMethodType paymentMethodType,
- @Nullable // <.>
+ @Nullable // <.>
@ParameterLayout(named="Ship no later than")
LocalDate shipBy) {
- ...
+ // ...
setShipBy(shipBy)
return this;
}
-@Column(nullable=true) // <.>
+@Column(nullable=true) // <.>
@Property
@Getter @Setter
private LocalDate shipBy;
@@ -204,7 +204,6 @@ private LocalDate shipBy;
+
Note that this uses an ORM-specific mechanism to specify the same semantics (in this case, using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink]' `@Column#nullable()`.)
-See also xref:userguide:ROOT:meta-annotations.adoc#properties-vs-parameters[properties vs parameters].
== ``String`` Parameters (Length)
@@ -260,7 +259,7 @@ For example:
[source,java]
----
-import javax.jdo.annotations.Column;
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
@@ -281,7 +280,6 @@ private BigDecimal discountRate;
+
Note that this uses an ORM-specific annotation (in this case, xref:refguide:applib-ant:Column.adoc#lengthscale-for-bigdecimals[@Column#scale]
-See also xref:userguide:ROOT:meta-annotations.adoc#properties-vs-parameters[properties vs parameters].
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Property.java b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Property.java
index c815a5dca74..3c1f8db31dc 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Property.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Property.java
@@ -213,8 +213,8 @@ int maxLength()
* Indicates whether the property should be included or excluded from mementos.
*
* <p>
- * To ensure that the property is actually not persisted in the objectstore, also annotate with the JDO annotation
- * <code>javax.jdo.annotations.NotPersistent</code>
+ * To ensure that the property is actually not persisted in the JPA object store, also annotate with
+ * {@link jakarta.persistence.Transient}.
* </p>
*/
Snapshot snapshot()
diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCache.java b/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCache.java
index b910486ffae..ed101ad7bbd 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCache.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCache.java
@@ -287,13 +287,6 @@ public boolean hasJaxbRootElementSemantics() {
return hasAnnotation(XmlRootElement.class);
}
- /**
- * whether type is JDO persistable (but NOT embedded only)
- */
- public boolean isJdoPersistenceCapable() {
- return _ClassCacheUtil.isJdoPersistenceCapable(mergedAnnotations)
- && !_ClassCacheUtil.isJdoEmbeddedOnly(mergedAnnotations);
- }
public Can<String> springProfiles() {
var profileAnnot = mergedAnnotations.get(Profile.class);
diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCacheUtil.java b/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCacheUtil.java
index 9ade2ccb91b..3a3241f140f 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCacheUtil.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCacheUtil.java
@@ -43,9 +43,9 @@ class _ClassCacheUtil {
if(!_Strings.isEmpty(named)) return named;
for(var annot : mergedAnnotations) {
+ //noinspection SwitchStatementWithTooFewBranches
switch (annot.getType().getName()) {
- case "jakarta.persistence.Table":
- case "javax.jdo.annotations.PersistenceCapable": {
+ case "jakarta.persistence.Table": {
var schema = annot.getString("schema");
if(_Strings.isEmpty(schema)) continue;
@@ -58,29 +58,6 @@ class _ClassCacheUtil {
return null;
}
- boolean isJdoPersistenceCapable(final MergedAnnotations mergedAnnotations) {
- for(var annot : mergedAnnotations) {
- switch (annot.getType().getName()) {
- case "javax.jdo.annotations.PersistenceCapable":
- return true;
- }
- }
- return false;
- }
-
- boolean isJdoEmbeddedOnly(final MergedAnnotations mergedAnnotations) {
- for(var annot : mergedAnnotations) {
- switch (annot.getType().getName()) {
- case "javax.jdo.annotations.PersistenceCapable":
- if("true".equals(annot.getString("embeddedOnly"))) return true;
- break;
- case "javax.jdo.annotations.EmbeddedOnly":
- return true;
- }
- }
- return false;
- }
-
@Nullable
private String nameFromPersistenceTable(final Class<?> type, final @Nullable String schema, final @Nullable String table) {
if(_Strings.isEmpty(schema)) return null;
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifier.java b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifier.java
index acd39d2b8f2..03b8de75134 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifier.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifier.java
@@ -142,9 +142,6 @@ public CausewayBeanMetaData classify(final @NonNull LogicalType logicalType, fin
}
// entity support
- if(typeHead.isJdoPersistenceCapable()){
- return CausewayBeanMetaData.entity(named.get(), discoveredBy, PersistenceStack.JDO);
- }
if(typeHead.hasAnnotation(Entity.class)) {
return CausewayBeanMetaData.entity(named.get(), discoveredBy, PersistenceStack.JPA);
}
diff --git a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.java b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.java
index 1447911aab3..d50bddc42e6 100644
--- a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.java
+++ b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.java
@@ -63,55 +63,8 @@
@Entity
@Table(
- //identityType=IdentityType.DATASTORE,
schema = "libExcelFixture"
)
-//FIXME
-//@javax.jdo.annotations.Version(
-// strategy=VersionStrategy.VERSION_NUMBER,
-// column="version")
-//@javax.jdo.annotations.Uniques({
-// @javax.jdo.annotations.Unique(
-// name="ToDoItem_description_must_be_unique",
-// members={"ownedBy","description"})
-//})
-//@javax.jdo.annotations.Queries( {
-// @javax.jdo.annotations.Query(
-// name = "todo_all", language = "JDOQL",
-// value = "SELECT "
-// + "FROM " + ExcelDemoToDoItem.FQCN + " "
-// + "WHERE ownedBy == :ownedBy"),
-// @javax.jdo.annotations.Query(
-// name = "todo_notYetComplete", language = "JDOQL",
-// value = "SELECT "
-// + "FROM " + ExcelDemoToDoItem.FQCN + " "
-// + "WHERE ownedBy == :ownedBy "
-// + " && complete == false"),
-// @javax.jdo.annotations.Query(
-// name = "findByDescription", language = "JDOQL",
-// value = "SELECT "
-// + "FROM " + ExcelDemoToDoItem.FQCN + " "
-// + "WHERE ownedBy == :ownedBy "
-// + " && description == :description"),
-// @javax.jdo.annotations.Query(
-// name = "todo_complete", language = "JDOQL",
-// value = "SELECT "
-// + "FROM " + ExcelDemoToDoItem.FQCN + " "
-// + "WHERE ownedBy == :ownedBy "
-// + "&& complete == true"),
-// @javax.jdo.annotations.Query(
-// name = "todo_similarTo", language = "JDOQL",
-// value = "SELECT "
-// + "FROM " + ExcelDemoToDoItem.FQCN + " "
-// + "WHERE ownedBy == :ownedBy "
-// + "&& category == :category"),
-// @javax.jdo.annotations.Query(
-// name = "todo_autoComplete", language = "JDOQL",
-// value = "SELECT "
-// + "FROM " + ExcelDemoToDoItem.FQCN + " "
-// + "WHERE ownedBy == :ownedBy && "
-// + "description.indexOf(:description) >= 0")
-//})
@DomainObject(
autoCompleteRepository = ExcelDemoToDoItemMenu.class
)
diff --git a/extensions/vw/pdfjs/fixtures/.gitignore b/extensions/vw/pdfjs/fixtures/.gitignore
deleted file mode 100644
index 262b1fa4ef7..00000000000
--- a/extensions/vw/pdfjs/fixtures/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-translations.pot
diff --git a/extensions/vw/pdfjs/fixtures/pom.xml b/extensions/vw/pdfjs/fixtures/pom.xml
deleted file mode 100644
index d85e2c7721d..00000000000
--- a/extensions/vw/pdfjs/fixtures/pom.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-pdfjs</artifactId>
- <version>${revision}</version>
- </parent>
-
- <groupId>org.causewayaddons.wicket.pdfjs</groupId>
- <artifactId>causeway-extensions-pdfjs-fixtures</artifactId>
- <name>Apache Causeway Ext - Wicket Viewer - pdf.js (fixtures)</name>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.causeway.core</groupId>
- <artifactId>causeway-applib</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- </dependency>
-
-
- <dependency>
- <groupId>org.togglz</groupId>
- <artifactId>togglz-core</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.jdom</groupId>
- <artifactId>jdom2</artifactId>
- </dependency>
-
- <!-- test -->
- <dependency>
- <groupId>org.togglz</groupId>
- <artifactId>togglz-junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <scope>provided</scope>
- </dependency>
-
- </dependencies>
-
-</project>
diff --git a/extensions/vw/pdfjs/fixtures/src/main/java/META-INF/persistence.xml b/extensions/vw/pdfjs/fixtures/src/main/java/META-INF/persistence.xml
deleted file mode 100644
index 72b8f821c23..00000000000
--- a/extensions/vw/pdfjs/fixtures/src/main/java/META-INF/persistence.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
- 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.
--->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
-
- <persistence-unit name="org-causewayaddons-module-pdfjs-fixture">
- </persistence-unit>
-</persistence>
diff --git a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/PdfjsFixturesModule.java b/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/PdfjsFixturesModule.java
deleted file mode 100644
index e24db74100c..00000000000
--- a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/PdfjsFixturesModule.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.causewayaddons.wicket.pdfjs.fixture;
-
-import jakarta.xml.bind.annotation.XmlRootElement;
-
-import org.apache.causeway.applib.fixturescripts.FixtureScript;
-import org.apache.causeway.testing.fixtures.applib.modules.ModuleWithFixtures;
-
-import org.causewayaddons.wicket.pdfjs.fixture.demoapp.demomodule.fixturescripts.PdfJsDemoObjectWithBlob_tearDown;
-
-@XmlRootElement(name = "module")
-public class PdfjsFixturesModule implements ModuleWithFixtures {
-
- @Override public FixtureScript getTeardownFixture() {
- return new PdfJsDemoObjectWithBlob_tearDown();
- }
-
-}
diff --git a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/dom/PdfJsDemoObjectWithBlob.java b/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/dom/PdfJsDemoObjectWithBlob.java
deleted file mode 100644
index 8c612a3a4d3..00000000000
--- a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/dom/PdfJsDemoObjectWithBlob.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.causewayaddons.wicket.pdfjs.fixture.demoapp.demomodule.dom;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import javax.jdo.annotations.IdGeneratorStrategy;
-import javax.jdo.annotations.IdentityType;
-import javax.jdo.annotations.VersionStrategy;
-
-import org.wicketstuff.pdfjs.Scale;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.BookmarkPolicy;
-import org.apache.causeway.applib.annotation.DomainObject;
-import org.apache.causeway.applib.annotation.DomainObjectLayout;
-import org.apache.causeway.applib.annotation.Editing;
-import org.apache.causeway.applib.annotation.MemberOrder;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.Optionality;
-import org.apache.causeway.applib.annotation.Property;
-import org.apache.causeway.applib.annotation.PropertyLayout;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-import org.apache.causeway.applib.annotation.Title;
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.value.Blob;
-
-import org.causewayaddons.wicket.pdfjs.cpt.applib.PdfJsViewer;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@javax.jdo.annotations.PersistenceCapable(
- identityType=IdentityType.DATASTORE,
- schema = "wktPdfjsFixture"
-)
-@javax.jdo.annotations.DatastoreIdentity(strategy= IdGeneratorStrategy.IDENTITY, column = "id")
-@javax.jdo.annotations.Version(strategy=VersionStrategy.VERSION_NUMBER, column = "version")
-@DomainObject
-@DomainObjectLayout(
- bookmarking = BookmarkPolicy.AS_ROOT,
- cssClassUiEvent = PdfJsDemoObjectWithBlob.CssClassUiEvent.class
-)
-public class PdfJsDemoObjectWithBlob implements Comparable<PdfJsDemoObjectWithBlob> {
-
- public static class CssClassUiEvent
- extends org.apache.causeway.applib.services.eventbus.CssClassUiEvent<PdfJsDemoObjectWithBlob> {}
-
- @javax.jdo.annotations.Column(allowsNull="false")
- @Title(sequence="1")
- @Property(editing = Editing.ENABLED)
- @Getter @Setter
- private String name;
-
- @PropertyLayout(group = "name", sequence = "1")
- public PdfJsDemoObjectWithBlob updateName(String name) {
- setName(name);
- return this;
- }
- @MemberSupport public String default0UpdateName() {
- return getName();
- }
-
- @javax.jdo.annotations.Column(allowsNull="true")
- @Property(editing = Editing.ENABLED)
- @Getter @Setter
- private String url;
-
- @javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
- @javax.jdo.annotations.Column(name = "blob_name"),
- @javax.jdo.annotations.Column(name = "blob_mimetype"),
- @javax.jdo.annotations.Column(name = "blob_bytes", jdbcType = "BLOB", sqlType = "LONGVARBINARY")
- })
- @Property(optionality = Optionality.OPTIONAL, editing = Editing.ENABLED)
- @PropertyLayout(hidden = Where.ALL_TABLES)
- @Setter
- private Blob blob;
-
- // @Getter(onMethod = @__({ })) throwing a compile exception :-(
- @PdfJsViewer(initialPageNum = 1, initialScale = Scale._1_00, initialHeight = 600)
- public Blob getBlob() {
- return blob;
- }
-
- @Action(semantics = SemanticsOf.SAFE)
- @PropertyLayout(group = "url", sequence = "1")
- public URL openUrl() throws MalformedURLException {
- return new java.net.URL(getUrl());
- }
- @MemberSupport public String disableOpenUrl() {
- if (getUrl() == null)
- return "No URL to open";
- return null;
- }
-
- @Override
- public String toString() {
- return getName();
- }
-
- @Override
- public int compareTo(final PdfJsDemoObjectWithBlob other) {
- return Ordering.natural().onResultOf(PdfJsDemoObjectWithBlob::getName).compare(this, other);
- }
-
-}
diff --git a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/dom/PdfJsDemoObjectWithBlobMenu.java b/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/dom/PdfJsDemoObjectWithBlobMenu.java
deleted file mode 100644
index 9720c0fe4d0..00000000000
--- a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/dom/PdfJsDemoObjectWithBlobMenu.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.causewayaddons.wicket.pdfjs.fixture.demoapp.demomodule.dom;
-
-import java.util.List;
-
-import jakarta.inject.Named;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.BookmarkPolicy;
-import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.MemberOrder;
-import org.apache.causeway.applib.annotation.ParameterLayout;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-import org.apache.causeway.applib.services.repository.RepositoryService;
-
-@Named("wktPdfJsFixture.PdfJsDemoObjectWithBlobMenu")
-@DomainService
-@DomainServiceLayout(
- named = "Demo",
- menuOrder = "10.4"
-)
-@jakarta.annotation.Priority(PriorityPrecedence.EARLY)
-@RequiredArgsConstructor(onConstructor_ = { @Inject })
-public class PdfJsDemoObjectWithBlobMenu {
-
- final RepositoryService repositoryService;
-
- @Action(
- semantics = SemanticsOf.SAFE
- )
- @ActionLayout(
- bookmarking = BookmarkPolicy.AS_ROOT
- )
- @MemberOrder(sequence = "1")
- public List<PdfJsDemoObjectWithBlob> listAllDemoObjectsWithBlob() {
- return repositoryService.allInstances(PdfJsDemoObjectWithBlob.class);
- }
-
- @MemberOrder(sequence = "2")
- public PdfJsDemoObjectWithBlob createDemoObjectWithBlob(
- @ParameterLayout(named = "Name")
- final String name) {
- final PdfJsDemoObjectWithBlob obj = repositoryService.instantiate(PdfJsDemoObjectWithBlob.class);
- obj.setName(name);
- repositoryService.persist(obj);
- return obj;
- }
-
-}
diff --git a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/fixturescripts/PdfJsDemoObjectWithBlob_createUpTo5_fakeData.java b/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/fixturescripts/PdfJsDemoObjectWithBlob_createUpTo5_fakeData.java
deleted file mode 100644
index 239730c9266..00000000000
--- a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/fixturescripts/PdfJsDemoObjectWithBlob_createUpTo5_fakeData.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.causewayaddons.wicket.pdfjs.fixture.demoapp.demomodule.fixturescripts;
-
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.List;
-
-import jakarta.activation.MimeType;
-import jakarta.activation.MimeTypeParseException;
-
-import org.apache.causeway.applib.fixturescripts.FixtureScript;
-import org.apache.causeway.applib.value.Blob;
-
-import org.causewayaddons.module.fakedata.dom.FakeDataService;
-import org.causewayaddons.wicket.pdfjs.fixture.demoapp.demomodule.dom.PdfJsDemoObjectWithBlob;
-import org.causewayaddons.wicket.pdfjs.fixture.demoapp.demomodule.dom.PdfJsDemoObjectWithBlobMenu;
-
-import lombok.Getter;
-
-public class PdfJsDemoObjectWithBlob_createUpTo5_fakeData extends FixtureScript {
-
- @import jakarta.inject.Inject
- PdfJsDemoObjectWithBlobMenu demoObjectMenu;
-
- @import jakarta.inject.Inject
- FakeDataService fakeDataService;
-
- @Getter
- private Integer number ;
- public PdfJsDemoObjectWithBlob_createUpTo5_fakeData setNumber(final Integer number) {
- this.number = number;
- return this;
- }
-
- @Getter
- private List<PdfJsDemoObjectWithBlob> demoObjects = Lists.newArrayList();
-
- @Override
- protected void execute(final ExecutionContext ec) {
-
- defaultParam("number", ec, 3);
- if(getNumber() < 1 || getNumber() > 5) {
- // there are 5 sample PDFs
- throw new IllegalArgumentException("number of demo objects to create must be within [1,5]");
- }
-
- for (int i = 0; i < getNumber(); i++) {
- final PdfJsDemoObjectWithBlob demoObject = create(i, ec);
- getDemoObjects().add(demoObject);
- }
- }
-
- private PdfJsDemoObjectWithBlob create(final int n, final ExecutionContext ec) {
- final String name = fakeDataService.name().firstName();
-
- final String documentName = "Sample" + (n + 1) + ".PDF";
- final String urlStr = "http://www.pdfpdf.com/samples/" + documentName;
-
- Blob blob = asBlob(documentName, urlStr);
-
- final PdfJsDemoObjectWithBlob demoObject = wrap(demoObjectMenu).createDemoObjectWithBlob(name);
- wrap(demoObject).setUrl(urlStr);
- wrap(demoObject).setBlob(blob);
-
- return ec.addResult(this, demoObject);
- }
-
- private Blob asBlob(final String documentName, final String urlStr) {
- try {
- final URL url = new URL(urlStr);
-
- final HttpURLConnection httpConn = openConnection(url);
- final String contentType = httpConn.getContentType();
- final MimeType mimeType = determineMimeType(contentType);
-
- httpConn.disconnect();
-
- final ByteSource byteSource = Resources.asByteSource(url);
- final byte[] bytes = byteSource.read();
-
- return new Blob(documentName, mimeType.getBaseType(), bytes);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- private HttpURLConnection openConnection(final URL url) throws IOException {
- final HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
- final int responseCode = httpConn.getResponseCode();
- if (responseCode != HttpURLConnection.HTTP_OK) {
- throw new RuntimeException("Response code: " + responseCode);
- }
- return httpConn;
- }
-
- private MimeType determineMimeType(final String contentType) throws MimeTypeParseException {
- final String mimeType = parseMimeType(contentType);
- if(mimeType == null) {
- return null;
- }
- return new MimeType(mimeType);
- }
-
- // text/plain; charset=UTF-8
- private String parseMimeType(final String contentType) {
- final Iterable<String> values = Splitter.on(";").split(contentType);
- for (String value : values) {
- // is simply the first part
- return value.trim();
- }
-
- return null;
- }
-
-}
diff --git a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/fixturescripts/PdfJsDemoObjectWithBlob_tearDown.java b/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/fixturescripts/PdfJsDemoObjectWithBlob_tearDown.java
deleted file mode 100644
index 7a91b622a0f..00000000000
--- a/extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/fixturescripts/PdfJsDemoObjectWithBlob_tearDown.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.causewayaddons.wicket.pdfjs.fixture.demoapp.demomodule.fixturescripts;
-
-import org.apache.causeway.applib.fixturescripts.teardown.TeardownFixtureAbstract2;
-
-import org.causewayaddons.wicket.pdfjs.fixture.demoapp.demomodule.dom.PdfJsDemoObjectWithBlob;
-
-public class PdfJsDemoObjectWithBlob_tearDown extends TeardownFixtureAbstract2 {
-
- @Override
- protected void execute(final ExecutionContext executionContext) {
- deleteFrom(PdfJsDemoObjectWithBlob.class);
- }
-
-}
diff --git a/starters/adoc/modules/starters/pages/helloworld.adoc b/starters/adoc/modules/starters/pages/helloworld.adoc
index 458213ca3e2..d1f6736e242 100644
--- a/starters/adoc/modules/starters/pages/helloworld.adoc
+++ b/starters/adoc/modules/starters/pages/helloworld.adoc
@@ -317,8 +317,7 @@ The `jpa` branch also has the `HelloWorldRepository` Spring Data service.
* all entities.
+
-These are entities that are annotated with both xref:refguide:applib:index/annotation/DomainObject.adoc[@DomainObject] annotation and with the ORM-specific annotation.
-For `jdo` branch, this is `@javax.jdo.annotations.PersistenceCapable`; for the `jpa` branch this is `@javax.persistence.Entity`).
+These are entities that are annotated with both xref:refguide:applib:index/annotation/DomainObject.adoc[@DomainObject] annotation and with the JPA `@jakarta.persistence.Entity` annotation.
+
In the helloworld starter app, the only entity is `HelloWorldObject`.
diff --git a/starters/adoc/modules/starters/pages/simpleapp.adoc b/starters/adoc/modules/starters/pages/simpleapp.adoc
index a5c6b6f4081..98aceff1f20 100644
--- a/starters/adoc/modules/starters/pages/simpleapp.adoc
+++ b/starters/adoc/modules/starters/pages/simpleapp.adoc
@@ -499,8 +499,7 @@ The `jpa` branch also has the `SimpleObjectRepository` Spring Data service.
* all entities.
+
-These are entities that are annotated with both xref:refguide:applib:index/annotation/DomainObject.adoc[@DomainObject] annotation and with the ORM-specific annotation.
-For `jdo` branch, this is `@javax.jdo.annotations.PersistenceCapable`; for the `jpa` branch this is `@javax.persistence.Entity`).
+These are entities that are annotated with both xref:refguide:applib:index/annotation/DomainObject.adoc[@DomainObject] annotation and with the JPA `@jakarta.persistence.Entity` annotation.
+
In the simpleapp starter app, the only entity is `SimpleObject`.
diff --git a/testing/fakedata/fixtures/src/main/java/org/apache/causeway/testing/fakedata/fixtures/demoapp/demomodule/dom/FakeDataDemoObjectWithAll.java b/testing/fakedata/fixtures/src/main/java/org/apache/causeway/testing/fakedata/fixtures/demoapp/demomodule/dom/FakeDataDemoObjectWithAll.java
index 8931566a2f5..ed140e83204 100644
--- a/testing/fakedata/fixtures/src/main/java/org/apache/causeway/testing/fakedata/fixtures/demoapp/demomodule/dom/FakeDataDemoObjectWithAll.java
+++ b/testing/fakedata/fixtures/src/main/java/org/apache/causeway/testing/fakedata/fixtures/demoapp/demomodule/dom/FakeDataDemoObjectWithAll.java
@@ -61,13 +61,8 @@
@Entity
@Table(
- //FIXME identityType=IdentityType.DATASTORE,
schema = "libFakeDataFixture"
)
-//FIXME
-//@javax.jdo.annotations.Version(
-// strategy=VersionStrategy.VERSION_NUMBER,
-// column="version")
@DomainObject(editing = Editing.DISABLED)
@DomainObjectLayout(bookmarking = BookmarkPolicy.AS_ROOT)
@NoArgsConstructor
@@ -150,28 +145,15 @@ public FakeDataDemoObjectWithAll(final String name) {
@Column(nullable = true)
private String someString;
- //FIXME @javax.jdo.annotations.Persistent()
@Column(nullable = true)
@Getter @Setter
@Property(optionality=Optionality.OPTIONAL)
private Password somePassword;
- //FIXME
-// @javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
-// @javax.jdo.annotations.Column(name = "someBlob_name"),
-// @javax.jdo.annotations.Column(name = "someBlob_mimetype"),
-// @javax.jdo.annotations.Column(name = "someBlob_bytes", jdbcType = "BLOB", sqlType = "LONGVARBINARY")
-// })
@Getter @Setter
@Property(optionality = Optionality.OPTIONAL)
private Blob someBlob;
-//FIXME
-// @javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
-// @javax.jdo.annotations.Column(name = "someClob_name"),
-// @javax.jdo.annotations.Column(name = "someClob_mimetype"),
-// @javax.jdo.annotations.Column(name = "someClob_chars", jdbcType = "CLOB", sqlType = "LONGVARCHAR")
-// })
@Getter @Setter
@Property(optionality=Optionality.OPTIONAL)
private Clob someClob;
@@ -185,12 +167,10 @@ public FakeDataDemoObjectWithAll(final String name) {
private java.sql.Date someJavaSqlDate;
@Column(nullable = true)
- //FIXME @javax.jdo.annotations.Persistent(defaultFetchGroup="true")
@Getter @Setter
private LocalDate someLocalDate;
@Column(nullable = true)
- //FIXME @javax.jdo.annotations.Persistent(defaultFetchGroup="true")
@Getter @Setter
private ZonedDateTime someZonedDateTime;
@@ -214,14 +194,6 @@ public FakeDataDemoObjectWithAll(final String name) {
@Getter @Setter
private java.util.UUID someUuid;
-// @javax.jdo.annotations.Persistent(defaultFetchGroup="true", columns = {
-// @javax.jdo.annotations.Column(name = "someMoneyOptional_amount"),
-// @javax.jdo.annotations.Column(name = "someMoneyOptional_currency")
-// })
-// @Property(optionality = Optionality.OPTIONAL)
-// @Getter @Setter
-// private Money someMoney;
-
@Column(nullable = true)
@Getter @Setter
private EnumOf3 someEnumOf3;
@@ -518,7 +490,6 @@ public FakeDataDemoObjectWithAll resetSomeLocalDate() {
return this;
}
- //FIXME @javax.jdo.annotations.Persistent(defaultFetchGroup="true")
@Column(nullable = true)
@Getter @Setter
private LocalDateTime someLocalDateTime;
diff --git a/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips.adoc b/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips.adoc
index 18f5f1b233c..2940db5fc20 100644
--- a/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips.adoc
+++ b/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips.adoc
@@ -14,7 +14,6 @@ This section provides a few hints-and-tips to help you on your way.
include::hints-and-tips/pretty-printing.adoc[leveloffset=+1]
include::hints-and-tips/restful-image-property.adoc[leveloffset=+1]
include::hints-and-tips/view-model-as-parameter.adoc[leveloffset=+1]
-include::hints-and-tips/troubleshooting.adoc[leveloffset=+1]
//https://lists.apache.org/thread.html/cbd18320bbf6e5c5e767283f9e675cf56e7f4692c109e1e79dbaa90a@%3Cusers.causeway.apache.org%3E // FIXME: to add
diff --git a/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips/troubleshooting.adoc b/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips/troubleshooting.adoc
deleted file mode 100644
index a13e4907e2f..00000000000
--- a/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips/troubleshooting.adoc
+++ /dev/null
@@ -1,88 +0,0 @@
-[[troubleshooting]]
-= Troubleshooting
-
-: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 [...]
-
-== Exception
-
-When invoking a REST service and getting a response with an embeded stacktrace like:
-
-[source,json]
-----
-{
- "httpStatusCode": 500,
- "message": "com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
-Klasse enthält zwei Eigenschaften mit demselben Namen \"name\"
- this problem is related to the following location:
- at public java.lang.String ife.dep.ServiceName.getName()
- at ife.dep.ServiceName
- at public ife.dep.ServiceName ife.dep.ProvidedService.getServiceName()
- at ife.dep.ProvidedService
- at public java.util.SortedSet ife.dep.Release.getCapabilities()
- at ife.dep.Release
- at public ife.dep.Release ife.cfg.Configuration.getRelease()
- at ife.cfg.Configuration
- at public ife.cfg.Configuration ife.cfg.ConfigEntry.getConfiguration()
- at ife.cfg.ConfigEntry
- at public java.util.SortedSet ife.cfg.Endpoint.getCfgEntries()
- at ife.cfg.Endpoint
- this problem is related to the following location:
- at public java.lang.String ife.dep.ServiceName.name
- at ife.dep.ServiceName
- at public ife.dep.ServiceName ife.dep.ProvidedService.getServiceName()
- at ife.dep.ProvidedService
- at public java.util.SortedSet ife.dep.Release.getCapabilities()
- at ife.dep.Release
- at public ife.dep.Release ife.cfg.Configuration.getRelease()
- at ife.cfg.Configuration
- at public ife.cfg.Configuration ife.cfg.ConfigEntry.getConfiguration()
- at ife.cfg.ConfigEntry
- at public java.util.SortedSet ife.cfg.Endpoint.getCfgEntries()
- at ife.cfg.Endpoint
-",
-[...]
-}
-----
-
-== Solution
-Add `@XmlAccessorType(XmlAccessType.FIELD)` to your domain entity:
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable(identityType = IdentityType.DATASTORE)
-@javax.jdo.annotations.DatastoreIdentity(strategy = javax.jdo.annotations.IdGeneratorStrategy.NATIVE, column = "id")
-@javax.jdo.annotations.Version(strategy = VersionStrategy.VERSION_NUMBER, column = "version")
-@Named("xxx.ServiceName")
-@DomainObject(bounded = true)
-@DomainObjectLayout(cssClassFa = "tag", describedAs = "")
-@XmlAccessorType(XmlAccessType.FIELD)
-@SuppressWarnings("javadoc")
-public class ServiceName implements Capability, Comparable<ServiceName> {
-
- public String title() {
- return getName();
- }
-
- public int compareTo(ServiceName o) {
- return name.compareTo(o.name);
- }
-
- @Override
- public String toString() {
- return title();
- }
-
- @javax.jdo.annotations.Column(allowsNull = "false")
- @Getter @Setter
- public String name;
-
- public boolean isSynchronous() {
- return !isAsynchonous();
- }
-
- public boolean isAsynchonous() {
- return name.startsWith(Constants.ESB_JMS_PREFIX);
- }
-}
-----
-
(causeway) 17/36: CAUSEWAY-3866: updates references to javax.annotation
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 9ca6900f0d6faad6730c4bdf5b45212b1d0b1f1a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 09:12:16 2025 +0100
CAUSEWAY-3866: updates references to javax.annotation
---
.../hooks/DomainServiceLayout_021-menuBar.adoc | 2 +-
...ontentMappingService_020-examples-and-usage.adoc | 2 +-
.../GridSystemService_020-examples-and-usage.adoc | 2 +-
.../RoutingService_020-examples-and-usage.adoc | 2 +-
.../refguide/modules/applib-ant/pages/Nullable.adoc | 21 +++++++++++----------
.../refguide/modules/applib-svc/pages/about.adoc | 4 ++--
.../partials/domain-services/initialization.adoc | 2 +-
.../partials/domain-services/inject-services.adoc | 2 +-
.../ROOT/partials/domain-services/overriding.adoc | 2 +-
.../properties-collections-actions/properties.adoc | 2 +-
.../replacing-default-service-implementations.adoc | 2 +-
.../main/adoc/modules/webapp/pages/webmodules.adoc | 2 +-
.../CausewayModulePersistenceJpaEclipselink.java | 1 +
13 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainServiceLayout_021-menuBar.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainServiceLayout_021-menuBar.adoc
index a3a6788b7a0..945e2ac608c 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainServiceLayout_021-menuBar.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/DomainServiceLayout_021-menuBar.adoc
@@ -24,7 +24,7 @@ In the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)], domain services placed:
* on the `SECONDARY` menu bar appear to the right:
* on the `TERTIARY` appear in the menu bar associated with the user's name (far top-right)
-The grouping of multiple domain services actions within a single drop-down is managed by the `@javax.annotation.Priority` annotation.
+The grouping of multiple domain services actions within a single drop-down is managed by the `@jakarta.annotation.Priority` annotation.
NOTE: The xref:vro:ROOT:about.adoc[RestfulObjects viewer] does not support this attribute.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/conmap/hooks/ContentMappingService_020-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/conmap/hooks/ContentMappingService_020-examples-and-usage.adoc
index 13ffc3ca608..7242a618e27 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/conmap/hooks/ContentMappingService_020-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/conmap/hooks/ContentMappingService_020-examples-and-usage.adoc
@@ -7,7 +7,7 @@
The `ContentMappingService` supports the (default implementation of the) internal xref:refguide:viewer:index/restfulobjects/rendering/service/conneg/ContentNegotiationService.adoc[ContentNegotiationService] SPI enabling the xref:vro:ROOT:about.adoc[RestfulObjects viewer] to represent domain objects in some other format as specified by the HTTP `Accept` header.
For its part, the (default implementation of the) `ContentNegotiationService` will check _all_ available implementations of `ContentMappingService` to convert the domain object to the requested media type, rather than merely the first implementation found; in other words it uses the link:https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern[chain-of-responsibility] pattern.
-Services are checked in the ordering defined by the `@javax.annotation.Priority` annotation.
+Services are checked in the ordering defined by the `@jakarta.annotation.Priority` annotation.
The mapped object used will be the first (= earlies encountered) non-`null` result returned by an implementation.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridSystemService_020-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridSystemService_020-examples-and-usage.adoc
index 3e98e1ee783..c7428d79394 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridSystemService_020-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridSystemService_020-examples-and-usage.adoc
@@ -4,7 +4,7 @@
== Usage Notes
The framework will check _all_ available implementations of `GridSystemService` to obtain available grid systems, rather than merely the first implementation found, to determine if a grid is available for the domain object to be rendered; in other words it uses the link:https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern[chain-of-responsibility] pattern.
-Services are called in the order defined by the `@javax.annotation.Priority` annotation.
+Services are called in the order defined by the `@jakarta.annotation.Priority` annotation.
Note though that each concrete implementation must also provide corresponding Wicket viewer components capable of interpreting the grid layout.
This is therefore a highly specialized and very deep customisation of the framework.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/routing/hooks/RoutingService_020-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/routing/hooks/RoutingService_020-examples-and-usage.adoc
index e20226f3efe..bb20cf5ce88 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/routing/hooks/RoutingService_020-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/routing/hooks/RoutingService_020-examples-and-usage.adoc
@@ -7,7 +7,7 @@
Unlike most other domain services, the framework will check _all_ available implementations of `RoutingService` to return a route, rather than the first implementation found; in other words it uses the chain-of-responsibility pattern.
-Services are called in the order defined by the `@javax.annotation.Priority` annotation.
+Services are called in the order defined by the `@jakarta.annotation.Priority` annotation.
The route used will be the result of the first implementation checked that declares that it can provide a route.
diff --git a/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc b/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
index 47645df9e1e..0a19fa890bf 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
@@ -1,5 +1,5 @@
[#jakarta-annotation-Nullable]
-= @Nullable (jakarta.annotation)
+= @Nullable (jakarta.annotation & org.jspecify.annotations)
: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 [...]
@@ -7,26 +7,27 @@
Apache Causeway' defaults for properties and parameters is that they are mandatory unless otherwise stated.
-The `@javax.annotation.Nullable` annotation is recognized by Apache Causeway for both properties and parameters as means to indicate that the property/parameter is not mandatory.
+Both the `@jakarta.annotation.Nullable` annotation and `@org.jspecify.annotations.Nullable` annotation are recognized by Apache Causeway for both properties and parameters as means to indicate that the property/parameter is not mandatory.
For example:
[source,java]
----
-@javax.annotation.Nullable
-public String getName() {
- return name;
-}
-public void setName(final String name) {
- this.name = name;
-}
+import jakarta.annotation.Nullable;
+
+@Nullable
+@Getter @Setter
+private String name;
----
or:
[source,java]
----
-public Customer updateName(@javax.annotation.Nullable final String name) {
+import jakarta.annotation.Nullable;
+
+public Customer updateName(
+ @Nullable final String name) {
setName(name);
return this;
}
diff --git a/antora/components/refguide/modules/applib-svc/pages/about.adoc b/antora/components/refguide/modules/applib-svc/pages/about.adoc
index 2004d5e61b7..f8719ba7add 100644
--- a/antora/components/refguide/modules/applib-svc/pages/about.adoc
+++ b/antora/components/refguide/modules/applib-svc/pages/about.adoc
@@ -20,7 +20,7 @@ What distinguishes API from SPI is primarily whether it is called by the domain
In one sense all API domain services are also SPI, in that they can be overridden by the domain programmer providing another domain service implementing the same type.
For example, the framework-provided implementation of xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService] could be overridden this way, perhaps for more monitoring or caching purposes.
-This is done using the `@javax.annotation.Priority` annotation.
+This is done using the `@jakarta.annotation.Priority` annotation.
Generally speaking in such cases the earliest encountered implementation (= highest priority) will be used instead of the framework-provided implementation.
For some services, though, _all_ available implementations are delegated to; these are typically subscribers such as xref:refguide:applib:index/services/publishing/spi/EntityPropertyChangeSubscriber.adoc[EntityPropertyChangeSubscriber].
@@ -98,7 +98,7 @@ Alternatively the object can be instantiated simply using `new`, then services i
The framework provides default implementations for many of the domain services.
This is convenient, but sometimes you will want to replace the default implementation with your own service implementation.
-This is most commonly done using the `@javax.annotation.Priority` annotation.
+This is most commonly done using the `@jakarta.annotation.Priority` annotation.
The xref:refguide:applib:index/annotation/PriorityPrecedence.adoc[PriorityPrecedence] class provides some pre-defined precedences.
* If a scalar field is being injected to, the earliest implementation encountered (= highest priority) is used
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/initialization.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/initialization.adoc
index c173b6c884d..89bac7053fa 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/initialization.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/initialization.adoc
@@ -10,7 +10,7 @@ In many cases, such initialization can be performed within the constructor.
If the initialization has dependencies, then these can be injected using standard link:https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-spring-beans-and-dependency-injection[constructor injection].
Alternatively, initialization can be moved into a `@PostConstruct` link:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-postconstruct-and-predestroy-annotations[lifecycle callback].
-Shutdown is similar; the framework will call any method annotated with `javax.annotation.PreDestroy`.
+Shutdown is similar; the framework will call any method annotated with `jakarta.annotation.PreDestroy`.
If a domain service needs to wait until the framework is fully initialized though, it should register for the `MetamodelEvent` that is emitted by the framework itself.
One example is if the service is to seed some reference data:
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/inject-services.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/inject-services.adoc
index 8d98e1df8dd..a3147c8f2a1 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/inject-services.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/inject-services.adoc
@@ -162,7 +162,7 @@ public class DocumentService {
}
----
-These will be in the order as defined by the `@javax.annotation.Priority` annotation.
+These will be in the order as defined by the `@jakarta.annotation.Priority` annotation.
This pattern can be useful when implementing the link:https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern[chain of responsibility] design pattern, that is, looking for the first implementation that can handle a request.
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-services/overriding.adoc b/antora/components/userguide/modules/ROOT/partials/domain-services/overriding.adoc
index c27f40bc244..af3b502ef80 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-services/overriding.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-services/overriding.adoc
@@ -4,7 +4,7 @@
:page-partial:
Apache Causeway runs on top of Spring Boot, and relies on Spring Boot for dependency injection using `@javax.inject.Inject`.
-The `@javax.annotation.Priority` annotation is used to prioritize multiple service implementations.
+The `@jakarta.annotation.Priority` annotation is used to prioritize multiple service implementations.
This allows any framework-provided domain service to be replaced by a user-defined one if required, simply by assigning it with an earlier precedence (= higher priority).
If this is done, then you will probably also want to implement your replacement using `@org.springframework.context.annotation.Primary`, to resolve the ambiguity of there being more than one implementation of the service on the classpath.
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
index 50562a05401..44e9935fb84 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
@@ -84,7 +84,7 @@ However, it _isn't_ valid for a domain entity to hold a reference to view model,
To override optionality, use the `@Basic(optional="...")` annotation.
Apache Causeway on the other hand assumes that all properties (and action parameters, for that matter) are mandatory, not optional.
-These defaults can also be overridden using Apache Causeway' own annotations, specifically `@Property(optionality=...)`, or (because it's much less verbose) using `@javax.annotation.Nullable`.
+These defaults can also be overridden using Apache Causeway' own annotations, specifically `@Property(optionality=...)`, or (because it's much less verbose) using either `@jakarta.annotation.Nullable` or `@org.jspecify.annotations.Nullable`.
These different defaults can lead to incompatibilities between the two frameworks.
To counteract that, Apache Causeway also recognizes and honours JPA's `@Column(nullable=...)`.
diff --git a/antora/components/userguide/modules/btb/partials/hints-and-tips/replacing-default-service-implementations.adoc b/antora/components/userguide/modules/btb/partials/hints-and-tips/replacing-default-service-implementations.adoc
index 84f7c60c6af..d508c2f5311 100644
--- a/antora/components/userguide/modules/btb/partials/hints-and-tips/replacing-default-service-implementations.adoc
+++ b/antora/components/userguide/modules/btb/partials/hints-and-tips/replacing-default-service-implementations.adoc
@@ -10,7 +10,7 @@ The framework provides default implementations for many of the xref:refguide:app
This is convenient, but sometimes you will want to replace the default implementation with your own service implementation.
For example, suppose you wanted to provide your own implementation of xref:refguide:applib:index/services/i18n/LanguageProvider.adoc[LanguageProvider].
-The trick is to use the `@javax.annotation.Priority` annotation.
+The trick is to use the `@jakarta.annotation.Priority` annotation.
Here's how:
diff --git a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
index e240b8b4ed3..d73fdae1790 100644
--- a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
+++ b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
@@ -5,7 +5,7 @@
The `WebModule` interface allows modules to dynamically configure ``Filter``s, ``Servlet``s and ``ServletContextListener``s.
-The `@javax.annotation.Priority` annotation is used to ensure that the request chain is sequenced correctly.
+The `@jakarta.annotation.Priority` annotation is used to ensure that the request chain is sequenced correctly.
.WebModules (priority determines filter sequence, earliest first)
[cols="6m,^4a,^2a,^3m,^3m,8a", options="header"]
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
index 29c8df92492..54baf7dfd28 100644
--- a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
@@ -72,6 +72,7 @@ public class CausewayModulePersistenceJpaEclipselink extends JpaBaseConfiguratio
@Inject private ElSettings elSettings;
+ @Inject
protected CausewayModulePersistenceJpaEclipselink(
final CausewayConfiguration causewayConfiguration,
final DataSource dataSource,
(causeway) 31/36: CAUSEWAY-3866: adds docs for Embeddable, Entity, value types
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 5420d89b3b91bed5d67988ae578508bcbe29dad9
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 19 10:13:58 2025 +0100
CAUSEWAY-3866: adds docs for Embeddable, Entity, value types
---
.../modules/applib-ant/pages/Embeddable.adoc | 81 +++++++++++++++++++++
.../refguide/modules/applib-ant/pages/Entity.adoc | 25 ++++++-
.../modules/applib-ant/partials/about/jpa.adoc | 21 ++++--
.../modules/applib-classes/pages/value-types.adoc | 83 ++++++++++++++++++----
4 files changed, 193 insertions(+), 17 deletions(-)
diff --git a/antora/components/refguide/modules/applib-ant/pages/Embeddable.adoc b/antora/components/refguide/modules/applib-ant/pages/Embeddable.adoc
new file mode 100644
index 00000000000..6c2f0091d38
--- /dev/null
+++ b/antora/components/refguide/modules/applib-ant/pages/Embeddable.adoc
@@ -0,0 +1,81 @@
+[#jakarta-persistence-Embeddable]
+= @Embeddable (jpa)
+
+: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 `@jakarta.persistence.Embeddable` is used by JPA to indicate that a class is persisted inline within a containing domain entity.
+
+== Mutability
+
+If the embeddable class is mutable, then the semantics are a dependent entity in 1:1 relationship with its containing domain entity.
+In Apache Causeway, this should be modelled as a view model, and will be rendered in the UI as a reference (hyperlink) to the associated object.
+
+If the embeddable class is immutable, then the semantics are closer to a composite value type.
+In most cases the framework won't be able to render the object directly, but a representation of the object could be derived.
+An example is xref:refguide:persistence:index/jpa/applib/types/BlobJpaEmbeddable.adoc[] and xref:refguide:persistence:index/jpa/applib/types/ClobJpaEmbeddable.adoc[], which persist the state for `Blob` and `Clob` respectively, and which provide convenient helpers to marshal between them.
+Other value types could be represented using xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDoc.adoc[] or similar.
+
+== Example
+
+For example:
+
+[source,java]
+.PostalAddress.java
+----
+import jakarta.persistence.*;
+
+@Embeddable // <.>
+@AllArgsConstructor
+@Getter @Setter
+public class PostalAddress {
+
+ private String firstLine;
+ private String secondLine;
+ private String city;
+ private String postalCode;
+ private String country;
+
+ public AsciiDoc toAsciiDoc() { // <.>
+ // ...
+ }
+
+}
+----
+<.> Indicates that this is an embeddable object
+<.> Returns a renderable representation of this object
+
+This could then be used as so:
+
+[source,java]
+.Customer.java
+----
+import jakarta.persistence.*;
+
+@Entity
+public class Customer {
+
+ @Embedded // <.>
+ private PostalAddress homeAddress;
+
+ public AsciiDoc getHomeAddress() { // <.>
+ return Optional.ofNullable(homeAddress)
+ .map(CustomerAddress::toAsciiDoc)
+ .orElse(null);
+ }
+
+ @Action(semantics = IDEMPOTENT)
+ public Customer updateHomeAddress( // <.>
+ String firstLine,
+ String secondLine,
+ String city,
+ String postalCode,
+ String country) {
+ this.homeAddress = new PostalAddress(/*...*/);
+ return this;
+ }
+}
+----
+<.> Indicates that the state of the referenced `PostalAddress` should be stored inline within the same table that stores the ``Customer``'s own data
+<.> Renders the address using AsciiDoc
+<.> Allows the state of the embedded object to be updated (or replaced).
+
diff --git a/antora/components/refguide/modules/applib-ant/pages/Entity.adoc b/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
index 082e79e690b..36ddf736735 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
@@ -7,7 +7,30 @@
The `@jakarta.persistence.Entity` is used by JPA to indicate that a class is a domain entity to be persisted to the database.
-Apache Causeway also checks for this annotation ...
+For example:
+
+[source,java]
+.Customer.java
+----
+import jakarta.persistence.*;
+
+@Entity // <.>
+public class Customer {
+
+ @Id // <.>
+ @GeneratedValue(strategy = GenerationType.AUTO) // <2>
+ @Column(name = "id", nullable = false) // <2>
+ private Long id;
+
+ // ...
+
+}
+----
+<.> Indicates that this entity is a JPA entity
+<.> JPA entities are required to declare an identifier.
+It's very common for this to be a surrogate identifier, with the value assigned by the database when the object is persisted.
+
+Apache Causeway currently does not infer any other semantics from this annotation.
[NOTE]
====
diff --git a/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc b/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
index fcc9f96d1a0..bec4ef2ff53 100644
--- a/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
+++ b/antora/components/refguide/modules/applib-ant/partials/about/jpa.adoc
@@ -15,10 +15,21 @@ The table below lists the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] annotations
|Layer
|Applies to
+|xref:refguide:applib-ant:Embeddable.adoc[@jakarta. +
+persistence. +
+Embeddable]
+|Indicates that the class is an embeddable (and ideally immutable) value object.
+Embeddable objects are stored in-line with a containing entity (which uses the `@Embedded` annotation to do so).
-|xref:refguide:applib-ant:Entity.adoc[@jakarta.persistence. +
+
+|Domain / persistence
+|Class
+
+
+|xref:refguide:applib-ant:Entity.adoc[@jakarta. +
+persistence. +
Entity]
-|Flags that the class is an entity, creating an abstraction layer through which the Causeway framework interacts with the underlying persistent domain object.
+|Indicates that the class is a entity, mapping to a (usually updateable) table or view in the underlying RDBMS.
|Domain / persistence
|Class
@@ -40,13 +51,15 @@ Causeway also parses the following JPA annotations, but the metadata is currentl
|Applies to
-|`@jakarta.persistence. +
+|`@jakarta. +
+persistence. +
Transient`
|Unused
|Persistence
|Property
-|`@jakarta.persistence. +
+|`@jakarta. +
+persistence. +
Table`
|Unused
|Persistence
diff --git a/antora/components/refguide/modules/applib-classes/pages/value-types.adoc b/antora/components/refguide/modules/applib-classes/pages/value-types.adoc
index ad739345515..ca6c1293db6 100644
--- a/antora/components/refguide/modules/applib-classes/pages/value-types.adoc
+++ b/antora/components/refguide/modules/applib-classes/pages/value-types.adoc
@@ -7,9 +7,9 @@
== Built-in
-Apache Causeway can render and persist all of the JDK primitives and wrapper classes, and a number of other JDK (7.x) classes that represent value types.
+Apache Causeway can render and persist all of the JDK primitives and wrapper classes, and a number of other JDK classes that represent value types.
-It also supports some of the link:http://www.joda.org/joda-time/[Joda-Time] datatypes, and a number of value types that are shipped by the framework itself.
+It also supports a number of value types that are shipped by the framework itself.
In addition to primitives, the JDK Classes supported are:
@@ -17,7 +17,10 @@ In addition to primitives, the JDK Classes supported are:
** `java.lang.Boolean`, `java.lang.Character`, `java.lang.Double`, `java.lang.Float`, `java.lang.Long`, `java.lang.Integer`, `java.lang.Short`, `java.lang.Byte`
-* `java.lang.String`
+* strings and similar: classes:
+
+** `java.lang.String`
+** any enum (subtype of `java.lang.Enum`)
* numeric data types:
@@ -31,29 +34,85 @@ In addition to primitives, the JDK Classes supported are:
** `java.sql.Timestamp`
** `java.util.Date`
+* JDK 8 datetime types:
-== Joda Time
-
-It also supports these Joda-Time classes:
+** `java.time.LocalDate`
+** `java.time.LocalTime`
+** `java.time.LocalDateTime`
+** `java.time.OffsetDateTime`
+** `java.time.OffsetTime`
+** `java.time.ZonedDateTime`
-* `org.joda.time.DateTime`
-* `org.joda.time.LocalDateTime`
-* `org.joda.time.LocalDate`
+* miscellaneous:
+** `java.net.URL`
+** `java.util.UUID`
+** `java.util.Locale`
+** `java.awt.BufferedImage`
+* xref:latest@vw:fullcalendar:about.adoc[] defines its own `CalendarEvent` value type.
== Framework-defined
The framework also defines a number of custom value types:
+
+
+
* xref:refguide:applib:index/value/Blob.adoc[Blob]
* xref:refguide:applib:index/value/Clob.adoc[Clob]
* xref:refguide:applib:index/value/Markup.adoc[Markup]
-* xref:refguide:applib:index/value/LocalResourcePath.adoc[LocalResourcePath]
++
+Rendered as HTML.
+
* xref:refguide:applib:index/value/Password.adoc[Password]
++
+Holds a string whose value is suppressed in the UI.
++
+CAUTION: Note that this string is unencrypted.
+
+* xref:refguide:applib:index/value/LocalResourcePath.adoc[LocalResourcePath]
++
+Represents a local resource relative to the application's context root (eg a servlet or controller).
++
+Actions that return results of this type result in a browser redirect to the resource.
+This is therefore a way to redirect to a custom controller.
+
+* xref:refguide:applib:index/graph/tree/TreePath.adoc[TreePath] and xref:refguide:applib:index/graph/tree/TreeNode.adoc[TreeNode]
++
+These can be used to render filesystem structures and similar
+
+In addition, there are a number of non-core value types that can be brought in individually:
+
+** xref:refguide:valuetypes:index/asciidoc/applib/value/AsciiDoc.adoc[]
++
+Rendered as HTML.
+
+** xref:refguide:valuetypes:index/markdown/applib/value/Markdown.adoc[]
++
+Rendered as HTML.
+
+** xref:refguide:valuetypes:index/vega/applib/value/Vega.adoc[]
++
+Rendered as a dynamic graph.
+Content is a graph as described using the link:https://vega.github.io/vega-lite/[Vega-lite] grammar.
+
+More details of the above non-core value types can be found in the xref:valuetypes:ROOT:about.adoc[Value Types] catalog.
+
+The core framework also defines a number of value types whose use is primarily internal:
+
+* xref:refguide:applib:index/services/bookmark/Bookmark.adoc[Bookmark]
+* anything supported by xref:refguide:applib:index/services/bookmark/IdStringifier.adoc[IdStringifier]
++
+Used by the xref:userguide:commandlog:about.adoc[], xref:userguide:executionlog:about.adoc[], xref:userguide:executionoutbox:about.adoc[] and xref:security:sessionlog:about.adoc[] externsions modules so that their application primary keys of their corresponding entities are recognised as value types
+
+* `ApplicationFeatureIdValueSemantics`
+
+The xref:refguide:schema:about.adoc[] of XSDs define a number of DTOs (persisted by the above core extensions) which are also recognised as value types:
-In addition, there are a number of non-core value types that can be brought in individually.
-These can be found in the catalog of xref:valuetypes:ROOT:about.adoc[Value Types].
+* xref:refguide:schema:cmd.adoc[CommandDto] (and an XML pretty-render variant)
+* xref:refguide:schema:ixn.adoc[InteractionDto] (and an XML pretty-render variant)
+* xref:refguide:schema:chg.adoc[ChangesDto] (and an XML pretty-render variant)
(causeway) 11/36: CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 144c7bba6e40ff75d8f456a25545142359c09f2f
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 13:04:19 2025 +0100
CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
---
antora/supplemental-ui/index.html | 33 -----------------
.../applib/services/repository/EntityState.java | 6 +++-
.../todomodule/dom/ExcelDemoToDoItem.layout.xml | 3 --
.../pdfjs/fixtures/logging-dn-enhance.properties | 41 ----------------------
4 files changed, 5 insertions(+), 78 deletions(-)
diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index 128b5f356cd..fca520eb5d7 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -524,28 +524,6 @@ <h2>Standing on the shoulders of giants</h2>
</div>
</div>
- <div class="col-lg-4">
- <div class="box wow fadeInLeft" data-wow-delay="0.2s" style="min-height: 400px;">
- <div class="pic" style="height: 105px;">
- <a href="https://www.graphql-java.com/">
- <img src="_/img/home/built-with/graphql-java.png" height="80px" alt="GraphQL Java™" style="margin-left: -30px;"/>
- </a>
- </div>
- <p class="description">GraphQL Java is the Java™ implementation of the <a href="https://spec.graphql.org/">GraphQL specification</a>.</p>
- </div>
- </div>
-
- <div class="col-lg-4">
- <div class="box wow fadeInUp" data-wow-delay="0.2s" style="min-height: 400px;">
- <div class="pic" style="height: 105px;">
- <a href="https://resteasy.dev">
- <img src="_/img/home/built-with/resteasy_logo_600x.gif" height="75px" alt="RESTEasy™" style="margin-left: -30px;"/>
- </a>
- </div>
- <p class="description">RESTEasy™ is an implementation of the <a href="https://github.com/eclipse-ee4j/jaxrs-api">Jakarta™ RESTful Web Services</a> specification for building RESTful Web Services and RESTful Java applications.</p>
- </div>
- </div>
-
<div class="col-lg-4">
<div class="box wow fadeInRight" data-wow-delay="0.2s" style="min-height: 400px;">
<div class="pic" style="height: 105px;">
@@ -568,17 +546,6 @@ <h2>Standing on the shoulders of giants</h2>
</div>
</div>
- <div class="col-lg-4">
- <div class="box wow fadeInUp" data-wow-delay="0.3s" style="min-height: 400px;">
- <div class="pic" style="height: 105px;">
- <a href="https://www.datanucleus.org">
- <img src="_/img/home/built-with/datanucleus-logo.png" width="220px" alt="DataNucleus AccessPlatform™" style="margin-left: -30px;"/>
- </a>
- </div>
- <p class="description">DataNucleus™ is the reference implementation for <a href="https://db.apache.org/jdo/">JDO</a>, provides persistence and retrieval of data to a range of datastores using a range of APIs, with a range of query languages.</p>
- </div>
- </div>
-
<div class="col-lg-4">
<div class="box wow fadeInRight" data-wow-delay="0.3s" style="min-height: 400px;">
<div class="pic" style="height: 105px;">
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
index b4d0ad23646..ccc96abfd71 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
@@ -62,7 +62,7 @@ public enum EntityState {
*/
DETACHED(true),
/**
- * <h1>JDO specific</h1>
+ * This entity state is not<h1>JDO specific</h1>
* Object with this state is an entity that no longer attached to a
* persistence session and cannot be re-attached.
* In other words: changes to the entity will <i>not</i>
@@ -76,6 +76,7 @@ public enum EntityState {
*
* @see "https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#lifecycle"
*/
+ @Deprecated // JDO specific
HOLLOW(true),
/**
* Object with this state is an entity that is transient
@@ -87,6 +88,7 @@ public enum EntityState {
* <h1>JDO specific</h1>
* Not supported by JPA. (Cannot distinguish between TRANSIENT and REMOVED.)
*/
+ @Deprecated // JDO specific
REMOVED(false)
;
@@ -105,12 +107,14 @@ public enum EntityState {
/** @see #DETACHED */
public boolean isDetached() { return this == DETACHED; }
/** @see #HOLLOW */
+ @Deprecated // JDO specific
public boolean isHollow() { return this == HOLLOW; }
/** @see #TRANSIENT_OR_REMOVED
* @see #REMOVED */
public boolean isTransientOrRemoved() { return this == TRANSIENT_OR_REMOVED
|| this == REMOVED; }
/** @see #REMOVED */
+ @Deprecated // JDO specific
public boolean isRemoved() { return this == REMOVED; }
// -- SPECIAL STATES
diff --git a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.layout.xml b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.layout.xml
index d3b07e9f647..0c059d1f2e9 100644
--- a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.layout.xml
+++ b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.layout.xml
@@ -49,9 +49,6 @@ under the License.
<cpt:action id="downloadLayoutXml" position="PANEL_DROPDOWN"/>
<cpt:action id="downloadJdoMetadata" position="PANEL_DROPDOWN"/>
<cpt:action id="rebuildMetamodel" position="PANEL_DROPDOWN"/>
- <cpt:property id="datanucleusVersionLong"/>
- <cpt:property id="datanucleusVersionTimestamp"/>
- <cpt:property id="datanucleusIdLong"/>
</cpt:fieldSet>
</bs:col>
diff --git a/extensions/vw/pdfjs/fixtures/logging-dn-enhance.properties b/extensions/vw/pdfjs/fixtures/logging-dn-enhance.properties
deleted file mode 100644
index dc4d31c11d9..00000000000
--- a/extensions/vw/pdfjs/fixtures/logging-dn-enhance.properties
+++ /dev/null
@@ -1,41 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# LOG4J Configuration
-# ===================
-
-# Basic logging goes to "datanucleus.log"
-log4j.appender.A1=org.apache.log4j.FileAppender
-log4j.appender.A1.File=datanucleus.log
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} (%t) %-5p [%c] - %m%n
-#log4j.appender.A1.Threshold=INFO
-
-# Categories
-# Each category can be set to a "level", and to direct to an appender
-
-# Default to DEBUG level for all DataNucleus categories
-log4j.logger.DataNucleus = DEBUG, A1
-
-log4j.category.com.mchange.v2.c3p0=INFO, A1
-log4j.category.com.mchange.v2.resourcepool=INFO, A1
-log4j.category.org.logicalcobwebs.proxool=INFO,A1
-
-
-# Hbase libs logging
-log4j.category.org.apache.hadoop=INFO,A1
-log4j.category.org.apache.zookeeper=INFO,A1
\ No newline at end of file
(causeway) 20/36: CAUSEWAY-3866: removes javax.jdo reference
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 25763d6b3086428d97ff073f661a3c2b2582fdc5
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 09:26:06 2025 +0100
CAUSEWAY-3866: removes javax.jdo reference
---
.../annotation/hooks/Property_021-optionality.adoc | 40 +++++-----------------
1 file changed, 9 insertions(+), 31 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
index 624b90201f2..2795ad2a161 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
@@ -36,8 +36,8 @@ In this case there is no need for the `@Property#optionality` attribute.
== Mismatched defaults
-If the `@Column#nullable` attribute is omitted and the `@Property#optionality() attribute is also omitted, then note that Causeway' defaults and JDO's defaults differ.
-Specifically, Causeway always assumes properties are mandatory, whereas JDO specifies that primitives are mandatory, but all reference types are optional.
+If the `@Column#nullable` attribute is omitted and the `@Property#optionality() attribute is also omitted, then note that Causeway' defaults and xref:pjpa:ROOT:about.adoc[JPA/Eclipselink]'s defaults differ.
+Specifically, Causeway always assumes properties are mandatory, whereas JPA assumes instead that properties (both primitivess and reference types) are optional.
When Apache Causeway initializes it checks for these mismatches during its metamodel validation phase, and will fail to boot ("fail-fast") if there is a mismatch.
The fix is usually to add the `@Column#nullable()` annotation/attribute.
@@ -45,7 +45,7 @@ The fix is usually to add the `@Column#nullable()` annotation/attribute.
== 'Single table' inheritance type
There is one case (at least) it may be necessary to annotate the property with both `@Column#nullable` and also `@Property#optionality()`.
-If the property is logically mandatory and is in a subclass, but the mapping of the class hierarchy is to store both the superclass and subclass(es) into a single table (ie a "roll-up" mapping using `jakarta.persistence.InheritanceType#SINGLE_TABLE`), then JDO requires that the property is annotated as `@Column#nullable=true`: its value will be not defined for other subclasses.
+If the property is logically mandatory and is in a subclass, but the mapping of the class hierarchy is to store both the superclass and subclass(es) into a single table (ie a "roll-up" mapping using `jakarta.persistence.InheritanceType#SINGLE_TABLE`), then xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] requires that the property is annotated as `@Column#nullable=true`: its value will be not defined for other subclasses.
In this case we therefore require both annotations.
@@ -76,30 +76,6 @@ public class CreditCardPaymentMethod extends PaymentMethod {
}
----
-Alternatively, you could rely on the fact that Apache Causeway never looks at fields (whereas JDO does) and move the JDO annotation to the field:
-
-[source,java]
-----
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Inheritance;
-import jakarta.persistence.InheritanceType;
-import lombok.*;
-
-@Entity
-@Inheritance(type = InheritanceType.SINGLE_TABLE)
-public class CreditCardPaymentMethod extends PaymentMethod {
-
- @Column(nullable=true)
- @Getter @Setter
- private String cardNumber;
-
- // ...
-}
-----
-
-However this at first glance this might be read as meaning that the property is optional whereas Apache Causeway' default (required) applies.
-
== Non-persistent properties
Of course, not every property is persistent (it could instead be derived), and neither is every domain object an entity (it could be a view model).
@@ -109,9 +85,11 @@ For example:
[source,java]
----
+import jakarta.persistence.Transient;
+
public class Customer {
- @javax.jdo.annotation.NotPersistent // <.>
+ @Transient // <.>
@Property(optionality=Optionality.OPTIONAL)
public String getFullName() { // <.>
// ...
@@ -123,9 +101,9 @@ public class Customer {
// ...
}
----
-<.> a non persisted (derived) property
-<.> implementation would most likely derive full name from constituent parts (eg first name, middle initial, last name)
-<.> implementation would most likely parse the input and update the constituent parts
+<.> indicates that this property is not persisted
+<.> implementation would most likely derive full name from other persisted properties (eg first name, middle initial, last name)
+<.> if supported, implementation would most likely parse the input and update the underlying persisted properties
[TIP]
====
(causeway) 06/36: CAUSEWAY-3866: updating docs, removing references to JDO
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 828befe9c0726fbf77f88f59b249bd615dfcc77a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 15 09:28:00 2025 +0100
CAUSEWAY-3866: updating docs, removing references to JDO
---
.../applib/pages/index/annotation/Optionality.adoc | 4 +-
.../updates/hooks/WithUpdatedAt_usage-notes.adoc | 21 ++-
.../RepositoryService_020-examples-and-usage.adoc | 6 +-
.../modules/ROOT/pages/2020/2.0.0-M4/relnotes.adoc | 2 +-
.../userguide/modules/ROOT/pages/overview.adoc | 2 +-
.../userguide/modules/ROOT/pages/value-types.adoc | 6 +-
.../ROOT/partials/domain-entities/progmodel.adoc | 7 +-
.../properties-collections-actions/properties.adoc | 210 +++++----------------
.../adoc/modules/starters/pages/simpleapp.adoc | 29 +--
.../integtestsupport/pages/hints-and-tips.adoc | 7 -
10 files changed, 82 insertions(+), 212 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
index 1ec5d5c0cf9..eb284915b95 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
@@ -55,9 +55,9 @@ Indicates that the property or parameter is not required.
[#MANDATORY]
=== MANDATORY
-Indicates that the property is required (even if the JDO `javax.jdo.annotations.Column` annotation says otherwise).
+Indicates that the property is required (even if the JPA `jakarta.persistenc.Column` annotation says otherwise).
-When using the JDO/DataNucleus objectstore, it is sometimes necessary to annotate a property as optional (using `javax.jdo.annotations.Column#allowsNull()` set to `true` ), even if the property is logically mandatory. For example, this can occur when the property is in a subtype class that has been "rolled up" to the superclass table using `javax.jdo.annotations.Inheritance` > with the `javax.jdo.annotations.InheritanceStrategy#SUPERCLASS_TABLE` superclass strategy.
+When using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] objectstore, it is sometimes necessary to annotate a property as optional (using jakarta.persistence.Column#nullable` set to `true` ), even if the property is logically mandatory. For example, this can occur when the property is in a subtype class that has been "rolled up" to the superclass table using `jakarta.persistence.Inheritance` > with the `jakarta.persistence.InheritanceType#SINGLE_TABLE` mapping strategy.
This annotation, therefore, is intended to override any objectstore-specific annotation, so that Causeway can apply the constraint even though the objectstore is unable to do so.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/mixins/updates/hooks/WithUpdatedAt_usage-notes.adoc b/antora/components/refguide-index/modules/applib/pages/index/mixins/updates/hooks/WithUpdatedAt_usage-notes.adoc
index bb8b1395816..fa5b7866908 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/mixins/updates/hooks/WithUpdatedAt_usage-notes.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/mixins/updates/hooks/WithUpdatedAt_usage-notes.adoc
@@ -7,24 +7,30 @@
== Alternative approaches
-An alternative way to maintain a timestamp is to use JDO's `@Version` annotation.
-With this approach, it is the JDO/DataNucleus that maintains the version, rather than the framework's `TimestampService`.
+An alternative to using the framework's `TimestampService` is to leverage xref:pjpa:ROOT:about.adoc[JPA/Eclipselink]’s built-in versioning support via the `@jakarta.persistence.Version` annotation.
For example:
[source,java]
----
-@javax.jdo.annotations.Version(
- strategy=VersionStrategy.DATE_TIME,
- column="version")
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Version;
+
+@Entity
public class Customer {
- ...
+
+ @Version
+ @Column(name = "version")
+ private java.sql.Timestamp version;
+
public java.sql.Timestamp getVersionSequence() {
- return (java.sql.Timestamp) JDOHelper.getVersion(this);
+ return version;
}
}
----
+
== See also
* xref:refguide:applib:index/services/clock/ClockService.adoc[ClockService]
@@ -32,6 +38,5 @@ public class Customer {
used to obtain the current time.
* xref:refguide:applib:index/mixins/updates/OnUpdatedBy.adoc[OnUpdatedBy]
-
* xref:refguide:applib:index/mixins/updates/OnUpdatedByAndAt.adoc[OnUpdatedByAndAt]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_020-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_020-examples-and-usage.adoc
index 064852a73f4..936b3b54449 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_020-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_020-examples-and-usage.adoc
@@ -161,13 +161,9 @@ public class ToDoItemRepositoryImplUsingJdoql implements ToDoItemRepositoryImpl
[TIP]
====
-If using JPA, it is also possible to use the Spring Data repositories, using xref:refguide:persistence:index/jpa/applib/services/JpaSupportService.adoc[JpaSupportService].
+It is also possible to use the Spring Data repositories, using xref:refguide:persistence:index/jpa/applib/services/JpaSupportService.adoc[JpaSupportService].
====
-[TIP]
-====
-If using JDO/DataNucleus, it is also possible to use the DataNucleus type-safe query API, see xref:refguide:persistence:index/jdo/applib/services/JdoSupportService.adoc[JdoSupportService].
-====
diff --git a/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M4/relnotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M4/relnotes.adoc
index ecbe3931d1e..7e06b86c699 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M4/relnotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M4/relnotes.adoc
@@ -20,7 +20,7 @@ This includes new extension modules to persist commands (xref:userguide:commandl
Also in this release, the _Kroviz client_ has been brought into the incubator.
This is a single-page app that runs within the browser to provide a UI similar to that of the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)], but interacting with the domain application exclusively through the REST API provided by the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)].
-The release also includes some preliminary work preparing the way for support for JPA (as an alternative to xref:pjdo:ROOT:about.adoc[JDO/DataNucleus].
+The release also includes some preliminary work preparing the way for support for JPA (as an alternative to JDO/DataNucleus).
This support is expected to be in the next milestone release.
Other work done in this release includes an experimental porting of the build system from Maven to gradle (though Maven is for now still the official build system of the framework).
diff --git a/antora/components/userguide/modules/ROOT/pages/overview.adoc b/antora/components/userguide/modules/ROOT/pages/overview.adoc
index 38dd35bef1b..e45d5b4173f 100644
--- a/antora/components/userguide/modules/ROOT/pages/overview.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/overview.adoc
@@ -30,7 +30,7 @@ Apache Causeway defines its own set of annotations, and
you can generally recognize an Apache Causeway domain class because it will be probably be annotated using xref:refguide:applib:index/annotation/DomainObject.adoc[@DomainObject] and xref:refguide:applib:index/annotation/DomainService.adoc[@DomainService].
There are though configuration options that allow you to control to what extent (some) annotations can be inferred implicitly rather than specified explicitly.
-The framework also recognises some annotations from the ORM layer (ie xref:pjpa::about.adoc[JPA/EclipseLink] or xref:pjdo::about.adoc[JDO/DataNucleus]) and infers domain semantics from these annotations.
+The framework also recognises some annotations from the ORM layer (ie xref:pjpa::about.adoc[JPA/EclipseLink]) and infers domain semantics from these annotations.
Similarly, JAXB annotations are often used for xref:view-models.adoc[view models].
The framework also defines supplementary annotations, notably xref:refguide:applib:index/annotation/DomainObjectLayout.adoc[@DomainObjectLayout] and xref:refguide:applib:index/annotation/DomainServiceLayout.adoc[@DomainServiceLayout].
diff --git a/antora/components/userguide/modules/ROOT/pages/value-types.adoc b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
index a08e3ddf90b..0f617d17ddf 100644
--- a/antora/components/userguide/modules/ROOT/pages/value-types.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
@@ -596,10 +596,8 @@ Compared to scalar types, note that the `ValueSemanticsProvider` does not need t
Also, it is not possible to use a custom value type as part of the object's id, and so no implementation of `getIdStringifier()` is required either.
-If using within the database then you will also need to map the custom type to the database:
-
-* if mapping to xref:pjpa::about.adoc[JPA/EclipseLink], use `@Embedded` and `@Embeddable`; see for example link:https://www.baeldung.com/jpa-embedded-embeddable[this baeldung post] on the topic.
-* If mapping to xref:pjdo::about.adoc[JDO/DataNucleus], use `@Embedded` and `@PersistenceCapable(embeddedOnly="true")`; see https://www.datanucleus.org/products/accessplatform_6_0/jdo/mapping.html#embedded[Datanucleus documentation].
+If using within the database then you will also need to map the custom type to the database.
+If mapping to xref:pjpa::about.adoc[JPA/EclipseLink], use `@Embedded` and `@Embeddable`; see for example link:https://www.baeldung.com/jpa-embedded-embeddable[this baeldung post] on the topic.
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-entities/progmodel.adoc b/antora/components/userguide/modules/ROOT/partials/domain-entities/progmodel.adoc
index 81855d16328..c768b6b3e92 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-entities/progmodel.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-entities/progmodel.adoc
@@ -7,9 +7,8 @@
Domain entities are persistent domain objects, and will typically be annotated with xref:refguide:applib:index/annotation/DomainObject.adoc[@DomainObject(nature=ENTITY)].
-Their persistence is handled by either xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] or xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] ORM, with the ORM taking care of both lazy loading and also the persisting of modified ("dirty") objects.
+Their persistence is handled by the xref:pjpa:ROOT:about.adoc[JPA/EclipseLink] ORM, taking care of both lazy loading and also the persisting of modified ("dirty") objects.
-As such, they will also require ORM metadata.
-Both ORMs allow the metadata to be specified using either annotations or XML.
-The following sections show the basics for both ORMs, but see their respective guides for more detail.
+As such, they will also require ORM metadata, specified using either annotations or XML.
+The following sections show the basics.
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
index 642396921e2..c4ddcc0eb8e 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
@@ -20,7 +20,7 @@ It also provides a xref:refguide:applib:index/annotation/PropertyLayout.adoc[@Pr
* the properties of domain entities are usually also annotated with ORM annotation(s).
+
-For xref:pjpa::about.adoc[JPA/EclipseLink] this would be link:https://www.objectdb.com/api/java/jpa/Column[javax.persistence.Column], for xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] it is link:http://www.datanucleus.org/products/datanucleus/jdo/annotations.html#Column[@javax.jdo.annotations.Column] annotation.
+For xref:pjpa::about.adoc[JPA/EclipseLink] this would be the `jakarta.persistence.Column` annotation.
For property references, there may be other annotations to indicate whether the reference is bidirectional.
It's also possible (using annotations) to define a link table to hold foreign key columns.
@@ -76,22 +76,18 @@ private Customer customer;
It's ok for a xref:userguide:ROOT:view-models.adoc[view model] to reference other view models and also to reference domain entities.
However, it _isn't_ valid for a domain entity to hold a reference to view model, because the ORM will not know how to persist the view model object.
-[TIP]
-====
-For further details on mapping associations using xref:pjdo:ROOT:about.adoc[JDO/DataNucleus], see their link:http://www.datanucleus.org:15080/products/accessplatform_5_2/jdo/mapping.html[mapping guide].
-====
[#optional-properties]
== Optional Properties
-(For domain entities) JDO/DataNucleus' default is that a property is assumed to be mandatory if it is a primitive type (eg `int`, `boolean`), but optional if a reference type (eg `String`, `BigDecimal` etc).
-To override optionality in JDO/DataNucleus the `@Column(allowsNull="...")` annotations is used.
+(For domain entities) xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] default is that a property is assumed to be optional, regardless of whether it is a primitive type (eg `int`, `boolean`),or a reference type (eg `String`, `BigDecimal` etc).
+To override optionality, use the `@Basic(optional="...")` annotation.
Apache Causeway on the other hand assumes that all properties (and action parameters, for that matter) are mandatory, not optional.
These defaults can also be overridden using Apache Causeway' own annotations, specifically `@Property(optionality=...)`, or (because it's much less verbose) using `@javax.annotation.Nullable`.
These different defaults can lead to incompatibilities between the two frameworks.
-To counteract that, Apache Causeway also recognizes and honours JDO's `@Column(allowsNull=...)`.
+To counteract that, Apache Causeway also recognizes and honours JPA's `@Column(nullable=...)`.
For example, you can write:
@@ -155,19 +151,19 @@ And, finally, if there is no configuration property set at all, then the default
For entities, editable properties are not necessarily persistable.
In such a case the setter would not write to a field, but would (presumably) mutate the object in some other way.
In such a case you will need a getter and a setter, but the property annotated for the ORM as non-persistent.
-(If using JDO/DataNucleus, this is done using `@NotPersistent`).
+(If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], this is done using `@jakarta.persistence.Transient`).
For example:
[source,java]
----
import javax.inject.Inject;
-import javax.jdo.annotations.Column
-import javax.jdo.annotations.NotPersistent;
+import jakarta.persistence.Column;
+import jakarta.persistence.Transient;
import lombok.Getter;
import lombok.Setter;
-@javax.jdo.annotations.NotPersistent
+@Transient
@Property(editing=Editing.ENABLED)
public String getAddress() {
return addressService.toAddress( getLatLong() ); // <.>
@@ -184,7 +180,7 @@ private String latLong; // <.>
@Inject
AddressService addressService; // <.>
----
-<.> the representation of the address, in human readable form, eg "10 Downing Street, London, UK"
+<.> the representation of the address, in human-readable form, eg "10 Downing Street, London, UK"
<.> the lat/long representation of the address, eg "51.503363;-0.127625".
Excluded from the Apache Causeway metamodel.
<.> an injected service that can convert to/from address and latLong.
@@ -194,7 +190,7 @@ Excluded from the Apache Causeway metamodel.
By default Apache Causeway will automatically render all properties in the xref:vw:ROOT:about.adoc[Wicket UI] or in the xref:vro:ROOT:about.adoc[REST API].
To get Apache Causeway to ignore a property (exclude it from its metamodel), annotate the getter using xref:refguide:applib:index/annotation/Programmatic.adoc[@Programmatic].
-Similarly, for the JDO/DataNucleus ORM, ignore a property using the `@javax.jdo.annotations.NotPersistent` annotation.
+Similarly, for the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] ORM, ignore a property using the `@jakarta.persistence.Transient` annotation.
This is independent of Apache Causeway; in other words that property will still be rendered in the UI (unless also annotated with `@Programmatic`).
For view models, you can tell JAXB to ignore a property using the `@javax.xml.bind.annotation.XmlTransient` annotation.
@@ -215,18 +211,18 @@ For entities these may or may not be persisted; that depends on whether the ORM
This section shows specific considerations for various datatypes, in particular how to annotate them for the ORM.
-This section covers the xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] object store.
+This section covers the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store.
=== ``String``s (Length)
-By default JDO/DataNucleus will map string properties to a `VARCHAR(255)`.
-To limit the length, use the `@Column(length=...)` annotation.
+By default xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] will map string properties to a `VARCHAR(255)`.
+To limit the length, use the `@jakarta.persistence.Column(length=...)` annotation.
For example:
[source,java]
----
-import javax.jdo.annotations.Column;
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
@@ -236,32 +232,8 @@ import lombok.Setter;
private String firstName
----
-This is a good example of a case where Apache Causeway infers domain semantics from the JDO annotation.
-
-=== JODA Dates
-
-Apache Causeway' bundles DataNucleus' http://www.datanucleus.org/documentation/products/plugins.html[built-in support] for Joda `LocalDate` and `LocalDateTime` datatypes, meaning that entity properties of these types will be persisted as appropriate data types in the database tables.
-
-It is, however, necessary to annotate your properties with `@javax.jdo.annotations.Persistent`, otherwise the data won't actually be persisted.
-See the link:http://db.apache.org/jdo/field_types.html[JDO docs] for more details on this.
-
-Moreover, these datatypes are _not_ in the default fetch group, meaning that JDO/DataNucleus will perform an additional `SELECT` query for each attribute.
-To avoid this extra query, the annotation should indicate that the property is in the default fetch group.
+This is a good example of a case where Apache Causeway infers domain semantics from the JPA annotation.
-For example:
-
-[source,java]
-----
-import javax.jdo.annotations.Persistent;
-import javax.jdo.annotations.Column;
-import org.joda.time.LocalDate;
-
-@Persistent(defaultFetchGroup="true")
-@Column(allowsNull="true")
-@Property
-@Getter @Setter
-private LocalDate dueBy;
-----
=== ``BigDecimal``s (Precision)
@@ -280,28 +252,17 @@ private BigDecimal impact;
----
Without any constraints, the length of the corresponding column is database specific.
-For example, with HSQL JDO/DataNucleus maps to a column NUMERIC(19);
-no decimal digits are admitted.
-(Further details http://hsqldb.org/doc/2.0/guide/sqlgeneral-chapt.html#sgc_numeric_types[here]).
+For example, with H2 xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] maps to a column NUMERIC(19,2).
-What this implies is that, when a record is inserted, a log entry similar to this one appears:
+Best practice is to explicitly specify the `scale` to the field like this, and probably `precision` also:
[source,java]
----
-INSERT INTO ENTITY(..., IMPACT, ....) VALUES (...., 0.5, ....)
-----
-
-But when that same record is retrieved, the log will show that a value of "0" is returned, instead of 0.5.
-
-The solution is to explicitly add the scale to the field like this:
-
-[source,java]
-----
-import javax.jdo.annotations.Column;
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
-@Column(scale=2)
+@Column(precision=10, scale=2)
@Getter @Setter
private BigDecimal impact;
----
@@ -312,127 +273,54 @@ More information can be found http://www.opentaps.org/docs/index.php/How_to_Use_
=== ``Blob``s
-Apache Causeway configures JDO/DataNucleus so that the properties of type `org.apache.causeway.applib.value.Blob` and `org.apache.causeway.applib.value.Clob` can also be persisted.
+Apache Causeway provides the xref:refguide:persistence:index/jpa/applib/types/BlobJpaEmbeddable.adoc[] utility class to allow properties of type `org.apache.causeway.applib.value.Blob` to be persisted.
-As for Joda dates, this requires the `@javax.jdo.annotations.Persistent` annotation.
-However, whereas for dates one would always expect this value to be retrieved eagerly, for blobs and clobs it is not so clear cut.
-
-For example:
+This is used as follows:
[source,java]
----
-import javax.jdo.annotations.Column;
-import javax.jdo.annotations.Persistent;
-import lombok.Getter;
-import lombok.Setter;
-
-@Persistent(defaultFetchGroup="false", columns = {
- @Column(name = "attachment_name"),
- @Column(name = "attachment_mimetype"),
- @Column(name = "attachment_bytes",
- jdbcType="BLOB", sqlType = "LONGVARBINARY")
+@AttributeOverrides({
+ @AttributeOverride(name="name", column=@Column(name="attachment_name")),
+ @AttributeOverride(name="mimeType",column=@Column(name="attachment_mimeType")),
+ @AttributeOverride(name="bytes", column=@Column(name="attachment_bytes"))
})
-@Property(optionality = Optionality.OPTIONAL)
-@Getter @Setter
-private Blob attachment;
-----
-
-The three `@Column` annotations are required because the mapping classes that Apache Causeway provides (https://github.com/apache/causeway/blob/causeway-1.4.0/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/causeway/objectstore/jdo/datanucleus/valuetypes/CausewayBlobMapping.java#L59[CausewayBlobMapping] and https://github.com/apache/causeway/blob/causeway-1.4.0/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/causeway/objectstore/jdo/datanucleus/value [...]
-(It is not an error to omit these `@Column` annotations, but without them the names of the table columns are simply suffixed `_0`, `_1`, `_2` etc.
+@Embedded
+private BlobJpaEmbeddable attachment;
-If the `Blob` is mandatory, then use:
-
-[source,java]
-----
-import javax.jdo.annotations.Column;
-import javax.jdo.annotations.Persistent;
-import lombok.Getter;
-import lombok.Setter;
-
-@Persistent(defaultFetchGroup="false", columns = {
- @Column(name = "attachment_name", allowsNull="false"),
- @Column(name = "attachment_mimetype", allowsNull="false"),
- @Column(name = "attachment_bytes",
- jdbcType="BLOB", sqlType = "LONGVARBINARY", allowsNull="false")
-})
-@Property(optionality = Optionality.MANDATORY )
-@Getter @Setter
-private Blob attachment;
+@Property()
+@PropertyLayout()
+public Blob getPdf() {
+ return BlobJpaEmbeddable.toBlob(pdf);
+}
+public void setPdf(final Blob pdf) {
+ this.pdf = BlobJpaEmbeddable.fromBlob(pdf);
+}
----
-[NOTE]
-====
-If specifying a `sqlType` of "LONGVARBINARY" does not work, try instead "BLOB".
-There can be differences in behaviour between JDBC drivers.
-====
-
=== ``Clob``s
-Mapping ``Clob``s works in a very similar way to ``Blob``s, but the `jdbcType` and `sqlType` attributes will, respectively, be `CLOB` and `LONGVARCHAR`:
+Mapping ``Clob``s works in a very similar way to ``Blob``s, using the xref:refguide:persistence:index/jpa/applib/types/ClobJpaEmbeddable.adoc[] utility class:
[source,java]
----
-import javax.jdo.annotations.Column;
-import javax.jdo.annotations.Persistent;
-import lombok.Getter;
-import lombok.Setter;
-
-@Persistent(defaultFetchGroup="false", columns = {
- @Column(name = "attachment_name"),
- @Column(name = "attachment_mimetype"),
- @Column(name = "attachment_chars",
- jdbcType="CLOB", sqlType = "LONGVARCHAR")
+@AttributeOverrides({
+ @AttributeOverride(name="name", column=@Column(name="doc_name")),
+ @AttributeOverride(name="mimeType",column=@Column(name="doc_mimeType")),
+ @AttributeOverride(name="bytes", column=@Column(name="doc_bytes"))
})
-@Property( optionality = Optionality.OPTIONAL )
-@Getter @Setter
-private Clob doc;
-----
-
-[NOTE]
-====
-If specifying a `sqlType` of "LONGVARCHAR" does not work, try instead "CLOB".
-There can be differences in behaviour between JDBC drivers.
-====
-
-=== Mapping to VARBINARY or VARCHAR
-
-Instead of mapping to a sqlType of `LONGVARBINARY` (or perhaps `BLOB`), you might instead decide to map to a `VARBINARY`.
-The difference is whether the binary data is held "on-row" or as a pointer "off-row"; with a `VARBINARY` the data is held on-row and so you will need to specify a length.
-
-For example:
-
-[source,java]
-----
-import javax.jdo.annotations.Column;
-import lombok.Getter;
-import lombok.Setter;
-
-@Column(
- name = "attachment_bytes",
- jdbcTypr="BLOB", sqlType = "VARBINARY", length=2048
-)
@Getter @Setter
-private Blob image;
-----
-
-The same argument applies to `LONGVARCHAR` (or `CLOB`); you could instead map to a regular `VARCHAR`:
-
-[source,java]
-----
-import javax.jdo.annotations.Column;
-import lombok.Getter;
-import lombok.Setter;
+private ClobJpaEmbeddable doc;
-@Column(
- name = "attachment_chars",
- sqlType = "VARCHAR", length=2048
-)
-@Getter @Setter
-private Clob letter;
+@Property()
+@PropertyLayout()
+public Clob getDoc() {
+ return ClobJpaEmbeddable.toClob(doc);
+}
+public void setDoc(final Clob doc) {
+ this.doc = ClobJpaEmbeddable.fromClob(doc);
+}
----
-Support and maximum allowed length will vary by database vendor.
-
diff --git a/starters/adoc/modules/starters/pages/simpleapp.adoc b/starters/adoc/modules/starters/pages/simpleapp.adoc
index 76f78d4c317..b3743e98e5d 100644
--- a/starters/adoc/modules/starters/pages/simpleapp.adoc
+++ b/starters/adoc/modules/starters/pages/simpleapp.adoc
@@ -557,25 +557,23 @@ The `SimpleModuleIntegTestAbstract` is the superclass of all integration tests i
.SimpleModuleIntegTestAbstract.java
----
@SpringBootTest(
- classes = SimpleModuleIntegTestAbstract.TestApp.class // <.>
+ classes = SimpleModuleIntegTestAbstract.TestApp.class // <.>
)
@ActiveProfiles("test") // <.>
public abstract class SimpleModuleIntegTestAbstract
- extends CausewayIntegrationTestAbstractWithFixtures { // <.>
+ extends CausewayIntegrationTestAbstractWithFixtures { // <.>
@Configuration
@Import({
- CausewayModuleCoreRuntimeServices.class, // <.>
- CausewayModuleSecurityBypass.class, // <.>
- CausewayModuleJdoDataNucleus5.class, // <.>
- CausewayModuleTestingFixturesApplib.class, // <.>
+ CausewayModuleCoreRuntimeServices.class, // <.>
+ CausewayModuleSecurityBypass.class, // <.>
+ CausewayModuleJpaEclipseLink.class, // <.>
+ CausewayModuleTestingFixturesApplib.class, // <.>
- SimpleModule.class // <.>
+ SimpleModule.class // <.>
})
@PropertySources({
- @PropertySource(CausewayPresets.H2InMemory_withUniqueSchema), // <.>
- @PropertySource(CausewayPresets.DatanucleusAutocreateNoValidate), // <.>
- @PropertySource(CausewayPresets.UseLog4j2Test), // <.>
+ @PropertySource(CausewayPresets.H2InMemory_withUniqueSchema), // <.>
})
public static class TestApp {
}
@@ -590,14 +588,12 @@ public abstract class SimpleModuleIntegTestAbstract
In this case, the test inherits from the `CausewayIntegrationTestAbstractWithFixtures` subclass which also adds in support for running fixtures.
<.> Specifies the modules that make up Apache Causeway framework itself.
-These include core, security set to the bypass implementation (effectively is ignored) and JDO/DataNucleus for persistence.
+These include core, security set to the bypass implementation (effectively is ignored) and xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] for persistence.
Note that no viewers are bootstrapped because the tests are run through Spring's integration testing framework, rather than (say) as Selenium tests.
<.> Disables security checks.
-<.> Configures JDO as the ORM.
-+
-If using JPA, this would be `CausewayModuleJpaEclipseLink.class` instead.
+<.> Configures JPA as the ORM.
<.> Brings in support for running fixtures.
+
@@ -608,11 +604,6 @@ You can learn more about testing in the xref:testing:ROOT:about.adoc[Testing Gui
<.> Runs the tests in memory using H2.
A unique schema allows tests to potentially be run in parallel
-<.> Ensures that JDO/DataNucleus is configured to create the database schema first.
-This may be required because the application might otherwise be configured to use the xref:userguide:flyway:about.adoc[Flyway integration].
-
-<.> Sets up logging to use the configuration defined in the `log4j2-test.xml` file
-
=== webapp's src/main/java
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/hints-and-tips.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/hints-and-tips.adoc
index 56b4b4087bd..1fe8e16d37e 100644
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/hints-and-tips.adoc
+++ b/testing/integtestsupport/adoc/modules/integtestsupport/pages/hints-and-tips.adoc
@@ -2,10 +2,3 @@
: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 [...]
-== If using JDO/DataNucleus
-
-When running integration tests through the IDE, and if using the JDO/DataNucleus ORM, then make sure the module(s) with entities have been enhanced first.
-
-If using IntelliJ, we recommend creating a run Maven configuration that runs `datanucleus:enhance`, and then pinning the configuration once run as a tab in the "Debug" window for easy access.
-
-image::pin-enhance-run-configuration.png[width="400px"]
(causeway) 27/36: CAUSEWAY-3866: replaces references on javax.xml.bind to jakarta.xml.bind
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 7592e629430fafd8866585dcdee1595dfb8308a2
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 18:44:58 2025 +0100
CAUSEWAY-3866: replaces references on javax.xml.bind to jakarta.xml.bind
---
.../pages/index/mixins/dto/hooks/Dto_see-also.adoc | 8 +-
...egotiationServiceXRoDomainType_usage-notes.adoc | 2 +-
.../modules/applib-ant/partials/about/jaxb.adoc | 4 +-
.../collections.adoc | 2 +-
.../properties-collections-actions/properties.adoc | 2 +-
.../main/adoc/modules/webapp/pages/webmodules.html | 851 ---------------------
6 files changed, 10 insertions(+), 859 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/mixins/dto/hooks/Dto_see-also.adoc b/antora/components/refguide-index/modules/applib/pages/index/mixins/dto/hooks/Dto_see-also.adoc
index 82f98ab857d..5e5337f5c75 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/mixins/dto/hooks/Dto_see-also.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/mixins/dto/hooks/Dto_see-also.adoc
@@ -85,15 +85,17 @@ The package should also have a `package-info.java`; it is this that declares the
[source,java]
----
-@javax.xml.bind.annotation.XmlSchema(
+import jakarta.xml.bind.annotation.*;
+
+@XmlSchema(
namespace = "http://viewmodels.app.todoapp/todoitem/v1/Dto.xsd", // <.>
xmlns = {
- @javax.xml.bind.annotation.XmlNs(
+ @XmlNs(
namespaceURI = "https://causeway.apache.org/schema/common",
prefix = "com"
)
},
- elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
+ elementFormDefault = XmlNsForm.QUALIFIED
)
package todoapp.app.viewmodels.todoitem.v1; // <.>
----
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/conneg/hooks/ContentNegotiationServiceXRoDomainType_usage-notes.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/conneg/hooks/ContentNegotiationServiceXRoDomainType_usage-notes.adoc
index c801bc2238a..d7fa6e4a335 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/conneg/hooks/ContentNegotiationServiceXRoDomainType_usage-notes.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/conneg/hooks/ContentNegotiationServiceXRoDomainType_usage-notes.adoc
@@ -6,7 +6,7 @@
The value of the `x-ro-domain-type` parameter corresponds to the DTO to be mapped into by the xref:refguide:applib:index/services/conmap/ContentMappingService.adoc[ContentMappingService].
-If the DTO is annotated with JAXB, then also note that the runtime type must be annotated with the JAXB `javax.xml.bind.annotation.XmlRootElement` so that RestEasy is able to unambiguously serialize it.
+If the DTO is annotated with JAXB, then also note that the runtime type must be annotated with the JAXB `jakarta.xml.bind.annotation.XmlRootElement` so that it can unambiguously serialized.
== Example
diff --git a/antora/components/refguide/modules/applib-ant/partials/about/jaxb.adoc b/antora/components/refguide/modules/applib-ant/partials/about/jaxb.adoc
index 8c6636afa66..c6845ec1930 100644
--- a/antora/components/refguide/modules/applib-ant/partials/about/jaxb.adoc
+++ b/antora/components/refguide/modules/applib-ant/partials/about/jaxb.adoc
@@ -13,13 +13,13 @@
|Layer
-|xref:refguide:applib-ant:XmlRootElement.adoc[`javax.xml.bind` +
+|xref:refguide:applib-ant:XmlRootElement.adoc[`jakarta.xml.bind` +
`.annotation` +
`XmlRootElement`]
|JAXB annotation indicating the XML root element when serialized to XML; also used by the framework for view models (whose memento is the XML), often also acting as a DTO.
|Application
-|xref:refguide:applib-ant:XmlJavaTypeAdapter.adoc[`javax.xml.bind` +
+|xref:refguide:applib-ant:XmlJavaTypeAdapter.adoc[`jakarta.xml.bind` +
`.annotation` +
`XmlJavaTypeAdapter`]
|JAXB annotation defining how to serialize an entity. Used in conjunction with the (framework provided) `PersistentEntityAdapter` class to serialize persistent entities into a canonical OID (equivalent to the `Bookmark` provided by the xref:refguide:applib:index/services/bookmark/BookmarkService.adoc[BookmarkService]).
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
index 7a9ef5442cf..12d06165dd8 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
@@ -22,7 +22,7 @@ It also provides a xref:refguide:applib:index/annotation/CollectionLayout.adoc[@
`jakarta.persistence.Entity`.
The collection itself will likely have its own ORM-specific annotations, to specify for example if the association is bidirectional, supports cascading deletes, or whether to define a link table or not to hold foreign key columns.
-* for the collections of view models, then JAXB annotations such as link:https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementWrapper.html[@javax.xml.bind.annotation.XmlElementWrapper] and link:https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElement.html[@javax.xml.bind.annotation.XmlElement] will be present
+* for the collections of view models, then JAXB annotations such as `@jakarta.xml.bind.annotation.XmlElementWrapper` and `@jakarta.xml.bind.annotation.XmlElement` will be present
Apache Causeway may recognise some of these annotations from the persistence layer infers some domain semantics from them.
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
index 79f1c4a51c3..6545b1979ff 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
@@ -193,7 +193,7 @@ To get Apache Causeway to ignore a property (exclude it from its metamodel), ann
Similarly, for the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] ORM, ignore a property using the `@jakarta.persistence.Transient` annotation.
This is independent of Apache Causeway; in other words that property will still be rendered in the UI (unless also annotated with `@Programmatic`).
-For view models, you can tell JAXB to ignore a property using the `@javax.xml.bind.annotation.XmlTransient` annotation.
+For view models, you can tell JAXB to ignore a property using the `@jakarta.xml.bind.annotation.XmlTransient` annotation.
Again, this is independent of Apache Causeway.
You can also suppress a property from the UI using xref:refguide:applib:index/annotation/Property.adoc#hidden[@Property#hidden()] or indeed xref:refguide:applib:index/annotation/PropertyLayout.adoc#hidden[@PropertyLayout#hidden()].
diff --git a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.html b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.html
deleted file mode 100644
index ec0e60ee571..00000000000
--- a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.html
+++ /dev/null
@@ -1,851 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="UTF-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.23">
-<title>WebModule interface</title>
-<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
-<style>
-/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment the following line when using as a custom stylesheet */
-/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
-html{font-family:sans-serif;-webkit-text-size-adjust:100%}
-a{background:none}
-a:focus{outline:thin dotted}
-a:active,a:hover{outline:0}
-h1{font-size:2em;margin:.67em 0}
-b,strong{font-weight:bold}
-abbr{font-size:.9em}
-abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
-dfn{font-style:italic}
-hr{height:0}
-mark{background:#ff0;color:#000}
-code,kbd,pre,samp{font-family:monospace;font-size:1em}
-pre{white-space:pre-wrap}
-q{quotes:"\201C" "\201D" "\2018" "\2019"}
-small{font-size:80%}
-sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
-sup{top:-.5em}
-sub{bottom:-.25em}
-img{border:0}
-svg:not(:root){overflow:hidden}
-figure{margin:0}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
-legend{border:0;padding:0}
-button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
-button,input{line-height:normal}
-button,select{text-transform:none}
-button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
-button[disabled],html input[disabled]{cursor:default}
-input[type=checkbox],input[type=radio]{padding:0}
-button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
-textarea{overflow:auto;vertical-align:top}
-table{border-collapse:collapse;border-spacing:0}
-*,::before,::after{box-sizing:border-box}
-html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
-a:hover{cursor:pointer}
-img,object,embed{max-width:100%;height:auto}
-object,embed{height:100%}
-img{-ms-interpolation-mode:bicubic}
-.left{float:left!important}
-.right{float:right!important}
-.text-left{text-align:left!important}
-.text-right{text-align:right!important}
-.text-center{text-align:center!important}
-.text-justify{text-align:justify!important}
-.hide{display:none}
-img,object,svg{display:inline-block;vertical-align:middle}
-textarea{height:auto;min-height:50px}
-select{width:100%}
-.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
-div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
-a{color:#2156a5;text-decoration:underline;line-height:inherit}
-a:hover,a:focus{color:#1d4b8f}
-a img{border:0}
-p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
-p aside{font-size:.875em;line-height:1.35;font-style:italic}
-h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
-h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
-h1{font-size:2.125em}
-h2{font-size:1.6875em}
-h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
-h4,h5{font-size:1.125em}
-h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
-em,i{font-style:italic;line-height:inherit}
-strong,b{font-weight:bold;line-height:inherit}
-small{font-size:60%;line-height:inherit}
-code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
-ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
-ul.circle{list-style-type:circle}
-ul.disc{list-style-type:disc}
-ul.square{list-style-type:square}
-ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
-ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
-dl dt{margin-bottom:.3125em;font-weight:bold}
-dl dd{margin-bottom:1.25em}
-blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
-blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
-@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
-h1{font-size:2.75em}
-h2{font-size:2.3125em}
-h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
-h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
-table thead,table tfoot{background:#f7f8f7}
-table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
-table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
-table tr.even,table tr.alt{background:#f8f8f7}
-table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
-h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
-h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
-.center{margin-left:auto;margin-right:auto}
-.stretch{width:100%}
-.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
-.clearfix::after,.float-group::after{clear:both}
-:not(pre).nobreak{word-wrap:normal}
-:not(pre).nowrap{white-space:nowrap}
-:not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
-pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
-pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
-pre>code{display:block}
-pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
-em em{font-style:normal}
-strong strong{font-weight:400}
-.keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
-.keyseq kbd:first-child{margin-left:0}
-.keyseq kbd:last-child{margin-right:0}
-.menuseq,.menuref{color:#000}
-.menuseq b:not(.caret),.menuref{font-weight:inherit}
-.menuseq{word-spacing:-.02em}
-.menuseq b.caret{font-size:1.25em;line-height:.8}
-.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
-b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
-b.button::before{content:"[";padding:0 3px 0 2px}
-b.button::after{content:"]";padding:0 2px 0 3px}
-p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
-#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
-#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
-#content{margin-top:1.25em}
-#content::before{content:none}
-#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
-#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
-#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
-#header .details span:first-child{margin-left:-.125em}
-#header .details span.email a{color:rgba(0,0,0,.85)}
-#header .details br{display:none}
-#header .details br+span::before{content:"\00a0\2013\00a0"}
-#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
-#header .details br+span#revremark::before{content:"\00a0|\00a0"}
-#header #revnumber{text-transform:capitalize}
-#header #revnumber::after{content:"\00a0"}
-#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
-#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
-#toc>ul{margin-left:.125em}
-#toc ul.sectlevel0>li>a{font-style:italic}
-#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
-#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
-#toc li{line-height:1.3334;margin-top:.3334em}
-#toc a{text-decoration:none}
-#toc a:active{text-decoration:underline}
-#toctitle{color:#7a2518;font-size:1.2em}
-@media screen and (min-width:768px){#toctitle{font-size:1.375em}
-body.toc2{padding-left:15em;padding-right:0}
-body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
-#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
-#toc.toc2>ul{font-size:.9em;margin-bottom:0}
-#toc.toc2 ul ul{margin-left:0;padding-left:1em}
-#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
-body.toc2.toc-right{padding-left:0;padding-right:15em}
-body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
-@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
-#toc.toc2{width:20em}
-#toc.toc2 #toctitle{font-size:1.375em}
-#toc.toc2>ul{font-size:.95em}
-#toc.toc2 ul ul{padding-left:1.25em}
-body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
-#content #toc>:first-child{margin-top:0}
-#content #toc>:last-child{margin-bottom:0}
-#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
-#content{margin-bottom:.625em}
-.sect1{padding-bottom:.625em}
-@media screen and (min-width:768px){#content{margin-bottom:1.25em}
-.sect1{padding-bottom:1.25em}}
-.sect1:last-child{padding-bottom:0}
-.sect1+.sect1{border-top:1px solid #e7e7e9}
-#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
-#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
-#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
-#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
-#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
-details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details{margin-left:1.25rem}
-details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
-details>summary::-webkit-details-marker{display:none}
-details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
-details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
-details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
-.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
-table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
-.admonitionblock>table td.icon{text-align:center;width:80px}
-.admonitionblock>table td.icon img{max-width:none}
-.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
-.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
-.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
-.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
-.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
-.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
-.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol> [...]
-.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
-@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
-@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
-.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
-.listingblock>.content{position:relative}
-.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
-.listingblock:hover code[data-lang]::before{display:block}
-.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
-.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
-.listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
-.listingblock pre.prettyprint{border-width:0}
-.prettyprint{background:#f7f7f8}
-pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
-pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
-pre.prettyprint li code[data-lang]::before{opacity:1}
-pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
-table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
-table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
-table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
-pre.pygments span.linenos{display:inline-block;margin-right:.75em}
-.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
-.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
-.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
-.quoteblock blockquote{margin:0;padding:0;border:0}
-.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
-.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
-.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
-.verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
-.verseblock pre strong{font-weight:400}
-.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
-.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
-.quoteblock .attribution br,.verseblock .attribution br{display:none}
-.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
-.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
-.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
-.quoteblock.abstract{margin:0 1em 1.25em;display:block}
-.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
-.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
-.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
-.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
-.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
-p.tableblock:last-child{margin-bottom:0}
-td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
-td.tableblock>.content>:last-child{margin-bottom:-1.25em}
-table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
-table.grid-all>*>tr>*{border-width:1px}
-table.grid-cols>*>tr>*{border-width:0 1px}
-table.grid-rows>*>tr>*{border-width:1px 0}
-table.frame-all{border-width:1px}
-table.frame-ends{border-width:1px 0}
-table.frame-sides{border-width:0 1px}
-table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
-table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
-table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
-table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
-th.halign-left,td.halign-left{text-align:left}
-th.halign-right,td.halign-right{text-align:right}
-th.halign-center,td.halign-center{text-align:center}
-th.valign-top,td.valign-top{vertical-align:top}
-th.valign-bottom,td.valign-bottom{vertical-align:bottom}
-th.valign-middle,td.valign-middle{vertical-align:middle}
-table thead th,table tfoot th{font-weight:bold}
-tbody tr th{background:#f7f8f7}
-tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
-p.tableblock>code:only-child{background:none;padding:0}
-p.tableblock{font-size:1em}
-ol{margin-left:1.75em}
-ul li ol{margin-left:1.5em}
-dl dd{margin-left:1.125em}
-dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
-ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
-ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
-ul.unstyled,ol.unstyled{margin-left:0}
-li>p:empty:only-child::before{content:"";display:inline-block}
-ul.checklist>li>p:first-child{margin-left:-1em}
-ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
-ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
-ul.inline>li{margin-left:1.25em}
-.unstyled dl dt{font-weight:400;font-style:normal}
-ol.arabic{list-style-type:decimal}
-ol.decimal{list-style-type:decimal-leading-zero}
-ol.loweralpha{list-style-type:lower-alpha}
-ol.upperalpha{list-style-type:upper-alpha}
-ol.lowerroman{list-style-type:lower-roman}
-ol.upperroman{list-style-type:upper-roman}
-ol.lowergreek{list-style-type:lower-greek}
-.hdlist>table,.colist>table{border:0;background:none}
-.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
-td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
-td.hdlist1{font-weight:bold;padding-bottom:1.25em}
-td.hdlist2{word-wrap:anywhere}
-.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
-.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
-.colist td:not([class]):first-child img{max-width:none}
-.colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
-.imageblock.left{margin:.25em .625em 1.25em 0}
-.imageblock.right{margin:.25em 0 1.25em .625em}
-.imageblock>.title{margin-bottom:0}
-.imageblock.thumb,.imageblock.th{border-width:6px}
-.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
-.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
-.image.left{margin-right:.625em}
-.image.right{margin-left:.625em}
-a.image{text-decoration:none;display:inline-block}
-a.image object{pointer-events:none}
-sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
-sup.footnote a,sup.footnoteref a{text-decoration:none}
-sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
-#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
-#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
-#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
-#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
-#footnotes .footnote:last-of-type{margin-bottom:0}
-#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-div.unbreakable{page-break-inside:avoid}
-.big{font-size:larger}
-.small{font-size:smaller}
-.underline{text-decoration:underline}
-.overline{text-decoration:overline}
-.line-through{text-decoration:line-through}
-.aqua{color:#00bfbf}
-.aqua-background{background:#00fafa}
-.black{color:#000}
-.black-background{background:#000}
-.blue{color:#0000bf}
-.blue-background{background:#0000fa}
-.fuchsia{color:#bf00bf}
-.fuchsia-background{background:#fa00fa}
-.gray{color:#606060}
-.gray-background{background:#7d7d7d}
-.green{color:#006000}
-.green-background{background:#007d00}
-.lime{color:#00bf00}
-.lime-background{background:#00fa00}
-.maroon{color:#600000}
-.maroon-background{background:#7d0000}
-.navy{color:#000060}
-.navy-background{background:#00007d}
-.olive{color:#606000}
-.olive-background{background:#7d7d00}
-.purple{color:#600060}
-.purple-background{background:#7d007d}
-.red{color:#bf0000}
-.red-background{background:#fa0000}
-.silver{color:#909090}
-.silver-background{background:#bcbcbc}
-.teal{color:#006060}
-.teal-background{background:#007d7d}
-.white{color:#bfbfbf}
-.white-background{background:#fafafa}
-.yellow{color:#bfbf00}
-.yellow-background{background:#fafa00}
-span.icon>.fa{cursor:default}
-a span.icon>.fa{cursor:inherit}
-.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
-.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
-.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
-.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
-.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
-.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
-.conum[data-value] *{color:#fff!important}
-.conum[data-value]+b{display:none}
-.conum[data-value]::after{content:attr(data-value)}
-pre .conum[data-value]{position:relative;top:-.125em}
-b.conum *{color:inherit!important}
-.conum:not([data-value]):empty{display:none}
-dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
-p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
-p{margin-bottom:1.25rem}
-.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
-.print-only{display:none!important}
-@page{margin:1.25cm .75cm}
-@media print{*{box-shadow:none!important;text-shadow:none!important}
-html{font-size:80%}
-a{color:inherit!important;text-decoration:underline!important}
-a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
-a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
-abbr[title]{border-bottom:1px dotted}
-abbr[title]::after{content:" (" attr(title) ")"}
-pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
-thead{display:table-header-group}
-svg{max-width:100%}
-p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
-h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
-#header,#content,#footnotes,#footer{max-width:none}
-#toc,.sidebarblock,.exampleblock>.content{background:none!important}
-#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
-body.book #header{text-align:center}
-body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
-body.book #header .details{border:0!important;display:block;padding:0!important}
-body.book #header .details span:first-child{margin-left:0!important}
-body.book #header .details br{display:block}
-body.book #header .details br+span::before{content:none!important}
-body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
-body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
-.listingblock code[data-lang]::before{display:block}
-#footer{padding:0 .9375em}
-.hide-on-print{display:none!important}
-.print-only{display:block!important}
-.hide-for-print{display:none!important}
-.show-for-print{display:inherit!important}}
-@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
-.sect1{padding:0!important}
-.sect1+.sect1{border:0}
-#footer{background:none}
-#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
-@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
-</style>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/styles/github.min.css">
-<style>
-/*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
-.tabs {
- margin-bottom: 1.25em;
-}
-
-.tablist > ul {
- display: flex;
- flex-wrap: wrap;
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.tablist > ul li {
- align-items: center;
- background-color: #fff;
- cursor: pointer;
- display: flex;
- font-weight: bold;
- line-height: 1.5;
- padding: 0.25em 1em;
- position: relative;
-}
-
-.tablist > ul li:focus-visible {
- outline: none;
-}
-
-.tablist.ulist,
-.tablist.ulist > ul li {
- margin: 0;
-}
-
-.tablist.ulist > ul li + li {
- margin-left: 0.25em;
-}
-
-.tabs .tablist li::after {
- content: "";
- display: block;
- height: 1px;
- position: absolute;
- bottom: -1px;
- left: 0;
- right: 0;
-}
-
-.tabs.is-loading .tablist li:not(:first-child),
-.tabs:not(.is-loading) .tablist li:not(.is-selected) {
- background-color: #f5f5f5;
-}
-
-.tabs.is-loading .tablist li:first-child::after,
-.tabs:not(.is-loading) .tablist li.is-selected::after {
- background-color: #fff;
-}
-
-/*
-.tabs:not(.is-loading) .tablist li,
-.tabs:not(.is-loading) .tablist li::after {
- transition: background-color 200ms ease-in-out;
-}
-*/
-
-.tablist > ul p {
- line-height: inherit;
- margin: 0;
-}
-
-.tabpanel {
- background-color: #fff;
- padding: 1.25em;
-}
-
-.tablist > ul li,
-.tabpanel {
- border: 1px solid #dcdcdc;
-}
-
-.tablist > ul li {
- border-bottom: 0;
-}
-
-.tabs.is-loading .tabpanel + .tabpanel,
-.tabs:not(.is-loading) .tabpanel.is-hidden {
- display: none;
-}
-
-.tabpanel > :first-child {
- margin-top: 0;
-}
-
-/* #content is a signature of the Asciidoctor standalone HTML output */
-#content .tabpanel > :last-child,
-#content .tabpanel > :last-child > :last-child,
-#content .tabpanel > :last-child > :last-child > li:last-child > :last-child {
- margin-bottom: 0;
-}
-
-.tablecontainer {
- overflow-x: auto;
-}
-
-#content .tablecontainer {
- margin-bottom: 1.25em;
-}
-
-#content .tablecontainer > table.tableblock {
- margin-bottom: 0;
-}
-</style>
-</head>
-<body id="webmodule-interface" class="article">
-<div id="header">
-<h1><code>WebModule</code> interface</h1>
-</div>
-<div id="content">
-<div class="paragraph">
-<p>The <code>WebModule</code> interface allows modules to dynamically configure <code>Filter</code>s, <code>Servlet</code>s and <code>ServletContextListener</code>s.
-The <code>@jakarta.annotation.Priority</code> annotation is used to ensure that the request chain is sequenced correctly.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 1. WebModules (priority determines filter sequence, earliest first)</caption>
-<colgroup>
-<col style="width: 23.0769%;">
-<col style="width: 15.3846%;">
-<col style="width: 7.6923%;">
-<col style="width: 11.5384%;">
-<col style="width: 11.5384%;">
-<col style="width: 30.7694%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Web module</th>
-<th class="tableblock halign-center valign-top"><code>@Priority</code></th>
-<th class="tableblock halign-center valign-top">listener?</th>
-<th class="tableblock halign-center valign-top">filter?</th>
-<th class="tableblock halign-center valign-top">servlet?</th>
-<th class="tableblock halign-left valign-top">Notes</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-Shiro</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>FIRST + 100</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>Yes</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/*</code></p></td>
-<td class="tableblock halign-center valign-top"></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>Either this or spring</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-SpringSecurity</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>FIRST + 100</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>Yes</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/*</code></p></td>
-<td class="tableblock halign-center valign-top"></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>Either this or shiro</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-LogOnExceptionLogger</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>EARLY - 100</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"></div></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/wicket<br>
-/restful</code></p></td>
-<td class="tableblock halign-center valign-top"></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>Filter is passthru, with no side-effects.<br>
-Mapping depends on which viewers configured.</p>
-</div>
-<div class="paragraph">
-<p>Although priority is relatively early, the filter is registered to be last in pipeline.</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-Cors</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>EARLY</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"></div></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/wicket<br>
-/restful</code></p></td>
-<td class="tableblock halign-center valign-top"></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>Mapping depends on which viewers configured.</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-TemplateResources</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>MIDPOINT - 100</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"></div></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>*.thtml</code></p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>*.thtml</code></p></td>
-<td class="tableblock halign-left valign-top"><div class="content"></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-JaxrsResteasy4</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>MIDPOINT - 80</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>Yes</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/restful</code></p></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/restful</code></p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>Filters mapped to servlet</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-Wicket</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>MIDPOINT - 80</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"></div></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/wicket</code></p></td>
-<td class="tableblock halign-center valign-top"></td>
-<td class="tableblock halign-left valign-top"><div class="content"></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-ServerSentEvents</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>MIDPOINT</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"></div></td>
-<td class="tableblock halign-center valign-top"></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/sse</code></p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>servlet only, so priority doesn’t really matter.</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>WebModule<br>
-H2Console</code></p></td>
-<td class="tableblock halign-center valign-top"><div class="content"><div class="paragraph">
-<p>MIDPOINT</p>
-</div></div></td>
-<td class="tableblock halign-center valign-top"><div class="content"></div></td>
-<td class="tableblock halign-center valign-top"></td>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><code>/db/*</code></p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>servlet only, so priority doesn’t really matter.</p>
-</div></div></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div id="footer">
-<div id="footer-text">
-Last updated 2025-10-18 09:04:11 +0100
-</div>
-</div>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/highlight.min.js"></script>
-<script>
-if (!hljs.initHighlighting.called) {
- hljs.initHighlighting.called = true
- ;[].slice.call(document.querySelectorAll('pre.highlight > code[data-lang]')).forEach(function (el) { hljs.highlightBlock(el) })
-}
-</script>
-<script>
-;(function () { /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
- 'use strict'
-
- var config = (document.currentScript || {}).dataset || {}
- var forEach = Array.prototype.forEach
-
- init(document.querySelectorAll('.tabs'))
-
- function init (tabsBlocks) {
- if (!tabsBlocks.length) return
- forEach.call(tabsBlocks, function (tabs) {
- var syncIds = tabs.classList.contains('is-sync') ? {} : undefined
- var tablist = tabs.querySelector('.tablist ul')
- tablist.setAttribute('role', 'tablist')
- var start
- forEach.call(tablist.querySelectorAll('li'), function (tab, idx) {
- tab.tabIndex = -1
- tab.setAttribute('role', tab.classList.add('tab') || 'tab')
- var id, anchor, syncId
- if (!(id = tab.id) && (anchor = tab.querySelector('a[id]'))) {
- id = tab.id = anchor.parentNode.removeChild(anchor).id
- }
- var panel = id && tabs.querySelector('.tabpanel[aria-labelledby~="' + id + '"]')
- if (!panel) return idx ? undefined : toggleSelected(tab, true) // invalid state
- syncIds && (((syncId = tab.textContent.trim()) in syncIds) ? (syncId = undefined) : true) &&
- (syncIds[(tab.dataset.syncId = syncId)] = tab)
- idx || (syncIds && (start = { tab: tab, panel: panel })) ? toggleHidden(panel, true) : toggleSelected(tab, true)
- tab.setAttribute('aria-controls', panel.id)
- panel.setAttribute('role', 'tabpanel')
- var onClick = syncId === undefined ? activateTab : activateTabSync
- tab.addEventListener('click', onClick.bind({ tabs: tabs, tab: tab, panel: panel }))
- })
- if (!tabs.closest('.tabpanel')) {
- forEach.call(tabs.querySelectorAll('.tabpanel table.tableblock'), function (table) {
- var container = Object.assign(document.createElement('div'), { className: 'tablecontainer' })
- table.parentNode.insertBefore(container, table).appendChild(table)
- })
- }
- if (start) {
- var syncGroupId
- for (var i = 0, lst = tabs.classList, len = lst.length, className; i !== len; i++) {
- if (!(className = lst.item(i)).startsWith('data-sync-group-id=')) continue
- tabs.dataset.syncGroupId = syncGroupId = lst.remove(className) || className.slice(19).replace(/\u00a0/g, ' ')
- break
- }
- if (syncGroupId === undefined) tabs.dataset.syncGroupId = syncGroupId = Object.keys(syncIds).sort().join('|')
- var preferredSyncId = 'syncStorageKey' in config &&
- window[(config.syncStorageScope || 'local') + 'Storage'].getItem(config.syncStorageKey + '-' + syncGroupId)
- var tab = preferredSyncId && syncIds[preferredSyncId]
- tab && Object.assign(start, { tab: tab, panel: document.getElementById(tab.getAttribute('aria-controls')) })
- toggleSelected(start.tab, true) || toggleHidden(start.panel, false)
- }
- })
- onHashChange()
- toggleClassOnEach(tabsBlocks, 'is-loading', 'remove')
- window.setTimeout(toggleClassOnEach.bind(null, tabsBlocks, 'is-loaded', 'add'), 0)
- window.addEventListener('hashchange', onHashChange)
- }
-
- function activateTab (e) {
- var tab = this.tab
- var tabs = this.tabs || (this.tabs = tab.closest('.tabs'))
- var panel = this.panel || (this.panel = document.getElementById(tab.getAttribute('aria-controls')))
- querySelectorWithSiblings(tabs, '.tablist .tab', 'tab').forEach(function (el) {
- toggleSelected(el, el === tab)
- })
- querySelectorWithSiblings(tabs, '.tabpanel', 'tabpanel').forEach(function (el) {
- toggleHidden(el, el !== panel)
- })
- if (!this.isSync && 'syncStorageKey' in config && 'syncGroupId' in tabs.dataset) {
- var storageKey = config.syncStorageKey + '-' + tabs.dataset.syncGroupId
- window[(config.syncStorageScope || 'local') + 'Storage'].setItem(storageKey, tab.dataset.syncId)
- }
- if (!e) return
- var loc = window.location
- var hashIdx = loc.hash ? loc.href.indexOf('#') : -1
- if (~hashIdx) window.history.replaceState(null, '', loc.href.slice(0, hashIdx))
- e.preventDefault()
- }
-
- function activateTabSync (e) {
- activateTab.call(this, e)
- var thisTabs = this.tabs
- var thisTab = this.tab
- var initialY = thisTabs.getBoundingClientRect().y
- forEach.call(document.querySelectorAll('.tabs'), function (tabs) {
- if (tabs === thisTabs || tabs.dataset.syncGroupId !== thisTabs.dataset.syncGroupId) return
- querySelectorWithSiblings(tabs, '.tablist .tab', 'tab').forEach(function (tab) {
- if (tab.dataset.syncId === thisTab.dataset.syncId) activateTab.call({ tabs: tabs, tab: tab, isSync: true })
- })
- })
- var shiftedBy = thisTabs.getBoundingClientRect().y - initialY
- if (shiftedBy && (shiftedBy = Math.round(shiftedBy))) window.scrollBy({ top: shiftedBy, behavior: 'instant' })
- }
-
- function querySelectorWithSiblings (scope, selector, siblingClass) {
- var el = scope.querySelector(selector)
- if (!el) return []
- var result = [el]
- while ((el = el.nextElementSibling) && el.classList.contains(siblingClass)) result.push(el)
- return result
- }
-
- function toggleClassOnEach (elements, className, method) {
- forEach.call(elements, function (el) {
- el.classList[method](className)
- })
- }
-
- function toggleHidden (el, state) {
- el.classList[(el.hidden = state) ? 'add' : 'remove']('is-hidden')
- }
-
- function toggleSelected (el, state) {
- el.setAttribute('aria-selected', '' + state)
- el.classList[state ? 'add' : 'remove']('is-selected')
- el.tabIndex = state ? 0 : -1
- }
-
- function onHashChange () {
- var id = window.location.hash.slice(1)
- if (!id) return
- var tab = document.getElementById(~id.indexOf('%') ? decodeURIComponent(id) : id)
- if (!(tab && tab.classList.contains('tab'))) return
- 'syncId' in tab.dataset ? activateTabSync.call({ tab: tab }) : activateTab.call({ tab: tab })
- }
-})()
-</script>
-</body>
-</html>
\ No newline at end of file
(causeway) 33/36: CAUSEWAY-3866: removes references to joda
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit fdff79b721a211124289d8538d1e0e70a197d457
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 19 11:24:43 2025 +0100
CAUSEWAY-3866: removes references to joda
---
.../userguide/modules/ROOT/pages/overview.adoc | 2 +-
.../userguide/modules/ROOT/pages/value-types.adoc | 20 +-
.../properties-collections-actions/actions.adoc | 4 +-
.../partials/view-models/jaxb-view-models.adoc | 52 ++--
.../pages/sections/causeway.viewer.graphql.adoc | 16 +-
.../adoc/modules/fakedata/pages/about.adoc | 3 -
testing/fakedata/integtests/translations.pot | 24 --
.../adoc/modules/ROOT/partials/component-nav.adoc | 1 -
valuetypes/asciidoc/builder/pom.xml | 22 +-
valuetypes/asciidoc/pom.xml | 9 -
valuetypes/asciidoc/ui/pom.xml | 22 +-
.../service/valuerender/_JsonValueConverters.java | 292 +++------------------
.../pages/extending/replacing-page-elements.adoc | 2 +-
13 files changed, 97 insertions(+), 372 deletions(-)
diff --git a/antora/components/userguide/modules/ROOT/pages/overview.adoc b/antora/components/userguide/modules/ROOT/pages/overview.adoc
index e45d5b4173f..0f151d33901 100644
--- a/antora/components/userguide/modules/ROOT/pages/overview.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/overview.adoc
@@ -16,7 +16,7 @@ These will be either a xref:domain-entities.adoc[domain entity] (persisted state
To access them, a menu xref:domain-services.adoc[domain service] will be used to find from the database (a repository service) or occasionally to create a new instance (a factory service).
The state managed by entities and view models is expressed in terms of xref:properties-collections-actions.adoc[properties and collections], with properties whose value either refers to other domain objects (reference types) or alternatively holds a value directly (xref:value-types.adoc[value types]).
-Apache Causeway supports a wide variety of xref:value-types.adoc[value types], including JDK types (primitives, strings or dates) Causeway-specific (eg AsciiDoc, Vega) and 3rd party (eg Jodatime).
+Apache Causeway supports a wide variety of xref:value-types.adoc[value types], including JDK types (primitives, strings or dates) and Causeway-specific (eg AsciiDoc, Vega).
Moreover it is possible to define your own custom types, and you can teach the framework about other 3rd party libraries you might wish to use, eg https://jscience.org[JScience].
Actions allow the end-user to invoke business logic.
diff --git a/antora/components/userguide/modules/ROOT/pages/value-types.adoc b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
index 2173df1b54f..a9c9efa6c8c 100644
--- a/antora/components/userguide/modules/ROOT/pages/value-types.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
@@ -10,8 +10,8 @@ The state managed by entities and view models is expressed in terms of xref:prop
This latter is the topic of this page.
-Apache Causeway supports a wide variety of value types, including JDK types (eg primitives, dates and `String`) Causeway-specific (eg `AsciiDoc`, `Vega`) and 3rd party (eg Joda Time).
-Moreover it is possible to define your own custom types.
+Apache Causeway supports a wide variety of value types, including JDK types (eg primitives, dates and `String`) and Causeway-specific (eg `AsciiDoc`, `Vega`).
+It is also possible to define your own custom types.
You can even teach the framework about other 3rd party libraries you might wish to use.
@@ -129,16 +129,6 @@ Unfortunately also not immutable.
And `java.sql.Date` compounds the crimes by actually being a subclass of `java.util.Date`.
Nevertheless, these are sometimes used for optimistic locking.
-* in `org.joda.time` package; a very popular 3rd party library that is still widely.
-The JDK `java.time` library took substantial inspiration from Joda.
-
-** local date/times (no timezone)
-+
-`org.joda.time.LocalDate,` `org.joda.time.LocalDateTime,` `org.joda.time.LocalTime`
-
-** exact
-+
-`org.joda.time.DateTime` (similar to `java.time.ZonedDateTime`)
Depending on context, additional entities may be required on the property's field:
@@ -148,7 +138,7 @@ Depending on context, additional entities may be required on the property's fiel
This tells JAXB how to serialize the value in and out of XML.
Apache Causeway provides adapters for all of these.
-In addition to supporting JDK and Joda, Apache Causeway defines a number of its own custom value types, described next.
+Apache Causeway defines a number of its own custom value types, described next.
[#causeway-specific]
== Causeway-specific
@@ -204,10 +194,6 @@ This renders Markdown content (as defined by the link:https://spec.commonmark.or
+
This renders graphics defined by the link:https://vega.github.io/vega-lite/[Vega-Lite] grammar.
-* `Joda Time`, provided by the xref:valuetypes:jodatime:about.adoc[jodatime] value type extension
-+
-This provides support for four value types defined within the link:https://www.joda.org/joda-time/[Joda Time] library.
-
[#custom-value-types]
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
index 1faa755a1b8..2fe6cfa7712 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
@@ -181,7 +181,7 @@ For example:
import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
-import org.joda.time.LocalDate;
+import java.time.LocalDate;
@Action(semantics=SemanticsOf.IDEMPOTENT)
public Order invoice(
@@ -190,7 +190,7 @@ public Order invoice(
@ParameterLayout(named="Ship no later than")
LocalDate shipBy) {
// ...
- setShipBy(shipBy)
+ setShipBy(shipBy);
return this;
}
diff --git a/antora/components/userguide/modules/ROOT/partials/view-models/jaxb-view-models.adoc b/antora/components/userguide/modules/ROOT/partials/view-models/jaxb-view-models.adoc
index a987443c5ff..593638a6ea3 100644
--- a/antora/components/userguide/modules/ROOT/partials/view-models/jaxb-view-models.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/view-models/jaxb-view-models.adoc
@@ -112,16 +112,17 @@ public class CompareCustomers {
----
-[[joda-datatypes]]
-== JODA Time Datatypes
+== JDK Time Datatypes
-If your JAXB view model contains fields using the JODA datatypes (`LocalDate` and so on), then `@XmlJavaTypeAdapter` additional annotations in order to "teach" JAXB how to serialize out the state.
+If your JAXB view model contains fields using the `java.time` datatypes (`LocalDate` and so on), then `@XmlJavaTypeAdapter` additional annotations in order to "teach" JAXB how to serialize out the state.
The Apache Causeway applib provides a number of adapters to use out-of-the-box.
For example:
[source,java]
----
+import java.time.LocalDate;
+
@XmlRootElement(name = "categorizeIncomingInvoice")
@XmlType(
propOrder = {
@@ -133,49 +134,52 @@ For example:
@XmlAccessorType(XmlAccessType.FIELD)
public class IncomingInvoiceViewModel extends IncomingOrderAndInvoiceViewModel {
- @XmlJavaTypeAdapter(JodaLocalDateStringAdapter.ForJaxb.class)
+ @XmlJavaTypeAdapter(JavaTimeJaxbAdapters.LocalDateToStringAdapter.class)
private LocalDate dateReceived;
...
}
----
-The full list of adapter classes are:
+The full list of adapter classes are nested classes of the top-level `JavaTimeJaxbAdapters` class.
+They all marshall the value to/from a string representation.
.JAXB adapters
[cols="1a,2a",options="header"]
|===
-| JODA datatype
+| Datatype
| Adapter
-.2+| `org.joda.time.DateTime`
-| `JodaDateTimeStringAdapter.ForJaxb`
-| `JodaDateTimeXMLGregorianCalendarAdapter.ForJaxb`
+| `java.time.LocalTime`
+| `JavaTimeJaxbAdapters.LocalTimeToStringAdapter`
+
+
+| `java.time.LocalDate`
+| `JavaTimeJaxbAdapters.LocalDateToStringAdapter`
+
+
+| `java.time.LocalDateTime`
+| `JavaTimeJaxbAdapters.LocalDateTimeToStringAdapter`
-.2+| `org.joda.time.LocalDate`
-| `JodaLocalDateStringAdapter.ForJaxb`
-| `JodaLocalDateXMLGregorianCalendarAdapter.ForJaxb`
-.2+| `org.joda.time.LocalDateTime`
-| `JodaLocalDateTimeStringAdapter.ForJaxb`
-| `JodaLocalDateTimeXMLGregorianCalendarAdapter.ForJaxb`
+| `java.time.OffsetTime`
+| `JavaTimeJaxbAdapters.OffsetTimeAdapter`
+| `java.time.OffsetDateTimeToStringAdapter`
+| `JavaTimeJaxbAdapters.OffsetDateTime`
-.2+| `org.joda.time.LocalTime`
-| `JodaLocalTimeStringAdapter.ForJaxb`
-| `JodaLocalTimeXMLGregorianCalendarAdapter.ForJaxb`
+| `java.time.ZonedDateTimeAdapter`
+| `JavaTimeJaxbAdapters.ZonedDate`
-| `java.sql.Timestamp`
-| `JavaSqlTimestampXmlGregorianCalendarAdapter.ForJaxb`
+| `java.time.Duration`
+| `JavaTimeJaxbAdapters.DurationToStringAdapter`
+| `java.time.Period`
+| `JavaTimeJaxbAdapters.PeriodToStringAdapter`
|===
-[TIP]
-====
-If you want use other Joda data types, check out link:http://blog.bdoughan.com/2011/05/jaxb-and-joda-time-dates-and-times.html[this blog post].
-====
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/causeway.viewer.graphql.adoc b/core/config/src/main/adoc/modules/config/pages/sections/causeway.viewer.graphql.adoc
index f6322c03b4d..e29a9dbf4d6 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/causeway.viewer.graphql.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/causeway.viewer.graphql.adoc
@@ -33,7 +33,7 @@ api-variant
causeway.viewer.graphql. +
authentication.fallback.roles
-|
+|
| Used as the set of roles for the default username (if not provided by other means).
@@ -42,7 +42,7 @@ authentication.fallback.roles
causeway.viewer.graphql. +
authentication.fallback.username
-|
+|
| Used as the default username (if not provided by other means).
@@ -60,7 +60,7 @@ arg-name
causeway.viewer.graphql.lookup. +
field-name-prefix
-|
+|
| Lookup field prefix
@@ -69,7 +69,7 @@ field-name-prefix
causeway.viewer.graphql.lookup. +
field-name-suffix
-|
+|
| Lookup field suffix
@@ -109,7 +109,7 @@ scalar-marshaller. +
local-date-format
| yyyy-MM-dd
-| For both JDK8's `LocalDate` and JodaTime's `LocalDate`
+| For JDK8's `LocalDate`
|
@@ -119,7 +119,7 @@ scalar-marshaller. +
local-time-format
| HH:mm:ss
-| For both JDK8's `LocalTime` and JodaTime's `LocalTime`
+| For JDK8's `LocalTime`
|
@@ -129,7 +129,7 @@ scalar-marshaller. +
zoned-date-time-format
| yyyy-MM-dd'T'HH:mm:ssXXX
-| for JDK8's `ZonedDateTime` and JodaTime's `DateTime`
+| for JDK8's `ZonedDateTime`
|
@@ -146,7 +146,7 @@ schema-style
causeway.viewer.graphql.schema. +
rich.enable-scenario-testing
-|
+|
| If the `#getSchemaStyle()` is set to either `SchemaStyle#RICH++_++ONLY` or `SchemaStyle#SIMPLE++_++AND++_++RICH`, then determines whether the "Scenario" field is included in order to allow given/when/then tests to be expressed.
Ignored if the `#getSchemaStyle()` is `SchemaStyle#SIMPLE++_++ONLY`.
diff --git a/testing/fakedata/adoc/modules/fakedata/pages/about.adoc b/testing/fakedata/adoc/modules/fakedata/pages/about.adoc
index 8106320ff4c..7ffee20aa5e 100644
--- a/testing/fakedata/adoc/modules/fakedata/pages/about.adoc
+++ b/testing/fakedata/adoc/modules/fakedata/pages/about.adoc
@@ -126,9 +126,6 @@ This provides numerous methods, each for a specific data type, providing an obje
* xref:refguide:testing:index/fakedata/applib/services/JavaTimeLocalDates.adoc[JavaTimeLocalDates]
* xref:refguide:testing:index/fakedata/applib/services/JavaTimePeriods.adoc[JavaTimePeriods]
* xref:refguide:testing:index/fakedata/applib/services/JavaUtilDates.adoc[JavaUtilDates]
-* xref:refguide:testing:index/fakedata/applib/services/JodaDateTimes.adoc[JodaDateTimes]
-* xref:refguide:testing:index/fakedata/applib/services/JodaLocalDates.adoc[JodaLocalDates]
-* xref:refguide:testing:index/fakedata/applib/services/JodaPeriods.adoc[JodaPeriods]
Note: these require the xref:refguide:applib:index/services/clock/ClockService.adoc[ClockService] to be injected through the constructor):
diff --git a/testing/fakedata/integtests/translations.pot b/testing/fakedata/integtests/translations.pot
index 3714893d6bc..9eb58ac87ef 100644
--- a/testing/fakedata/integtests/translations.pot
+++ b/testing/fakedata/integtests/translations.pot
@@ -455,8 +455,6 @@ msgstr ""
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#resetSomeJavaSqlDate()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#resetSomeJavaSqlTimestamp()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#resetSomeJavaUtilDate()
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#resetSomeJodaDateTime()
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#resetSomeJodaLocalDate()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#resetSomeLongWrapper()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#resetSomeMoney()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#resetSomePassword()
@@ -607,16 +605,6 @@ msgid "Some Java Util Date"
msgstr ""
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#someJodaDateTime
-msgid "Some Joda Date Time"
-msgstr ""
-
-
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#someJodaLocalDate
-msgid "Some Joda Local Date"
-msgstr ""
-
-
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#someLong
msgid "Some Long"
msgstr ""
@@ -716,8 +704,6 @@ msgstr ""
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#updateSomeJavaSqlDate()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#updateSomeJavaSqlTimestamp()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#updateSomeJavaUtilDate()
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#updateSomeJodaDateTime()
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#updateSomeJodaLocalDate()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#updateSomeLongWrapper()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#updateSomeMoney()
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll#updateSomePassword()
@@ -899,16 +885,6 @@ msgid "someJavaUtilDate"
msgstr ""
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll
-msgid "someJodaDateTime"
-msgstr ""
-
-
-#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll
-msgid "someJodaLocalDate"
-msgstr ""
-
-
#: org.causewayaddons.module.fakedata.fixture.demoapp.demomodule.dom.FakeDataDemoObjectWithAll
msgid "someLong"
msgstr ""
diff --git a/valuetypes/adoc/modules/ROOT/partials/component-nav.adoc b/valuetypes/adoc/modules/ROOT/partials/component-nav.adoc
index ba46be09103..afa48db3ba9 100644
--- a/valuetypes/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/valuetypes/adoc/modules/ROOT/partials/component-nav.adoc
@@ -5,7 +5,6 @@
include::valuetypes:ROOT:partial$module-nav.adoc[]
include::valuetypes:asciidoc:partial$module-nav.adoc[]
-include::valuetypes:jodatime:partial$module-nav.adoc[]
include::valuetypes:markdown:partial$module-nav.adoc[]
include::valuetypes:vega:partial$module-nav.adoc[]
diff --git a/valuetypes/asciidoc/builder/pom.xml b/valuetypes/asciidoc/builder/pom.xml
index 177ae52177f..0f364557b24 100644
--- a/valuetypes/asciidoc/builder/pom.xml
+++ b/valuetypes/asciidoc/builder/pom.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
-contributor
+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
+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. -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -69,10 +69,6 @@ additional
<groupId>org.jruby</groupId>
<artifactId>jruby</artifactId>
</dependency>
- <dependency>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- </dependency>
<dependency>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-posix</artifactId>
diff --git a/valuetypes/asciidoc/pom.xml b/valuetypes/asciidoc/pom.xml
index 3fd09870e92..7545bcc3d5f 100644
--- a/valuetypes/asciidoc/pom.xml
+++ b/valuetypes/asciidoc/pom.xml
@@ -65,10 +65,6 @@
<artifactId>jruby</artifactId>
<version>10.0.2.0</version>
<exclusions>
- <exclusion>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- </exclusion>
<exclusion>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-constants</artifactId>
@@ -95,11 +91,6 @@
</exclusion>
</exclusions>
</dependency>
- <dependency>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- <version>2.14.0</version>
- </dependency>
<dependency>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-posix</artifactId>
diff --git a/valuetypes/asciidoc/ui/pom.xml b/valuetypes/asciidoc/ui/pom.xml
index ee33acf8c58..1a42938cc65 100644
--- a/valuetypes/asciidoc/ui/pom.xml
+++ b/valuetypes/asciidoc/ui/pom.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
-contributor
+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
+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. -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -54,10 +54,6 @@ additional
<groupId>org.jruby</groupId>
<artifactId>jruby</artifactId>
</dependency>
- <dependency>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- </dependency>
<dependency>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-posix</artifactId>
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java
index 99f22fc89e9..6587af55eab 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java
@@ -451,263 +451,43 @@ public Object appendValueAndFormat(final ManagedObject objectAdapter, final Cont
}
});
-// converters.add(new JsonValueConverter.Abstract(DefaultFormat.JODALOCALDATE){
-//
-// // these formatters do NOT use withZoneUTC()
-// final List<DateTimeFormatter> formatters = _JodaLegacy.formattersJodaLocalDate();
-//
-// @Override
-// public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
-// if (repr.isString()) {
-// final String dateStr = repr.asString();
-// for (DateTimeFormatter formatter : formatters) {
-// try {
-// final LocalDate parsedDate = formatter.parseLocalDate(dateStr);
-// return parsedDate;
-// } catch (IllegalArgumentException ex) {
-// // fall through
-// }
-// }
-// }
-// return null;
-// }
-//
-// @Override
-// public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
-// final JsonRepresentation repr) {
-// final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
-// if(obj instanceof LocalDate) {
-// final LocalDate date = (LocalDate) obj;
-// final String dateStr = formatters.get(0).print(date.toDateTimeAtStartOfDay());
-// repr.mapPutString("value", dateStr);
-// } else {
-// repr.mapPut("value", obj);
-// }
-// appendFormats(repr, context);
-// return obj;
-// }
-// });
-//
-// converters.add(new JsonValueConverter.Abstract(DefaultFormat.JODALOCALDATETIME){
-//
-// final List<DateTimeFormatter> formatters = _JodaLegacy.formattersJodaLocalDateTime();
-//
-// @Override
-// public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
-// if (repr.isString()) {
-// final String dateStr = repr.asString();
-// for (DateTimeFormatter formatter : formatters) {
-// try {
-// final LocalDateTime parsedDate = formatter.parseLocalDateTime(dateStr);
-// return parsedDate;
-// } catch (IllegalArgumentException ex) {
-// // fall through
-// }
-// }
-// }
-// return null;
-// }
-//
-// @Override
-// public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
-// final JsonRepresentation repr) {
-// final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
-// if(obj instanceof LocalDateTime) {
-// final LocalDateTime date = (LocalDateTime) obj;
-// final String dateStr = formatters.get(0).print(date.toDateTime());
-// repr.mapPutString("value", dateStr);
-// } else {
-// repr.mapPut("value", obj);
-// }
-// appendFormats(repr, context);
-// return obj;
-// }
-// });
-//
-// converters.add(new JsonValueConverter.Abstract(DefaultFormat.JODADATETIME){
-//
-// final List<DateTimeFormatter> formatters = _JodaLegacy.formattersJodaDateTime();
-//
-// @Override
-// public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
-// if (repr.isString()) {
-// final String dateStr = repr.asString();
-// for (DateTimeFormatter formatter : formatters) {
-// try {
-// final DateTime parsedDate = formatter.parseDateTime(dateStr);
-// return parsedDate;
-// } catch (IllegalArgumentException ex) {
-// // fall through
-// }
-// }
-// }
-// return null;
-// }
-//
-// @Override
-// public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
-// final JsonRepresentation repr) {
-// final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
-// if(obj instanceof DateTime) {
-// final DateTime date = (DateTime) obj;
-// final String dateStr = formatters.get(0).print(date.toDateTime());
-// repr.mapPutString("value", dateStr);
-// } else {
-// repr.mapPut("value", obj);
-// }
-// appendFormats(repr, context);
-// return obj;
-// }
-// });
+ converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVASQLTIMESTAMP){
-// converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVAUTILDATE){
-//
-// final List<DateTimeFormatter> formatters = _JodaLegacy.formattersJavaUtilDate();
-//
-// @Override
-// public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
-// if (repr.isString()) {
-// final String dateStr = repr.asString();
-// for (DateTimeFormatter formatter : formatters) {
-// try {
-// final DateTime parseDateTime = formatter.parseDateTime(dateStr);
-// final java.util.Date parsedDate = parseDateTime.toDate();
-// return parsedDate;
-// } catch (IllegalArgumentException ex) {
-// // fall through
-// }
-// }
-// }
-// return null;
-// }
-//
-// @Override
-// public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
-// final JsonRepresentation repr) {
-// final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
-// if(obj instanceof java.util.Date) {
-// final java.util.Date date = (java.util.Date) obj;
-// final DateTimeFormatter dateTimeFormatter = formatters.get(0);
-// final String dateStr = dateTimeFormatter.print(new DateTime(date));
-// repr.mapPutString("value", dateStr);
-// } else {
-// repr.mapPut("value", obj);
-// }
-// appendFormats(repr, context);
-// return obj;
-// }
-// });
-//
-// converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVASQLDATE){
-//
-// final List<DateTimeFormatter> formatters = _JodaLegacy.formattersJavaSqlDate();
-//
-// @Override
-// public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
-// if (repr.isString()) {
-// final String dateStr = repr.asString();
-// for (DateTimeFormatter formatter : formatters) {
-// try {
-// final DateTime parseDateTime = formatter.parseDateTime(dateStr);
-// final java.sql.Date parsedDate = new java.sql.Date(parseDateTime.getMillis());
-// return parsedDate;
-// } catch (IllegalArgumentException ex) {
-// // fall through
-// }
-// }
-// }
-// return null;
-// }
-//
-// @Override
-// public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
-// final JsonRepresentation repr) {
-// final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
-// if(obj instanceof java.sql.Date) {
-// final java.sql.Date date = (java.sql.Date) obj;
-// final String dateStr = formatters.get(0).print(new DateTime(date));
-// repr.mapPutString("value", dateStr);
-// } else {
-// repr.mapPut("value", obj);
-// }
-// appendFormats(repr, context);
-// return obj;
-// }
-// });
-//
-// converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVASQLTIME){
-//
-// final List<DateTimeFormatter> formatters = _JodaLegacy.formattersJavaSqlTime();
-// @Override
-// public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
-// if (repr.isString()) {
-// final String dateStr = repr.asString();
-// for (DateTimeFormatter formatter : formatters) {
-// try {
-// final DateTime parseDateTime = formatter.parseDateTime(dateStr);
-// final java.sql.Time parsedTime = new java.sql.Time(parseDateTime.getMillis());
-// return parsedTime;
-// } catch (IllegalArgumentException ex) {
-// // fall through
-// }
-// }
-// }
-// return null;
-// }
-//
-// @Override
-// public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
-// final JsonRepresentation repr) {
-// final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
-// if(obj instanceof java.sql.Time) {
-// final java.sql.Time date = (java.sql.Time) obj;
-// final String dateStr = formatters.get(0).print(new DateTime(date));
-// repr.mapPutString("value", dateStr);
-// } else {
-// repr.mapPut("value", obj);
-// }
-// appendFormats(repr, context);
-// return obj;
-// }
-// });
-//
-// converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVASQLTIMESTAMP){
-//
-// @Override
-// public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
-// if (repr.isLong()) {
-// final Long millis = repr.asLong();
-// final java.sql.Timestamp parsedTimestamp = new java.sql.Timestamp(millis);
-// return parsedTimestamp;
-// }
-// if (repr.isString()) {
-// final String dateStr = repr.asString();
-// try {
-// final Long parseMillis = Long.parseLong(dateStr);
-// final java.sql.Timestamp parsedTimestamp = new java.sql.Timestamp(parseMillis);
-// return parsedTimestamp;
-// } catch (IllegalArgumentException ex) {
-// // fall through
-// }
-// }
-// return null;
-// }
-//
-// @Override
-// public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
-// final JsonRepresentation repr) {
-// final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
-// if(obj instanceof java.sql.Timestamp) {
-// final java.sql.Timestamp date = (java.sql.Timestamp) obj;
-// final long millisStr = date.getTime();
-// repr.mapPutLong("value", millisStr);
-// } else {
-// repr.mapPut("value", obj);
-// }
-// appendFormats(repr, context);
-// return obj;
-// }
-// });
+ @Override
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
+ if (repr.isLong()) {
+ final Long millis = repr.asLong();
+ final java.sql.Timestamp parsedTimestamp = new java.sql.Timestamp(millis);
+ return parsedTimestamp;
+ }
+ if (repr.isString()) {
+ final String dateStr = repr.asString();
+ try {
+ final Long parseMillis = Long.parseLong(dateStr);
+ final java.sql.Timestamp parsedTimestamp = new java.sql.Timestamp(parseMillis);
+ return parsedTimestamp;
+ } catch (IllegalArgumentException ex) {
+ // fall through
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
+ final JsonRepresentation repr) {
+ final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
+ if(obj instanceof java.sql.Timestamp) {
+ final java.sql.Timestamp date = (java.sql.Timestamp) obj;
+ final long millisStr = date.getTime();
+ repr.mapPutLong("value", millisStr);
+ } else {
+ repr.mapPut("value", obj);
+ }
+ appendFormats(repr, context);
+ return obj;
+ }
+ });
return converters;
}
diff --git a/viewers/wicket/adoc/modules/ROOT/pages/extending/replacing-page-elements.adoc b/viewers/wicket/adoc/modules/ROOT/pages/extending/replacing-page-elements.adoc
index 0c3166201b0..9d2a647aa12 100644
--- a/viewers/wicket/adoc/modules/ROOT/pages/extending/replacing-page-elements.adoc
+++ b/viewers/wicket/adoc/modules/ROOT/pages/extending/replacing-page-elements.adoc
@@ -28,7 +28,7 @@ In some cases there are several factories for a given `ComponentType`; this is m
After doing a first pass selection of candidate factories by `ComponentType`, each factory is then asked if it `appliesTo(Model)`.
This is an opportunity for the factory to check the model itself to see if the data within it is of the appropriate type.
-Thus, the `BooleanPanelFactory` checks that the `ScalarModel` holds a boolean, while the `JodaLocalDatePanelFactory` checks to see if it holds `org.joda.time.LocalDate`.
+Thus, the `BooleanAttributePanelFactory` checks that the `ScalarModel` holds a boolean, while the `BlobAttributePanelFactory` checks to see if it holds `Blob`.
There will typically be only one `ComponentFactory` capable of rendering a particular `ComponentType`/`ScalarModel` combination; at any rate, the framework stops as soon as one is found.
(causeway) 21/36: CAUSEWAY-3866: removes 'JDO' references
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 525e80ffbe09b2d54fde7bbde2c9069396dac1eb
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 11:09:52 2025 +0100
CAUSEWAY-3866: removes 'JDO' references
---
.../services/exceprecog/ExceptionRecognizer.adoc | 2 +-
.../ExceptionRecognizer_010-implementation.adoc | 4 +-
.../hooks/MetricsService_010-implementation.adoc | 2 +-
...yPersistenceJdoMetaModelRoleAndPermissions.adoc | 16 ---
.../refguide/modules/applib-ant/pages/Column.adoc | 12 +-
.../petclinic/pages/010-getting-started.adoc | 3 -
.../modules/ROOT/partials/_deployment-options.adoc | 5 +-
.../modules/ROOT/partials/domain-entities/jpa.adoc | 12 +-
.../modules/ROOT/partials/modules/progmodel.adoc | 4 +-
.../ROOT/partials/the-theory/metamodel.adoc | 5 +-
.../modules/ROOT/partials/view-models/_intro.adoc | 24 +---
antora/supplemental-ui/index.html | 36 +-----
.../causeway/applib/annotation/DomainObject.java | 16 +--
.../apache/causeway/applib/annotation/Nature.java | 5 +-
.../causeway/applib/annotation/Property.java | 16 +--
.../unrecoverable/RepositoryException.java | 2 +-
.../applib/services/bookmark/IdStringifier.java | 13 +-
.../services/exceprecog/ExceptionRecognizer.java | 4 +-
.../services/exceprecog/RootCauseFinder.java | 1 -
.../applib/services/factory/FactoryService.java | 9 +-
.../services/iactnlayer/InteractionService.java | 13 +-
.../applib/services/repository/EntityState.java | 2 -
.../services/repository/RepositoryService.java | 32 ++---
.../src/main/adoc/modules/schema/pages/common.adoc | 5 +-
.../section-hooks/causeway.core.config~pre.adoc | 2 +-
.../causeway.persistence.schema~pre.adoc | 2 +-
.../config/pages/sections/causeway.applib.adoc | 24 ++--
.../causeway.core.meta-model.validator.adoc | 23 +---
.../core/config/CausewayConfiguration.java | 51 +++++---
.../config/beans/CausewayBeanTypeRegistry.java | 18 +--
.../interactions-commands-and-executions.adoc | 1 -
.../main/adoc/modules/metamodel/pages/about.adoc | 5 +-
.../DomainObjectAnnotationFacetFactory.java | 2 +-
.../objectvalue/digits/MaxTotalDigitsFacet.java | 8 +-
.../objectlifecycle/ObjectLifecyclePublisher.java | 16 +--
.../session/InteractionServiceDefault.java | 8 +-
.../changetracking/EntityChangeTracker.java | 6 +-
.../secman/adoc/modules/secman/pages/about.adoc | 2 +-
.../adoc/modules/secman/pages/setting-up.adoc | 14 ---
...yPersistenceJpaMetaModelRoleAndPermissions.java | 53 +++++++++
.../scripts/SeedUsersAndRolesFixtureScript.java | 14 ++-
mavendeps/adoc/modules/mavendeps/pages/about.adoc | 3 +-
.../jpa/eclipselink/src/main/java/module-info.java | 2 +
.../CausewayModulePersistenceJpaEclipselink.java | 2 +-
.../jpa/eclipselink/app/JpaMetamodelMenu.java | 10 ++
...xLengthFromJpaColumnAnnotationFacetFactory.java | 3 -
.../testdomain/conf/Configuration_usingWicket.java | 17 ---
.../testdomain/fixtures/EntityTestFixtures.java | 9 +-
.../stubs/ExecutionPublishingTestAbstract.java | 2 -
regressiontests/incubating/log4j2-test.xml | 28 +----
retired/scripts/enhance.sh | 131 ---------------------
51 files changed, 245 insertions(+), 454 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/ExceptionRecognizer.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/ExceptionRecognizer.adoc
index a9f4a040c6c..8526b30314c 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/ExceptionRecognizer.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/ExceptionRecognizer.adoc
@@ -5,7 +5,7 @@ Domain service to (attempt) to recognize certain exceptions, and return user-fri
Rather than redirecting to a general-purpose error page, the message (corresponding to the recognized exception) is rendered as a regular validation message.
-For example, a set of recognizers are provided for the JPA and JDO persistence mechanisms in order to recognize and handle SQL constraint exceptions such as uniqueness violations. These can then be rendered back to the user as expected errors, rather than fatal stacktraces.
+For example, a set of recognizers are provided for the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store in order to recognize and handle SQL constraint exceptions such as uniqueness violations. These can then be rendered back to the user as expected errors, rather than fatal stacktraces.
More than one implementation of xref:refguide:applib:index/services/exceprecog/ExceptionRecognizer.adoc[ExceptionRecognizer] can be registered; they will all be consulted (in the order as specified by Spring's _org.springframework.core.annotation.Order_ annotation) to determine if they recognize the exception. The message returned by the first service recognizing the exception is used.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/hooks/ExceptionRecognizer_010-implementation.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/hooks/ExceptionRecognizer_010-implementation.adoc
index 8fb73490888..78ecbad823f 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/hooks/ExceptionRecognizer_010-implementation.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/hooks/ExceptionRecognizer_010-implementation.adoc
@@ -5,7 +5,7 @@
== Implementation
-The framework provides a number of default implementations for JPA and JDO, to recognise:
+The framework provides a number of default implementations for xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], to recognise:
* data already exists (uniqueness constraints)
* object not found
@@ -32,7 +32,7 @@ The following configuration property is relevant:
(`false`)
|whether any `DataAccessException` exceptions should be recognized.+
-If Spring encounters a data access problem (either JPA or JDO) then it will throw a subclass of `DataAccessException`.
+If Spring encounters a data access problem then it will throw a subclass of `DataAccessException`.
This recogniser catches this exception class and throws a suitable recognition based on the subtype.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/metrics/hooks/MetricsService_010-implementation.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/metrics/hooks/MetricsService_010-implementation.adoc
index 2376771ad06..9cb0e3505e0 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/metrics/hooks/MetricsService_010-implementation.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/metrics/hooks/MetricsService_010-implementation.adoc
@@ -6,4 +6,4 @@
== Implementation
The common persistence module provides a default of this service, namely xref:refguide:persistence:index/commons/integration/changetracking/EntityChangeTrackerDefault.adoc[].
-This supports both JDO and JPA persistence mechanisms.
+This is support by the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism.
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/role/seed/CausewayPersistenceJdoMetaModelRoleAndPermissions.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/role/seed/CausewayPersistenceJdoMetaModelRoleAndPermissions.adoc
deleted file mode 100644
index a999cb8f7fb..00000000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/role/seed/CausewayPersistenceJdoMetaModelRoleAndPermissions.adoc
+++ /dev/null
@@ -1,16 +0,0 @@
-= CausewayPersistenceJdoMetaModelRoleAndPermissions
-: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 [...]
-
-Sets up a role with access to the menu actions to download the JDO metamodel.
-
-== API
-
-[source,java]
-.CausewayPersistenceJdoMetaModelRoleAndPermissions.java
-----
-class CausewayPersistenceJdoMetaModelRoleAndPermissions {
- public static final String ROLE_NAME;
- CausewayPersistenceJdoMetaModelRoleAndPermissions()
-}
-----
-
diff --git a/antora/components/refguide/modules/applib-ant/pages/Column.adoc b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
index 01380b0cc7c..aaf2a9d4761 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Column.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
@@ -1,10 +1,8 @@
[#jakarta-persistence-Column]
-= @Column (jpa)
+= @Column (jakarta.persistence)
: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 [...]
-// TODO: 3866 - to update, this mostly refers to JDO.
-
The JPA `@jakarta.persistence.Column` provides metadata describing how JPA should persist the property to a database RDBMS table column (or equivalent concept for other persistence stores).
Apache Causeway also parses and interprets this annotation in order to build up aspects of its metamodel.
@@ -12,7 +10,7 @@ Apache Causeway also parses and interprets this annotation in order to build up
[NOTE]
====
Apache Causeway parses the `@Column` annotation from the Java source code; it does not query the JPA metamodel.
-This means that it the `@Column` annotation must be used rather than XML metadata..
+This means that it the `@Column` annotation must be used rather than XML metadata.
====
This section identifies which attributes of `@Column` are recognized and used by Apache Causeway.
@@ -41,10 +39,10 @@ public class Customer {
Causeway also provides xref:refguide:applib:index/annotation/Property.adoc#optionality[@Property#optionality] attribute.
If both are specified, Apache Causeway will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.
-You should also be aware that in the lack of either the `@Column#nullable` or the `@Property#optionality` attributes, that the JDO and Apache Causeway defaults differ.
+You should also be aware that in the lack of either the `@Column#nullable` or the `@Property#optionality` attributes, that the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] and Apache Causeway defaults differ.
Apache Causeway rule is straight-forward: properties are assumed to be required.
-JDO on the other hand specifies that only primitive types are mandatory; everything else is assumed to be optional.
-Therefore a lack of either annotation can also trigger the fail-fast validation check.
+xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] on the other hand properties are assumed to be optional.
+A lack of either annotation may result in a metamodel validation error.
In the vast majority of cases you should be fine just to add the `@Column#nullable` attribute to the getter.
But see the documentation for xref:refguide:applib:index/annotation/Property.adoc#optionality[@Property#optionality] attribute for discussion on one or two minor edge cases.
diff --git a/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc b/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
index 88a9dffa9bf..dca1b526e98 100644
--- a/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
@@ -34,9 +34,6 @@ For this tutorial, also make sure that your IDE is configured to support Lombok.
Apache Causeway provides two starter apps, xref:docs:starters:helloworld.adoc[HelloWorld] and xref:docs:starters:simpleapp.adoc[SimpleApp].
These are identical in terms of functionality, but the simpleapp provides more structure and includes example tests.
-NOTE: there are JPA and JDO variants of the starter apps.
-This tutorial uses JPA as it is the more commonly used persistence mechanism.
-
We start the tutorial simply with a copy of xref:docs:starters:simpleapp.adoc[SimpleApp]; in subsequent exercises we'll refactor and build upon it to morph it into the petclinic domain.
* Clone the repo:
diff --git a/antora/components/userguide/modules/ROOT/partials/_deployment-options.adoc b/antora/components/userguide/modules/ROOT/partials/_deployment-options.adoc
index 68353ec6c0e..9e64ebd5ec7 100644
--- a/antora/components/userguide/modules/ROOT/partials/_deployment-options.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/_deployment-options.adoc
@@ -79,11 +79,8 @@ It's therefore relatively easy to take a domain object prototyped and/or tested
If you are interested in taking this approach, then you will need to provide your own implementations of any framework-provided services used by your code.
-If your own application framework is based on link:https://spring.io/projects/spring-boot[Spring Boot] and with JPA or JDO, then there is another option.
+If your own application framework is based on link:https://spring.io/projects/spring-boot[Spring Boot] and using JPA as its ORM, then there is another option.
As noted above, Apache Causeway itself runs on top of Spring Boot.
You could therefore develop a complete custom UI using one of the regular Spring technologies and run that alongside Apache Causeway - in effect the option described <<deploy-with-custom-controllers,earlier>> but for every use case, not just selected ones.
Apache Causeway continues to manage the object lifecycle and persistence as a thin layer on top of Spring, but your custom UI renders the domain objects exactly as you require.
-
-
-
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc b/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
index c53981d99be..58975cbaf4b 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
@@ -138,7 +138,7 @@ public class SimpleObject { /* ... */ }
----
<.> There may be several `@NamedQuery` annotations, nested within a `@NamedQueries` annotation) defines queries using JPAQL.
<.> Defines the name of the query.
-<.> The definition of the query, using JPAQL syntax.
+<.> The definition of the query, using JPQL syntax.
To actually use the above definition, the framework provides the xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService].
This is a generic repository for any domain class.
@@ -148,10 +148,10 @@ The corresponding repository method for the above query is:
[source,java]
----
public List<SimpleObject> findByName(String name) {
- return repositoryService.allMatches( // <.>
- Query.named(SimpleObject.class, // <.>
- "findByNameLike") // <.>
- .withParameter("name", name) // <.>
+ return repositoryService.allMatches( // <.>
+ Query.named(SimpleObject.class, // <.>
+ "SimpleObject.findByNameLike") // <.>
+ .withParameter("name", name) // <.>
);
}
@@ -160,7 +160,7 @@ public List<SimpleObject> findByName(String name) {
<.> find all instances that match the query
<.> Specifies the class that is annotated with `@NamedQuery`
<.> Corresponds to the `@NamedQuery#name` attribute
-<.> Corresponds to the `:name` parameter in the query JDOQL string
+<.> Corresponds to the `:name` parameter in the query JPQL string
diff --git a/antora/components/userguide/modules/ROOT/partials/modules/progmodel.adoc b/antora/components/userguide/modules/ROOT/partials/modules/progmodel.adoc
index ba5ecf031c6..0547b45dafd 100644
--- a/antora/components/userguide/modules/ROOT/partials/modules/progmodel.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/modules/progmodel.adoc
@@ -58,7 +58,7 @@ We can therefore rely on Maven to ensure there are no cyclic dependencies: the a
[NOTE]
====
-If the above convention is too officious, then you could choose to have multiple Spring modules per Maven module, but you will need to watch out for cycles.
+You could instead choose to have multiple Spring modules per Maven module, but if so you will need to watch out for cycles.
In such cases (proprietary) tools such as link:https://structure101.com/[Structure 101] can be used to help detect and visualize such cycles.
Or, (open source) libraries such as link:https://www.archunit.org/[ArchUnit] or https://jqassistant.org/[jQAssistant] can help enforce architectural layering to prevent the issue arising in the first place.
@@ -94,7 +94,7 @@ public class CausewayModuleExtExcelApplib {
}
----
<.> the link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html[@ComponentScan] indicates that the classpath should be scanned for domain services, entities and xref:testing:fixtures:about.adoc[fixture scripts].
-<.> recommended if using xref:pjpa::about.adoc[JPA/EclipseLink], skip if using JDO.
+<.> recommended if using xref:pjpa::about.adoc[JPA/EclipseLink].
When there is a dependency, this is then expressed in two ways: first, as a "physical" `<dependency>` in Maven; and second, as a "logical" dependency using link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Import.html[@Import] in the `@Configuration` module.
diff --git a/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc b/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
index 12bfe1ddf86..cd37cfcadbf 100644
--- a/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
@@ -17,9 +17,8 @@ Most of the annotations recognized by the framework are defined by the Apache Ca
For example the `@Title` annotation -- which identifies how the framework should derive a human-readable label for each rendered domain object -- is part of the `org.apache.causeway.applib.annotations` package.
However the framework also recognizes certain other JEE annotations such as `@jakarta.inject.Inject` (used for dependency injection).
-The framework integrates an ORM for persistence, specifically DataNucleus and the JDO API and since version 2.0.0, JPA (Eclipselink) is supported as well.
-Both JDO and JPA can map to both relational databases and also to various NoSQL objectstores such as MongoDB or Neo4J.
-Apache Causeway recognizes a number of these persistence-specific annotations, for example `@jakarta.persistence.Column(nullable=...)`.
+The framework integrates with xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] for persistence.
+Apache Causeway recognizes a number of its persistence-specific annotations, for example `@jakarta.persistence.Column(nullable=...)`.
In addition, the framework builds up the metamodel for each domain object using xref:userguide:ROOT:ui-layout-and-hints.adoc#object-layout[layout hints], such as `Customer.layout.xml`.
These provide metadata such as grouping elements of the UI together, using multi-column layouts, and so on.
diff --git a/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc b/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
index 97961e598f9..b565f7a3285 100644
--- a/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
@@ -68,31 +68,19 @@ It is not a persisted entity, instead it belongs to the application layer.
== Self-persisting Domain entities
-Sometimes we may have domain entities whose persistence is _not_ managed by JDO or JPA mechanism, in other words they take responsibility for their own persistence.
-Because such entities are responsible for their own state management, they can be implemented as view models.
+Sometimes we may have domain objects that conceptually are entities - long-lived persistent and shared instances - but where the state is not stored in an accessible RDBMS.
+For example:
-=== Externally-managed entities
+* The entity might be externally-managed, and reside in some other system, for example accessible only through a SOAP web service.
-Sometimes the entities that make up your application are persisted not in the local database but reside in some other system, for example accessible only through a SOAP web service.
-Logically that data might still be considered a domain entity and we might want to associate behaviour with it, however it cannot be modelled as a domain entity since JPA/EclipseLink doesn't know about the entity nor how to retrieve or update it.
+* The entity's state might reside in a datastore not supported by xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], such as a graph database like neo4j.
-There are a couple of ways around this: we could either replicate the data somehow from the external system into the Causeway-managed database (in which case it is once again just another domain entity), or we could set up a stub/proxy for the externally managed entity.
-This proxy would hold the reference to the externally-managed domain entity (eg an external id), as well as the "smarts" to know how to interact with that entity (by making SOAP web service calls etc).
+* the entity's state might be held only in-memory, for example read-only configuration data that is read from a config file (eg log4j appender definitions).
-The stub/proxy is a type of view model: a view -- if you like -- onto the domain entity managed by the external system.
+Because such entities are responsible for their own state management, they should be implemented within Causeway as view models, for example by implementing the xref:refguide:applib:index/ViewModel.adoc[] interface.
-=== Internal entities
-
-Alternatively, perhaps your application has an entity that is best persisted not in a relational database but instead in a custom datastore, for example a graph database such as neo4j.
-
-=== In-memory entities
-
-As a variation on the above, sometimes there are domain objects that are, conceptually at least entities, but whose state is not actually persisted anywhere, merely held in-memory (eg in a hash).
-
-A simple example is read-only configuration data that is read from a config file (eg log4j appender definitions) but thereafter is presented in the UI just like any other entity.
-
== DTOs
DTOs (data transfer objects) are simple classes that (according to link:https://en.wikipedia.org/wiki/Data_transfer_object[wikipedia]) "carry data between processes".
diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index fca520eb5d7..b6e32bfbc2f 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -592,10 +592,10 @@ <h4 class="cta-text">Try out ...</h4>
docker run -p 8080:8080 apache/causeway-app-helloworld:latest</pre>
<p>
<p class="cta-text text-left" style="margin-block-end: 0; ">
- Build from source (JPA or JDO) using:
+ Build from source using:
<pre id="helloworld-jpa-text">
APP=causeway-app-helloworld
-VARIANT="3-jpa" # or: "3-jdo"
+VARIANT="3-jpa"
curl https://codeload.github.com/apache/$APP/zip/v$VARIANT | jar xv
cd $APP-$VARIANT
@@ -613,10 +613,10 @@ <h4 class="cta-text">Develop your own ...</h4>
docker run -p 8080:8080 apache/causeway-app-simpleapp:latest</pre>
<p>
<p class="cta-text text-left" style="margin-block-end: 0; ">
- Build from source (JPA or JDO) using:
+ Build from source using:
<pre id="simpleapp-jpa-text">
APP=causeway-app-simpleapp
-VARIANT="3-jpa" # or: "3-jdo"
+VARIANT="3-jpa"
curl https://codeload.github.com/apache/$APP/zip/v$VARIANT | jar xv
cd $APP-$VARIANT
@@ -634,7 +634,7 @@ <h4 class="cta-text" style="margin-top: 20px">Learn and Explore...</h4>
<br/>
<p class="cta-text text-left" style="margin-block-end: 0; ">
<pre id="demoapp-docker-text" style="margin-top: 5px">
-docker run -p 8080:8080 apache/causeway-app-demo-jpa:latest # or: ...-jdo:latest</pre>
+docker run -p 8080:8080 apache/causeway-app-demo-jpa:latest</pre>
<br/>
<p>
</div>
@@ -748,19 +748,6 @@ <h3>Help</h3>
<script src="_/js/home/lib/sticky/sticky.js"></script>
<script>
- document.querySelector('#helloworld-jdo-copy').addEventListener('click', async event => {
- if (!navigator.clipboard) {
- document.querySelector('#helloworld-jdo-copy').remove();
- return
- }
- const text = document.querySelector('#helloworld-jdo-text').innerHTML;
- try {
- await navigator.clipboard.writeText(text);
- event.target.textContent = 'Copied to clipboard';
- } catch (err) {
- alert("Failed to copy :-(", err)
- }
- });
document.querySelector('#helloworld-jpa-copy').addEventListener('click', async event => {
if (!navigator.clipboard) {
document.querySelector('#helloworld-jpa-copy').remove();
@@ -774,19 +761,6 @@ <h3>Help</h3>
alert("Failed to copy :-(", err)
}
});
- document.querySelector('#simpleapp-jdo-copy').addEventListener('click', async event => {
- if (!navigator.clipboard) {
- document.querySelector('#simpleapp-jdo-copy').remove();
- return
- }
- const text = document.querySelector('#simpleapp-jdo-text').innerHTML;
- try {
- await navigator.clipboard.writeText(text);
- event.target.textContent = 'Copied to clipboard';
- } catch (err) {
- alert("Failed to copy :-(", err)
- }
- })
document.querySelector('#simpleapp-jpa-copy').addEventListener('click', async event => {
if (!navigator.clipboard) {
document.querySelector('#simpleapp-jpa-copy').remove();
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/annotation/DomainObject.java b/api/applib/src/main/java/org/apache/causeway/applib/annotation/DomainObject.java
index 182685897d5..8d6ef24be99 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/DomainObject.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/DomainObject.java
@@ -442,8 +442,8 @@ Nature nature()
* Fine-tunes how auto-complete queries work, Whether to use the value of this (string) property for auto.
*
* <p>
- * NOTE: this feature requires that the <code>querydsl-xxx</code> module (for JDO or JPA as required) is
- * included as part of the application manifest. Otherwise, no autocomplete will be generated.
+ * NOTE: this feature requires that the <code>querydsl-jpa</code> module is included as part of the
+ * application manifest. Otherwise, no autocomplete will be generated.
* </p>
*
* <p>
@@ -468,8 +468,8 @@ Nature nature()
* </p>
*
* <p>
- * NOTE: this feature requires that the <code>querydsl-xxx</code> module (for JDO or JPA as required) is
- * included as part of the application manifest. Otherwise, no autocomplete will be generated.
+ * NOTE: this feature requires that the <code>querydsl-jpa</code> module is included as part of the
+ * application manifest. Otherwise, no autocomplete will be generated.
* </p>
*
* @see #queryDslAutoCompleteMinLength()
@@ -492,8 +492,8 @@ Nature nature()
* </p>
*
* <p>
- * NOTE: this feature requires that the <code>querydsl-xxx</code> module (for JDO or JPA as required) is
- * included as part of the application manifest. Otherwise, no autocomplete will be generated.
+ * NOTE: this feature requires that the <code>querydsl-jpa</code> module is included as part of the
+ * application manifest. Otherwise, no autocomplete will be generated.
* </p>
*
* @see #queryDslAutoCompleteAdditionalPredicateMethod()
@@ -509,8 +509,8 @@ Nature nature()
* added to the autocomplete (for example to search only for current or active objects).
*
* <p>
- * NOTE: this feature requires that the <code>querydsl-xxx</code> module (for JDO or JPA as required) is
- * included as part of the application manifest. Otherwise, no autocomplete will be generated.
+ * NOTE: this feature requires that the <code>querydsl-jpa</code> module is included as part of the
+ * application manifest. Otherwise, no autocomplete will be generated.
* </p>
*
* @see #queryDslAutoCompleteMinLength()
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Nature.java b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Nature.java
index a6f6008ab53..e59dc27ad98 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Nature.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Nature.java
@@ -39,8 +39,9 @@ public enum Nature {
NOT_SPECIFIED,
/**
- * A domain entity whose persistence is managed internally by Causeway,
- * using JPA or JDO as the persistence implementation.
+ * A domain entity whose persistence is managed by Causeway using the configured object store,
+ * eg JPA/EclipseLink.
+ *
* <p>
* Domain entities are considered to be part of the domain model layer.
* <p>
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Property.java b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Property.java
index 3c1f8db31dc..4a61ac98b8b 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Property.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Property.java
@@ -24,6 +24,8 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import jakarta.persistence.Column;
+
import org.springframework.core.annotation.AliasFor;
import org.apache.causeway.applib.events.domain.PropertyDomainEvent;
@@ -199,9 +201,9 @@ String fileAccept()
* </p>
*
* <p>
- * NOTE: this will usually be supplemented by a JDO or JPA-specific
- * annotation to indicate length of the column in the table to whic
- * the entity is mapped.
+ * NOTE: if using the JPA object store, the field will usually also be annotated using
+ * {@link Column#length()} to specify the length of the column in the table to which the
+ * entity is mapped.
* </p>
*
* @see Parameter#maxLength()
@@ -236,8 +238,8 @@ Class<? extends Specification>[] mustSatisfy()
* Whether this property is optional or is mandatory (ie required).
*
* <p>
- * NOTE: this will usually be supplmented by a JDO or JPA-specific
- * annotation to specify the nullability of the corresponding column in
+ * NOTE: if using the JPA object store, the field will usually also be annotated using
+ * {@link Column#nullable()} to specify the nullability of the corresponding column in
* the table to which the owning entity is mapped.
* </p>
*
@@ -354,8 +356,8 @@ public boolean isIgnoreCase() {
* </p>
*
* <p>
- * NOTE: this feature requires that the <code>querydsl-xxx</code> module (for JDO or JPA as required) is
- * included as part of the application manifest. Otherwise, no autocomplete will be generated.
+ * NOTE: this feature requires that the <code>querydsl-jpa</code> module is included as part of the
+ * application manifest. Otherwise, no autocomplete will be generated.
* </p>
*
* <p>
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/exceptions/unrecoverable/RepositoryException.java b/api/applib/src/main/java/org/apache/causeway/applib/exceptions/unrecoverable/RepositoryException.java
index 0c37cd6c108..350e04de1da 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/exceptions/unrecoverable/RepositoryException.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/exceptions/unrecoverable/RepositoryException.java
@@ -26,7 +26,7 @@
*
* <p>
* This exception is intended to represent an unexpected and non-recoverable condition (eg a syntax error in some
- * JDOQL query syntax or similar), and so is a subclass of {@link UnrecoverableException}.
+ * named query syntax, or similar), and so is a subclass of {@link UnrecoverableException}.
* Throwing this exception will therefore result in (some sort of) error page being displayed
* to the user.
*
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/bookmark/IdStringifier.java b/api/applib/src/main/java/org/apache/causeway/applib/services/bookmark/IdStringifier.java
index 7fb7b34c1ba..715c19fe02e 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/bookmark/IdStringifier.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/bookmark/IdStringifier.java
@@ -24,8 +24,7 @@
/**
* SPI to convert the identifier (primary key) of an entity, of a given type (eg Integer) into a string, and
- * to convert back again into the key object used to actually look up the target entity instance;
- * supported by both JDO and JPA persistence mechanisms.
+ * to convert back again into the key object used to actually look up the target entity instance.
*
* <p>
* This is ultimately used by {@link BookmarkService} where we hold a persistent reference to an entity. The
@@ -34,9 +33,9 @@
* </p>
*
* <p>
- * The framework provides default implementations of this SPI for JDO (data store and application identity) and
- * for JPA. Because this is a SPI, other modules or application code can provide their own implementations.
- * An example of such is the JPA implementation of the <code>commandlog</code> extension.
+ * The framework provides default implementations of this SPI for the supported value types. Modules that define
+ * application-defined primary keys can provide their own implementations of this SPI, for examples see the
+ * JPA entities defined in the commandlog-jpa module.
* </p>
*
* @since 2.0 {@index}
@@ -59,9 +58,7 @@ public interface IdStringifier<T> {
* Convert a string representation of the identifier (as returned by {@link #enstring(Object)}) into an object
* that can be used to retrieve.
*
- * @param targetEntityClass - the class of the target entity, eg <code>Customer</code>. For both JDO and JPA,
- * we always have this information available, and is needed (at least) by the JDO
- * implementations of application primary keys using built-ins, eg <code>LongIdentity</code>.
+ * @param targetEntityClass - the class of the target entity, eg <code>Customer</code>.
* @param stringified - as returned by {@link #enstring(Object)}
*/
T destring(@NonNull Class<?> targetEntityClass, @NonNull String stringified);
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/exceprecog/ExceptionRecognizer.java b/api/applib/src/main/java/org/apache/causeway/applib/services/exceprecog/ExceptionRecognizer.java
index 5ec046d917b..6a9fe935e42 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/exceprecog/ExceptionRecognizer.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/exceprecog/ExceptionRecognizer.java
@@ -30,8 +30,8 @@
* as a regular validation message.
*
* <p>
- * For example, a set of recognizers are provided for the JPA and JDO
- * persistence mechanisms in order to recognize and handle SQL constraint
+ * For example, a set of recognizers are provided for the JPA
+ * object store in order to recognize and handle SQL constraint
* exceptions such as uniqueness violations. These can then be rendered back to
* the user as expected errors, rather than fatal stacktraces.
*
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/exceprecog/RootCauseFinder.java b/api/applib/src/main/java/org/apache/causeway/applib/services/exceprecog/RootCauseFinder.java
index ef888709917..caa32eb8399 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/exceprecog/RootCauseFinder.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/exceprecog/RootCauseFinder.java
@@ -25,7 +25,6 @@
* SPI to help {@link Exception} root cause finding.
* <p>
* Either returns a more specific {@link Throwable} or an {@link Optional#empty()}.
- * @apiNote Specifically introduced to handle JDOException's {@code Throwable[] nested}.
*
* @since 2.0 {@index}
*/
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/factory/FactoryService.java b/api/applib/src/main/java/org/apache/causeway/applib/services/factory/FactoryService.java
index bdadfe552c2..92560c33059 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/factory/FactoryService.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/factory/FactoryService.java
@@ -92,7 +92,8 @@ public interface FactoryService {
/**
* Creates a new detached entity instance, with injection points resolved.
* <p>
- * The entity will not yet be persisted, in other words: its not yet known to the persistence layer.
+ * The entity will not yet be persisted, in other words: it is not yet known to the persistence layer.
+ * </p>
*
* @param <T>
* @param entity - most likely just new-ed up, without injection points resolved
@@ -164,10 +165,10 @@ default <T> T viewModel(final @NonNull Class<T> viewModelClass) {
* @since 2.0
*/
<T> T create(@NonNull Class<T> domainClass);
-
+
/**
- * In support of built-in tree semantics, as inferred from
- * {@link PropertyLayout#navigableSubtree()} or
+ * In support of built-in tree semantics, as inferred from
+ * {@link PropertyLayout#navigableSubtree()} or
* {@link CollectionLayout#navigableSubtree()} annotations.
* @since 3.2
*/
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/iactnlayer/InteractionService.java b/api/applib/src/main/java/org/apache/causeway/applib/services/iactnlayer/InteractionService.java
index d8acc0599b0..d133392bb42 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/iactnlayer/InteractionService.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/iactnlayer/InteractionService.java
@@ -26,8 +26,12 @@
import org.jspecify.annotations.NonNull;
/**
- * A low-level service to programmatically "connect" (or create a
- * session, or interact with; choose your term) the framework's runtime.
+ * A low-level service to programmatically create a short-lived interaction or session.
+ *
+ * <p>
+ * You could think of this as analogous to an {@link java.net.http.HttpRequest} or
+ * a JPA {@link jakarta.persistence.EntityManager} or a Hibernate Session.
+ * </p>
*
* <p>
* This service is used internally by the framework itself, for example
@@ -37,11 +41,6 @@
* </p>
*
* <p>
- * You could think of this as analogous to an <code>HttpRequest</code>, or
- * a JPA <code>EntityManager</code> or JDO <code>PersistenceManager</code>.
- * </p>
- *
- * <p>
* There are two main APIs exposed. One is to
* {@link #openInteraction(InteractionContext) open} a new {@link InteractionLayer},
* to be {@link #closeInteractionLayers() closed later}. The other is to
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
index 174ecd1b68d..98ad9a1cdf8 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java
@@ -57,8 +57,6 @@ public enum EntityState {
ATTACHED_NO_OID(false),
/**
* Is detached, hence (per definition) has an OID.
- * <p>
- * Supported by both JDO and JPA. However, historically never used by the framework for JDO.
*/
DETACHED(true),
/**
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/RepositoryService.java b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/RepositoryService.java
index 2c58080a176..aa8cc30c37b 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/RepositoryService.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/RepositoryService.java
@@ -60,19 +60,12 @@ public interface RepositoryService {
EntityState getEntityState(@Nullable Object object);
/**
- * Usually called as a precursor to persisting a domain entity, this method
- * verifies that the object is an entity and injects domain services into
- * it.
+ * Creates a new detached entity instance, with injection points resolved.
*
* <p>
- * This approach allows the domain entity to have regular constructor
- * (with parameters) to set up the initial state of the domain object.
- * This is preferred over {@link #detachedEntity(Class)}, which
- * also instantiates the class and then injects into it - but requires
- * that the domain object has a no-arg constructor to do so.
+ * The entity will not yet be persisted, in other words: it is not yet known to the persistence layer.
* </p>
*
- *
* <p>
* This is the same functionality as exposed by
* {@link org.apache.causeway.applib.services.factory.FactoryService#detachedEntity(Object)}.
@@ -277,10 +270,9 @@ <T> List<T> allMatches(
* multiple instances, where a
* {@link org.apache.causeway.applib.query.NamedQuery} can be passed in
* that ultimately describes a SELECT query with WHERE predicates.
- * The mechanism by which this is defined depends on the ORM (JDO or
- * JPA). A {@link org.apache.causeway.applib.query.NamedQuery} can
- * optionally specify a
- * {@link org.apache.causeway.applib.query.NamedQuery#withRange(QueryRange) range} of instances to be returned.
+ * A {@link org.apache.causeway.applib.query.NamedQuery} can optionally specify a
+ * {@link org.apache.causeway.applib.query.NamedQuery#withRange(QueryRange) range}
+ * of instances to be returned.
* </p>
*
* <p>
@@ -335,10 +327,9 @@ <T> Optional<T> uniqueMatch(
* no more than one instance, where a
* {@link org.apache.causeway.applib.query.NamedQuery} can be passed in
* that ultimately describes a SELECT query with WHERE predicates.
- * The mechanism by which this is defined depends on the ORM (JDO or
- * JPA). A {@link org.apache.causeway.applib.query.NamedQuery} can
- * optionally specify a
- * {@link org.apache.causeway.applib.query.NamedQuery#withRange(QueryRange) range} of instances to be returned.
+ * A {@link org.apache.causeway.applib.query.NamedQuery} can optionally specify a
+ * {@link org.apache.causeway.applib.query.NamedQuery#withRange(QueryRange) range}
+ * of instances to be returned.
* </p>
*
* <p>
@@ -386,10 +377,9 @@ <T> Optional<T> firstMatch(
* the first matching instance, where a
* {@link org.apache.causeway.applib.query.NamedQuery} can be passed in
* that ultimately describes a SELECT query with WHERE predicates.
- * The mechanism by which this is defined depends on the ORM (JDO or
- * JPA). A {@link org.apache.causeway.applib.query.NamedQuery} can
- * optionally specify a
- * {@link org.apache.causeway.applib.query.NamedQuery#withRange(QueryRange) range} of instances to be returned.
+ * A {@link org.apache.causeway.applib.query.NamedQuery} can optionally specify a
+ * {@link org.apache.causeway.applib.query.NamedQuery#withRange(QueryRange) range}
+ * of instances to be returned.
* </p>
*
* <p>
diff --git a/api/schema/src/main/adoc/modules/schema/pages/common.adoc b/api/schema/src/main/adoc/modules/schema/pages/common.adoc
index 954894b050e..cae72e7f14e 100644
--- a/api/schema/src/main/adoc/modules/schema/pages/common.adoc
+++ b/api/schema/src/main/adoc/modules/schema/pages/common.adoc
@@ -52,9 +52,8 @@ The `oidDto` complex type is defined as:
Although URIs are not the same as URLs, you will find that the schemas are also downloadable from this location.
<.> the `oidDto` complex type defines the unique identifier for any domain object: its type, and an identifier.
The `objectState` attribute can usually be omitted (indicating a persistent object)
-<.> the object type, corresponding to either the xref:refguide:applib:index/annotation/DomainObject.adoc#logicalTypeName[@DomainObject#logicalTypeName()] attribute, or to the (JDO)
-xref:refguide:applib-ant:PersistenceCapable.adoc[@PersistenceCapable] annotation (`schema` and/or `table` attributes), or to the (JDO) xref:refguide:applib-ant:Discriminator.adoc[@Discriminator] annotation.
-If none is specified, then the fully qualified class name will be used.
+<.> the logical object type name, corresponding to `jakarta.inject.Named` annotation.
+If not specified, then the fully qualified class name will be used.
<.> the object identifier (aka primary key), converted to string form.
<.> the `bookmarkObjectState` enumerates the possible persistence states of the referenced object.
In previous versions of the schema the attribute was defaulted to "persistent"; the "persistent" state is assumed if the attribute is omitted.
diff --git a/core/config/src/main/adoc/modules/config/pages/section-hooks/causeway.core.config~pre.adoc b/core/config/src/main/adoc/modules/config/pages/section-hooks/causeway.core.config~pre.adoc
index c31f00de1a2..7cecac15852 100644
--- a/core/config/src/main/adoc/modules/config/pages/section-hooks/causeway.core.config~pre.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/section-hooks/causeway.core.config~pre.adoc
@@ -1,5 +1,5 @@
: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 [...]
-Configuration of the DataNucleus JDO persistence component (the Apache Causeway component that wraps the DataNucleus ORM).
+Configuration of the Core framework.
diff --git a/core/config/src/main/adoc/modules/config/pages/section-hooks/causeway.persistence.schema~pre.adoc b/core/config/src/main/adoc/modules/config/pages/section-hooks/causeway.persistence.schema~pre.adoc
index ce0c7df37d7..a95a1a72286 100644
--- a/core/config/src/main/adoc/modules/config/pages/section-hooks/causeway.persistence.schema~pre.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/section-hooks/causeway.persistence.schema~pre.adoc
@@ -1,4 +1,4 @@
: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 [...]
-Configuration that applies to database persistence schema (used by JPA and JDO datastores).
+Configuration that applies to database persistence schema (used by JPA object store).
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/causeway.applib.adoc b/core/config/src/main/adoc/modules/config/pages/sections/causeway.applib.adoc
index 918d3dd599a..c52f0637a40 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/causeway.applib.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/causeway.applib.adoc
@@ -112,7 +112,7 @@ causeway.applib.annotation. +
action-layout.css-class-fa. +
patterns-as-map
-|
+|
| null
@@ -146,7 +146,7 @@ causeway.applib.annotation. +
action-layout.css-class. +
patterns-as-map
-|
+|
| null
@@ -219,7 +219,7 @@ causeway.applib.annotation. +
collection-layout. +
sequence-policy-if-unreferenced
-|
+|
| How `CollectionLayout#sequence()` should be handled when calculating the slot-in order for unreferenced _Collections_. ++{++@code AS++_++PER++_++SEQUENCE} will use Dewey order based on available 'sequence' attributes, whereas ++{++@code ALPHABETICALLY} will use alphabetical order based on member names.
default: ++{++@code AS++_++PER++_++SEQUENCE}
@@ -230,7 +230,7 @@ default: ++{++@code AS++_++PER++_++SEQUENCE}
causeway.applib.annotation. +
collection-layout.table-decorator
-|
+|
| Defines whether the table representation of a collection should be decorated using a client-side Javascript library, eg for client-side paging and filtering.
@@ -259,7 +259,7 @@ domain-object-layout. +
css-class-ui-event. +
post-for-default
-|
+|
| Influences whether an `CssClassUiEvent` should be published (on the internal `EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `CssClassUiEvent#setCssClass(String)` change) the CSS classes that are used.
The algorithm for determining whether (and what type of) an event is sent depends on the value of the `DomainObjectLayout#cssClassUiEvent()` @DomainObjectLayout(cssClassEvent=...)} for the domain object in question.
@@ -277,7 +277,7 @@ causeway.applib.annotation. +
domain-object-layout.icon-ui-event. +
post-for-default
-|
+|
| Influences whether an `IconUiEvent` should be published (on the internal `EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `IconUiEvent#setIconName(String)` change) the icon that is used.
The algorithm for determining whether (and what type of) an event is sent depends on the value of the `DomainObjectLayout#iconUiEvent()` @DomainObjectLayout(iconEvent=...)} for the domain object in question.
@@ -295,7 +295,7 @@ causeway.applib.annotation. +
domain-object-layout. +
layout-ui-event.post-for-default
-|
+|
| Influences whether an `LayoutUiEvent` should be published (on the internal `EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `LayoutUiEvent#setLayout(String)` change) the layout that is used.
If a different layout value has been set, then a layout in the form `xml` use used (where `zzz` is the name of the layout).
@@ -326,7 +326,7 @@ causeway.applib.annotation. +
domain-object-layout. +
table-decorator
-|
+|
| Defines whether the table representation of a standalone collection of this domain class should be decorated using a client-side Javascript library, eg for client-side paging and filtering.
@@ -336,7 +336,7 @@ causeway.applib.annotation. +
domain-object-layout. +
title-ui-event.post-for-default
-|
+|
| Influences whether an `TitleUiEvent` should be published (on the internal `EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `TitleUiEvent#setTitle(String)` change) the title that is used.
The algorithm for determining whether (and what type of) an event is sent depends on the value of the `DomainObjectLayout#titleUiEvent()` @DomainObjectLayout(titleEvent=...)} for the domain object in question.
@@ -465,7 +465,7 @@ The algorithm for determining whether (and what type of) an event is sent depend
Note: this applies only to domain entities, not to view models.
-Note: There is no corresponding `removed` callback, because (for the JDO persistence store at least) it is not possible to interact with a domain entity once it has been deleted.
+Note: There is no corresponding `removed` callback, because it is not possible to interact with a domain entity once it has been deleted.
|
@@ -550,7 +550,7 @@ causeway.applib.annotation. +
property-layout. +
sequence-policy-if-unreferenced
-|
+|
| How `PropertyLayout#sequence()` should be handled when calculating the slot-in order for unreferenced _Properties_. ++{++@code AS++_++PER++_++SEQUENCE} will use Dewey order based on available 'sequence' attributes, whereas ++{++@code ALPHABETICALLY} will use alphabetical order based on member names.
default: ++{++@code AS++_++PER++_++SEQUENCE}
@@ -671,7 +671,7 @@ causeway.applib.annotation. +
view-model.validation. +
semantic-checking.enable
-|
+|
| Whether to check for inconsistencies between the usage of `DomainObject` and `DomainObjectLayout`.
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/causeway.core.meta-model.validator.adoc b/core/config/src/main/adoc/modules/config/pages/sections/causeway.core.meta-model.validator.adoc
index 7b7ecbcc487..d554a327646 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/causeway.core.meta-model.validator.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/causeway.core.meta-model.validator.adoc
@@ -39,7 +39,7 @@ Note that this settings has no effect if the programming model has been configur
causeway.core.meta-model.validator. +
allow-logical-type-name-as-alias
-|
+|
| Allows logical type name in `Named` also be included in the list of `DomainObject#aliased()` or `DomainService#aliased()`.
It is _highly advisable_ to leave this disabled. This option is meant as a practical way to enable to transition from old names to new logical type names. Especially when you have a large number of files that have to migrated and you want to do the migration in incremental steps.
@@ -50,7 +50,7 @@ It is _highly advisable_ to leave this disabled. This option is meant as a pract
causeway.core.meta-model.validator. +
explicit-logical-type-names
-|
+|
| Whether to ensure that the logical-type-name of all objects must be specified explicitly, using either `Named`.
It is _highly advisable_ to leave this set as enabled (the default). These logical-type-names should also (of course) be unique - among non-abstract types.
@@ -71,7 +71,7 @@ date-time-type-adapter
causeway.core.meta-model.validator. +
jaxb-view-model.no-arg-constructor
-|
+|
| If set, then ensures that all JAXB-style view models have a no-arg constructor.
@@ -103,23 +103,6 @@ reference-type-adapter
| If set, then ensures that for all properties of JAXB-style view models where the property's type is an entity, then that entity's type has been correctly annotated with @`XmlJavaTypeAdapter` (so that the property's value can be converted into a serializable form).
-|
-[[causeway.core.meta-model.validator.jdoql.from-clause]]
-causeway.core.meta-model.validator. +
-jdoql.from-clause
-
-| true
-| If set, then ensures that the 'FROM' clause within any JDOQL `@Query`s annotations relates to a known entity type, and moreover that that type is compatible with the type on which the annotation appears: meaning its either a supertype of or the same type as the annotated type.
-
-
-|
-[[causeway.core.meta-model.validator.jdoql.variables-clause]]
-causeway.core.meta-model.validator. +
-jdoql.variables-clause
-
-| true
-| If set, then ensures that the 'VARIABLES' clause within any JDOQL `@Query`s relates to a known entity type.
-
|
[[causeway.core.meta-model.validator.parallelize]]
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index 9fd259bfb3c..96451e1b715 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -653,8 +653,7 @@ public record RemovingLifecycleEvent(
*
*
* <p>
- * Note: There is no corresponding <code>removed</code> callback, because (for the JDO persistence store at least)
- * it is not possible to interact with a domain entity once it has been deleted.
+ * Note: There is no corresponding <code>removed</code> callback, because it is not possible to interact with a domain entity once it has been deleted.
*
*/
@DefaultValue("true")
@@ -2026,13 +2025,13 @@ public record EntityChangeTracker(
* <p>
* However, this auto-flush behaviour can be troublesome if the query occurs as a side-effect of the evaluation of a derived property,
* whose value in turn is enlisted by an implementation of a subscriber (in particular {@link EntityPropertyChangeSubscriber}) which
- * captures the value of all properties (both persisted and derived). However, this behaviour can (at least under JDO), result in a {@link java.util.ConcurrentModificationException}.
- *
+ * captures the value of all properties (both persisted and derived). However, this behaviour may result in a {@link java.util.ConcurrentModificationException}.
+ * </p>
*
* <p>
* By default, {@link EntityChangeTracker} will therefore temporarily suppress any auto-flushing while this is ongoing. The purpose
* of this configuration property is to never suppress, ie always autoflush.
- *
+ * </p>
*/
@DefaultValue("true")
boolean suppressAutoFlush,
@@ -2041,6 +2040,7 @@ public record EntityChangeTracker(
*
* <p>
* By default this service is enabled (if added to the classpath as a module).
+ * </p>
*
*/
@DefaultValue("true")
@@ -2066,7 +2066,6 @@ public record Schema(
* Does lookup additional "mapping-files" in META-INF/orm-<i>name</i>.xml
* (equivalent to "mapping-file" entries in persistence.xml) and adds these
* to those that are already configured the <i>Spring Data</i> way (if any).
- * @implNote not implemented for JDO
*/
@DefaultValue
List<String> additionalOrmFiles,
@@ -3336,20 +3335,26 @@ public record BigDecimal(
/**
* Indicates how to derive the min fractional facet (the minimum number of digits after the decimal point).
*
- * <p>If this flag is set, then the {@link Digits#fraction()} annotation or ORM equivalent (the JDO
- * <code>@Column#scale</code> or the JPA {@link Column#scale()}) should be used for the
+ * <p>If this flag is set, then the {@link Digits#fraction()} annotation or the JPA equivalent {@link Column#scale()}) should be used for the
* <code>MinFractionalFacet</code> as well as the <code>MaxFractionalFacet</code>.
+ * </p>
*
- * <p>What this means in practice is that a numeric values will be rendered to the same number of fractional
+ * <p>
+ * What this means in practice is that a numeric values will be rendered to the same number of fractional
* digits, irrespective of whether they are whole numbers or fractional. For example, with a scale of 2,
* then '123.4532' will be rendered as '123.45', while '123' will be rendered
* as '123.00'.
+ * </p>
*
- * <p>If this flag is NOT set, or if it is set but there is no annotation, then the {@link Display#minScale} config
+ * <p>
+ *If this flag is NOT set, or if it is set but there is no annotation, then the {@link Display#minScale} config
* property is used as a fallback.
+ * </p>
*
- * <p>If there is no fallback, then it means that a big decimal such as '123.00' will be presented as
+ * <p>
+ * If there is no fallback, then it means that a big decimal such as '123.00' will be presented as
* just '123' (that is, the shortest possible textual representation).
+ * </p>
*/
@DefaultValue("true")
boolean useScaleForMinFractionalFacet,
@@ -3366,17 +3371,25 @@ public record Editing(
* ',' (comma) is the grouping (thousands) separator while the '.' (period) acts as a
* decimal point, but in others (eg France, Italy) it is the other way around.
*
- * <p>Surprisingly perhaps, a string such as "123,99", when parsed ((by {@link java.text.DecimalFormat})
+ * <p>
+ * Surprisingly perhaps, a string such as "123,99", when parsed ((by {@link java.text.DecimalFormat})
* in an English locale, is not rejected but instead is evaluated as the value 12399L. That's almost
* certainly not what the end-user would have expected, and results in a money value 100x too large.
+ * </p>
*
- * <p>The purpose of this configuration property is to remove the confusion by simply disallowing the
+ * <p>
+ * The purpose of this configuration property is to remove the confusion by simply disallowing the
* thousands separator from being part of the input string.
+ * </p>
*
- * <p>For maximum safety, allowing the grouping separator is disallowed, but the alternate (original)
+ * <p>
+ * For maximum safety, allowing the grouping separator is disallowed, but the alternate (original)
* behaviour can be reinstated by setting this config property back to <code>true</code>.
+ * </p>
*
- * <p>The same configuration property is also used for rendering the value.
+ * <p>
+ * The same configuration property is also used for rendering the value.
+ * </p>
*
* @see Display#isUseGroupingSeparator()
*/
@@ -3394,8 +3407,10 @@ public record Display(
/**
* The minimum scale to use for all {@link java.math.BigDecimal}s.
*
- * <p> Is only used if the minimum scale has not been specified explicitly by some other means, typically
+ * <p>
+ * Is only used if the minimum scale has not been specified explicitly by some other means, typically
* either {@link Digits#fraction()} or an ORM semantic such as the (JPA) {@link Column#scale()}.
+ * </p>
*/
Integer minScale,
@@ -3415,7 +3430,9 @@ public record Kroki(
/**
* If set, adds plantuml support to the AsciiDoc value type.
*
- * <p>Eg. via docker instance like {@literal yuzutech/kroki}.
+ * <p>
+ * Eg. via docker instance like {@literal yuzutech/kroki}.
+ * </p>
*/
URL backendUrl,
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
index 5374288a57c..3386685b816 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
@@ -45,14 +45,14 @@ public class CausewayBeanTypeRegistry {
public static CausewayBeanTypeRegistry empty() {
return new CausewayBeanTypeRegistry(Can.empty());
}
-
+
/**
* (immutable) scan result, as used by the SpecificationLoader for introspection
*/
private final Can<CausewayBeanMetaData> scannedTypes;
private final Can<CausewayBeanMetaData> entities;
private final PersistenceStack persistenceStack;
-
+
private final Map<Class<?>, CausewayBeanMetaData> scannedTypesByClass = new HashMap<>();
// -- DISTINCT CATEGORIES OF BEAN SORTS
@@ -68,7 +68,7 @@ public static CausewayBeanTypeRegistry empty() {
this.scannedTypes = scannedTypes;
var entityTypes = new HashMap<Class<?>, CausewayBeanMetaData>();
-
+
scannedTypes.forEach(typeMeta->{
var cls = typeMeta.getCorrespondingClass();
@@ -103,7 +103,7 @@ public static CausewayBeanTypeRegistry empty() {
return;
}
});
-
+
this.entities = Can.ofCollection(entityTypes.values());
this.persistenceStack = entities.stream()
.map(CausewayBeanMetaData::persistenceStack)
@@ -115,14 +115,14 @@ public static CausewayBeanTypeRegistry empty() {
// -- FIELDS
/**
- * Returns 'JDO' or 'JPA' based on metadata found during {@link CausewayBeanTypeClassifier type-classification}.
+ * Returns the object store in use for this application, based on metadata found during {@link CausewayBeanTypeClassifier type-classification}.
* If no (concrete) entity type is found, returns 'UNSPECIFIED'.
* @implNote assumes that there can be only one persistence stack
*/
public PersistenceStack persistenceStack() {
- return persistenceStack;
+ return persistenceStack;
}
-
+
// -- STREAMS
public Stream<CausewayBeanMetaData> streamScannedTypes() { return scannedTypes.stream(); }
@@ -136,7 +136,7 @@ public Stream<Class<?>> streamEntityTypes(final @Nullable PersistenceStack selec
.filter(typeMeta->typeMeta.persistenceStack()==selectedStack)
.<Class<?>>map(CausewayBeanMetaData::getCorrespondingClass);
}
-
+
// -- LOOKUP
public Optional<String> lookupDomainServiceNameForType(final Class<?> type) {
@@ -147,7 +147,7 @@ public Optional<String> lookupDomainServiceNameForType(final Class<?> type) {
public boolean containsManagedBeansContributing(final @NonNull Class<?> type) {
return domainServices.containsKey(type);
}
-
+
public Optional<CausewayBeanMetaData> lookupScannedType(final Class<?> type) {
return Optional.ofNullable(scannedTypesByClass.get(type));
}
diff --git a/core/interaction/src/main/adoc/modules/interaction/pages/interactions-commands-and-executions.adoc b/core/interaction/src/main/adoc/modules/interaction/pages/interactions-commands-and-executions.adoc
index f4d031247cd..bca198ebb15 100644
--- a/core/interaction/src/main/adoc/modules/interaction/pages/interactions-commands-and-executions.adoc
+++ b/core/interaction/src/main/adoc/modules/interaction/pages/interactions-commands-and-executions.adoc
@@ -20,7 +20,6 @@ The xref:refguide:testing:index/integtestsupport/applib/CausewayIntegrationTestA
Integration tests can also simulate multiple interactions (HTTP requests) within a single test using xref:refguide:applib:index/services/iactnlayer/InteractionService.adoc#nextInteraction_[InteractionService#nextInteraction].
When called, any state changes made in the previous `Interaction` will be committed, and any references to entities should be either discarded or else be re-retrieved in the next `Interaction`.
-(In the case of the JDO ORM, any entities from the previous `Interaction` will be reset to null when that `Interaction` completes).
[#executions]
=== Executions
diff --git a/core/metamodel/src/main/adoc/modules/metamodel/pages/about.adoc b/core/metamodel/src/main/adoc/modules/metamodel/pages/about.adoc
index 1c5d23f6dc6..7beb6fb4bdd 100644
--- a/core/metamodel/src/main/adoc/modules/metamodel/pages/about.adoc
+++ b/core/metamodel/src/main/adoc/modules/metamodel/pages/about.adoc
@@ -26,7 +26,7 @@ legend top
endlegend
together {
- rectangle "<$database_cube><$at>\n<<Annotation>>\nORM (JPA/JDO)" as PERS
+ rectangle "<$database_cube><$at>\n<<Annotation>>\nORM (JPA)" as PERS
rectangle "<$envira><$at>\n<<Annotation>>\nSpring" as SPRING
rectangle "<img:https://causeway.apache.org/_/img/home/causeway-logo-65x48.png><$at>\n<<Annotation>>\nApache Causeway" as FW
rectangle "<img:https://causeway.apache.org/_/img/home/causeway-logo-65x48.png><$java>\n<<Supporting Methods>>\nApache Causeway" as SM
@@ -174,8 +174,7 @@ Thus:
* *_Viewmodels_* and *_Entities_* are specializations of *_Domain Objects_*.
** _View Models_ are (lifecycle-) managed by _Apache Causeway_
-** _Entities_ are managed by the configured persistence layer
-(either JDO or JPA).
+** _Entities_ are managed by the configured persistence mechanism.
* *_Services_* in general are (lifecycle-) managed by _Spring_.
+
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index ca87146bac1..e7e7a16c5c5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -566,7 +566,7 @@ private void addValidatorToEnsureUniqueLogicalTypeNames(final ProgrammingModel p
public void validateObjectEnter(final ObjectSpecification objSpec) {
// @DomainObject(logicalTypeName=...) must be unique among non-abstract types
- // Eg. having an ApplicationUser interface and a concrete ApplicationUser (JDO)
+ // Eg. having an ApplicationUser interface and a concrete ApplicationUser
// that have the same @DomainObject(logicalTypeName=...) should be allowed.
// A hard constraint that applies, is that there cannot be multiple bookmark-able
// types that share the same @DomainObject(logicalTypeName=...).
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxTotalDigitsFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxTotalDigitsFacet.java
index ad59ef32c4e..3caf02d15a4 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxTotalDigitsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxTotalDigitsFacet.java
@@ -34,15 +34,15 @@
* <li><tt>12345</tt> has a total of 5 digits</li>
* <li><tt>12345.0</tt> has a total of 6 digits</li>
* </ul>
+ * </p>
*
* <p>
- * In JPA's {@link jakarta.persistence.Column}, this corresponds to {@link Column#precision()}.
- *
- * <p>
- * In JDO's <code>@Column</code> annotation, this corresponds to <code>@Column#length</code>.
+ * In JPA's {@link Column}, this corresponds to {@link Column#precision()}.
+ * </p>
*
* <p>
* For {@link Digits}, corresponds to sum of {@link Digits#integer()} and {@link Digits#fraction()}.
+ * </p>
*/
public interface MaxTotalDigitsFacet
extends Facet {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/objectlifecycle/ObjectLifecyclePublisher.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/objectlifecycle/ObjectLifecyclePublisher.java
index 7caac9f2831..7cd52d29f13 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/objectlifecycle/ObjectLifecyclePublisher.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/objectlifecycle/ObjectLifecyclePublisher.java
@@ -53,7 +53,7 @@ public interface ObjectLifecyclePublisher {
void onPostCreate(ManagedObject domainObject);
/**
- * Called by both JPA and JDO, just after an object is retrieved from the database.
+ * Called by the JPA object store, just after an object is retrieved from the database.
*
* <p>
* Default implementation calls <code>EntityChangeTracker#recognizeLoaded(ManagedObject)</code> and
@@ -65,7 +65,7 @@ public interface ObjectLifecyclePublisher {
void onPostLoad(ManagedObject entity);
/**
- * Called by both JPA and JDO, just before an entity is inserted into the database.
+ * Called by the JPA object store, just before an entity is inserted into the database.
*
* <p>
* Default implementation fires callbacks (including emitting the <code>PreStoreEvent</code>, eg as subscribed)
@@ -78,7 +78,7 @@ public interface ObjectLifecyclePublisher {
void onPrePersist(Either<ManagedObject, ManagedObject> eitherWithOrWithoutOid);
/**
- * Called by both JPA and JDO, just after an entity has been inserted into the database.
+ * Called by the JPA object store, just after an entity has been inserted into the database.
*
* <p>
* Default implementation fires callbacks and enlists the entity within <code>EntityChangeTracker</code>
@@ -90,7 +90,7 @@ public interface ObjectLifecyclePublisher {
void onPostPersist(ManagedObject entity);
/**
- * Called by both JPA and JDO (though JDO does <i>not</i> provide any changeRecords).
+ * Called by the JPA object store, just before the object is about to be updated.
*
* <p>
* Default implementation fires callbacks and enlists the entity within <code>EntityChangeTracker</code>
@@ -98,13 +98,13 @@ public interface ObjectLifecyclePublisher {
* </p>
*
* @param entity
- * @param propertyChangeRecordSupplier - optional parameter to provide the pre-computed
- * {@link PropertyChangeRecord}s from the ORM. JPA does this, JDO does not.
+ * @param propertyChangeRecordSupplier - provides the pre-computed
+ * {@link PropertyChangeRecord}s from the JPA object store.
*/
void onPreUpdate(ManagedObject entity, @Nullable Function<ManagedObject, Can<PropertyChangeRecord>> propertyChangeRecordSupplier);
/**
- * Called by both JPA and JDO, after an existing entity has been updated.
+ * Called by the JPA object store, after an existing entity has been updated.
*
* <p>
* Default implementation fires callbacks.
@@ -115,7 +115,7 @@ public interface ObjectLifecyclePublisher {
void onPostUpdate(ManagedObject entity);
/**
- * Called by both JPA and JDO, just before an entity is deleted from the database.
+ * Called by the JPA object store, just before an entity is deleted from the database.
*
* <p>
* Default implementation fires callbacks and enlists the entity within <code>EntityChangeTracker</code>
diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/session/InteractionServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/session/InteractionServiceDefault.java
index 5368b73a0c7..810a262b682 100644
--- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/session/InteractionServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/session/InteractionServiceDefault.java
@@ -383,14 +383,14 @@ private void preInteractionClosed(final CausewayInteraction interaction) {
//
// we check if the transaction is already completed (rolled back/committed). This isn't meant to be the case,
// but the suspicion is that if a background command execution encounters a deadlock then (in
- // CommandExecutorServiceDefault) then it might be resulting in top-level xactn will end up being rolled back.
+ // CommandExecutorServiceDefault) then it might be resulting in a top-level xactn that ends up being rolled back.
//
// The relevant code is in TransactionService#callWithinCurrentTransactionElseCreateNew(...), used by
// CommandExecutorServiceDefault but also used quite heavily elsewhere. In normal circumstances I suspect
- // everything works out fine, but if there's a deadlock then perhaps we get this different flow
+ // everything works out fine, but if there's a deadlock then perhaps we get this different flow.
//
- // the consequences of an incorrect design can be SEVERE. In previous versions of the code base we've seen
- // additional changes being made in a new/implicit (?) xactn which furthermore are never committed; we end up
+ // The consequences of an incorrect design can be SEVERE. In previous versions of the code base we've seen
+ // additional changes being made in a new/implicit (?) xactn which furthermore is never committed; we end up
// with a connection back in Hikari's conn pool with open locks, blocking the entire system as those locks are
// on CommandLogEntry. Or, another problem found was seemingly polluting the threadLocals, resulting in an
// nio-http-exec thread always failing with an error of: "No JDO PersistenceManager bound to thread, and
diff --git a/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/EntityChangeTracker.java b/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/EntityChangeTracker.java
index f8b4b89dbf5..cbf02787e05 100644
--- a/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/EntityChangeTracker.java
+++ b/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/EntityChangeTracker.java
@@ -51,11 +51,11 @@ public interface EntityChangeTracker extends DisposableBean {
*
* <p>
* The post-modification values are captured when the transaction commits.
+ * </p>
*
* <p>
- * Overload as an optimization for ORMs (specifically, JPA) where already have access to the changed records by
- * accessing the ORM-specific data structures (<code>EntityManager</code>'s unit-of-work).
- *
+ * Overload is an optimization for the JPA object store where we already have access to the changed records by
+ * accessing the ORM-specific data structures ({@link jakarta.persistence.EntityManager}'s "unit-of-work").
* </p>
*
* @param entity
diff --git a/extensions/security/secman/adoc/modules/secman/pages/about.adoc b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
index 4c1e176e263..d88a5f50912 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/about.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
@@ -4,7 +4,7 @@
SecMan provides an implementation of both the xref:refguide:core:index/security/authentication/Authenticator.adoc[Authenticator] and xref:refguide:core:index/security/authorization/Authorizor.adoc[Authorizor] SPIs, storing user, roles and permissions information as domain entities (persisted to relational database).
-It can be used with both the JDO or JPA persistence mechanisms.
+It is supported by the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store.
Because these features are implemented using domain entities, it means that this security information can be administered from within your Apache Causeway application.
The domain model is explained in more detail <<domain-model,below>>.
diff --git a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
index 243a0280c70..1874bc949cf 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
@@ -224,20 +224,6 @@ Access the configuration properties (from the tertiary menu))
+
Browse the application features + permissions (from the "Prototyping" menu).
-** `CausewayPersistenceJdoMetaModelRoleAndPermissions.ROLE_NAME`
-+
-Download the JDO metamodel (from the "Prototyping" menu).
-
-// moved to the incubator for the time being
-//** `CausewayExtCommandReplayPrimaryRoleAndPermissions.ROLE_NAME`
-//+
-//Access to the command replay primary menu
-//
-//** `CausewayExtCommandReplaySecondaryRoleAndPermissions.ROLE_NAME`
-//+
-//Access to the command replay secondary menu
-//
-
** `CausewayExtH2ConsoleRoleAndPermissions.ROLE_NAME`
+
Access the h2 console (from the "Prototyping" menu)
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayPersistenceJpaMetaModelRoleAndPermissions.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayPersistenceJpaMetaModelRoleAndPermissions.java
new file mode 100644
index 00000000000..93aa743a6e6
--- /dev/null
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayPersistenceJpaMetaModelRoleAndPermissions.java
@@ -0,0 +1,53 @@
+/*
+ * 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.extensions.secman.applib.role.seed;
+
+import org.apache.causeway.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionMode;
+import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionRule;
+import org.apache.causeway.extensions.secman.applib.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
+
+/**
+ * Sets up a role with access to the menu actions to download the JPA metamodel.
+ *
+ * @since 2.0 {@index}
+ */
+public class CausewayPersistenceJpaMetaModelRoleAndPermissions
+extends AbstractRoleAndPermissionsFixtureScript {
+
+ private static final String SERVICE_LOGICAL_TYPE_NAME = "causeway.persistence.jpa.eclipselink.app.JpaMetamodelMenu";
+
+ public static final String ROLE_NAME = SERVICE_LOGICAL_TYPE_NAME.replace(".","-");
+
+ public CausewayPersistenceJpaMetaModelRoleAndPermissions() {
+ super(ROLE_NAME, "Access to download the JPA metamodel");
+ }
+
+ @Override
+ protected void execute(ExecutionContext executionContext) {
+ newPermissions(
+ ApplicationPermissionRule.ALLOW,
+ ApplicationPermissionMode.CHANGING,
+ Can.of(
+ ApplicationFeatureId.newType(SERVICE_LOGICAL_TYPE_NAME)
+ )
+ );
+ }
+}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/seed/scripts/SeedUsersAndRolesFixtureScript.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/seed/scripts/SeedUsersAndRolesFixtureScript.java
index b1c4804c509..b62fb6d4a15 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/seed/scripts/SeedUsersAndRolesFixtureScript.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/seed/scripts/SeedUsersAndRolesFixtureScript.java
@@ -23,6 +23,8 @@
import jakarta.inject.Inject;
+import org.apache.causeway.extensions.secman.applib.role.seed.CausewayPersistenceJpaMetaModelRoleAndPermissions;
+
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.services.appfeat.ApplicationFeatureId;
@@ -115,9 +117,9 @@ protected void execute(final ExecutionContext executionContext) {
// modules
executionContext.executeChildren(this,
new CausewayAppFeatureRoleAndPermissions(),
- persistenceStack == PersistenceStack.JDO
- ? new CausewayPersistenceJdoMetaModelRoleAndPermissions()
- : null, // skip if non-JDO deployment
+ persistenceStack == PersistenceStack.JPA
+ ? new CausewayPersistenceJpaMetaModelRoleAndPermissions()
+ : null, // skip if non-JPA deployment
new CausewayExtAuditTrailRoleAndPermissions(),
new CausewayExtCommandLogRoleAndPermissions(),
new CausewayExtDocgenRoleAndPermissions(),
@@ -137,9 +139,9 @@ protected void execute(final ExecutionContext executionContext) {
new CausewayExtSecmanRegularUserRoleAndPermissions(secmanConfig),
new CausewayExtSecmanAdminUser(secmanConfig,
CausewayAppFeatureRoleAndPermissions.ROLE_NAME,
- persistenceStack == PersistenceStack.JDO
- ? CausewayPersistenceJdoMetaModelRoleAndPermissions.ROLE_NAME
- : null, // skip if non-JDO deployment
+ persistenceStack == PersistenceStack.JPA
+ ? CausewayPersistenceJpaMetaModelRoleAndPermissions.ROLE_NAME
+ : null, // skip if non-JPA deployment
CausewayExtAuditTrailRoleAndPermissions.ROLE_NAME,
CausewayExtCommandLogRoleAndPermissions.ROLE_NAME,
CausewayExtDocgenRoleAndPermissions.ROLE_NAME,
diff --git a/mavendeps/adoc/modules/mavendeps/pages/about.adoc b/mavendeps/adoc/modules/mavendeps/pages/about.adoc
index 0327b0489f3..963ecd6b8f1 100644
--- a/mavendeps/adoc/modules/mavendeps/pages/about.adoc
+++ b/mavendeps/adoc/modules/mavendeps/pages/about.adoc
@@ -3,7 +3,6 @@
: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 `causeway-mavendeps-webapp` aggregates the main runtime dependencies of a production webapp.
-Note that it does _not_ include the runtime dependencies for either JDO or JPA; these must be included separately.
To use, add the following :
@@ -31,7 +30,7 @@ However, it does _not_ include a security implementation, a viewer implementatio
* for persistence, add xref:pjpa:ROOT:about.adoc[JPA/Eclipselink].
-* viewer, you will almost certainly want to add xref:vw:ROOT:about.adoc[Wicket] and you might also add xref:vro:ROOT:about.adoc[Restful Objects].
+* viewer, you will almost certainly want to add xref:vw:ROOT:about.adoc[Wicket] and you might also add xref:vro:ROOT:about.adoc[Restful Objects] and/or the xref:gqlv:ROOT:about.adoc[].
Also, remember that adding the class onto the classpath does _not_ make that functionality available (Apache Causeway does not currently leverage Spring Boot's link:https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-auto-configuration[auto configuration] capabilities).
You must therefore also add in the appropriate `CausewayModuleXxx` to your application's top-level link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html[@Configuration] (aka "app manifest").
diff --git a/persistence/jpa/eclipselink/src/main/java/module-info.java b/persistence/jpa/eclipselink/src/main/java/module-info.java
index 5b75aa7d259..15abad4a39c 100644
--- a/persistence/jpa/eclipselink/src/main/java/module-info.java
+++ b/persistence/jpa/eclipselink/src/main/java/module-info.java
@@ -20,6 +20,8 @@
exports org.apache.causeway.persistence.jpa.eclipselink.inject;
exports org.apache.causeway.persistence.jpa.eclipselink;
exports org.apache.causeway.persistence.jpa.eclipselink.config;
+ exports org.apache.causeway.persistence.jpa.eclipselink.services;
+ exports org.apache.causeway.persistence.jpa.eclipselink.app;
requires static lombok;
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
index 54baf7dfd28..add1333d4e0 100644
--- a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
@@ -220,7 +220,7 @@ && getJdbcExceptionTranslator() != null) {
* Template method for extracting a SQL String from the given exception.
* <p>Default implementation always returns {@code null}. Can be overridden in
* subclasses to extract SQL Strings for vendor-specific exception classes.
- * @param ex the JDOException, containing a SQLException
+ * @param ex the throwable to be processed, typically containing some sort of SQL Exception
* @return the SQL String, or {@code null} if none found
*/
private String extractSqlStringFromException(final Throwable ex) {
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/app/JpaMetamodelMenu.java b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/app/JpaMetamodelMenu.java
new file mode 100644
index 00000000000..c6c35ad4c3e
--- /dev/null
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/app/JpaMetamodelMenu.java
@@ -0,0 +1,10 @@
+package org.apache.causeway.persistence.jpa.eclipselink.app;
+
+import org.apache.causeway.applib.annotation.DomainService;
+
+@DomainService()
+public class JpaMetamodelMenu {
+
+ // Placeholder
+
+}
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java
index f06874df332..3e5bfac1c96 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java
@@ -40,9 +40,6 @@ public MaxLengthFromJpaColumnAnnotationFacetFactory(final MetaModelContext mmc)
@Override
public void process(final ProcessMethodContext processMethodContext) {
- // only applies to JDO entities; ignore any view models
- final Class<?> cls = processMethodContext.getCls();
-
if(String.class != processMethodContext.getMethod().getReturnType()) {
return;
}
diff --git a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingWicket.java b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingWicket.java
index d833ce9d51e..d4847d312c0 100644
--- a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingWicket.java
+++ b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingWicket.java
@@ -111,17 +111,6 @@ public static class DomainObjectPageTester
// -- BOOK PAGE
- /** strange asymmetry with JPA, to investigate another day */
- public static final String BOOK_DELETE_ACTION_JDO = "theme:domainObjectContainer:domainObject:rows:2"
- + ":rowContents:1"
- + ":col:rows:1:rowContents:1:col:tabGroups:1"
- + ":panel:tabPanel"
- + ":rows:1:rowContents:1"
- + ":col:fieldSets:1:memberGroup"
- + ":panelHeading:associatedActionLinksPanel"
- + ":additionalLinkList:additionalLinkItem:0:actionLink";
-
- /** strange asymmetry with JDO, to investigate another day */
public static final String BOOK_DELETE_ACTION_JPA = "theme:domainObjectContainer:domainObject:rows:2"
+ ":rowContents:1"
+ ":col:rows:1:rowContents:1:col:tabGroups:1"
@@ -161,12 +150,6 @@ public static enum SimulatedProperties implements SimulatedProperty {
+ ":col:fieldSets:1"
+ ":memberGroup:properties:1"
+ ":property"),
- JDO_BOOK_ISBN("theme:domainObjectContainer:domainObject:rows:2"
- + ":rowContents:1:col:rows:1:rowContents:1"
- + ":col:tabGroups:1:panel:tabPanel:rows:1:rowContents:1:col"
- + ":fieldSets:1"
- + ":memberGroup:properties:3"
- + ":property"),
JPA_BOOK_ISBN("theme:domainObjectContainer:domainObject:rows:2"
+ ":rowContents:1:col:rows:1:rowContents:1"
+ ":col:tabGroups:1:1"
diff --git a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/fixtures/EntityTestFixtures.java b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/fixtures/EntityTestFixtures.java
index 3161c7fd380..a0e3c68070a 100644
--- a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/fixtures/EntityTestFixtures.java
+++ b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/fixtures/EntityTestFixtures.java
@@ -213,14 +213,7 @@ public final synchronized Lock aquireLock() {
return lock;
}
- /** XXX sporadically seeing errors like
- * ----
- * Error: (bad sql grammar exception): Column "INVENTORY_ID_EID" not found; SQL statement:
- * INSERT INTO "testdomain"."JdoProduct"
- * ("id","description","name","price","author","isbn","publisher","DISCRIMINATOR","INVENTORY_ID_EID")
- * VALUES (?,?,?,?,?,?,?,?,?) [42122-214]
- * ----
- * This is an attempt to force the JDO schema to properly initialize. */
+ /** To force the schema to properly initialize. */
protected void initSchema() {}
@SneakyThrows
diff --git a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/publishing/stubs/ExecutionPublishingTestAbstract.java b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/publishing/stubs/ExecutionPublishingTestAbstract.java
index 9a9fd791f08..bf9576e12ab 100644
--- a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/publishing/stubs/ExecutionPublishingTestAbstract.java
+++ b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/publishing/stubs/ExecutionPublishingTestAbstract.java
@@ -113,8 +113,6 @@ protected void verify(
@SneakyThrows
private Class<?> bookClass() {
switch(getPersistenceStandard()) {
- case JDO:
- return _Context.loadClass("org.apache.causeway.testdomain.jdo.entities.JdoBook");
case JPA:
return _Context.loadClass("org.apache.causeway.testdomain.jpa.entities.JpaBook");
default:
diff --git a/regressiontests/incubating/log4j2-test.xml b/regressiontests/incubating/log4j2-test.xml
index 0ed7986e245..2876a7ed092 100644
--- a/regressiontests/incubating/log4j2-test.xml
+++ b/regressiontests/incubating/log4j2-test.xml
@@ -40,39 +40,17 @@ under the License.
<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-
+
<logger name="org.apache.directory" level="warn"/>
<logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
-
+
<logger name="DataNucleus.Persistence" level="info"/>
<logger name="DataNucleus.Transaction" level="info"/>
<logger name="DataNucleus.Datastore.Schema" level="info"/>
<logger name="DataNucleus.Datastore.Native" level="info"/>
-
+
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
-
-<!-- # DataNucleus Logging Categories -->
-<!-- DataNucleus.Persistence - All messages relating to the persistence process -->
-<!-- DataNucleus.Transaction - All messages relating to transactions -->
-<!-- DataNucleus.Connection - All messages relating to Connections. -->
-<!-- DataNucleus.Query - All messages relating to queries -->
-<!-- DataNucleus.Cache - All messages relating to the DataNucleus Cache -->
-<!-- DataNucleus.MetaData - All messages relating to MetaData -->
-<!-- DataNucleus.Datastore - All general datastore messages -->
-<!-- DataNucleus.Datastore.Schema - All schema related datastore log messages -->
-<!-- DataNucleus.Datastore.Persist - All datastore persistence messages -->
-<!-- DataNucleus.Datastore.Retrieve - All datastore retrieval messages -->
-<!-- DataNucleus.Datastore.Native - Log of all 'native' statements sent to the datastore -->
-<!-- DataNucleus.General - All general operational messages -->
-<!-- DataNucleus.Lifecycle - All messages relating to object lifecycle changes -->
-<!-- DataNucleus.ValueGeneration - All messages relating to value generation -->
-<!-- DataNucleus.Enhancer - All messages from the DataNucleus Enhancer. -->
-<!-- DataNucleus.SchemaTool - All messages from DataNucleus SchemaTool -->
-<!-- DataNucleus.JDO - All messages general to JDO -->
-<!-- DataNucleus.JPA - All messages general to JPA -->
-<!-- DataNucleus.JCA - All messages relating to Connector JCA. -->
-<!-- DataNucleus.IDE - Messages from the DataNucleus IDE. -->
\ No newline at end of file
diff --git a/retired/scripts/enhance.sh b/retired/scripts/enhance.sh
deleted file mode 100755
index 91e9d854fc8..00000000000
--- a/retired/scripts/enhance.sh
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env 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.
-#
-#
-
-usage() {
- echo "$(basename $0): [-a] [-c] [-e] [-o] [-m] [-s] [-d] [-t] [-u] [-w]" >&2
- echo " -a : audit trail (extensions/security)" >&2
- echo " -c : command log (extensions/core)" >&2
- echo " -e : execution log (extensions/core)" >&2
- echo " -o : execution outbox (extensions/core)" >&2
- echo " -m : secman (extensions/security)" >&2
- echo " -s : session log (extensions/security)" >&2
- echo " -d : demo (examples/demo/domain)" >&2
- echo " -t : JDO regression tests (regressiontests/stable)" >&2
- echo " -u : JDO regression tests (regressiontests/stable-cmdexecauditsess)" >&2
- echo " -A : add -am (also make)" >&2
-}
-
-
-
-AUDITTRAIL=""
-COMMANDLOG=""
-DEMO=""
-EXECUTIONLOG=""
-EXECUTIONOUTBOX=""
-REGRESSIONTESTS_STABLE=""
-REGRESSIONTESTS_CMDEXECAUDITSESS=""
-SECMAN=""
-SESSIONLOG=""
-ALSO_MAKE=""
-
-PATHS=()
-ALL_IF_REQUIRED=""
-
-while getopts ":acdeomshtuwA" arg; do
- case $arg in
- h)
- usage
- exit 0
- ;;
- a)
- AUDITTRAIL="enhance"
- PATHS+=( "extensions/security/audittrail/persistence-jdo" )
- ;;
- c)
- COMMANDLOG="enhance"
- PATHS+=( "extensions/core/commandlog/persistence-jdo" )
- ;;
- e)
- EXECUTIONLOG="enhance"
- PATHS+=( "extensions/core/executionlog/persistence-jdo" )
- ;;
- m)
- SECMAN="enhance"
- PATHS+=( "extensions/security/secman/persistence-jdo" )
- ;;
- o)
- EXECUTIONOUTBOX="enhance"
- PATHS+=( "extensions/core/executionoutbox/persistence-jdo" )
- ;;
- s)
- SESSIONLOG="enhance"
- PATHS+=( "extensions/security/sessionlog/persistence-jdo" )
- ;;
- d)
- DEMO="enhance"
- PATHS+=( "examples/demo/domain" )
- ;;
- t)
- REGRESSIONTESTS_STABLE="enhance"
- PATHS+=( "regressiontests/stable" )
- ALL_IF_REQUIRED="-Dmodule-all"
- ;;
- u)
- REGRESSIONTESTS_CMDEXECAUDITSESS="enhance"
- PATHS+=( "regressiontests/stable-cmdexecauditsess/persistence-jdo" )
- ALL_IF_REQUIRED="-Dmodule-all"
- ;;
- A)
- ALSO_MAKE="-am"
- ;;
- *)
- usage
- exit 1
- esac
-done
-
-shift $((OPTIND-1))
-
-echo "AUDITTRAIL : $AUDITTRAIL"
-echo "COMMANDLOG : $COMMANDLOG"
-echo "EXECUTIONLOG : $EXECUTIONLOG"
-echo "EXECUTIONOUTBOX : $EXECUTIONOUTBOX"
-echo "SECMAN : $SECMAN"
-echo "SESSIONLOG : $SESSIONLOG"
-echo "DEMO : $DEMO"
-echo "REGRESSIONTESTS_STABLE : $REGRESSIONTESTS_STABLE"
-echo "REGRESSIONTESTS_CMDEXECAUDITSESS : $REGRESSIONTESTS_CMDEXECAUDITSESS"
-echo ""
-echo "ALSO_MAKE : $ALSO_MAKE"
-
-
-printf -v PATHS_SPLATTED '%s,' "${PATHS[@]}"
-PL_ARG=$(echo "${PATHS_SPLATTED%,}")
-
-PL_ARG="$PL_ARG $ALL_IF_REQUIRED"
-
-if [ "$PL_ARG" = " " ]; then
- usage
- exit 1
-fi
-
-echo mvn install -DskipTests -o -T1C $ALSO_MAKE -pl $PL_ARG
-mvn install -DskipTests -o -T1C $ALSO_MAKE -pl $PL_ARG
(causeway) 07/36: CAUSEWAY-3866: updating docs is all for v4
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 257709bc159198818b2cb3cd1eb5f29579254ff7
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 15 22:54:40 2025 +0100
CAUSEWAY-3866: updating docs is all for v4
---
.../SwaggerService_020-examples-and-usage.adoc | 2 +-
.../src/main/adoc/modules/config/pages/about.adoc | 14 ++++----
.../adoc/modules/starters/pages/simpleapp.adoc | 42 +++++++++-------------
.../adoc/modules/integtestsupport/pages/about.adoc | 14 ++++----
.../integtestsupport/pages/swagger-exporter.adoc | 16 ++++-----
5 files changed, 39 insertions(+), 49 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/swagger/hooks/SwaggerService_020-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/swagger/hooks/SwaggerService_020-examples-and-usage.adoc
index 54ac34a00b8..79baca16bd9 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/swagger/hooks/SwaggerService_020-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/swagger/hooks/SwaggerService_020-examples-and-usage.adoc
@@ -28,7 +28,7 @@ An example of its use can be found in the xref:docs:referenceapp:about.adoc[refe
.SwaggerExport_IntegTest.java
----
@Import({
- CausewayModuleViewerRestfulObjectsJaxrsResteasy4.class
+ CausewayModuleViewerRestfulObjectsViewer.class
})
class SwaggerExport_IntegTest extends ApplicationIntegTestAbstract {
diff --git a/core/config/src/main/adoc/modules/config/pages/about.adoc b/core/config/src/main/adoc/modules/config/pages/about.adoc
index 53ac05af0f8..91d8b8a5eb2 100644
--- a/core/config/src/main/adoc/modules/config/pages/about.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/about.adoc
@@ -130,13 +130,14 @@ It looks like this:
----
@Configuration
@Import({
- CausewayModuleCoreRuntimeServices.class, // <.>
- CausewayModuleSecurityShiro.class, // <.>
- CausewayModuleJpaEclipselink.class, // <.>
- CausewayModuleViewerRestfulObjectsJaxrsResteasy4.class, // <.>
- CausewayModuleViewerWicketViewer.class, // <.>
+ CausewayModuleCoreRuntimeServices.class, // <.>
+ CausewayModuleSecurityShiro.class, // <.>
+ CausewayModuleJpaEclipselink.class, // <.>
+ CausewayModuleViewerRestfulObjectsViewer.class, // <.>
+ CausewayModuleViewerGraphqlViewer.class, // <.>
+ CausewayModuleViewerWicketViewer.class, // <.>
...
- ApplicationModule.class, // <.>
+ ApplicationModule.class, // <.>
...
})
public class AppManifest {
@@ -151,6 +152,7 @@ There are several security implementations, precisely one must be selected
Optional (though if omitted then only xref:userguide:ROOT:view-models.adoc[view models] may be used, with hand-rolled persistence).
<.> Enables the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)].
+<.> Enables the xref:gqlv:ROOT:about.adoc[GraphQL API (GraphQL viewer)].
<.> Enables the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)]
<.> References the application's module(s), in this case just the one, `ApplicationModule`. +
diff --git a/starters/adoc/modules/starters/pages/simpleapp.adoc b/starters/adoc/modules/starters/pages/simpleapp.adoc
index b3743e98e5d..34969fa272b 100644
--- a/starters/adoc/modules/starters/pages/simpleapp.adoc
+++ b/starters/adoc/modules/starters/pages/simpleapp.adoc
@@ -699,57 +699,47 @@ It looks like this:
----
@Configuration
@Import({
- CausewayModuleCoreRuntimeServices.class, // <.>
- CausewayModuleSecurityShiro.class, // <.>
- CausewayModuleJpaEclipseLink.class, // <.>
- CausewayModuleViewerRestfulObjectsJaxrsResteasy4.class, // <.>
- CausewayModuleViewerWicketViewer.class, // <.>
+ CausewayModuleCoreRuntimeServices.class, // <.>
+ CausewayModuleSecurityShiro.class, // <.>
+ CausewayModuleJpaEclipseLink.class, // <.>
+ CausewayModuleViewerRestfulObjectsViewer.class, // <.>
+ CausewayModuleViewerGraphqlViewer.class, // <.>
+ CausewayModuleViewerWicketViewer.class, // <.>
- CausewayModuleTestingH2ConsoleUi.class, // <.>
- CausewayModuleTestingFixturesApplib.class, // <.>
+ CausewayModuleTestingH2ConsoleUi.class, // <.>
+ CausewayModuleTestingFixturesApplib.class, // <.>
- CausewayModuleExtFlywayImpl.class, // <.>
+ CausewayModuleExtFlywayImpl.class, // <.>
- ApplicationModule.class, // <.>
- CustomModule.class, // <9>
- QuartzModule.class, // <9>
+ ApplicationModule.class, // <.>
+ CustomModule.class, // <9>
+ QuartzModule.class, // <9>
- DomainAppDemo.class // <.>
+ DomainAppDemo.class // <.>
})
@PropertySources({
- @PropertySource(CausewayPresets.DebugDiscovery), // <.>
+ @PropertySource(CausewayPresets.DebugDiscovery), // <.>
})
public class AppManifest {
}
----
<.> Mandatory - specifies the core of the Apache Causeway framework
-
<.> Enables the Shiro security mechanism.
There are several security implementations, precisely one must be selected
-
<.> Enables JPA/Eclipselink for persistence.
-+
-If using JDO as the ORM, replace with `CausewayModuleJdoDataNucleus5`.
-
<.> Enables the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)] (ie REST API).
-
+<.> Enables the xref:gqlv:ROOT:about.adoc[GraphQL API (GraphQL viewer)].
<.> Enables the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)]
-
<.> Enables the H2 Console (menu from the "Prototyping" menu), applicable only if running against h2 in-memory database.
-
<.> Brings in support to run xref:testing:fixtures:about.adoc[fixtures] within the application, eg for prototyping.
-
<.> Enables the xref:userguide:flyway:about.adoc[Flyway] integration.
-
<.> References the application's module(s), in this case `ApplicationModule` , `CustomModule` and `QuartzModule`.
+
`ApplicationModule` is discussed below.
<.> Makes the fixture scenario classes available for discovery.
-
-<.> Normally configuration properties are picked up from Spring Boot's `application.properties` or `application.yml` files, but additional properties can be overridden directly.
-These two both use the `CausewayPresets` convenience class, to disable i18n support and for additional debugging log statements.
+<.> Normally configuration properties are picked up from Spring Boot's `application.properties` or `application.yml` files, but additional properties can be overridden directly, for example using the `CausewayPresets` convenience class.
==== SimpleApp
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
index 9583e25310c..7af8e8e069c 100644
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
+++ b/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
@@ -116,15 +116,15 @@ public abstract class SimpleModuleIntegTestAbstract extends CausewayIntegrationT
@Import({
CausewayModuleCoreRuntimeServices.class,
CausewayModuleSecurityBypass.class,
- CausewayModuleJdoDataNucleus5.class,
+ CausewayModuleJpaEclipseLink.class,
CausewayModuleTestingFixturesApplib.class,
- SimpleModule.class //<1>
+ SimpleModule.class // <.>
})
public static class AppManifest {
}
}
----
-<1> references just the `SimpleModule`
+<.> references just the `SimpleModule`
while in the `webapp` module we have:
@@ -136,8 +136,6 @@ while in the `webapp` module we have:
)
@TestPropertySource({
CausewayPresets.H2InMemory_withUniqueSchema,
- CausewayPresets.DataNucleusAutoCreate,
- CausewayPresets.UseLog4j2Test,
})
@ContextConfiguration
public abstract class ApplicationIntegTestAbstract extends CausewayIntegrationTestAbstract {
@@ -145,16 +143,16 @@ public abstract class ApplicationIntegTestAbstract extends CausewayIntegrationTe
@Configuration
@Import({
CausewayModuleCoreRuntimeServices.class,
- CausewayModuleJpaEclipseLink.class,
CausewayModuleSecurityBypass.class,
+ CausewayModuleJpaEclipseLink.class,
CausewayModuleTestingFixturesApplib.class,
- ApplicationModule.class //<1>
+ ApplicationModule.class // <.>
})
public static class AppManifest {
}
}
----
-<1> references the top-level `ApplicationModule`
+<.> references the top-level `ApplicationModule`
You can see that these are very similar, what's different is the module referenced.
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/swagger-exporter.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/swagger-exporter.adoc
index fed88c85554..069d1e0d56d 100644
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/swagger-exporter.adoc
+++ b/testing/integtestsupport/adoc/modules/integtestsupport/pages/swagger-exporter.adoc
@@ -15,8 +15,8 @@ The example below is taken from the xref:docs:starters:simpleapp.adoc[simpleapp]
----
@SpringBootTest(
classes = {
- ApplicationIntegTestAbstract.AppManifest.class, // <1>
- CausewayModuleViewerRestfulObjectsJaxrsResteasy4.class // <2>
+ ApplicationIntegTestAbstract.AppManifest.class, // <.>
+ CausewayModuleViewerRestfulObjectsViewer.class // <.>
}
)
class SwaggerExport_IntegTest extends ApplicationIntegTestAbstract {
@@ -25,17 +25,17 @@ class SwaggerExport_IntegTest extends ApplicationIntegTestAbstract {
@Test
void export() throws IOException {
- val swaggerExporter = new SwaggerExporter(serviceRegistry); // <3>
+ val swaggerExporter = new SwaggerExporter(serviceRegistry); // <.>
swaggerExporter.export(
- SwaggerService.Visibility.PRIVATE, // <4>
+ SwaggerService.Visibility.PRIVATE, // <.>
SwaggerService.Format.JSON); // <4>
}
}
----
-<1> bootstrap using the usual `AppManifest` for integration tests ...
-<2> \... and _also_ include the xref:vro:ROOT:about.adoc[Restful Objects] viewer because this contains the implementation of xref:refguide:applib:index/services/swagger/SwaggerService.adoc[SwaggerService].
-<3> instantiate the `SwaggerExporter` utility class
-<4> Export specifies the required visibility and format.
+<.> bootstrap using the usual `AppManifest` for integration tests ...
+<.> \... and _also_ include the xref:vro:ROOT:about.adoc[Restful Objects] viewer because this contains the implementation of xref:refguide:applib:index/services/swagger/SwaggerService.adoc[SwaggerService].
+<.> instantiate the `SwaggerExporter` utility class
+<.> Export specifies the required visibility and format.
By default the file will be written to `target/generated-resources/swagger-export`.
Overloads of the `export(...)` method allow this to be changed as required.
(causeway) 03/36: Merge branch 'release-4.0.0-M1-RC1'
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit a741f1b9dcda44a4973e4e7d12729aaf990ea56f
Merge: ac4980e38e2 4f9c0bf0b52
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 19 12:27:29 2025 +0100
Merge branch 'release-4.0.0-M1-RC1'
.../modules/ROOT/pages/cutting-a-release.adoc | 220 ++++++---------------
.../ROOT/pages/post-release-successful.adoc | 4 +-
.../modules/ROOT/pages/verifying-releases.adoc | 2 +-
.../verify-process-docker-container-prep.adoc | 3 +-
.../modules/ROOT/partials/verify-process.adoc | 4 +-
antora/components/relnotes/modules/ROOT/nav.adoc | 1 +
.../modules/ROOT/pages/2025/3.5.0/mignotes.adoc | 6 -
.../modules/ROOT/pages/2025/3.5.0/relnotes.adoc | 8 -
.../pages/2025/{4.0.0 => 4.0.0-M1}/mignotes.adoc | 22 +--
.../modules/ROOT/pages/2025/4.0.0-M1/relnotes.adoc | 58 ++++++
.../modules/ROOT/pages/2025/4.0.0/relnotes.adoc | 8 -
.../relnotes/modules/ROOT/pages/about.adoc | 10 +
antora/pom.xml | 2 +-
api/applib/pom.xml | 2 +-
api/schema/pom.xml | 2 +-
bom/pom.xml | 49 ++++-
commons/pom.xml | 2 +-
core/codegen-bytebuddy/pom.xml | 2 +-
core/config/pom.xml | 2 +-
core/interaction/pom.xml | 2 +-
core/internaltestsupport/pom.xml | 2 +-
core/metamodel/pom.xml | 2 +-
core/mmtest/pom.xml | 2 +-
core/mmtestsupport/pom.xml | 2 +-
core/pom.xml | 2 +-
core/runtime/pom.xml | 2 +-
core/runtimeservices/pom.xml | 2 +-
core/security/pom.xml | 2 +-
core/transaction/pom.xml | 2 +-
core/webapp/pom.xml | 2 +-
extensions/core/commandlog/applib/pom.xml | 2 +-
extensions/core/commandlog/persistence-jpa/pom.xml | 2 +-
extensions/core/commandlog/pom.xml | 2 +-
extensions/core/docgen/help/pom.xml | 2 +-
extensions/core/docgen/pom.xml | 2 +-
extensions/core/excel/applib/pom.xml | 2 +-
extensions/core/excel/fixture/pom.xml | 2 +-
extensions/core/excel/integtests/pom.xml | 2 +-
extensions/core/excel/pom.xml | 2 +-
extensions/core/excel/testing/pom.xml | 2 +-
extensions/core/executionlog/applib/pom.xml | 2 +-
.../core/executionlog/persistence-jpa/pom.xml | 2 +-
extensions/core/executionlog/pom.xml | 2 +-
extensions/core/executionoutbox/applib/pom.xml | 2 +-
.../core/executionoutbox/persistence-jpa/pom.xml | 2 +-
extensions/core/executionoutbox/pom.xml | 2 +-
extensions/core/executionoutbox/restclient/pom.xml | 2 +-
.../core/executionrepublisher/applib/pom.xml | 2 +-
extensions/core/executionrepublisher/pom.xml | 2 +-
extensions/core/flyway/impl/pom.xml | 2 +-
extensions/core/flyway/pom.xml | 2 +-
extensions/core/layoutloaders/github/pom.xml | 2 +-
extensions/core/layoutloaders/pom.xml | 2 +-
extensions/core/titlecache/applib/pom.xml | 2 +-
extensions/core/titlecache/caffeine/pom.xml | 2 +-
extensions/core/titlecache/pom.xml | 2 +-
extensions/pom.xml | 2 +-
extensions/security/audittrail/applib/pom.xml | 2 +-
.../security/audittrail/persistence-jpa/pom.xml | 2 +-
extensions/security/audittrail/pom.xml | 2 +-
extensions/security/secman/applib/pom.xml | 2 +-
.../security/secman/delegated-springoauth2/pom.xml | 2 +-
.../security/secman/encryption-jbcrypt/pom.xml | 2 +-
.../security/secman/encryption-spring/pom.xml | 2 +-
extensions/security/secman/integration/pom.xml | 2 +-
extensions/security/secman/persistence-jpa/pom.xml | 2 +-
extensions/security/secman/pom.xml | 2 +-
extensions/security/sessionlog/applib/pom.xml | 2 +-
.../security/sessionlog/persistence-jpa/pom.xml | 2 +-
extensions/security/sessionlog/pom.xml | 2 +-
extensions/security/spring-oauth2/pom.xml | 2 +-
extensions/vro/cors/impl/pom.xml | 2 +-
extensions/vro/cors/pom.xml | 2 +-
extensions/vw/fullcalendar/applib/pom.xml | 2 +-
extensions/vw/fullcalendar/pom.xml | 2 +-
.../vw/fullcalendar/wicket/integration/pom.xml | 2 +-
extensions/vw/fullcalendar/wicket/pom.xml | 2 +-
extensions/vw/fullcalendar/wicket/ui/pom.xml | 2 +-
extensions/vw/pdfjs/applib/pom.xml | 2 +-
extensions/vw/pdfjs/metamodel/pom.xml | 2 +-
extensions/vw/pdfjs/pom.xml | 2 +-
extensions/vw/pdfjs/wicket/integration/pom.xml | 2 +-
extensions/vw/pdfjs/wicket/pom.xml | 2 +-
extensions/vw/pdfjs/wicket/ui/pom.xml | 2 +-
extensions/vw/sse/applib/pom.xml | 2 +-
extensions/vw/sse/metamodel/pom.xml | 2 +-
extensions/vw/sse/pom.xml | 2 +-
extensions/vw/sse/wicket/pom.xml | 2 +-
extensions/vw/tabular/applib/pom.xml | 2 +-
extensions/vw/tabular/excel/pom.xml | 2 +-
extensions/vw/tabular/pdf/pom.xml | 2 +-
extensions/vw/tabular/pom.xml | 2 +-
mavendeps/pom.xml | 2 +-
mavendeps/webapp/pom.xml | 2 +-
parent/pom.xml | 38 +---
persistence/commons/pom.xml | 2 +-
persistence/jdbc/pom.xml | 2 +-
persistence/jpa/applib/pom.xml | 2 +-
persistence/jpa/eclipselink/pom.xml | 2 +-
persistence/jpa/integration/pom.xml | 2 +-
persistence/jpa/metamodel/pom.xml | 2 +-
persistence/jpa/pom.xml | 2 +-
persistence/querydsl/applib/pom.xml | 2 +-
persistence/querydsl/integration/pom.xml | 2 +-
persistence/querydsl/jpa/pom.xml | 2 +-
persistence/querydsl/metamodel/pom.xml | 2 +-
persistence/querydsl/pom.xml | 2 +-
persistence/querydsl/testsupport/pom.xml | 2 +-
pom.xml | 82 ++++----
regressiontests/base-jpa/pom.xml | 2 +-
regressiontests/base/pom.xml | 2 +-
regressiontests/bootstrapping/pom.xml | 2 +-
regressiontests/cmdexecauditsess/generic/pom.xml | 2 +-
.../cmdexecauditsess/persistence-jpa/pom.xml | 2 +-
regressiontests/cmdexecauditsess/pom.xml | 2 +-
regressiontests/config/pom.xml | 2 +-
regressiontests/core-wrapperfactory/pom.xml | 2 +-
regressiontests/cucumber/pom.xml | 2 +-
regressiontests/domainmodel/pom.xml | 2 +-
regressiontests/eventhandling/pom.xml | 2 +-
regressiontests/factory/pom.xml | 2 +-
regressiontests/interact/pom.xml | 2 +-
regressiontests/persistence-jpa/pom.xml | 2 +-
regressiontests/pom.xml | 2 +-
regressiontests/publishing-jpa/pom.xml | 2 +-
regressiontests/rest-jpa/pom.xml | 2 +-
regressiontests/value/pom.xml | 2 +-
regressiontests/viewers-common/pom.xml | 2 +-
regressiontests/viewers-jpa/pom.xml | 2 +-
scripts/promoterctag.sh | 97 ++++++++-
scripts/verify-causeway-release.sh | 24 +--
security/bypass/pom.xml | 2 +-
security/keycloak/pom.xml | 2 +-
security/simple/pom.xml | 2 +-
security/spring/pom.xml | 2 +-
starters/pom.xml | 35 +---
testing/archtestsupport/applib/pom.xml | 2 +-
testing/archtestsupport/pom.xml | 2 +-
testing/fakedata/applib/pom.xml | 2 +-
testing/fakedata/fixtures/pom.xml | 2 +-
testing/fakedata/integtests/pom.xml | 2 +-
testing/fakedata/pom.xml | 2 +-
testing/fixtures/applib/pom.xml | 2 +-
testing/fixtures/pom.xml | 2 +-
testing/h2console/pom.xml | 2 +-
testing/h2console/ui/pom.xml | 2 +-
testing/hsqldbmgr/pom.xml | 2 +-
testing/hsqldbmgr/ui/pom.xml | 2 +-
testing/integtestsupport/applib/pom.xml | 2 +-
testing/integtestsupport/pom.xml | 2 +-
testing/pom.xml | 2 +-
testing/specsupport/applib/pom.xml | 2 +-
testing/specsupport/pom.xml | 2 +-
testing/unittestsupport/applib/pom.xml | 2 +-
testing/unittestsupport/pom.xml | 2 +-
valuetypes/asciidoc/applib/pom.xml | 2 +-
valuetypes/asciidoc/builder/pom.xml | 2 +-
valuetypes/asciidoc/metamodel/pom.xml | 2 +-
valuetypes/asciidoc/persistence-jpa/pom.xml | 2 +-
valuetypes/asciidoc/pom.xml | 2 +-
valuetypes/asciidoc/ui/pom.xml | 2 +-
valuetypes/asciidoc/ui/wicket/pom.xml | 2 +-
valuetypes/markdown/applib/pom.xml | 2 +-
valuetypes/markdown/metamodel/pom.xml | 2 +-
valuetypes/markdown/persistence-jpa/pom.xml | 2 +-
valuetypes/markdown/pom.xml | 2 +-
valuetypes/markdown/ui/pom.xml | 2 +-
valuetypes/markdown/ui/wicket/pom.xml | 2 +-
valuetypes/pom.xml | 2 +-
valuetypes/vega/applib/pom.xml | 2 +-
valuetypes/vega/metamodel/pom.xml | 2 +-
valuetypes/vega/persistence-jpa/pom.xml | 2 +-
valuetypes/vega/pom.xml | 2 +-
valuetypes/vega/ui/pom.xml | 2 +-
valuetypes/vega/ui/wicket/pom.xml | 2 +-
viewers/commons/applib/pom.xml | 2 +-
viewers/commons/model/pom.xml | 2 +-
viewers/commons/pom.xml | 2 +-
viewers/commons/prism/pom.xml | 2 +-
viewers/commons/services/pom.xml | 2 +-
viewers/graphql/applib/pom.xml | 2 +-
viewers/graphql/model/pom.xml | 2 +-
viewers/graphql/pom.xml | 2 +-
viewers/graphql/test/pom.xml | 2 +-
viewers/graphql/test2/pom.xml | 2 +-
viewers/graphql/testsupport/pom.xml | 2 +-
viewers/graphql/viewer/pom.xml | 2 +-
viewers/restfulobjects/applib/pom.xml | 2 +-
viewers/restfulobjects/client/pom.xml | 2 +-
viewers/restfulobjects/pom.xml | 2 +-
viewers/restfulobjects/rendering/pom.xml | 2 +-
viewers/restfulobjects/test/pom.xml | 2 +-
viewers/restfulobjects/viewer/pom.xml | 2 +-
viewers/wicket/applib/pom.xml | 2 +-
viewers/wicket/model/pom.xml | 2 +-
viewers/wicket/pom.xml | 2 +-
viewers/wicket/ui-test/pom.xml | 2 +-
viewers/wicket/ui/pom.xml | 2 +-
viewers/wicket/viewer/pom.xml | 2 +-
199 files changed, 522 insertions(+), 511 deletions(-)
(causeway) 09/36: CAUSEWAY-3866: removes more jdo references
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 2c403d5f71bdfdfbe4fa3122e1b20971ef1db25e
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 12:19:09 2025 +0100
CAUSEWAY-3866: removes more jdo references
---
.../ROOT/partials/module-nav/components.adoc | 2 -
.../modules/intellij/attachments/.gitignore | 1 -
.../causeway-settings-file-templates.jar | Bin 10702 -> 0 bytes
.../setupguide/modules/intellij/pages/about.adoc | 64 +-------------------
.../modules/intellij/partials/coding-standards.txt | 12 ----
.../intellij/partials/faster-turnaround-times.txt | 67 +--------------------
.../modules/intellij/partials/file-templates.txt | 40 ------------
.../modules/intellij/partials/live-templates.txt | 22 -------
.../userguide/modules/ROOT/pages/value-types.adoc | 32 ++--------
antora/playbooks/site.NEXT.yml | 2 +-
.../adoc/modules/runtimeservices/pages/about.adoc | 2 +-
.../adoc/modules/commandlog/pages/about.adoc | 17 ++----
.../adoc/modules/executionlog/pages/about.adoc | 17 ++----
.../adoc/modules/executionoutbox/pages/about.adoc | 18 ++----
.../adoc/modules/audittrail/pages/about.adoc | 13 +---
.../adoc/modules/secman/pages/setting-up.adoc | 18 ++----
.../adoc/modules/sessionlog/pages/about.adoc | 13 +---
.../adoc/modules/ROOT/pages/hints-and-tips.adoc | 1 -
.../jpa/adoc/modules/ROOT/partials/module-nav.adoc | 2 +-
.../querydsl/adoc/modules/ROOT/pages/about.adoc | 5 +-
.../ROOT/pages/setup-and-configuration.adoc | 11 ----
security/adoc/modules/ROOT/pages/about.adoc | 2 +-
.../adoc/modules/archtestsupport/pages/about.adoc | 22 +------
.../adoc/modules/asciidoc/pages/about.adoc | 10 ++-
.../adoc/modules/markdown/pages/about.adoc | 11 ++--
valuetypes/vega/adoc/modules/vega/pages/about.adoc | 10 ++-
26 files changed, 53 insertions(+), 361 deletions(-)
diff --git a/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc b/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
index 4e75c1f7d06..0dc6dbdd128 100644
--- a/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
+++ b/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
@@ -7,7 +7,6 @@
*** xref:security:bypass:about.adoc[Bypass]
*** xref:security:simple:about.adoc[Simple]
-*** xref:security:shiro:about.adoc[Shiro]
*** xref:security:spring:about.adoc[Spring]
*** xref:security:keycloak:about.adoc[Keycloak]
@@ -20,5 +19,4 @@
** Persistence
*** xref:pjpa:ROOT:about.adoc[]
-*** xref:pjdo:ROOT:about.adoc[]
diff --git a/antora/components/setupguide/modules/intellij/attachments/.gitignore b/antora/components/setupguide/modules/intellij/attachments/.gitignore
deleted file mode 100644
index 1a8fd13e007..00000000000
--- a/antora/components/setupguide/modules/intellij/attachments/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-!causeway-settings-file-templates.jar
diff --git a/antora/components/setupguide/modules/intellij/attachments/causeway-settings-file-templates.jar b/antora/components/setupguide/modules/intellij/attachments/causeway-settings-file-templates.jar
deleted file mode 100644
index c64ef96a17b..00000000000
Binary files a/antora/components/setupguide/modules/intellij/attachments/causeway-settings-file-templates.jar and /dev/null differ
diff --git a/antora/components/setupguide/modules/intellij/pages/about.adoc b/antora/components/setupguide/modules/intellij/pages/about.adoc
index 2beb8d211ec..9769ca9558a 100644
--- a/antora/components/setupguide/modules/intellij/pages/about.adoc
+++ b/antora/components/setupguide/modules/intellij/pages/about.adoc
@@ -45,10 +45,6 @@ image::015-import-project/040-project-structure.png[width="800px"]
== Configuring
-//include::partial$UNUSED/file-templates.adoc[leveloffset=+2]
-//include::partial$UNUSED/live-templates.adoc[leveloffset=+2]
-//include::partial$UNUSED/coding-standards.adoc[leveloffset=+2]
-
=== Compiler Settings
There are a number of compiler settings that influence the compiler.
@@ -124,8 +120,7 @@ The screenshot below shows a run configuration for JPA:
image::110-running-the-app/012-run-configuration-jpa.png[width=1000]
-
-With JPA, the classes need to be "weaved" in order to support lazy loading and (more performant) dirty object tracking.
+With xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], the classes can optionally be "weaved" in order to support lazy loading and (more performant) dirty object tracking.
This is typically done dynamically at runtime, using a Java agent.
The xref:docs:starters:simpleapp.adoc[SimpleApp] and xref:docs:starters:helloworld.adoc[HelloWorld] starter apps demonstrate this, bundling the `spring-instrument.jar` file.
To run, use:
@@ -138,54 +133,6 @@ To run, use:
as a JVM argument (where the system properties also are located.)
-=== Running the App (JDO)
-
-DataNucleus requires that all entities are bytecode enhanced.
-When building from the command line using Maven, the `datanucleus:enhance` Maven plugin takes care of this.
-
-We can just have IntelliJ run the enhance as a separate run configuration before the run configuration that runs the app itself.
-
-First, set up the run configuration to do the enhance:
-
-.Run Configuration to enhance the entities
-image::110-running-the-app/005-datanucleus-enhance-run-configuration.png[width="700px"]
-
-TIP: Check "work offline" (in Maven Options) to speed this up slightly.
-
-[WARNING]
-====
-If on Windows you encounter "The command line is too long", then set '-Dfork=false' as a VM option, in Java options:
-
-image::110-running-the-app/006-datanucleus-enhance-run-configuration-fork-false.png[width="400px"]
-====
-
-Then, set up the run configuration for the app:
-
-.Run Configuration to run the app
-image::110-running-the-app/010-run-configuration.png[width="700px"]
-
-Note how it runs the "enhance" configuration first, specified using "Modify options".
-
-Because we are using Maven to enhance the app, build the app at least once from the Maven command line:
-
-[source,bash]
-----
-mvn install -DskipTests -T1C
-----
-
-You should now be able to run the app using `Run > Run Configuration`.
-The same configuration can also be used to debug the app if you so need.
-
-
-.Dynamic Enhancement ?
-[sidebar]
-****
-Rather than statically enhancing the classes, an alternative -- at least in theory -- is to enhance the classes dynamically, at runtime.
-
-There is an link:https://plugins.jetbrains.com/plugin/11119-datanucleus-runtime-enhancement[IntelliJ plugin] (not tested) that purports to support this, but (at time of writing) is out of date and only supports older versions of IntelliJ.
-****
-
-
=== Running the Unit Tests
The easiest way to run the unit tests is just to right click on the relevant package in the _Project Window_, and choose run unit tests.
@@ -209,13 +156,4 @@ There are also tests in the `webapp-tests` module:
image::110-running-the-app/046-running-integ-tests-webapp-tests.png[width=800]
-If the app uses JDO, then the tests might fail because the entities won't have been enhanced.
-However, we can then easily update the automatically-created run configuration to run the datanucleus enhancer goal (same as when running the application):
-
-.Integration Tests Run Configuration
-image::110-running-the-app/050-running-integration-tests-run-configuration.png[width="700px"]
-
-// CAUTION: Make sure that the `search for tests` radio button is set to `In single module`.
-// If this radio button is set to one of the other options then you may obtain class loading issues.
-
diff --git a/antora/components/setupguide/modules/intellij/partials/coding-standards.txt b/antora/components/setupguide/modules/intellij/partials/coding-standards.txt
deleted file mode 100644
index 30f870016aa..00000000000
--- a/antora/components/setupguide/modules/intellij/partials/coding-standards.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-= Coding Standards
-
-: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 [...]
-
-// LATER
-
-CAUTION: seem to have mislaid this file... would need verifying/updating anyway, I think.
-
-Next, we suggest you import settings for standard ASF/Apache Causeway coding conventions.
-This file is also provided as a settings file, namely *link:{attachmentsdir}/intellij/causeway-settings-code-style.jar[causeway-settings-code-style.jar]*.
-Download and import (as for the above settings JAR files).
-
diff --git a/antora/components/setupguide/modules/intellij/partials/faster-turnaround-times.txt b/antora/components/setupguide/modules/intellij/partials/faster-turnaround-times.txt
index 48c9827e82c..4f8ca1ab743 100644
--- a/antora/components/setupguide/modules/intellij/partials/faster-turnaround-times.txt
+++ b/antora/components/setupguide/modules/intellij/partials/faster-turnaround-times.txt
@@ -9,71 +9,10 @@ This section describes how to install and setup JetBrains' IntelliJ IDEA, then h
In this section are several options that will reduce the time it takes between making a source code edit and seeing the results in the running app. code/build/deploy/review feedback loop.
-== Using Grade to compile/enhance
-
-Running an Apache Causeway application requires that the DataNucleus enhancer runs on the compiled bytecode.
-As described xref:setupguide:intellij:about.adoc#running-the-app[above], the recommended way to do this with IntelliJ is to use a Run configuration that runs the enhancer goal prior to launch.
-
-Alternative, you can use the following `build.gradle` script in your `dom` module:
-
-[source,groovy]
-.`build.gradle`
-----
-apply plugin: 'java'
-apply plugin: 'tangram.tools'
-sourceCompatibility = 1.8
-targetCompatibility = 1.8
-version = (new XmlParser()).parse('pom.xml').parent.version.text()
-buildscript {
- repositories {
- maven { url "http://oss.jfrog.org/artifactory/oss-snapshot-local" }
- jcenter()
- }
- dependencies {
- classpath 'tangram:gradle-plugin:1.1.2'
- }
-}
-repositories {
- mavenLocal()
- maven { url "http://oss.jfrog.org/artifactory/oss-snapshot-local" }
- jcenter()
-}
-dependencies {
- compile group: 'org.apache.causeway.core', name: 'causeway-core-applib', version: version
-}
-task copyClasses << {
- copy {
- from 'build/classes/main'
- into 'target/classes'
- }
-}
-----
-
-The script is intended to be in the background as a daemon while editing/developing; whenever a change is made to any source code, gradle will automatically compile _and_ enhance the code.
-In this way it eliminates the need to start up Maven and run the enhancer goal.
-
-To use, you must disable the IntelliJ's automatic building of the 'dom' project.
-This is done using:
-`File > Settings > Build, Execution, Deployment > Compiler > Excludes`, and then exclude the `.../dom/src/main/java`
-directory:
-
-image::070-advanced/002-compiler-exclude.png[width="800px"]
-
-
-The script can be run in the background using:
-
-[source,bash]
-----
-gradle -t --offline &
-----
-
-from the command line (in the `dom` module).
-
-image::070-advanced/004-gradle-output.png[width="600px"]
== Using Gradle for liveReload
-Similarly, gradle can be run to reduce the turn-around time when tweaking the UI (defined by the
+Gradle can be run to reduce the turn-around time when tweaking the UI (defined by the
xref:userguide:ROOT:ui-layout-and-hints.adoc#object-layout[*.layout.xml] file for each domain class), when the app is running.
The framework will automatically notice any changes to `.layout.xml` files, but these are read from the classpath (the `target/classes` directory), not the source path.
@@ -157,8 +96,8 @@ link:http://github.com/dcevm/dcevm[DCEVM] enhances the JVM with true hot-swap ad
In the context of Apache Causeway, this is very useful for contributed actions and mixins and also view models; you should then be able to write these actions and have them be picked up without restarting the application.
-Changing persisting domain entities is more problematic, for two reasons: the JDO/DataNucleus enhancer needs to run on domain entities, and also at runtime JDO/DataNucleus would need to rebuild its own metamodel.
-You may find that adding actions will work, but adding new properties or collections is much less likely to.
+Changing persisting domain entities is more problematic, because the ORM needs to rebuild its own metamodel.
+You may find that adding actions will work, but adding new properties or collections are less likely to.
To set up DCEVM, download the appropriate JAR from the link:https://dcevm.github.io/[github page], and run the installer.
For example:
diff --git a/antora/components/setupguide/modules/intellij/partials/file-templates.txt b/antora/components/setupguide/modules/intellij/partials/file-templates.txt
deleted file mode 100644
index f4b68d23d2b..00000000000
--- a/antora/components/setupguide/modules/intellij/partials/file-templates.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-= File Templates
-
-: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 [...]
-:page-partial:
-
-
-// LATER
-
-Next we recommend you import a set of standard file templates.
-These are used to create new classes or supporting files:
-
-.File templates
-image::030-import-settings/040-file-templates.png[width="400px"]
-
-The file templates are provided as a settings JAR file, namely *link:{attachmentsdir}/causeway-settings-file-templates.jar[causeway-settings-file-templates.jar]*.
-Download this file.
-
-Next, import using `File > Import Settings`, specifying the directory that you have downloaded the file to:
-
-.IntelliJ Import Settings - Specify JAR file
-image::030-import-settings/010-settings-import-jar.png[width="400px"]
-
-Select all the categories (there should just be one), and hit OK. then hit restart.
-
-[WARNING]
-====
-If importing into IntelliJ 2017.2.3 two categories are shown - "File templates" and "File templates (schemes)".
-Select all the categories.
-
-Apparently no categories are shown if importing into IntelliJ 2016.1.1 Community Edition (and perhaps other 2016 versions).
-The file does import ok into IntelliJ 15.0.x, so we think this is a bug in the 2016 version.
-
-The workaround is to extract the `.jar` file locally and copy the files into IntelliJ's `config` directory, somewhere in your home directory:
-
-* Windows `<User home>\.IdeaIC2016\config`
-* Linux `~/..IdeaIC2016/config`
-* Mac OS `~/Library/Preferences/IdeaIC2016`
-
-====
-
diff --git a/antora/components/setupguide/modules/intellij/partials/live-templates.txt b/antora/components/setupguide/modules/intellij/partials/live-templates.txt
deleted file mode 100644
index 2bd91d151fb..00000000000
--- a/antora/components/setupguide/modules/intellij/partials/live-templates.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-= Live Templates
-
-: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 [...]
-
-
-// LATER
-
-We also recommend you import a set of live templates.
-These are used to add new methods to existing classes:
-
-.Live templates
-image::030-import-settings/050-live-templates.png[width="600px"]
-
-The live templates have a prefix of either:
-
-* `is` : for Apache Causeway domain objects
-* `ju` : for JUnit tests
-* `jm` : for JMock mocks or libraries
-
-The live templates are also provided as a settings JAR file, namely *link:{attachmentsdir}/resources/intellij/causeway-settings-live-templates.jar[causeway-settings-live-templates.jar]*.
-Download and import (as for the previous settings JAR files).
-
diff --git a/antora/components/userguide/modules/ROOT/pages/value-types.adoc b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
index 0f617d17ddf..aea3302f2cd 100644
--- a/antora/components/userguide/modules/ROOT/pages/value-types.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
@@ -375,10 +375,11 @@ The string returned must be URL safe.
As we can see, this is not the simplest of APIs, but the simplification it brings to your entities and view models that can now _consume_ your new value type means that it may be worth the effort.
We're not quite finished with the glue code, unfortunately.
-Chances are that you will want to persist the new value to the database, which means that the ORM also requires its own SPI to be implemented (but they are almost identical).
+Chances are that you will want to persist the new value to the database, which means that the object store also requires its own SPI to be implemented.
+
+For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store, implement the `javax.persistence.AttributeConverter` SPI.
+For example:
-* if using xref:pjpa::about.adoc[JPA], then implement the `javax.persistence.AttributeConverter` SPI:
-+
[source,java]
.EmailAddressConverter.java
----
@@ -401,29 +402,6 @@ public class EmailAddressConverter implements AttributeConverter<EmailAddress, S
}
----
-* if using xref:pjdo::about.adoc[JDO], then implement the `org.datanucleus.store.types.converters.TypeConverter` SPI:
-+
-[source,java]
-----
-public class EmailAddressConverter implements TypeConverter<EmailAddress, String>{
-
- private static final long serialVersionUID = 1L;
-
- @Override
- public String toDatastoreType(final EmailAddress memberValue) {
- return memberValue != null
- ? memberValue.getEmailAddress()
- : null;
- }
-
- @Override
- public EmailAddress toMemberType(final String datastoreValue) {
- return datastoreValue != null
- ? EmailAddress.of(datastoreValue)
- : null;
- }
-}
-----
=== Composite value types
@@ -597,7 +575,7 @@ Also, it is not possible to use a custom value type as part of the object's id,
If using within the database then you will also need to map the custom type to the database.
-If mapping to xref:pjpa::about.adoc[JPA/EclipseLink], use `@Embedded` and `@Embeddable`; see for example link:https://www.baeldung.com/jpa-embedded-embeddable[this baeldung post] on the topic.
+If using the xref:pjpa::about.adoc[JPA/EclipseLink] object store, use `@Embedded` and `@Embeddable`; see for example link:https://www.baeldung.com/jpa-embedded-embeddable[this baeldung post] on the topic.
diff --git a/antora/playbooks/site.NEXT.yml b/antora/playbooks/site.NEXT.yml
index 6f1f23dbed0..dd7d537cd82 100644
--- a/antora/playbooks/site.NEXT.yml
+++ b/antora/playbooks/site.NEXT.yml
@@ -187,7 +187,7 @@ content:
start_path: persistence/jdo/adoc # pjdo
branches: [2.0.0, 2.1.0, 3.0.0, 3.1.0, 3.2.0, 3.3.0, 3.4.0, 3.5.0]
- url: .
- start_path: persistence/querydsl/adoc # pjdo
+ start_path: persistence/querydsl/adoc
branches: [3.2.0, 3.3.0, 3.4.0, 3.5.0]
# regression tests
diff --git a/core/runtimeservices/src/main/adoc/modules/runtimeservices/pages/about.adoc b/core/runtimeservices/src/main/adoc/modules/runtimeservices/pages/about.adoc
index cc06376049a..2f0d2d8965c 100644
--- a/core/runtimeservices/src/main/adoc/modules/runtimeservices/pages/about.adoc
+++ b/core/runtimeservices/src/main/adoc/modules/runtimeservices/pages/about.adoc
@@ -9,4 +9,4 @@ Many of the services defined (as interfaces) in the applib are actually implemen
Although it's a simplification, you can think of the xref:core:metamodel:about.adoc[] module as handling domain types (cf `java.lang.Class`), while the xref:core:runtime:about.adoc[], xref:core:runtimeservices:about.adoc[] and xref:transaction:about.adoc[] modules handle domain object instances (cf `java.lang.Object`).
-That said, Spring Boot is responsible for instantiating domain service instances, while the persistence mechanisms (xref:pjpa:ROOT:about.adoc[JPA] and xref:pjdo:ROOT:about.adoc[JDO]) -- which are not part of the `core` modules -- handle the lifecycle of entity instances.
+That said, Spring Boot is responsible for instantiating domain service instances, while the xref:pjpa:ROOT:about.adoc[JPA] object store -- which is not part of the `core` modules -- handle the lifecycle of entity instances.
diff --git a/extensions/core/commandlog/adoc/modules/commandlog/pages/about.adoc b/extensions/core/commandlog/adoc/modules/commandlog/pages/about.adoc
index 3e49f2b538b..cb4ccd87e90 100644
--- a/extensions/core/commandlog/adoc/modules/commandlog/pages/about.adoc
+++ b/extensions/core/commandlog/adoc/modules/commandlog/pages/about.adoc
@@ -41,7 +41,7 @@ Add an entry for the _Command Log_ module's own BOM:
[#dependencies]
=== Dependencies / Imports
-In the webapp module of your application, add the following dependency:
+In the webapp module of your application, add the following dependency for the xref:pjpa::about.adoc[] object store:
[source,xml]
.pom.xml
@@ -49,33 +49,26 @@ In the webapp module of your application, add the following dependency:
<dependencies>
<dependency>
<groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-commandlog-persistence-XXX</artifactId> <!--.-->
+ <artifactId>causeway-extensions-commandlog-persistence-jpa</artifactId>
</dependency>
</dependencies>
----
-<.> either:
-** `causeway-extensions-commandlog-persistence-jpa` (xref:pjpa::about.adoc[]), or
-** `causeway-extensions-commandlog-persistence-jdo` (xref:pjdo::about.adoc[]).
In your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the CommandLog modules.
-The exact modules to use will depend upon the persistence mechanism in use:
+For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism, use:
[source,java]
.AppManifest.java
----
@Configuration
@Import({
- ...
- CausewayModuleExtCommandLogPersistenceXxx.class, // <.>
- ...
+ CausewayModuleExtCommandLogPersistenceJpa.class,
+ // ...
})
public class AppManifest {
}
----
-<.> either
-** `CausewayModuleExtCommandLogPersistenceJpa` (xref:pjpa::about.adoc[]),or
-** `CausewayModuleExtCommandLogPersistenceJdo`, (xref:pjdo::about.adoc[])
If using xref:security:secman:about.adoc[], you will also need to import the xref:testing:fixtures:about.adoc[Fixture] module; SecMan uses fixture scripts to seed its entities.
diff --git a/extensions/core/executionlog/adoc/modules/executionlog/pages/about.adoc b/extensions/core/executionlog/adoc/modules/executionlog/pages/about.adoc
index f1ca9c504a5..0ca0a8e387f 100644
--- a/extensions/core/executionlog/adoc/modules/executionlog/pages/about.adoc
+++ b/extensions/core/executionlog/adoc/modules/executionlog/pages/about.adoc
@@ -39,7 +39,7 @@ Add an entry for the _Execution Log_ module's own BOM:
[#dependencies]
=== Dependencies / Imports
-In the webapp module of your application, add the following dependency:
+In the webapp module of your application, add the following dependency for the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store:
[source,xml]
.pom.xml
@@ -47,32 +47,25 @@ In the webapp module of your application, add the following dependency:
<dependencies>
<dependency>
<groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-executionlog-persistence-XXX</artifactId> <!--.-->
+ <artifactId>causeway-extensions-executionlog-persistence-jpa</artifactId>
</dependency>
</dependencies>
----
-<.> either:
-** `causeway-extensions-executionlog-persistence-jpa` (xref:pjpa::about.adoc[]), or
-** `causeway-extensions-executionlog-persistence-jdo` (xref:pjdo::about.adoc[])
In your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the _ExecutionLog_ modules.
-The exact modules to use will depend upon the persistence mechanism in use:
+For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism, use:
[source,java]
.AppManifest.java
----
@Configuration
@Import({
- ...
- CausewayModuleExtExecutionLogPersistenceXxx.class, // <.>
- ...
+ CausewayModuleExtExecutionLogPersistenceJpa.class,
+ // ...
})
public class AppManifest {
}
----
-<.> either:
-** `CausewayModuleExtExecutionLogPersistenceJdo` (xref:pjpa::about.adoc[]), or
-** `CausewayModuleExtExecutionLogPersistenceJpa` (xref:pjdo::about.adoc[])
If using xref:security:secman:about.adoc[], you will also need to import the xref:testing:fixtures:about.adoc[Fixture] module; SecMan uses fixture scripts to seed its entities.
diff --git a/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc b/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
index fb23c8b28a9..300d4b2902f 100644
--- a/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
+++ b/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
@@ -37,7 +37,7 @@ Add a section for _Execution Outbox_'s own BOM:
[#dependencies]
=== Dependencies / Imports
-In the webapp module of your application, add the following dependency:
+In the webapp module of your application, add the following dependency for the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism:
[source,xml]
.pom.xml
@@ -45,34 +45,26 @@ In the webapp module of your application, add the following dependency:
<dependencies>
<dependency>
<groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-executionoutbox-persistence-XXX</artifactId> <!--.-->
+ <artifactId>causeway-extensions-executionoutbox-persistence-jpa</artifactId>
</dependency>
</dependencies>
----
-<.> either:
-** `causeway-extensions-executionoutbox-persistence-jpa` (xref:pjpa::about.adoc[]), or
-** `causeway-extensions-executionoutbox-persistence-jdo` (xref:pjdo::about.adoc[])
In your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the _ExecutionOutbox_ modules.
-The exact modules to use will depend upon the persistence mechanism in use:
-
+For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism, use:
[source,java]
.AppManifest.java
----
@Configuration
@Import({
- ...
- CausewayModuleExtExecutionOutboxPersistenceXxx.class, // <.>
- ...
+ CausewayModuleExtExecutionOutboxPersistenceJpa.class,
+ // ...
})
public class AppManifest {
}
----
-<.> either:
-** `CausewayModuleExtExecutionOutboxPersistenceJdo` (xref:pjpa::about.adoc[]), or
-** `CausewayModuleExtExecutionOutboxPersistenceJpa` (xref:pjdo::about.adoc[])
If using xref:security:secman:about.adoc[], you will also need to import the xref:testing:fixtures:about.adoc[Fixture] module; SecMan uses fixture scripts to seed its entities.
diff --git a/extensions/security/audittrail/adoc/modules/audittrail/pages/about.adoc b/extensions/security/audittrail/adoc/modules/audittrail/pages/about.adoc
index 33bd122d857..1c812431da9 100644
--- a/extensions/security/audittrail/adoc/modules/audittrail/pages/about.adoc
+++ b/extensions/security/audittrail/adoc/modules/audittrail/pages/about.adoc
@@ -64,7 +64,7 @@ public class MyModule { ... }
----
In your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the implementation modules of this extension.
-The exact modules to use will depend upon the persistence mechanism in use:
+For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism:
* add this dependency to your webapp's `pom.xml`:
+
@@ -74,13 +74,10 @@ The exact modules to use will depend upon the persistence mechanism in use:
<dependencies>
<dependency>
<groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-audittrail-persistence-xxx</artifactId> <!--.-->
+ <artifactId>causeway-extensions-audittrail-persistence-jpa</artifactId>
</dependency>
</dependencies>
----
-<.> either:
-** `causeway-extensions-audittrail-persistence-jpa` (xref:pjpa::about.adoc[]) or
-** `causeway-extensions-audittrail-persistence-jdo` (xref:pjdo::about.adoc[])
* and `@Import` this module to your app manifest:
+
@@ -89,15 +86,11 @@ The exact modules to use will depend upon the persistence mechanism in use:
----
@Configuration
@Import({
- CausewayModuleExtAuditTrailPersistenceXxx.class, // <.>
+ CausewayModuleExtAuditTrailPersistenceJpa.class,
// ...
})
public class MyAppManifest { ... }
----
-<.> either
-+
-** `CausewayModuleExtAuditTrailPersistenceJpa` (xref:pjpa::about.adoc[]) or
-** `CausewayModuleExtAuditTrailPersistenceJdo` (xref:pjdo::about.adoc[])
[#menubar-layout-xml]
diff --git a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
index 361076252b3..243a0280c70 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
@@ -35,7 +35,7 @@ In addition, add an entry for _SecMan_'s own BOM:
== Dependencies
In the webapp module of your application, add the implementation modules of the extension.
-The exact modules to use will depend upon the persistence mechanism in use:
+For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism, use:
[source,xml]
.pom.xml
@@ -43,7 +43,7 @@ The exact modules to use will depend upon the persistence mechanism in use:
<dependencies>
<dependency>
<groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-secman-persistence-XXX</artifactId> <!--.-->
+ <artifactId>causeway-extensions-secman-persistence-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.apache.causeway.extensions</groupId>
@@ -51,14 +51,9 @@ The exact modules to use will depend upon the persistence mechanism in use:
</dependency>
</dependencies>
----
-<.> either:
-** `causeway-extensions-secman-persistence-jpa` (xref:pjpa::about.adoc[]) or
-** `causeway-extensions-secman-persistence-jdo` (xref:pjdo::about.adoc[])
<.> provides an implementation of `PasswordEncoder`, so that passwords are only persisted in encrypted form.
-
In your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the corresponding _SecMan_ modules.
-Again, the exact modules to use will depend upon the persistence mechanism in use.
You will also need to import the fixture module; SecMan uses fixture scripts to seed its entities:
[source,java]
@@ -66,19 +61,14 @@ You will also need to import the fixture module; SecMan uses fixture scripts to
----
@Configuration
@Import({
- ...
- CausewayModuleExtSecmanPersistenceXxx.class, // <.>
+ CausewayModuleExtSecmanPersistenceJpa.class,
CausewayModuleExtSecmanEncryptionJbcrypt.class, // <.>
-
CausewayModuleTestingFixturesApplib.class, // <.>
- ...
+ // ...
})
public class AppManifest {
}
----
-<.> either
-** `CausewayModuleExtSecmanPersistenceJpa` (xref:pjpa::about.adoc[]) or
-** `CausewayModuleExtSecmanPersistenceJdo` (xref:pjdo::about.adoc[])
<.> use Jbcrypt to encrypt passwords
<.> fixture script support
diff --git a/extensions/security/sessionlog/adoc/modules/sessionlog/pages/about.adoc b/extensions/security/sessionlog/adoc/modules/sessionlog/pages/about.adoc
index d24e3c4d6b2..7e8ffd5b11f 100644
--- a/extensions/security/sessionlog/adoc/modules/sessionlog/pages/about.adoc
+++ b/extensions/security/sessionlog/adoc/modules/sessionlog/pages/about.adoc
@@ -61,7 +61,7 @@ public class MyModule { ... }
----
In your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the implementation modules of this extension.
-The exact modules to use will depend upon the persistence mechanism in use:
+For the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism:
* add this dependency to your webapp's `pom.xml`:
+
@@ -71,13 +71,10 @@ The exact modules to use will depend upon the persistence mechanism in use:
<dependencies>
<dependency>
<groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-sessionlog-persistence-xxx</artifactId> <!--.-->
+ <artifactId>causeway-extensions-sessionlog-persistence-jpa</artifactId>
</dependency>
</dependencies>
----
-<.> either:
-** `causeway-extensions-sessionlog-persistence-jpa` (xref:pjpa::about.adoc[]) or
-** `causeway-extensions-sessionlog-persistence-jdo` (xref:pjdo::about.adoc[])
* and `@Import` this module to your app manifest:
+
@@ -86,15 +83,11 @@ The exact modules to use will depend upon the persistence mechanism in use:
----
@Configuration
@Import({
- CausewayModuleExtSessionLogPersistenceXxx.class, // <.>
+ CausewayModuleExtSessionLogPersistenceJpa.class,
// ...
})
public class MyAppManifest { ... }
----
-<.> either
-+
-** `CausewayModuleExtSessionLogPersistenceJpa` (xref:pjpa::about.adoc[]) or
-** `CausewayModuleExtSessionLogPersistenceJdo` (xref:pjdo::about.adoc[])
diff --git a/persistence/jpa/adoc/modules/ROOT/pages/hints-and-tips.adoc b/persistence/jpa/adoc/modules/ROOT/pages/hints-and-tips.adoc
index 39a8d511857..6df9fe388c3 100644
--- a/persistence/jpa/adoc/modules/ROOT/pages/hints-and-tips.adoc
+++ b/persistence/jpa/adoc/modules/ROOT/pages/hints-and-tips.adoc
@@ -6,4 +6,3 @@
This page provides some solutions for problems we've encountered ourselves or have been raised on the Apache Causeway mailing lists.
-include::pjdo:ROOT:partial$hints-and-tips/tracing-sql-statements.adoc[leveloffset=+1]
diff --git a/persistence/jpa/adoc/modules/ROOT/partials/module-nav.adoc b/persistence/jpa/adoc/modules/ROOT/partials/module-nav.adoc
index ef72866858a..0a13610366b 100644
--- a/persistence/jpa/adoc/modules/ROOT/partials/module-nav.adoc
+++ b/persistence/jpa/adoc/modules/ROOT/partials/module-nav.adoc
@@ -5,4 +5,4 @@
* xref:pjpa:ROOT:mapping-guide.adoc[Mapping Guide]
* xref:pjpa:ROOT:dependency-injection.adoc[Dependency Injection]
* xref:pjpa:ROOT:domain-services.adoc[Domain Services]
-* xref:pjpa:ROOT:hints-and-tips.adoc[Hints and Tips]
+// * xref:pjpa:ROOT:hints-and-tips.adoc[Hints and Tips]
diff --git a/persistence/querydsl/adoc/modules/ROOT/pages/about.adoc b/persistence/querydsl/adoc/modules/ROOT/pages/about.adoc
index fecb4927932..21a1cbaf1c9 100644
--- a/persistence/querydsl/adoc/modules/ROOT/pages/about.adoc
+++ b/persistence/querydsl/adoc/modules/ROOT/pages/about.adoc
@@ -3,8 +3,7 @@
: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 [...]
-link:http://querydsl.com/[QueryDSL] provides a way to express queries independently of the particular persistence mechanism, abstracting out whether the ORM in use is xref:pjdo:ROOT:about.adoc[JDO] or xref:pjpa:ROOT:about.adoc[JPA].
-
+link:http://querydsl.com/[QueryDSL] provides a way to express type-safe queries.
Apache Causeway's integration with QueryDSL provides the following capabilities:
* xref:refguide:persistence:index/querydsl/applib/services/repo/QueryDslRepository.adoc[]
@@ -24,7 +23,7 @@ The query expressions from xref:refguide:persistence:index/querydsl/applib/servi
Those from xref:refguide:persistence:index/querydsl/applib/services/support/DetachedQueryFactory.adoc[] are detached; they cannot be submitted directly.
Instead, they are intended to be combined with the attached queries, e.g. in subqueries.
+
-Although xref:refguide:persistence:index/querydsl/applib/services/support/QueryDslSupport.adoc[] itself is abstract, both the xref:pjpa::about.adoc[JPA] and xref:pjdo::about.adoc[JDO] persistence mechanisms provide concrete implementations.
+The xref:refguide:persistence:index/querydsl/applib/services/support/QueryDslSupport.adoc[] service is abstract, while the the xref:pjpa::about.adoc[JPA/EclipseLink] persistence mechanism provides the concrete implementations.
* xref:refguide:persistence:index/querydsl/applib/services/auto/AutoCompleteGeneratedQueryService.adoc[]
+
diff --git a/persistence/querydsl/adoc/modules/ROOT/pages/setup-and-configuration.adoc b/persistence/querydsl/adoc/modules/ROOT/pages/setup-and-configuration.adoc
index 2a6be706052..a990b749560 100644
--- a/persistence/querydsl/adoc/modules/ROOT/pages/setup-and-configuration.adoc
+++ b/persistence/querydsl/adoc/modules/ROOT/pages/setup-and-configuration.adoc
@@ -22,17 +22,6 @@ This section describes the required changes to use QueryDSL if using xref:pjpa::
include::partial$setup-and-configuration-for-persistence-mechanism.adoc[]
-== JDO
-
-This section describes the required changes to use QueryDSL if using xref:pjdo::about.adoc[JDO] as your persistence mechanism.
-
-:querydsl-implementation: jdo
-:querydsl-implementation-capitalized: Jdo
-:querydsl-annotation-processor: com.querydsl.apt.jdo.JDOAnnotationProcessor
-
-
-include::partial$setup-and-configuration-for-persistence-mechanism.adoc[]
-
== Configuration Properties
diff --git a/security/adoc/modules/ROOT/pages/about.adoc b/security/adoc/modules/ROOT/pages/about.adoc
index bc81259d337..417e7328486 100644
--- a/security/adoc/modules/ROOT/pages/about.adoc
+++ b/security/adoc/modules/ROOT/pages/about.adoc
@@ -34,7 +34,7 @@ include::security:spring:partial$module-nav.adoc[]
In addition to the security SPI implementations, there are a number of security-related extensions:
* The xref:security:spring-oauth2:about.adoc[Spring OAuth2] extension configures the xref:security:spring:about.adoc[Spring authenticator] for OAuth2 stores (eg gmail, facebook)
-* The xref:security:secman:about.adoc[SecMan extension] provides both an authenticator and an authorizor from domain entities (users, roles and permission entities) using either xref:pjpa:ROOT:about.adoc[JPA] or xref:pjdo:ROOT:about.adoc[JDO].
+* The xref:security:secman:about.adoc[SecMan extension] provides both an authenticator and an authorizor from domain entities (users, roles and permission entities) using xref:pjpa:ROOT:about.adoc[JPA/EclipseLink].
+
As these users, roles and permissions are domain objects, they can be administered through Apache Causeway itself.
diff --git a/testing/archtestsupport/adoc/modules/archtestsupport/pages/about.adoc b/testing/archtestsupport/adoc/modules/archtestsupport/pages/about.adoc
index 0956758e16a..7eeb6b84d46 100644
--- a/testing/archtestsupport/adoc/modules/archtestsupport/pages/about.adoc
+++ b/testing/archtestsupport/adoc/modules/archtestsupport/pages/about.adoc
@@ -176,7 +176,7 @@ None of these rules take any arguments, so simply include (as a static field) th
== Entity Checks
-Entity rule checks are provided for both xref:pjpa::about.adoc[] and xref:pjdo::about.adoc[], in `ArchitectureJpaRules` and `ArchitectureJdoRules` respectively:
+Entity rule checks are provided for xref:pjpa::about.adoc[JPA/EclipseLink] in the `ArchitectureJpaRules` class:
* Strongly Recommended
@@ -191,7 +191,6 @@ Required in almost all cases:
Required to allow JAXB view models to transparently reference entities:
*** `every_jpa_Entity_must_be_annotated_with_XmlJavaAdapter_of_PersistentEntityAdapter()`
-*** `every_jdo_PersistenceCapable_must_be_annotated_as_XmlJavaAdapter_PersistentEntityAdapter()`
** ensure JPA entity defines a surrogate key:
+
@@ -199,13 +198,6 @@ Enforces a very common convention for JPA entities:
*** `every_jpa_Entity_must_have_an_id_field()`
-** ensure JDO entity's logicalTypeName matches its discriminator (if any)
-+
-Both the logical type name and the `@Discriminator` for subclasses are a unique identifier of a type; this rule says they should be the same value.
-
-*** `every_logicalTypeName_and_jdo_discriminator_must_be_same()`
-
-
* Recommended
** encourage entities be organised into schemas:
@@ -213,7 +205,6 @@ Both the logical type name and the `@Discriminator` for subclasses are a unique
for teams adopting a "(micro) service-oriented" mindset:
*** `every_jpa_Entity_must_be_annotated_as_Table_with_schema()`
-*** `every_jdo_PersistenceCapable_must_have_schema()`
** ensure JPA enum fields are persisted as strings:
@@ -228,14 +219,12 @@ For teams that prefer to query the database with enum values persisted as string
For teams that like to use `SortedSet` for parented collections, and rely on the entity to render itself in a "sensible" order:
*** `every_jpa_Entity_must_implement_Comparable()`
-*** `every_jdo_PersistenceCapable_must_implement_Comparable()`
** ensure entities have a unique business key:
+
For teams that insist on business keys in addition to surrogate keys
*** `every_jpa_Entity_must_be_annotated_as_Table_with_uniqueConstraints()`
-*** `every_jdo_PersistenceCapable_must_be_annotated_as_Uniques_or_Unique()`
* Optional
@@ -244,27 +233,18 @@ For teams that insist on business keys in addition to surrogate keys
For teams that like to emphasise entities vs view models:
*** `every_jpa_Entity_must_be_annotated_with_DomainObject_nature_of_ENTITY()`
-*** `every_jdo_PersistenceCapable_must_be_annotated_with_DomainObject_nature_of_ENTITY`
-
-** ensure if JDO entity has a surrogate key then its annotations are consistent:
-+
-For teams that like to be explicit about the use of surrogate keys:
-
-*** `every_jdo_PersistenceCapable_with_DATASTORE_identityType_must_be_annotated_as_DataStoreIdentity()`
** enable injected fields in entities:
+
For teams that use type-safe queries (and want to ensure that services do not appear superfluously as fields in the "QXxx" classes):
*** `every_injected_field_of_jpa_Entity_must_be_annotated_with_Transient()`
-*** `every_injected_field_of_jdo_PersistenceCapable_must_be_annotated_with_NotPersistent()`
** encourage optimistic locking:
+
For teams that prefer optimistic locking as a standard everywhere:
*** `every_jpa_Entity_must_have_a_version_field()`
-*** `every_jdo_PersistenceCapable_must_be_annotated_with_Version()`
** encourage static factory methods for entities:
+
diff --git a/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc b/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
index 6f42bf2e3ad..a690df7214d 100644
--- a/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
+++ b/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
@@ -78,17 +78,16 @@ In addition, in the webapp module of your application, add the following depende
</dependency>
----
-* and for persistence:
+* and for persistence (using the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism):
+
[source,xml]
.pom.xml
----
<dependency>
<groupId>org.apache.causeway.valuetypes</groupId>
- <artifactId>causeway-valuetypes-asciidoc-xxx</artifactId> <!--.-->
+ <artifactId>causeway-valuetypes-asciidoc-jpa</artifactId>
</dependency>
----
-<.> where `xxx` is `jpa` (if using xref:pjpa::about.adoc[]) or `jdo` (if using xref:pjdo::about.adoc[]).
And in your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the extension's implementation module:
@@ -98,13 +97,12 @@ And in your application's xref:userguide::modules.adoc#appmanifest[App Manifest]
@Configuration
@Import({
CausewayModuleValAsciidocUiWkt.class,
- CausewayModuleValAsciidocPersistenceXxx.class, <!--.-->
- ...
+ CausewayModuleValAsciidocPersistenceJpa.class,
+ // ...
})
public class AppManifest {
}
----
-<.> where `Xxx` is `Jpa` (if using xref:pjpa::about.adoc[]) or `Jdo` (if using xref:pjdo::about.adoc[]).
== Usage
diff --git a/valuetypes/markdown/adoc/modules/markdown/pages/about.adoc b/valuetypes/markdown/adoc/modules/markdown/pages/about.adoc
index 7cd99e8fc7d..05ef2828ea1 100644
--- a/valuetypes/markdown/adoc/modules/markdown/pages/about.adoc
+++ b/valuetypes/markdown/adoc/modules/markdown/pages/about.adoc
@@ -78,17 +78,16 @@ In addition, in the webapp module of your application, add the following depende
</dependency>
----
-* and for persistence:
+* and for persistence, using the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism:
+
[source,xml]
.pom.xml
----
<dependency>
<groupId>org.apache.causeway.valuetypes</groupId>
- <artifactId>causeway-valuetypes-markdown-persistence-xxx</artifactId> <!--.-->
+ <artifactId>causeway-valuetypes-markdown-persistence-jpa</artifactId>
</dependency>
----
-<.> where `xxx` is `jpa` (if using xref:pjpa::about.adoc[]) or `jdo` (if using xref:pjdo::about.adoc[]).
And in your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the extension's implementation module:
@@ -98,14 +97,12 @@ And in your application's xref:userguide::modules.adoc#appmanifest[App Manifest]
@Configuration
@Import({
CausewayModuleValMarkdownUiWkt.class,
- CausewayModuleValMarkdownMetaModel.class,
-
- ...
+ CausewayModuleValMarkdownPersistenceJpa.class,
+ // ...
})
public class AppManifest {
}
----
-<.> where `Xxx` is `Jpa` (if using xref:pjpa::about.adoc[]) or `Jdo` (if using xref:pjdo::about.adoc[]).
== Usage
diff --git a/valuetypes/vega/adoc/modules/vega/pages/about.adoc b/valuetypes/vega/adoc/modules/vega/pages/about.adoc
index 4740ed36a91..3e8abd113f0 100644
--- a/valuetypes/vega/adoc/modules/vega/pages/about.adoc
+++ b/valuetypes/vega/adoc/modules/vega/pages/about.adoc
@@ -79,17 +79,16 @@ In addition, in the webapp module of your application, add the following depende
</dependency>
----
-* and for persistence:
+* and for persistence, using the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] persistence mechanism:
+
[source,xml]
.pom.xml
----
<dependency>
<groupId>org.apache.causeway.valuetypes</groupId>
- <artifactId>causeway-valuetypes-vega-xxx</artifactId> <!--.-->
+ <artifactId>causeway-valuetypes-vega-jpa</artifactId>
</dependency>
----
-<.> where `xxx` is `jpa` (if using xref:pjpa::about.adoc[]) or `jdo` (if using xref:pjdo::about.adoc[]).
And in your application's xref:userguide::modules.adoc#appmanifest[App Manifest], import the extension's implementation module:
@@ -99,13 +98,12 @@ And in your application's xref:userguide::modules.adoc#appmanifest[App Manifest]
@Configuration
@Import({
CausewayModuleValVegaUiWkt.class,
- CausewayModuleValVegaPersistenceXxx.class, <!--.-->
- ...
+ CausewayModuleValVegaPersistenceJpa.class,
+ // ...
})
public class AppManifest {
}
----
-<.> where `Xxx` is `Jpa` (if using xref:pjpa::about.adoc[]) or `Jdo` (if using xref:pjdo::about.adoc[]).
== Usage
(causeway) 34/36: CAUSEWAY-3866: reconcile two pages both listing value types
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 09f9f4dccff6b48bafbb0d44e5d9f5640baec207
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 19 11:42:46 2025 +0100
CAUSEWAY-3866: reconcile two pages both listing value types
---
.../modules/applib-classes/pages/value-types.adoc | 63 ++++++++------
.../userguide/modules/ROOT/pages/value-types.adoc | 95 +++++++++++++++-------
2 files changed, 102 insertions(+), 56 deletions(-)
diff --git a/antora/components/refguide/modules/applib-classes/pages/value-types.adoc b/antora/components/refguide/modules/applib-classes/pages/value-types.adoc
index ca6c1293db6..6736c434438 100644
--- a/antora/components/refguide/modules/applib-classes/pages/value-types.adoc
+++ b/antora/components/refguide/modules/applib-classes/pages/value-types.adoc
@@ -5,43 +5,57 @@
:page-partial:
-== Built-in
+== Built-in: JDK types
-Apache Causeway can render and persist all of the JDK primitives and wrapper classes, and a number of other JDK classes that represent value types.
+Apache Causeway can render and persist all the JDK primitives and wrapper classes, and a number of other JDK classes that represent value types.
It also supports a number of value types that are shipped by the framework itself.
In addition to primitives, the JDK Classes supported are:
-* the wrapper classes:
-
-** `java.lang.Boolean`, `java.lang.Character`, `java.lang.Double`, `java.lang.Float`, `java.lang.Long`, `java.lang.Integer`, `java.lang.Short`, `java.lang.Byte`
+* the wrapper classes (in `java.lang`)
++
+`Integer`, `Long`, `Short`, `Byte`, `Character`, `Float`, `Double`, `Boolean`
-* strings and similar: classes:
+* strings and similar:
** `java.lang.String`
** any enum (subtype of `java.lang.Enum`)
-* numeric data types:
+* numeric data types for arbitrary accuracy:
-** `java.math.BigDecimal`
-** `java.math.BigInteger`
+** `java.math.BigDecimal` and `java.math.BigInteger`
++
+These can be combined with `@Digits` to specify scale.
-* date types:
+== Built-in: JDK Dates
-** `java.sql.Date`
-** `java.sql.Time`
-** `java.sql.Timestamp`
-** `java.util.Date`
+Dates are also supported of course, though there are lots of options:
-* JDK 8 datetime types:
+* in the `java.time` package; these are the most modern and generally is to be preferred:
-** `java.time.LocalDate`
-** `java.time.LocalTime`
-** `java.time.LocalDateTime`
-** `java.time.OffsetDateTime`
-** `java.time.OffsetTime`
-** `java.time.ZonedDateTime`
+** local times (no time zone):
++
+`java.time.LocalDate,` `java.time.LocalTime`, `java.time.LocalDateTime`
+
+** for storing date/time, with respect to the UTC:
++
+`java.time.OffsetDateTime`, `java.time.OffsetTime`
+
+** primarily for _displaying_ time in a specified time zone:
++
+`java.time.ZonedDateTime`
+
+* in the `java.util` package (usage is discouraged since these classes are not immutable):
++
+`java.util.Date`
+
+* in the `java.sql` package:
++
+`java.sql.Date,` `java.sql.Timestamp`, `java.sql.Time`
+
+
+== Built-in: Other JDK types
* miscellaneous:
@@ -56,9 +70,6 @@ In addition to primitives, the JDK Classes supported are:
The framework also defines a number of custom value types:
-
-
-
* xref:refguide:applib:index/value/Blob.adoc[Blob]
* xref:refguide:applib:index/value/Clob.adoc[Clob]
* xref:refguide:applib:index/value/Markup.adoc[Markup]
@@ -80,7 +91,7 @@ This is therefore a way to redirect to a custom controller.
* xref:refguide:applib:index/graph/tree/TreePath.adoc[TreePath] and xref:refguide:applib:index/graph/tree/TreeNode.adoc[TreeNode]
+
-These can be used to render filesystem structures and similar
+These can be used to render tree structures.
In addition, there are a number of non-core value types that can be brought in individually:
@@ -119,4 +130,4 @@ The xref:refguide:schema:about.adoc[] of XSDs define a number of DTOs (persisted
== Custom value types
It is also possible to write your own value types, either scalar or composite.
-For more on this topic, see xref:userguide:ROOT:value-types.adoc[value types] topic in the user guide.
+For more on this topic, see xref:userguide:ROOT:value-types.adoc#custom-value-types[custom value types] topic in the user guide.
diff --git a/antora/components/userguide/modules/ROOT/pages/value-types.adoc b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
index a9c9efa6c8c..504ae39451a 100644
--- a/antora/components/userguide/modules/ROOT/pages/value-types.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
@@ -58,46 +58,29 @@ A JAXB view model would require `@XmlJavaTypeAdapter(JavaTimeJaxbAdapters.LocalD
In the following sections we look at the other datatypes that you can use as the value types, and then we look at defining custom types.
[#jdk-types]
-== JDK types
+== Built-in: JDK types
-The most common value types to use are those built-into JDK.
-None of the following require additional annotations when used in entities or view models:
+Apache Causeway can render and persist all the JDK primitives and wrapper classes, and a number of other JDK classes that represent value types.
-* primitives
-+
-`int`, `long`, `short`, `byte`, `char`, `float`, `double`, `boolean`
+In addition to primitives, the JDK Classes supported are:
-* wrappers
+* the wrapper classes (in `java.lang`)
+
`Integer`, `Long`, `Short`, `Byte`, `Character`, `Float`, `Double`, `Boolean`
-* `java.lang.String`
-
-* `java.math.BigInteger` and `java.math.BigDecimal`
-+
-for arbitrary accuracy.
-These can be combined with `@Digits` to specify scale.
-
-* `java.util.UUID`
+* strings and similar:
-These are also a couple of value types that have special properties when rendered:
+** `java.lang.String`
+** any enum (subtype of `java.lang.Enum`)
-* `java.net.URL`
-+
-Essentially a string, but will render as a hyperlink that the end-user can click
+* numeric data types for arbitrary accuracy:
-* `java.awt.image.BufferedImage`
-+
-In essence a byte array containing a `.png` or similar.
-Note though that properties if this type must be read-only.
+** `java.math.BigDecimal` and `java.math.BigInteger`
+
-[source,java]
-----
-val bytes = _Bytes.of(_Resources.load(getClass(), "spring-boot-logo.png" ));
-return javax.imageio.ImageIO.read(new ByteArrayInputStream(bytes));
-----
+for arbitrary accuracy.
+These can be combined with `@Digits` to specify scale.
-== Dates
+== Built-in: JDK Dates
Dates are also supported of course, though there are lots of options:
@@ -138,8 +121,36 @@ Depending on context, additional entities may be required on the property's fiel
This tells JAXB how to serialize the value in and out of XML.
Apache Causeway provides adapters for all of these.
+
+== Built-in: Other JDK types
+
+These are also a couple of value types that have special properties when rendered:
+
+* `java.util.UUID`
++
+Essentially a string with a particular format.
+
+* `java.util.Locale`
+
+* `java.net.URL`
++
+Renders as a hyperlink that the end-user can click
+
+* `java.awt.image.BufferedImage`
++
+In essence a byte array containing a `.png` or similar.
+Note though that properties if this type must be read-only.
++
+[source,java]
+----
+val bytes = _Bytes.of(_Resources.load(getClass(), "spring-boot-logo.png" ));
+return javax.imageio.ImageIO.read(new ByteArrayInputStream(bytes));
+----
+
+
Apache Causeway defines a number of its own custom value types, described next.
+
[#causeway-specific]
== Causeway-specific
@@ -177,7 +188,14 @@ There are several such built-in resources that can be useful in a development/pr
** `/db/` - the H2 database console
+
-You could of course also define additional resources for your own requirements.
+You can also use this as a way to redirect to a custom controller.
+
+* xref:refguide:applib:index/graph/tree/TreePath.adoc[TreePath] and xref:refguide:applib:index/graph/tree/TreeNode.adoc[TreeNode]
++
+These can be used to render tree structures.
+
+
+== Value type catalogue (extensions)
The above value types are part of the core framework.
There are also several value types that are packaged as extensions in the xref:valuetypes::about.adoc[Value Types Catalog]:
@@ -195,6 +213,23 @@ This renders Markdown content (as defined by the link:https://spec.commonmark.or
This renders graphics defined by the link:https://vega.github.io/vega-lite/[Vega-Lite] grammar.
+== Internal value types
+
+The core framework also defines a number of value types whose use is primarily internal:
+
+* xref:refguide:applib:index/services/bookmark/Bookmark.adoc[Bookmark]
+* anything supported by xref:refguide:applib:index/services/bookmark/IdStringifier.adoc[IdStringifier]
++
+Used by the xref:userguide:commandlog:about.adoc[], xref:userguide:executionlog:about.adoc[], xref:userguide:executionoutbox:about.adoc[] and xref:security:sessionlog:about.adoc[] externsions modules so that their application primary keys of their corresponding entities are recognised as value types
+
+* `ApplicationFeatureIdValueSemantics`
+
+The xref:refguide:schema:about.adoc[] of XSDs define a number of DTOs (persisted by the above core extensions) which are also recognised as value types:
+
+* xref:refguide:schema:cmd.adoc[CommandDto] (and an XML pretty-render variant)
+* xref:refguide:schema:ixn.adoc[InteractionDto] (and an XML pretty-render variant)
+* xref:refguide:schema:chg.adoc[ChangesDto] (and an XML pretty-render variant)
+
[#custom-value-types]
== Custom value types
(causeway) 35/36: CAUSEWAY-3866: removes reference to JScience
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 04a22bef8f46d6d3f43b379495e12980e76e0663
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 19 11:43:45 2025 +0100
CAUSEWAY-3866: removes reference to JScience
---
.../userguide/modules/ROOT/pages/value-types.adoc | 37 ----------------------
1 file changed, 37 deletions(-)
diff --git a/antora/components/userguide/modules/ROOT/pages/value-types.adoc b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
index 504ae39451a..c3f08c49783 100644
--- a/antora/components/userguide/modules/ROOT/pages/value-types.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/value-types.adoc
@@ -599,40 +599,3 @@ If using within the database then you will also need to map the custom type to t
If using the xref:pjpa::about.adoc[JPA/EclipseLink] object store, use `@Embedded` and `@Embeddable`; see for example link:https://www.baeldung.com/jpa-embedded-embeddable[this baeldung post] on the topic.
-
-
-// == 3rd party library
-//
-// TODO: show JScience temperature, say.
-
-// import javax.measure.Quantity;
-// import javax.measure.quantity.Temperature;
-// import tech.units.indriya.quantity.Quantities;
-// import tech.units.indriya.unit.Units;
-//
-// public class TemperatureConversionExample {
-// public static void main(String[] args) {
-// // Create a Quantity representing a temperature of 25 degrees Celsius
-// Quantity<Temperature> celsius = Quantities.getQuantity(25, Units.CELSIUS);
-//
-// // Convert Celsius to Fahrenheit
-// Quantity<Temperature> fahrenheit = celsius.to(Units.FAHRENHEIT);
-// System.out.println("Temperature in Fahrenheit: " + fahrenheit);
-//
-// // Convert Celsius to Kelvin
-// Quantity<Temperature> kelvin = celsius.to(Units.KELVIN);
-// System.out.println("Temperature in Kelvin: " + kelvin);
-//
-// // Create a Quantity representing a temperature of 68 degrees Fahrenheit
-// Quantity<Temperature> fahrenheit2 = Quantities.getQuantity(68, Units.FAHRENHEIT);
-//
-// // Convert Fahrenheit to Celsius
-// Quantity<Temperature> celsius2 = fahrenheit2.to(Units.CELSIUS);
-// System.out.println("Temperature in Celsius: " + celsius2);
-//
-// // Convert Fahrenheit to Kelvin
-// Quantity<Temperature> kelvin2 = fahrenheit2.to(Units.KELVIN);
-// System.out.println("Temperature in Kelvin: " + kelvin2);
-// }
-// }
-
(causeway) 08/36: CAUSEWAY-3866: removes more jdo references
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 1dab47595f37d089f99e3c0a2b603ed77ef44faa
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 11:35:47 2025 +0100
CAUSEWAY-3866: removes more jdo references
---
.../applib/pages/index/annotation/Optionality.adoc | 2 +-
.../hooks/Property_010-examples-and-usage.adoc | 17 +-
.../annotation/hooks/Property_021-optionality.adoc | 39 +-
.../refguide/modules/applib-ant/pages/Column.adoc | 121 +++---
.../2.0.0-M1/mignotes/removed-annotations.adoc | 2 +-
.../eclipse/attachments/causeway-templates.xml | 465 ---------------------
.../eclipse/attachments/jmock2-templates.xml | 43 --
.../eclipse/attachments/junit4-templates.xml | 36 --
.../images/2017-oxygen/010-lombok-locate-jar.png | Bin 71407 -> 0 bytes
.../020-lombok-install-into-eclipse.png | Bin 41747 -> 0 bytes
.../030-datanucleus-install-new-software.png | Bin 60520 -> 0 bytes
.../040-datanucleus-specify-repository.png | Bin 8783 -> 0 bytes
.../2017-oxygen/050-datanucleus-select-plugin.png | Bin 34002 -> 0 bytes
.../060-enable-annotation-processor.png | Bin 31017 -> 0 bytes
.../setupguide/modules/eclipse/pages/about.adoc | 204 +--------
.../modules/ROOT/partials/domain-entities/jpa.adoc | 21 +-
.../ROOT/partials/meta-annotations/progmodel.adoc | 15 +-
.../collections.adoc | 59 ++-
.../properties-collections-actions/properties.adoc | 8 +-
.../ROOT/partials/the-theory/metamodel.adoc | 2 +-
.../causeway/applib/annotation/Optionality.java | 4 +-
.../demoapp/todomodule/dom/ExcelDemoToDoItem.java | 15 -
.../adoc/modules/asciidoc/pages/about.adoc | 12 -
.../adoc/modules/markdown/pages/about.adoc | 14 +-
valuetypes/vega/adoc/modules/vega/pages/about.adoc | 12 -
25 files changed, 173 insertions(+), 918 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
index eb284915b95..7986afc8f93 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
@@ -45,7 +45,7 @@ Ignore the value provided by this annotation (meaning that the framework will ke
Default, usually meaning mandatory for properties and always meaning mandatory for parameters.
-For properties, will be false unless JDO `javax.jdo.annotations.Column` has also specified with `javax.jdo.annotations.Column#allowsNull()` set to `true` .
+For properties, will be false unless JPA `jakarta.persistence.Column#nullable()` is set to `true` .
[#OPTIONAL]
=== OPTIONAL
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_010-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_010-examples-and-usage.adoc
index 0d397c414fd..d4c030ba4aa 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_010-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_010-examples-and-usage.adoc
@@ -8,27 +8,30 @@ For example:
[source,java]
----
+import jakarta.persistence.Column;
+
@DomainObject
public class Customer {
public static class EmailSpecification extends AbstractSpecification<String> {
public String satisfiesSafely(String proposed) {
- return EmailUtil.ensureValidEmail(proposed); // <1>
+ return EmailUtil.ensureValidEmail(proposed); // <.>
}
}
- @javax.jdo.annotations.Column(allowsNull="true") // <2>
+ @@Column(nullable=true) // <.>
@Property(
maxLength=30,
mustSatisfy=EmailSpecification.class,
regexPattern = "(\\w+\\.)*\\w+@(\\w+\\.)+[A-Za-z]+",
regexPatternFlags=Pattern.CASE_INSENSITIVE
)
- public String getEmailAddress() { /* ... */ }
- public void setEmailAddress(String emailAddress) { /* ... */ }
- ...
+ @Getter @Setter
+ private String emailAddress;
+
+ // ...
}
----
-<1> the (fictitious) `EmailUtil.ensureValid(...)` (omitted for brevity) returns a string explaining if an email is invalid
-<2> generally use instead of the `@Property#optionality` attribute
+<.> the (fictitious) `EmailUtil.ensureValid(...)` (omitted for brevity) returns a string explaining if an email is invalid
+<.> generally use instead of the `@Property#optionality` attribute
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
index 3437b101268..baff5b7898c 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/hooks/Property_021-optionality.adoc
@@ -18,12 +18,13 @@ For example:
[source,java]
----
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
public class Customer {
- @javax.jdo.annotations.Column(allowsNull="true")
+ @Column(nullable=true)
@Getter @Setter
private String middleInitial;
@@ -41,30 +42,37 @@ Specifically, Causeway always assumes properties are mandatory, whereas JDO spec
When Apache Causeway initializes it checks for these mismatches during its metamodel validation phase, and will fail to boot ("fail-fast") if there is a mismatch.
The fix is usually to add the `@Column#nullable()` annotation/attribute.
-== Superclass inheritance type
+== 'Single table' inheritance type
There is one case (at least) it may be necessary to annotate the property with both `@Column#nullable` and also `@Property#optionality()`.
-If the property is logically mandatory and is in a subclass, but the mapping of the class hierarchy is to store both the superclass and subclass(es) into a single table (ie a "roll-up" mapping using `javax.jdo.annotations.InheritanceStrategy#SUPERCLASS_TABLE`), then JDO requires that the property is annotated as `@Column#nullable=true`: its value will be not defined for other subclasses.
+If the property is logically mandatory and is in a subclass, but the mapping of the class hierarchy is to store both the superclass and subclass(es) into a single table (ie a "roll-up" mapping using `jakarta.persistence.InheritanceType#SINGLE_TABLE`), then JDO requires that the property is annotated as `@Column#nullable=true`: its value will be not defined for other subclasses.
In this case we therefore require both annotations.
[source,java]
----
-@javax.jdo.annotations.PersistenceCapable
-@javax.jdo.annotations.Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Inheritance;
+import jakarta.persistence.InheritanceType;
+
+@Entity
+@Inheritance(type = InheritanceType.SINGLE_TABLE)
public abstract class PaymentMethod {
...
}
-@javax.jdo.annotations.PersistenceCapable
-@javax.jdo.annotations.Inheritance(strategy = InheritanceStrategy.SUPERCLASS_TABLE)
+
+@Entity
+@Inheritance(type = InheritanceType.SINGLE_TABLE)
public class CreditCardPaymentMethod extends PaymentMethod {
private String cardNumber;
- @javax.jdo.annotations.Column(allowsNull="true")
+ @Column(nullable=true)
@Property(optionality=Optionality.MANDATORY)
- public String getCardNumber() { return this.cardNumber; }
- public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; }
- ...
+ @Getter @Setter
+ private String cardNumber;
+
+ // ...
}
----
@@ -72,8 +80,13 @@ Alternatively, you could rely on the fact that Apache Causeway never looks at fi
[source,java]
----
-@javax.jdo.annotations.PersistenceCapable
-@javax.jdo.annotations.Inheritance(strategy = InheritanceStrategy.SUPERCLASS_TABLE)
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Inheritance;
+import jakarta.persistence.InheritanceType;
+
+@Entity
+@Inheritance(type = InheritanceType.SINGLE_TABLE)
public class CreditCardPaymentMethod extends PaymentMethod {
@javax.jdo.annotations.Column(allowsNull="true")
diff --git a/antora/components/refguide/modules/applib-ant/pages/Column.adoc b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
index f04ab36ad42..40103bb7000 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Column.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Column.adoc
@@ -19,17 +19,23 @@ This section identifies which attributes of `@Column` are recognized and used by
[#nullability]
== Nullability
-ñ
-The `allowsNull` attribute is used to specify if a property is mandatory or is optional.
+
+The `nullable` attribute is used to specify if a property is mandatory or is optional.
For example:
[source,java]
----
+import jakarta.persistence.Column;
+
public class Customer {
- @jakarta.persistence.Column(nullable=true˜)
- public String getMiddleInitial() { /* ... */ }
- public void setMiddleInitial(String middleInitial) { /* ... */ }
+
+ @Column(nullable=true)
+ @Getter @Setter
+ private String middleInitial;
+
+ // ...
+}
----
Causeway also provides xref:refguide:applib:index/annotation/Property.adoc#optionality[@Property#optionality] attribute.
@@ -52,18 +58,27 @@ For example:
[source,java]
----
+import jakarta.persistence.Column;
+
public class Customer {
- @javax.jdo.annotations.Column(length=20)
- public String getFirstName() { /* ... */ }
- public void setFirstName(String firstName) { /* ... */ }
- @javax.jdo.annotations.Column(allowsNull="true", length=1)
- public String getMiddleInitial() { /* ... */ }
- public void setMiddleInitial(String middleInitial) { /* ... */ }
- @javax.jdo.annotations.Column(length=30)
- public String getLastName() { /* ... */ }
- public void setLastName(String lastName) { /* ... */ }
+
+ @Column(length=20)
+ @Getter @Setter
+ private String firstName;
+
+ @Column(length=1, nullable=true)
+ @Getter @Setter
+ private String middleInitial;
+
+ @Column(length=30)
+ @Getter @Setter
+ private String lastName;
+
+ // ...
+}
----
+
Apache Causeway also provides xref:refguide:applib:index/annotation/Property.adoc#maxLength[@Property#maxLength] attribute.
If both are specified, Apache Causeway will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.
@@ -97,60 +112,72 @@ Unlike the sections above, the attributes specified in these hints and tips aren
The `name` attribute can be used to override the name of the column.
References to other objects are generally mapped as foreign key columns.
-If there are multiple references to a given type, then you will want to override the name that JDO/DataNucleus would otherwise default.
+If there are multiple references to a given type, then you will want to override the name that xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] would otherwise default.
For example:
[source,java]
----
+import jakarta.persistence.Column;
+
public class PartyRelationship {
- @Column(name = "fromPartyId", allowsNull = "false")
- public Party getFrom() { /* ... */ }
- public void setFrom(Party from) { /* ... */ }
- @Column(name = "toPartyId", allowsNull = "false")
- public Party getTo() { /* ... */ }
- public void setTo(Party to) { /* ... */ }
- ...
+
+ @Column(name = "fromPartyId", nullable = false)
+ @Getter @Setter
+ private Party from;
+
+ @Column(name = "toPartyId", nullable = false)
+ @Getter @Setter
+ private Party to;
+
+ // ...
}
----
=== Mapping ``Blob``s and ``Clob``s
-Causeway provides custom value types for xref:refguide:applib:index/value/Blob.adoc[Blob]s and xref:refguide:applib:index/value/Clob.adoc[Clob]s.
-These value types have multiple internal fields, meaning that they corresponding to multiple columns in the database.
-Mapping this correctly requires using `@Column` within JDO's `@Persistent` annotation.
+Causeway provides utility classes to help map xref:refguide:applib:index/value/Blob.adoc[Blob]s and xref:refguide:applib:index/value/Clob.adoc[Clob]s.
For example, here's how to map a `Blob`:
[source,java]
----
-private Blob attachment;
-@javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
- @javax.jdo.annotations.Column(name = "attachment_name"),
- @javax.jdo.annotations.Column(name = "attachment_mimetype"),
- @javax.jdo.annotations.Column(name = "attachment_bytes", jdbcType = "BLOB", sqlType = "LONGVARBINARY")
+@AttributeOverrides({
+ @AttributeOverride(name="name", column=@Column(name="attachment_name")),
+ @AttributeOverride(name="mimeType",column=@Column(name="attachment_mimeType")),
+ @AttributeOverride(name="bytes", column=@Column(name="attachment_bytes"))
})
-@Property(
- domainEvent = AttachmentDomainEvent.class,
- optionality = Optionality.OPTIONAL
-)
-public Blob getAttachment() { /* ... */ }
-public void setAttachment(Blob attachment) { /* ... */ }
+@Embedded
+private BlobJpaEmbeddable attachment;
+
+@Property()
+@PropertyLayout()
+public Blob getPdf() {
+ return BlobJpaEmbeddable.toBlob(pdf);
+}
+public void setPdf(final Blob pdf) {
+ this.pdf = BlobJpaEmbeddable.fromBlob(pdf);
+}
----
-And here's how to map a `Clob` (also taken from the todoapp):
+And here's how to map a `Clob`:
[source,java]
----
-private Clob doc;
-@javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
- @javax.jdo.annotations.Column(name = "doc_name"),
- @javax.jdo.annotations.Column(name = "doc_mimetype"),
- @javax.jdo.annotations.Column(name = "doc_chars", jdbcType = "CLOB", sqlType = "LONGVARCHAR")
+@AttributeOverrides({
+ @AttributeOverride(name="name", column=@Column(name="doc_name")),
+ @AttributeOverride(name="mimeType",column=@Column(name="doc_mimeType")),
+ @AttributeOverride(name="bytes", column=@Column(name="doc_bytes"))
})
-@Property(
- optionality = Optionality.OPTIONAL
-)
-public Clob getDoc() { /* ... */ }
-public void setDoc(final Clob doc) { /* ... */ }
+@Getter @Setter
+private ClobJpaEmbeddable doc;
+
+@Property()
+@PropertyLayout()
+public Clob getDoc() {
+ return ClobJpaEmbeddable.toClob(doc);
+}
+public void setDoc(final Clob doc) {
+ this.doc = ClobJpaEmbeddable.fromClob(doc);
+}
----
diff --git a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
index 10b95aeba54..a21cd2fd89d 100644
--- a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
+++ b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
@@ -139,7 +139,7 @@ Similarly, the `Bulk.InteractionContext` domain service is replaced with the lin
|
|Either link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Property_optionality[@Property#optionality()] or link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Parameter_optionality[@Parameter#optionality()].
-For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Column_allowsNull[@Column#nullable()]
+For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Column_allowsNull[@Column#allowsNull()]
Can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Nullable[@Nullable] for either properties or parameters.
|`@Mask`
diff --git a/antora/components/setupguide/modules/eclipse/attachments/causeway-templates.xml b/antora/components/setupguide/modules/eclipse/attachments/causeway-templates.xml
deleted file mode 100644
index 5316c749102..00000000000
--- a/antora/components/setupguide/modules/eclipse/attachments/causeway-templates.xml
+++ /dev/null
@@ -1,465 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<templates><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Action" enabled="true" name="isa">// {{ ${actionName} (action)
-${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")
-public ${ReturnType} ${actionName}(final ${ParameterType} ${parameterType}) {
- return ${cursor}null; // TODO: business logic here
-}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Action argument N choices" enabled="true" name="isacho">${:import(java.util.Collections,java.util.List)}public List<${ParameterType}> choices${ParameterNumThenCapitalizedActionName}() {
- return ${cursor}Collections.emptyList(); // TODO: return list of choices for argument N
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Action argument defaults" enabled="true" name="isadef">public ${ParameterType} default${ParameterNumThenCapitalizedActionName}() {
- return ${cursor}null; // TODO: return default for argument N
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Action disabling" enabled="true" name="isadis">public String disable${ActionName}() {
- return ${cursor}null; // TODO: return reason why action disabled, null if enabled
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Action hiding" enabled="true" name="isahid">public boolean hide${ActionName}() {
- return ${cursor}false; // TODO: return true if action is hidden, false if visible
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Action validation" enabled="true" name="isaval">public String validate${ActionName}(final ${ParameterType} ${parameterType}) {
- return ${cursor}null; // TODO: return reason why action arguments are invalid, null if ok
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection (1:m bidir parent)" enabled="true" name="isc-1m">public void addTo${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {
- // check for no-op
- if (${childElementName} == null ||
- get${ChildCollectionName}().contains(${childElementName})) {
- return;
- }
- // dissociate arg from its current parent (if any).
- ${childElementName}.clear${ParentPropertyNameInChild}();
- // associate arg
- ${childElementName}.set${ParentPropertyNameInChild}(this);
- get${ChildCollectionName}().add(${childElementName});
- // additional business logic
- onAddTo${ChildCollectionName}(${childElementName});
-}
-public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {
- // check for no-op
- if (${childElementName} == null ||
- !get${ChildCollectionName}().contains(${childElementName})) {
- return;
- }
- // dissociate arg
- ${childElementName}.set${ParentPropertyNameInChild}(null);
- get${ChildCollectionName}().remove(${childElementName});
- // additional business logic
- onRemoveFrom${ChildCollectionName}(${childElementName});
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection (m:m bidir child)" enabled="true" name="isc-mmc">public void addTo${ParentCollectionName}(final ${ParentElementType} ${parentElementName}) {
- // check for no-op
- if (${parentElementName} == null ||
- get${ParentCollectionName}().contains(${parentElementName})) {
- return;
- }
- // delegate to parent to add
- ${parentElementName}.addTo${ChildCollectionNameInParent}(this);
- // additional business logic
- onAddTo${ParentCollectionName}(${parentElementName});
-}
-public void removeFrom${ParentCollectionName}(final ${ParentElementType} ${parentElementName}) {
- // check for no-op
- if (${parentElementName} == null ||
- !get${ParentCollectionName}().contains(${parentElementName})) {
- return;
- }
- // delegate to parent to remove
- ${parentElementName}.removeFrom${ChildCollectionNameInParent}(this);
- // additional business logic
- onRemoveFrom${ParentCollectionName}(${parentElementName});
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection (m:m bidir parent)" enabled="true" name="isc-mmp">public void addTo${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {
- // check for no-op
- if (${childElementName} == null ||
- get${ChildCollectionName}().contains(${childElementName})) {
- return;
- }
- // dissociate arg from its current parent (if any).
- ${childElementName}.removeFrom${ParentCollectionNameInChild}(this);
- // associate arg
- ${childElementName}.get${ParentCollectionNameInChild}().add(this);
- get${ChildCollectionName}().add(${childElementName});
- // additional business logic
- onAddTo${ChildCollectionName}(${childElementName});
-}
-public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {
- // check for no-op
- if (${childElementName} == null ||
- !get${ChildCollectionName}().contains(${childElementName})) {
- return;
- }
- // dissociate arg
- ${childElementName}.get${ParentCollectionNameInChild}().remove(this);
- get${ChildCollectionName}().remove(${childElementName});
- // additional business logic
- onRemoveFrom${ChildCollectionName}(${childElementName});
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection disabling" enabled="true" name="iscdis">public String disable${CollectionName}() {
- return ${cursor}null; // TODO: return reason why collection read-only, null if editable
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection hiding" enabled="true" name="ischid">public boolean hide${CollectionName}() {
- return ${cursor}false; // TODO: return true if hidden, false otherwise
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection (list)" enabled="true" name="iscl">// {{ ${CollectionName} (Collection)
-${:import(java.util.List,java.util.ArrayList,org.apache.isis.applib.annotation.MemberOrder)}private List<${ElementType}> ${collectionName} = new ArrayList<${ElementType}>();
-@MemberOrder(sequence="1")
-public List<${ElementType}> get${CollectionName}() {
- return ${collectionName};
-}
-public void set${CollectionName}(final List<${ElementType}> ${collectionName}) {
- this.${collectionName} = ${collectionName};
-}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection modify" enabled="true" name="iscmod">public void addTo${CollectionName}(final ${ElementType} ${elementName}) {
- // check for no-op
- if (${elementName} == null ||
- get${CollectionName}().contains(${elementName})) {
- return;
- }
- // associate new
- get${CollectionName}().add(${elementName});
- // additional business logic
- onAddTo${CollectionName}(${elementName});
-}
-public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {
- // check for no-op
- if (${elementName} == null ||
- !get${CollectionName}().contains(${elementName})) {
- return;
- }
- // dissociate existing
- get${CollectionName}().remove(${elementName});
- // additional business logic
- onRemoveFrom${CollectionName}(${elementName});
-}
-protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {
-}
-protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection (set)" enabled="true" name="iscs">// {{ ${CollectionName} (Collection)
-${:import(java.util.Set,java.util.LinkedHashSet,org.apache.isis.applib.annotation.MemberOrder)}private Set<${ElementType}> ${collectionName} = new LinkedHashSet<${ElementType}>();
-@MemberOrder(sequence="1")
-public Set<${ElementType}> get${CollectionName}() {
- return ${collectionName};
-}
-public void set${CollectionName}(final Set<${ElementType}> ${collectionName}) {
- this.${collectionName} = ${collectionName};
-}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Collection validation" enabled="true" name="iscval">public String validateAddTo${CollectionName}(final ${ElementType} ${elementName}) {
- return ${cursor}null; // TODO: return reason why argument cannot be added, null if ok to add
-}
-public String validateRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {
- return null; // TODO: return reason why argument cannot be removed, null if ok to remove
-}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Dependencies region" enabled="true" name="isd">// {{ injected dependencies
-${cursor}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Dependencies - injected service" enabled="true" name="isds">// {{ injected: ${ServiceType}
-private ${ServiceType} ${serviceType};
-public void set${ServiceType}(final ${ServiceType} ${serviceType}) {
- this.${serviceType} = ${serviceType};
-}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Factory - new instance (persistent)" enabled="true" name="isfp">// {{ Create new (already persisted) ${Type}
-public ${Type} new${Type}() {
- ${Type} ${type} = newTransientInstance(${Type}.class);
- ${cursor}// TODO: set up any properties
-
- persist(${type});
- return ${type};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Factory - new instance (transient)" enabled="true" name="isft">// {{ Create new (still transient) ${Type}
-public ${Type} new${InstanceOfType}() {
- ${Type} ${type} = newTransientInstance(${Type}.class);
- ${cursor}// TODO: set up any properties
-
- return ${type};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Identification region" enabled="true" name="isid">// {{ Identification
-${cursor}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Identification - icon" enabled="true" name="isidicon">public String iconName() {
- return ${cursor}null; // TODO: return name of image file (without suffix)
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Identification - title" enabled="true" name="isidtitle">public String title() {
- ${:import(org.apache.isis.applib.util.TitleBuffer)}final TitleBuffer buf = new TitleBuffer();
- ${cursor}// TODO: append to TitleBuffer, typically value properties
- return buf.toString();
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="JDO Collection (1:n bidir, foreign key)" enabled="true" name="isjdc-1n-b-fk">// {{ ${CollectionName} (Collection)
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Persistent)}@Persistent(mappedBy="${elementNameInChild}", dependentElement="${trueOrFalse}")
-private SortedSet<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
-@MemberOrder(sequence="1")
-public SortedSet<${ElementType}> get${CollectionName}() {
-return ${collectionName};
-}
-public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
-this.${collectionName} = ${collectionName};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="JDO Collection (1:n bidir, join table)" enabled="true" name="isjdc-1n-b-jt">// {{ ${CollectionName} (Collection)
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Persitent,javax.jdo.annotations.Join)}@Persistent(mappedBy="${elementNameInChild}", dependentElement="${trueOrFalse}")
-@Join
-private SortedSet<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
-@MemberOrder(sequence="1")
-public SortedSet<${ElementType}> get${CollectionName}() {
-return ${collectionName};
-}
-public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
-this.${collectionName} = ${collectionName};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="JDO Collection (1:n unidir, foreign key)" enabled="true" name="isjdc-1n-u-fk">// {{ ${CollectionName} (Collection)
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Element)}
-@Element(column="${ColumnName}", dependent="${trueOrFalse}")
-private SortedSet<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
-@MemberOrder(sequence="1")
-public SortedSet<${ElementType}> get${CollectionName}() {
-return ${collectionName};
-}
-public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
-this.${collectionName} = ${collectionName};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="JDO Collection (1:n unidir, join table)" enabled="true" name="isjdc-1n-u-jt">// {{ ${CollectionName} (Collection)
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Join,javax.jdo.annotations.Element)}@Join
-@Element(dependent="${trueOrFalse}")
-private SortedSet<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
-@MemberOrder(sequence="1")
-public SortedSet<${ElementType}> get${CollectionName}() {
-return ${collectionName};
-}
-public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
-this.${collectionName} = ${collectionName};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="JDO Collection (m:n bidir - child)" enabled="true" name="isjdc-mn-ub-c">// {{ ${CollectionName} (Collection)
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Persistent)}@Persistent(mappedBy="${ChildCollectionNameInParent}")
-private SortedSet<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
-public SortedSet<${ElementType}> get${CollectionName}() {
-return ${collectionName};
-}
-public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
-this.${collectionName} = ${collectionName};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="JDO Collection (m:n unidir & bidir - parent)" enabled="true" name="isjdc-mn-ub-p">// {{ ${CollectionName} (Collection)
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Persistent,javax.jdo.annotations.Join,javax.jdo.annotations.Element)}@Persistent(table="${TableName}")
-@Join(column="${ThisEntityFieldName}")
-@Element(column="${RelatedEntityFieldName}")
-private SortedSet<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();@MemberOrder(sequence="1")
-
-public SortedSet<${ElementType}> get${CollectionName}() {
- return ${collectionName};
-}
-public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
- this.${collectionName} = ${collectionName};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="JDO Property (simple - 1:1 unidir & bidir - parent)" enabled="true" name="isjdp">// {{ ${PropertyName} (property)
-private ${PropertyType} ${propertyName};
-${:import(org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Column)}@MemberOrder(sequence="1")
-@Column(allowsNull="${trueOrFalse}")
-public ${PropertyType} get${PropertyName}() {
- return ${propertyName};
-}
-public void set${PropertyName}(final ${PropertyType} ${propertyName}) {
- this.${propertyName} = ${propertyName};
-}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="JDO Property (1:1 child)" enabled="true" name="isjdp-11c">// {{ ${PropertyName} (property)
-private ${PropertyType} ${propertyName};
-${:import(org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Column,javax.jdo.annotations.Persistent)}@MemberOrder(sequence="1")
-@Column(allowsNull="${trueOrFalse}")
-@Persistent(mappedBy="${fieldOnChild}")
-public ${PropertyType} get${PropertyName}() {
- return ${propertyName};
-}
-public void set${PropertyName}(final ${PropertyType} ${propertyName}) {
- this.${propertyName} = ${propertyName};
-}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Lifecycle region" enabled="true" name="isl">// {{ Lifecycle methods
-${cursor}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Lifecycle - create" enabled="true" name="islc">public void created() {
- ${cursor}// TODO: post-create
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Lifecycle - load" enabled="true" name="isll">public void loading() {
- ${cursor}// TODO: pre-load
-}
-public void loaded() {
- // TODO: post-load
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Lifecycle - persist" enabled="true" name="islp">public void persisting() {
- ${cursor}// TODO: pre-persist
-}
-public void persisted() {
- // TODO: post-persist
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Lifecycle - remove" enabled="true" name="islr">public void removing() {
- ${cursor}// TODO: pre-remove
-}
-public void removed() {
- // TODO: post-remove
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Lifecycle - update" enabled="true" name="islu">public void updating() {
- ${cursor}// TODO: pre-update
-}
-public void updated() {
- // TODO: post-update
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property" enabled="true" name="isp">// {{ ${PropertyName} (property)
-private ${PropertyType} ${propertyName};
-${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")
-public ${PropertyType} get${PropertyName}() {
- return ${propertyName};
-}
-public void set${PropertyName}(final ${PropertyType} ${propertyName}) {
- this.${propertyName} = ${propertyName};
-}
-// }}
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property (1:1 bidir child)" enabled="true" name="isp-11c">public void modify${ParentPropertyName}(final ${ParentPropertyType} ${parentPropertyName}) {
- ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
- // check for no-op
- if (${parentPropertyName} == null ||
- ${parentPropertyName}.equals(current${ParentPropertyName})) {
- return;
- }
- // delegate to parent to associate
- ${parentPropertyName}.modify${ChildPropertyNameInParent}(this);
- // additional business logic
- onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});
-}
-public void clear${PropertyName}() {
- ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
- // check for no-op
- if (current${ParentPropertyName} == null) {
- return;
- }
- // delegate to parent to dissociate
- current${ParentPropertyName}.clear${ChildPropertyNameInParent}();
- // additional business logic
- onClear${ParentPropertyName}(current${ParentPropertyName});
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property (1:1 bidir parent)" enabled="true" name="isp-11p">public void modify${ChildPropertyName}(final ${ChildPropertyType} ${childPropertyName}) {
- ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();
- // check for no-op
- if (${childPropertyName} == null ||
- ${childPropertyName}.equals(current${ChildPropertyName})) {
- return;
- }
- // dissociate existing
- clear${ChildPropertyName}();
- // associate new
- ${childPropertyName}.set${ParentPropertyNameInChild}(this);
- set${ChildPropertyName}(${childPropertyName});
- // additional business logic
- onModify${ChildPropertyName}(current${ChildPropertyName}, ${childPropertyName});
-}
-public void clear${ChildPropertyName}() {
- ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();
- // check for no-op
- if (current${ChildPropertyName} == null) {
- return;
- }
- // dissociate existing
- current${ChildPropertyName}.set${ParentPropertyNameInChild}(null);
- set${ChildPropertyName}(null);
- // additional business logic
- onClear${ChildPropertyName}(current${ChildPropertyName});
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property (m:1 bidir child)" enabled="true" name="isp-m1">public void modify${ParentPropertyName}(final ${ParentPropertyType} ${parentPropertyName}) {
- ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
- // check for no-op
- if (${parentPropertyName} == null ||
- ${parentPropertyName}.equals(current${ParentPropertyName})) {
- return;
- }
- // delegate to parent to associate
- ${parentPropertyName}.addTo${ChildCollectionNameInParent}(this);
- // additional business logic
- onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});
-}
-public void clear${ParentPropertyName}() {
- ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
- // check for no-op
- if (current${ParentPropertyName} == null) {
- return;
- }
- // delegate to parent to dissociate
- current${ParentPropertyName}.removeFrom${ChildCollectionNameInParent}(this);
- // additional business logic
- onClear${ParentPropertyName}(current${ParentPropertyName});
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property choices" enabled="true" name="ispcho">${:import(java.util.List)}public List<${PropertyType}> choices${PropertyName}() {
- return ${cursor}null; // TODO: return list of choices for property
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property defaults" enabled="true" name="ispdef">public ${PropertyType} default${PropertyName}() {
- return ${cursor}null; // TODO: return default for property when first created
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property disabling" enabled="true" name="ispdis">public String disable${PropertyName}() {
- return ${cursor}null; // TODO: return reason why property is disabled, null if editable
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property hiding" enabled="true" name="isphid">public boolean hide${PropertyName}() {
- return ${cursor}false; // TODO: return true if hidden, false if visible
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property modify" enabled="true" name="ispmod">public void modify${PropertyName}(final ${PropertyType} ${propertyName}) {
- ${PropertyType} current${PropertyName} = get${PropertyName}();
- // check for no-op
- if (${propertyName} == null ||
- ${propertyName}.equals(current${PropertyName})) {
- return;
- }
- // associate new
- set${PropertyName}(${propertyName});
- // additional business logic
- onModify${PropertyName}(current${PropertyName}, ${propertyName});
-}
-public void clear${PropertyName}() {
- ${PropertyType} current${PropertyName} = get${PropertyName}();
- // check for no-op
- if (current${PropertyName} == null) {
- return;
- }
- // dissociate existing
- set${PropertyName}(null);
- // additional business logic
- onClear${PropertyName}(current${PropertyName});
-}
-protected void onModify${PropertyName}(final ${PropertyType} old${PropertyName}, final ${PropertyType} new${PropertyName}) {
-}
-protected void onClear${PropertyName}(final ${PropertyType} old${PropertyName}) {
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Property validation" enabled="true" name="ispval">public String validate${PropertyName}(final ${PropertyType} ${propertyName}) {
- if (${propertyName} == null) return null;
- return ${cursor}null; // TODO: return reason why proposed value is invalid, null if valid
-}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Isis Section" enabled="true" name="iss">// {{ ${SectionName}
-${cursor}
-// }}</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Search for all" enabled="true" name="issa">// {{ all ${TypePlural}
-${:import(org.apache.isis.applib.annotation.Exploration,java.util.List)}@Exploration
-public List<${Type}> all${TypePlural}() {
- return allInstances(${Type}.class);
-}
-// }}
-
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Search for all matching" enabled="true" name="issafil">// {{ all ${TypePlural} that ${filterDescription}
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
-public List<${Type}> all${TypePlural}Matching(final Filter<${Type}> filter) {
- return allMatches(${Type}.class, filter);
-}
-// }}
-
-
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Search for first matching" enabled="true" name="issffil">// {{ first ${Type} that ${filterDescription}
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
-public ${Type} first${Type}Matching(final Filter<${Type}> filter) {
- return firstMatch(${Type}.class, filter);
-}
-// }}
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Search for unique matching" enabled="true" name="issufil">// {{ unique ${Type} that ${filterDescription}
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
-public ${Type} unique${Type}Matching(final Filter<${Type}> filter) {
- return uniqueMatch(${Type}.class, filter);
-}
-// }}
-</template><template autoinsert="true" context="java-pathsToInclude" deleted="false" description="Object-level validation" enabled="true" name="isval">public String validate() {
- ${cursor}// TODO: return reason why object is in invalid state (and so cannot be saved/updated), or null if ok
-}</template></templates>
diff --git a/antora/components/setupguide/modules/eclipse/attachments/jmock2-templates.xml b/antora/components/setupguide/modules/eclipse/attachments/jmock2-templates.xml
deleted file mode 100644
index 8205c8f4098..00000000000
--- a/antora/components/setupguide/modules/eclipse/attachments/jmock2-templates.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- 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.
--->
-<templates>
- <template autoinsert="true" context="java" deleted="false" description="JMock2 AutoMock Definition" enabled="true"
- name="jmautomock">${:import(org.jmock.auto.Mock)}@Mock
- private ${MockClass} mock${MockClass};
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JMock2 Context field" enabled="true"
- name="jmcontext">${:import(org.jmock.Mockery,org.jmock.integration.junit4.JUnit4Mockery)}private Mockery
- context = new JUnit4Mockery();
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JMock2 Expectations" enabled="true"
- name="jmexpectations">${:import(org.jmock.Expectations)}context.checking(new Expectations() {{
- ${cursor}
- }});
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JMock2 Mock Definition" enabled="true"
- name="jmmock">${MockClass} ${mockObject} = context.mock(${MockClass}.class);
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JMock2 Rule (Isis variant)" enabled="true"
- name="jmrule">
- ${:import(org.junit.Rule,org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2,org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode)}@Rule
- public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES${cursor});
-
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JMock2 RunWith" enabled="true"
- name="jmrunwith">
- ${:import(org.junit.runner.RunWith,org.jmock.integration.junit4.JMock)}@RunWith(JMock.class)
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JMock2 Expectation Return Value"
- enabled="true" name="jmvalue">will(returnValue(${cursor}));
- </template>
-</templates>
\ No newline at end of file
diff --git a/antora/components/setupguide/modules/eclipse/attachments/junit4-templates.xml b/antora/components/setupguide/modules/eclipse/attachments/junit4-templates.xml
deleted file mode 100644
index c236831288f..00000000000
--- a/antora/components/setupguide/modules/eclipse/attachments/junit4-templates.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- 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.
--->
-<templates>
- <template autoinsert="true" context="java" deleted="false" description="JUnit4 After Method" enabled="true"
- name="juafter">${:import(org.junit.After)}@After
- public void tearDown() throws Exception {
- ${cursor}
- }
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JUnit4 AssertThat" enabled="true"
- name="juassertThat">
- ${:importStatic(org.junit.Assert.assertThat,'org.hamcrest.CoreMatchers.*')}assertThat(${object}, ${matcher});
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JUnit4 Before Method" enabled="true"
- name="jubefore">${:import(org.junit.Before)}@Before
- public void setUp() throws Exception {
- ${cursor}
- }
- </template>
- <template autoinsert="true" context="java" deleted="false" description="JUnit4 Test Method" enabled="true"
- name="jutest">${:import(org.junit.Test)}@Test
- public void ${xxx}() throws Exception {
- ${cursor}
- }
- </template>
-</templates>
\ No newline at end of file
diff --git a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/010-lombok-locate-jar.png b/antora/components/setupguide/modules/eclipse/images/2017-oxygen/010-lombok-locate-jar.png
deleted file mode 100644
index 08b2ddc2567..00000000000
Binary files a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/010-lombok-locate-jar.png and /dev/null differ
diff --git a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/020-lombok-install-into-eclipse.png b/antora/components/setupguide/modules/eclipse/images/2017-oxygen/020-lombok-install-into-eclipse.png
deleted file mode 100644
index d3ad1a954be..00000000000
Binary files a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/020-lombok-install-into-eclipse.png and /dev/null differ
diff --git a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/030-datanucleus-install-new-software.png b/antora/components/setupguide/modules/eclipse/images/2017-oxygen/030-datanucleus-install-new-software.png
deleted file mode 100644
index 3bc53f5d571..00000000000
Binary files a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/030-datanucleus-install-new-software.png and /dev/null differ
diff --git a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/040-datanucleus-specify-repository.png b/antora/components/setupguide/modules/eclipse/images/2017-oxygen/040-datanucleus-specify-repository.png
deleted file mode 100644
index 59523605c57..00000000000
Binary files a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/040-datanucleus-specify-repository.png and /dev/null differ
diff --git a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/050-datanucleus-select-plugin.png b/antora/components/setupguide/modules/eclipse/images/2017-oxygen/050-datanucleus-select-plugin.png
deleted file mode 100644
index 913cd34e12f..00000000000
Binary files a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/050-datanucleus-select-plugin.png and /dev/null differ
diff --git a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/060-enable-annotation-processor.png b/antora/components/setupguide/modules/eclipse/images/2017-oxygen/060-enable-annotation-processor.png
deleted file mode 100644
index 4777c4a029d..00000000000
Binary files a/antora/components/setupguide/modules/eclipse/images/2017-oxygen/060-enable-annotation-processor.png and /dev/null differ
diff --git a/antora/components/setupguide/modules/eclipse/pages/about.adoc b/antora/components/setupguide/modules/eclipse/pages/about.adoc
index 1bda73a87e6..5bd76978d83 100644
--- a/antora/components/setupguide/modules/eclipse/pages/about.adoc
+++ b/antora/components/setupguide/modules/eclipse/pages/about.adoc
@@ -7,18 +7,6 @@ If you are an http://www.eclipse.org[Eclipse] user, then we recommend you downlo
-//== Editor Templates
-//
-//We provide a set of editor templates.
-//These are used to add new methods to existing classes.
-//(These are equivalent to the xref:setupguide:intellij:about.adoc#live-templates[IntelliJ live templates]):
-//
-//* `is` (Apache Causeway domain objects). link:./resources/eclipse/causeway-templates.xml[Download]
-//* `ju` (for JUnit tests) link:./resources/eclipse/junit4-templates.xml[Download]
-//* `jm` (for JMock mocks or libraries) link:./resources/eclipse/jmock2-templates.xml[Download]
-//
-//
-//To install, download each XML file, then go to `Windows > Preferences > Java > Editor > Templates` and choose `Import`.
== Prerequisites
@@ -30,50 +18,6 @@ For Eclipse IDE this requires an link:https://projectlombok.org/setup/eclipse[in
image::2023-sts/1.png[]
-// Alternatively, you can download the `lombok.jar` from the link:https://projectlombok.org/[projectlombok.org] website, and install manually.
-//
-// * Locate the `lombok.jar` jar file:
-//
-// +
-// image::2017-oxygen/010-lombok-locate-jar.png[width="600px"]
-//
-// * Run using `java -jar` (or double click on Windows):
-//
-// +
-// image::2017-oxygen/020-lombok-install-into-eclipse.png[width="600px"]
-//
-// Then restart Eclipse.
-
-
-=== (JDO only) Install the DataNucleus plugin
-
-If using JDO persistence (rather than JPA), then it's necessary to setup the development environment so that the Java bytecode can be enhanced by the link:http://www.datanucleus.org[DataNucleus] enhancer.
-
-If using Eclipse, then JDO enhancement is most easily done by installing the http://www.datanucleus.org/products/accessplatform/jpa/tools.html#eclipse[DataNucleus' Eclipse plugin].
-This hooks the bytecode enhancement of your domain objects into Eclipse's normal incremental compilation.
-
-This plugin needs to be configured for each of your domain modules (usually just one in any given app).
-
-The DataNucleus plugin hooks into the Eclipse compiler and will automatically enhance the compiled class files:
-
-* Use Help > Install New Software:
-
-+
-image::2017-oxygen/030-datanucleus-install-new-software.png[width="600px"]
-
-* Specify the DataNucleus plugin repository:
-
-+
-image::2017-oxygen/040-datanucleus-specify-repository.png[width="400px"]
-
-* Select the plugin
-
-+
-image::2017-oxygen/050-datanucleus-select-plugin.png[width="600px"]
-
-* Press Next and Finish to complete the installation of the plugin
-
-Then restart Eclipse
== Importing the Project
@@ -84,8 +28,6 @@ image::2023-sts/3.png[]
image::2023-sts/4.png[]
image::2023-sts/7.png[]
-WARNING: at this point the IDE hung, apparently hitting a deadlock (as of 2023).
-I had to kill the IDE and restart, reimporting the already cloned repo.
Importing:
@@ -96,96 +38,6 @@ image::2023-sts/8.png[]
-// commented out, as of 2023 at least (and probably more recently) this is now automatically done.
-// However, you will have some compile errors until you enable annotation processing, discussed below.
-//
-// [#enable-annotation-processing]
-// === Enable Annotation Processing
-//
-//
-//
-// Project Lombok (and DataNucleus enhancer) uses annotation processors that must be enabled in Eclipse.
-//
-// For each project, open its _Properties_ page and then _Java Compiler > Annotation Processing_ to specify the generated source directory of `target/generated-sources/annotations`:
-//
-// image::2017-oxygen/060-enable-annotation-processor.png[width="600px"]
-//
-// If your eclipse version also requires you to enter a generated test source directory, specify the following directory: `target/generated-test-sources/test-annotations`.
-//
-// Then under _Java Compiler > Annotation Processing > Factory Path_ add the following external JARs (for instance from your local `.m2` maven repository)
-//
-// * `datanucleus-jdo-query-5.0.9.jar` (under `.m2/repository/org/datanucleus/datanucleus-jdo-query/5.0.9`)
-// * `javax.jdo-3.2.0-m13.jar` (under `.m2/repository/org/datanucleus/javax.jdo/3.2.0-m13`)
-//
-// The specific versions depend on the DataNucleus version used in your project.You can easily check this in the Dependency Hierarchy tab of the POM.xml viewer in eclipse.
-//
-// Eclipse should automatically add these directories as a source path; at this point all remaining compiler errors should disappear.
-//
-// If the JDO Q-files are not generated automatically into the specified source directory then check the `.log` file in your eclipse workspace to see if there are any `ClassNotFoundException`s that could indicate why the DataNucleus annotation processor is failing.
-//
-// A healthy DataNucleus Annotation Process execution in your eclipse `.log` file should look like this:
-//
-// [source]
-// ----
-// !ENTRY org.eclipse.jdt.apt.pluggable.core 1 1 2020-11-06 19:28:41.948
-// !MESSAGE DataNucleus JDO AnnotationProcessor for generating JDOQLTypedQuery Q classes
-// ----
-//
-// An error might look like this:
-//
-// [source]
-// ----
-// !ENTRY org.eclipse.jdt.apt.pluggable.core 4 1 2020-11-06 18:52:30.688
-// !MESSAGE Exception thrown by Java annotation processor org.datanucleus.jdo.query.JDOQueryProcessor@60e3ac5d
-// !STACK 0
-// java.lang.Exception: java.lang.NoClassDefFoundError: javax/jdo/query/PersistableExpression
-// ----
-//
-// If you see this specific error message then check that you added the `javax.jdo` JAR that matches the version of DataNucleus used in your project (see _Factory Path_ configuration above).
-
-
-
-
-
-== JDO
-
-*_This section applies if you are using JDO (rather than JPA) as the ORM of your application._*
-
-
-=== Configure DataNucleus Enhancer
-
-[TIP]
-====
-Make sure you are in the 'Java' Perspective, not the 'Java EE' Perspective.
-====
-
-In Eclipse, for the _domain object model_ project(s), first add DataNucleus support:
-
-image::eclipse-100-project-support.png[width="600px"]
-
-
-Then turn on Auto-Enhancement:
-
-image::eclipse-110-project-support.png[width="600px"]
-
-=== Update the classpath
-
-DataNucleus' enhancer uses the domain object model's own classpath to reference DataNucleus JARs.
-So, even though your domain objects are unlikely to depend on DataNucleus, these references must still be present.
-
-If you've based your app on either the xref:docs:starters:helloworld.adoc[HelloWorld] or the xref:docs:starters:simpleapp.adoc[SimpleApp] starter app, then it'll be set up already.
-
-Then, tell DataNucleus to use the project classpath:
-
-image::eclipse-010-windows-preferences.png[width="750px"]
-
-When the enhancer runs, it will print out to the console:
-
-image::eclipse-120-console.png[width="500px"]
-
-CAUTION: If you hit issues with path limits, then see the section xref:#workaround-for-path-limits-the-dn-plugin-to-use-the-persistence-xml[below].
-
-
[#running-the-app]
== Running the App
@@ -199,7 +51,7 @@ image::2023-sts/9.png[]
+
image::2023-sts/A.png[]
-If running *JPA*, then you should enable weaving:
+If your application uses the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store, then you should enable weaving:
* change `eclipselink.weaving` property to `true` in `application.yml` file:
+
@@ -222,57 +74,3 @@ image::2023-sts/E.png[]
The app should be accessible at link:http://localhost:8080[]
-
-[#workaround-for-path-limits-the-dn-plugin-to-use-the-persistence-xml]
-== JDO : Workaround for path limits (the DN plugin to use the persistence.xml)
-
-If running on Windows then the DataNucleus plugin is very likely to hit the Windows path limit.
-
-To fix this, we configure the enhancer to read from the `persistence.xml` file.
-
-As a prerequisite, first make sure that your domain object model has a `persistence.xml` file.
-Then specify the `persistence-unit` in the project properties:
-
-image::eclipse-025-project-properties.png[width="750px"]
-
-=== Workaround: If the enhancer fails
-
-On occasion it appears that Eclipse can attempt to run two instances of the DataNucleus enhancer.
-This is probably due to multiple Eclipse builders being defined; we've noticed multiple entries in the Eclipse's `Debug` view:
-
-
-image::eclipse-210-enhancer-fails-duplicates.png[width="600px"]
-
-
-At any rate, you'll know you've encountered this error if you see the following in the console:
-
-
-image::eclipse-200-enhancer-fails-duplicates.png[width="600px"]
-
-
-
-The best solution is to remove DataNucleus support and then to re-add it:
-
-
-image::eclipse-220-enhancer-fails-duplicates.png[width="600px"]
-
-
-If you consistently hit problems, then the final recourse is to disable the automatic enhancement and to remember to manually enhance your domain object model before each run.
-
-
-
-//== Advanced
-//
-//In this section are a couple of options that will reduce the length of the change code/build/deploy/review feedback loop.
-//
-//=== Setting up DCEVM
-//
-//link:http://github.com/dcevm/dcevm[DCEVM] enhances the JVM with true hot-swap adding/removing of methods as well as more reliable hot swapping of the implementation of existing methods.
-//
-//In the context of Apache Causeway, this is very useful for contributed actions and mixins and also view models; you should then be able to write these actions and have them be picked up without restarting the application.
-//
-//Changing persisting domain entities is more problematic becaue at runtime the JPA persistence mechanism would need to rebuild its own metamodel.
-//You may find that adding actions will work, but adding new properties or collections is much less likely to.
-//
-//For details of setting up DCEVM, see the xref:setupguide:intellij:hints-and-tips.adoc#setting-up-dcevm[corresponding section] in the IntelliJ documentation.
-
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc b/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
index b4da39de0f9..25feb8399e3 100644
--- a/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/domain-entities/jpa.adoc
@@ -65,30 +65,27 @@ This is often used in database unique indices, and in the `toString()` implement
[source,java]
----
-import javax.persistence.Column;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-import lombok.ToString.Include;
+import jakarta.persistence.*;
+import lombok.*;
-@javax.persistence.Table(
+@Table(
schema= SimpleModule.SCHEMA,
uniqueConstraints = {
@UniqueConstraint(name = "SimpleObject__name__UNQ",
- columnNames = {"name"}) // <.>
+ columnNames = {"name"}) // <.>
}
)
public class SimpleObject
- implements Comparable<SimpleObject> { // <.>
+ implements Comparable<SimpleObject> { // <.>
// ...
public SimpleObject(String name) {
setName(name);
}
- @Column(allowsNull="false", length=50) // <.>
- @Getter @Setter // <.>
- @ToString.Include // <.>
+ @Column(nullable=false, length=50) // <.>
+ @Getter @Setter // <.>
+ @ToString.Include // <.>
private String name;
private final static Comparator<SimpleObject> comparator =
@@ -96,7 +93,7 @@ public class SimpleObject
@Override
public int compareTo(final SimpleObject other) {
- return comparator.compare(this, other); // <.>
+ return comparator.compare(this, other); // <.>
}
}
----
diff --git a/antora/components/userguide/modules/ROOT/partials/meta-annotations/progmodel.adoc b/antora/components/userguide/modules/ROOT/partials/meta-annotations/progmodel.adoc
index cd743a9175e..3888b811a22 100644
--- a/antora/components/userguide/modules/ROOT/partials/meta-annotations/progmodel.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/meta-annotations/progmodel.adoc
@@ -12,7 +12,7 @@ The xref:docs:starters:simpleapp.adoc[SimpleApp] starter app illustrates the usa
[source,java]
.Name.java
----
-@Column(length = Name.MAX_LEN, allowsNull = "false") // <.>
+@Column(length = Name.MAX_LEN, nullable = false) // <.>
@Property(mustSatisfy = Name.Specification.class, // <.>
maxLength = Name.MAX_LEN)
@Parameter(mustSatisfy = Name.Specification.class, // <.>
@@ -93,16 +93,15 @@ The table below summarises the equivalence of some of the most common cases.
|@Property(maxLength=50) +
@Parameter(maxLength=50)
|
-@javax.jdo.annotations.Column(length=50)
+@jakarta.persistence.Column(length=50)
|big decimal (precision)
-|@javax.validation.constraints.Digits(fraction=2)
-|@javax.persistence.Column(scale=2)
-@javax.jdo.annotations.Column(scale=2)
+|@jakarta.validation.constraints.Digits(fraction=2)
+|@jakarta.persistence.Column(scale=2)
|optionality
-|`@javax.annotation.Nullable` or `ParameterLayout(optionality=OPTIONAL`)
-|`@javax.persistence.Column(nullable=true)`
-`@javax.jdo.annotations.Column(allowsNull="true")`
+|`@jakarta.annotation.Nullable` or `ParameterLayout(optionality=OPTIONAL`)
+|`@jakarta.persistence.Column(nullable=true)`
+`@jakarta.persistence.Basic(optional=true)`
|===
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
index d4eeb2e1a64..7410a6cf757 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
@@ -18,8 +18,8 @@ And collections properties will also have a number of annotations:
* Apache Causeway defines its own xref xref:refguide:applib:index/annotation/Collection.adoc[@Collection] annotation for capturing domain semantics.
It also provides a xref:refguide:applib:index/annotation/CollectionLayout.adoc[@CollectionLayout] for UI hints (though the information in this annotation may instead be provided by a supplementary xref:userguide:ROOT:ui-layout-and-hints.adoc#object-layout[.layout.xml] file)
-* the collections of domain entities will typically be annotated with ORM annotation(s).
-In the case of xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], this is most notably `jakarta.persistence.Entity`.
+* the collections of domain entities will typically be annotated with ORM annotation(s), such as
+ `jakarta.persistence.Entity`.
The collection itself will likely have its own ORM-specific annotations, to specify for example if the association is bidirectional, supports cascading deletes, or whether to define a link table or not to hold foreign key columns.
* for the collections of view models, then JAXB annotations such as link:https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementWrapper.html[@javax.xml.bind.annotation.XmlElementWrapper] and link:https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElement.html[@javax.xml.bind.annotation.XmlElement] will be present
@@ -53,51 +53,64 @@ In the parent object, the collection can be defined as:
[source,java]
----
-import javax.jdo.annotations.Persistent;
+import jakarta.persistence.OneToMany;
import lombok.Getter;
-import lombok.Setter;
public class ParentObject
- implements Comparable<ParentObject>{
-
- @Persistent(
- mappedBy = "parent", // <.>
- dependentElement = "false" // <.>
+ implements Comparable<ParentObject> {
+
+ @Id // <.>
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name = "id", nullable = false)
+ private Long id;
+
+ @Getter
+ @OneToMany(
+ mappedBy = "parent", // <.>
+ cascade = CascadeType.ALL, // <.>
+ orphanRemoval = true
)
- @Collection // <.>
- @Getter @Setter
- private SortedSet<ChildObject> children = new TreeSet<ChildObject>(); // <.>
-
+ @Collection // <.>
+ private Set<ChildObject> children = new TreeSet<ChildObject>(); // <.>
}
----
+<.> surrogate identifier for the entity.
<.> indicates a bidirectional association; the foreign key pointing back to the `Parent` will be in the table for `ChildObject`
-<.> disables cascade delete
+<.> enables cascade delete
<.> (not actually required in this case, because no attributes are set, but acts as a useful reminder that this collection will be rendered in the UI by Apache Causeway)
-<.> uses a `SortedSet` (as opposed to some other collection type; discussion below)
while in the child object you will have:
[source,java]
----
-import javax.jdo.annotations.Column;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
import lombok.Getter;
import lombok.Setter;
+@Entity
public class ChildObject
- implements Comparable<ChildObject> { // <.>
+ implements Comparable<ChildObject> {
+
+ @Id // <.>
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name = "id", nullable = false)
+ private Long id;
- @Column(allowsNull = "false") // <.>
- @Property(editing = Editing.DISABLED) // <.>
+ @ManyToOne(optional = false) // <.>
+ @JoinColumn(name = "parent_id")
+ @Property(editing = Editing.DISABLED) // <.>
@Getter @Setter
- private ParentObject parent;
+ private PetOwner petOwner;
}
----
-<.> implements `Comparable` because is mapped using a `SortedSet`
+<.> surrogate identifier for the entity.
<.> mandatory; every child must reference its parent
<.> cannot be edited directly
Generally speaking you should use `Set` for collection types (as opposed to `List` or `Collection`).
-
+You should also implement `equals()` and `hashCode()`, based upon the id.
+It's also common to implement `Comparable`, using the same ordering as the unique business key defined within the database and consistent with `equals()`.
== Maps
@@ -107,7 +120,7 @@ If you do wish to use this collection type, then annotate the getter with xref:r
== Value vs Reference Types
-While ORMs support collections/arrays of value types, such collections are not supported by Apache Causeway.
+While ORMs can persist collections/arrays of value types, such collections are not supported by Apache Causeway.
Apache Causeway can (currently) only provide a UI for collections of references.
If you do wish to use collections of this type, then annotate the getter with xref:refguide:applib:index/annotation/Programmatic.adoc[@Programmatic] so that it is ignored by the Apache Causeway framework.
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
index c4ddcc0eb8e..50562a05401 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
@@ -93,11 +93,11 @@ For example, you can write:
[source,java]
----
-import javax.jdo.annotations.Column;
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
-@Column(allowsNull="true")
+@Column(nullable=true)
@Property
@Getter @Setter
private LocalDate date;
@@ -107,11 +107,11 @@ rather than the more verbose:
[source,java]
----
-import javax.jdo.annotations.Column;
+import jakarta.persistence.Column;
import lombok.Getter;
import lombok.Setter;
-@Column(allowsNull="true")
+@Column(nullable=true)
@Property(optionality=Optionality.OPTIONAL)
@Getter @Setter
private LocalDate date;
diff --git a/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc b/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
index bd503881cec..634283fe7da 100644
--- a/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/the-theory/metamodel.adoc
@@ -19,7 +19,7 @@ However the framework also recognizes certain other JEE annotations such as `@ja
The framework integrates an ORM for persistence, specifically DataNucleus and the JDO API and since version 2.0.0, JPA (Eclipselink) is supported as well.
Both JDO and JPA can map to both relational databases and also to various NoSQL objectstores such as MongoDB or Neo4J.
-Apache Causeway recognizes a number of these persistence-specific annotations, for example `@javax.jdo.annotations.Column(allowsNull=...)`.
+Apache Causeway recognizes a number of these persistence-specific annotations, for example `@jakarta.persistence.Column(nullable=...)`.
In addition, the framework builds up the metamodel for each domain object using xref:userguide:ROOT:ui-layout-and-hints.adoc#object-layout[layout hints], such as `Customer.layout.xml`.
These provide metadata such as grouping elements of the UI together, using multi-column layouts, and so on.
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Optionality.java b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Optionality.java
index 4841a5732d8..8e5669420d9 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Optionality.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Optionality.java
@@ -30,8 +30,8 @@ public enum Optionality {
* Default, usually meaning mandatory for properties and always meaning mandatory for parameters.
*
* <p>
- * For properties, will be false unless JDO <code>javax.jdo.annotations.Column</code> has also specified with
- * <code>javax.jdo.annotations.Column#allowsNull()</code> set to <code>true</code>.
+ * For properties, will be false unless JPA {@link Column} has also specified with
+ * {@link Column#nullable()} set to <code>true</code>.
* </p>
*/
DEFAULT,
diff --git a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.java b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.java
index b1f55978a1c..1447911aab3 100644
--- a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.java
+++ b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItem.java
@@ -167,9 +167,6 @@ public class ExcelDemoToDoItem implements Comparable<ExcelDemoToDoItem> /*, Cale
@Getter @Setter
private String description;
- //FIXME
- //@javax.jdo.annotations.Persistent(defaultFetchGroup="true")
- //@javax.jdo.annotations.Column(allowsNull="true")
@Getter @Setter
private LocalDate dueBy;
@@ -190,15 +187,11 @@ public class ExcelDemoToDoItem implements Comparable<ExcelDemoToDoItem> /*, Cale
private boolean complete;
@Column(nullable=true, scale=2)
- //XXX breaks build, as of JDOQueryProcessor generated source, that cannot be compiled
- //@jakarta.validation.constraints.Digits(integer=10, fraction=2)
@Property(editing = Editing.DISABLED, editingDisabledReason = "Update using action")
@Getter @Setter
private BigDecimal cost;
@Column(nullable=true, scale=2)
- //XXX breaks build, as of JDOQueryProcessor generated source, that cannot be compiled
- //@jakarta.validation.constraints.Digits(integer=10, fraction=2)
@Property(
editing = Editing.DISABLED,
editingDisabledReason = "Update using action"
@@ -209,20 +202,12 @@ public class ExcelDemoToDoItem implements Comparable<ExcelDemoToDoItem> /*, Cale
@Getter @Setter
@Column(nullable=true, length=400)
@Property(editing = Editing.ENABLED)
- // @SummernoteEditor(height = 100, maxHeight = 300)
private String notes;
@Getter @Setter
- //FIXME
- //@javax.jdo.annotations.Persistent(defaultFetchGroup="false")
- //@javax.jdo.annotations.Column(allowsNull="true", jdbcType="BLOB", sqlType="LONGBINARY")
private Blob attachment;
@Getter @Setter
- //FIXME
-// @javax.jdo.annotations.Persistent(table="ExcelDemoToDoItemDependencies")
-// @javax.jdo.annotations.Join(column="dependingId")
-// @javax.jdo.annotations.Element(column="dependentId")
@CollectionLayout(sortedBy = DependenciesComparator.class)
private SortedSet<ExcelDemoToDoItem> dependencies = new TreeSet<>();
diff --git a/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc b/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
index c26f5ddd866..6f42bf2e3ad 100644
--- a/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
+++ b/valuetypes/asciidoc/adoc/modules/asciidoc/pages/about.adoc
@@ -124,18 +124,6 @@ private AsciiDoc helpText;
----
<.> maps to a (c)lob
-* if declared in an xref:pjdo::[JDO] entity:
-+
-[source,java]
-----
-@Property
-@PropertyLayout
-@Column(allowsNull = "false", jdbcType = "CLOB") // <.>
-@Getter @Setter
-private AsciiDoc helpText;
-----
-<.> maps to a CLOB
-
* if declared in a JAXB view model:
+
[source,java]
diff --git a/valuetypes/markdown/adoc/modules/markdown/pages/about.adoc b/valuetypes/markdown/adoc/modules/markdown/pages/about.adoc
index 687d1dc218a..7cd99e8fc7d 100644
--- a/valuetypes/markdown/adoc/modules/markdown/pages/about.adoc
+++ b/valuetypes/markdown/adoc/modules/markdown/pages/about.adoc
@@ -99,7 +99,7 @@ And in your application's xref:userguide::modules.adoc#appmanifest[App Manifest]
@Import({
CausewayModuleValMarkdownUiWkt.class,
CausewayModuleValMarkdownMetaModel.class,
-
+
...
})
public class AppManifest {
@@ -125,18 +125,6 @@ private Markdown helpText;
----
<.> maps to a (c)lob
-* if declared in an xref:pjdo::[JDO] entity:
-+
-[source,java]
-----
-@Property
-@PropertyLayout
-@Column(allowsNull = "false", jdbcType = "CLOB") // <.>
-@Getter @Setter
-private Markdown helpText;
-----
-<.> maps to a CLOB
-
* if declared in a JAXB view model:
+
[source,java]
diff --git a/valuetypes/vega/adoc/modules/vega/pages/about.adoc b/valuetypes/vega/adoc/modules/vega/pages/about.adoc
index 1c9719b505e..4740ed36a91 100644
--- a/valuetypes/vega/adoc/modules/vega/pages/about.adoc
+++ b/valuetypes/vega/adoc/modules/vega/pages/about.adoc
@@ -125,18 +125,6 @@ private Vega helpText;
----
<.> maps to a (c)lob
-* if declared in an xref:pjdo::[JDO] entity:
-+
-[source,java]
-----
-@Property
-@PropertyLayout
-@Column(allowsNull = "false", jdbcType = "CLOB") // <.>
-@Getter @Setter
-private Vega helpText;
-----
-<.> maps to a CLOB
-
* if declared in a JAXB view model:
+
[source,java]
(causeway) 10/36: CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 5dc15521738fb6d1ecef44ea24b6bc22a9f2e6f0
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 12:58:25 2025 +0100
CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
---
.../hooks/ObjectContracts_examples-and-usage.adoc | 79 ----
.../collections.adoc | 1 -
.../modules/ROOT/partials/view-models/_intro.adoc | 2 +-
.../queryresultscache/QueryResultsCache.java | 2 +-
core/adoc/modules/_overview/pages/about.adoc | 400 ++-------------------
core/config/generateConfigDocs.groovy | 13 -
.../adoc/modules/config/pages/sections/_nav.adoc | 2 -
.../modules/config/pages/sections/datanucleus.adoc | 196 ----------
.../core/config/presets/CausewayPresets.java | 3 +-
...s => DebugInteractionScopedServices.properties} | 12 +-
.../config/presets/DebugPersistence.properties | 20 --
.../DebugTransactionScopedServices.properties | 8 +-
.../additional-spring-configuration-metadata.json | 24 +-
.../classsubstitutor/ClassSubstitutorDefault.java | 5 -
.../confmenu/ConfigurationViewServiceDefault.java | 4 +-
.../bootstrapping/builtin-domain-services.list | 1 -
.../bootstrapping/builtin-requestscoped.list | 2 -
.../bootstrapping/builtin-domain-services.list | 1 -
.../bootstrapping/builtin-requestscoped.list | 1 -
19 files changed, 54 insertions(+), 722 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/util/hooks/ObjectContracts_examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/util/hooks/ObjectContracts_examples-and-usage.adoc
index 39bf9b29d7a..fb62301bbbb 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/util/hooks/ObjectContracts_examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/util/hooks/ObjectContracts_examples-and-usage.adoc
@@ -48,83 +48,4 @@ There are a number of deprecated methods that identify property names as strings
These should _not_ be use, as they use are not type-safe and also use reflection heavily and so impose a performance hit.
====
-== Usage Notes
-
-=== Be aware of ORM loading issues
-
-`ObjectContracts` implementation can cause DataNucleus to recursively rehydrate a larger number of associated entities (More detail below).
-
-We therefore recommend that you disable
-xref:refguide:config:sections/datanucleus.adoc#datanucleus.persistence-by-reachability-at-commit[persistence-by-reachability] by adding:
-
-[source,ini]
-.application.properties
-----
-datanucleus.persistenceByReachabilityAtCommit=false
-----
-
-[plantuml]
-----
-hide empty members
-
-class Party
-class AgreementRole
-class Agreement
-
-Party <-r-> "0.*" AgreementRole
-AgreementRole "0..*" <-r-> Agreement
-----
-
-In the course of a transaction, the `Agreement` entity is loaded into memory (not necessarily modified), and then new ``AgreementRole``s are associated to it.
-
-All these entities implement `Comparable` using `ObjectContracts`, so that the implementation of ``AgreementRole``'s (simplified) is:
-
-[source,java]
-----
-public class AgreementRole {
- ...
- public int compareTo(AgreementRole other) {
- return ObjectContracts.compareTo(this, other, "agreement","startDate","party");
- }
- ...
-}
-----
-
-while ``Agreement``'s is implemented as:
-
-[source,java]
-----
- public class Agreement {
- ...
- public int compareTo(Agreement other) {
- return ObjectContracts.compareTo(this, other, "reference");
- }
- ...
- }
-----
-
-and ``Party``'s is similarly implemented as:
-
-[source,java]
-----
-public class Party {
- ...
- public int compareTo(Party other) {
- return ObjectContracts.compareTo(this, other, "reference");
- }
- ...
-}
-----
-
-DataNucleus's persistence-by-reachability algorithm adds the ``AgreementRole``s into a `SortedSet`, which causes `AgreementRole#compareTo()` to fire:
-
-* the evaluation of the "agreement" property delegates back to the `Agreement`, whose own `Agreement#compareTo()` uses the scalar `reference` property.
-As the `Agreement` is already in-memory, this does not trigger any further database queries
-
-* the evaluation of the "startDate" property is just a scalar property of the `AgreementRole`, so will already in-memory
-
-* the evaluation of the "party" property delegates back to the `Party`, whose own `Party#compareTo()` requires the uses the scalar `reference` property.
-However, since the `Party` is not yet in-memory, using the `reference` property triggers a database query to "rehydrate" the `Party` instance.
-
-In other words, figuring out whether `AgreementRole` is comparable requires the persistence-by-reachability algorithm to run, causing the adjacent associated entity `Party` to also be retrieved.
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
index 7410a6cf757..7a9ef5442cf 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/collections.adoc
@@ -32,7 +32,6 @@ For example, a `placeOrder(...)` action will likely add an `Order` to the `Custo
Since writing getter and setter methods adds quite a bit of boilerplate, it's common to use link:https://projectlombok.org/[Project Lombok] to code generate these methods at compile time (using Java's annotation processor) simply by adding the `@lombok.Getter` and `@lombok.Setter` annotations to the field.
-TIP: see the DataNucleus http://www.datanucleus.org:15080/products/accessplatform_5_0/jdo/mapping.html[Mapping Guide] for more in-depth coverage of this topic.
== Mapping bidir 1:m
diff --git a/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc b/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
index d5569f88778..97961e598f9 100644
--- a/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/view-models/_intro.adoc
@@ -145,6 +145,6 @@ Or, rather than marshalling state, the view model could hold a reference to the
A third option is to define an RDBMS view, and then map a "non-durable" entity to that view.
The RDBMS view then becomes the public API that must be preserved.
-ORMs such as DataNucleus link:http://www.datanucleus.org:15080/products/accessplatform_5_1/jdo/mapping.html#schema_rdbms_views[support this].
+ORMs such as xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] support this.
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/queryresultscache/QueryResultsCache.java b/api/applib/src/main/java/org/apache/causeway/applib/services/queryresultscache/QueryResultsCache.java
index cd7b98d8af2..ac3a9b79682 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/queryresultscache/QueryResultsCache.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/queryresultscache/QueryResultsCache.java
@@ -193,7 +193,7 @@ private <T> T executeWithCaching(final Callable<T> callable, final Key cacheKey)
// (it is possible that the callable just invoked might also have updated the cache, eg if there was
// some sort of recursion. However, Map#put(...) is idempotent, so valid to call more than once.
//
- // note: there's no need for thread-safety synchronization... remember that QueryResultsCache is @RequestScoped
+ // note: there's no need for thread-safety synchronization... remember that QueryResultsCache is @InteractionScoped
put(cacheKey, result);
return result;
diff --git a/core/adoc/modules/_overview/pages/about.adoc b/core/adoc/modules/_overview/pages/about.adoc
index 3995f31c01d..b031474d8df 100644
--- a/core/adoc/modules/_overview/pages/about.adoc
+++ b/core/adoc/modules/_overview/pages/about.adoc
@@ -44,7 +44,7 @@ rectangle "App\n<size:10>[Software System]</size>" <<App>> {
.Projects/Modules (App)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Starter Parent
[source,yaml]
@@ -107,7 +107,7 @@ Mavendeps.ApacheCausewayMavenDeps .[#707070,thickness=2].> Mavendeps.ApacheCause
.Projects/Modules (Mavendeps)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Maven Deps
[source,yaml]
@@ -331,7 +331,7 @@ Testing.ApacheCausewayTstUnitTestSupportparent .[#707070,thickness=2].> Testing.
.Projects/Modules (Testing)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Testing
[source,yaml]
@@ -369,7 +369,6 @@ org.apache.causeway.commons:causeway-commons:jar:<managed> +
org.apache.causeway.core:causeway-applib:jar:<managed> +
org.apache.causeway.persistence:causeway-persistence-jdo-integration:jar:<managed> +
org.apache.causeway.persistence:causeway-persistence-jpa-integration:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
org.slf4j:slf4j-api:jar:<managed> +
org.springframework:spring-test:jar:<managed> +
org.springframework.boot:spring-boot-starter-test:jar:<managed> +
@@ -444,7 +443,6 @@ Directory: /testing/fakedata/integtests
----
|.Dependencies
****
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fakedata-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fakedata-fixtures:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
@@ -652,7 +650,6 @@ jakarta.xml.ws:jakarta.xml.ws-api:jar:<managed> +
org.apache.causeway.commons:causeway-commons:jar:<managed> +
org.apache.causeway.core:causeway-applib:jar:<managed> +
org.apache.causeway.core:causeway-core-codegen-bytebuddy:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
org.jmock:jmock:jar:<managed> +
org.jmock:jmock-junit5:jar:<managed> +
org.picocontainer:picocontainer:jar:<managed> +
@@ -733,7 +730,7 @@ Root.ApacheCausewayAggregator .[#707070,thickness=2].> Root.ApacheCauseway : "<c
.Projects/Modules (Root)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway (Aggregator)
[source,yaml]
@@ -824,7 +821,7 @@ rectangle "Commons\n<size:10>[Software System]</size>" <<Commons>> {
.Projects/Modules (Commons)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Commons
[source,yaml]
@@ -1013,7 +1010,7 @@ Core.ApacheCausewayCore .[#707070,thickness=2].> Core.ApacheCausewayApiSchemas :
.Projects/Modules (Core)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Core
[source,yaml]
@@ -1175,7 +1172,6 @@ Directory: /core/internaltestsupport
net.bytebuddy:byte-buddy-agent:jar:<managed> +
org.apache.causeway.commons:causeway-commons:jar:<managed> +
org.apache.causeway.core:causeway-core-codegen-bytebuddy:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
org.hamcrest:hamcrest-library:jar:<managed> +
org.junit.jupiter:junit-jupiter-api:jar:<managed> +
org.junit.jupiter:junit-jupiter-engine:jar:<managed> +
@@ -1588,7 +1584,7 @@ Persistence.ApacheCausewayPersistenceQueryDSL .[#707070,thickness=2].> Persisten
.Projects/Modules (Persistence)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Persistence - JDBC
[source,yaml]
@@ -1639,7 +1635,6 @@ org.apache.causeway.commons:causeway-commons:jar:<managed> +
org.apache.causeway.core:causeway-applib:jar:<managed> +
org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> +
org.apache.causeway.core:causeway-core-metamodel:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
****
.Document Index Entries
@@ -1815,7 +1810,7 @@ rectangle "Persistence Commons\n<size:10>[Software System]</size>" <<Persistence
.Projects/Modules (Persistence Commons)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Persistence - Commons
[source,yaml]
@@ -1851,281 +1846,6 @@ xref:refguide:persistence:index/commons/integration/changetracking/EntityChangeT
****
|===
-=== JDO
-
-[plantuml,JDO,svg]
-----
-@startuml
-set separator none
-title JDO - Containers
-
-left to right direction
-
-skinparam {
- arrowFontSize 10
- defaultTextAlignment center
- wrapWidth 200
- maxMessageSize 100
-}
-
-hide stereotype
-
-skinparam rectangle<<JDO.ApacheCausewayPersistenceJDO>> {
- BackgroundColor #438dd5
- FontColor #fffffe
- BorderColor #2e6295
- shadowing false
-}
-skinparam rectangle<<JDO.ApacheCausewayPersistenceJDOSpring>> {
- BackgroundColor #438dd5
- FontColor #fffffe
- BorderColor #2e6295
- shadowing false
-}
-skinparam rectangle<<JDO.ApacheCausewayPersistenceJDOapplib>> {
- BackgroundColor #438dd5
- FontColor #fffffe
- BorderColor #2e6295
- shadowing false
-}
-skinparam rectangle<<JDO.ApacheCausewayPersistenceJDOintegration>> {
- BackgroundColor #438dd5
- FontColor #fffffe
- BorderColor #2e6295
- shadowing false
-}
-skinparam rectangle<<JDO.ApacheCausewayPersistenceJDOmetamodel>> {
- BackgroundColor #438dd5
- FontColor #fffffe
- BorderColor #2e6295
- shadowing false
-}
-skinparam rectangle<<JDO.ApacheCausewayPersistenceJDOprovider>> {
- BackgroundColor #438dd5
- FontColor #fffffe
- BorderColor #2e6295
- shadowing false
-}
-skinparam rectangle<<JDO.ApacheCausewayPersistenceJDOProviderDataNucleus>> {
- BackgroundColor #438dd5
- FontColor #fffffe
- BorderColor #2e6295
- shadowing false
-}
-skinparam rectangle<<JDO>> {
- BorderColor #9a9a9a
- FontColor #9a9a9a
- shadowing false
-}
-
-rectangle "JDO\n<size:10>[Software System]</size>" <<JDO>> {
- rectangle "==Apache Causeway Persistence - JDO\n<size:10>[Container: packaging: pom]</size>" <<JDO.ApacheCausewayPersistenceJDO>> as JDO.ApacheCausewayPersistenceJDO
- rectangle "==Apache Causeway Persistence - JDO (applib)\n<size:10>[Container: packaging: jar]</size>" <<JDO.ApacheCausewayPersistenceJDOapplib>> as JDO.ApacheCausewayPersistenceJDOapplib
- rectangle "==Apache Causeway Persistence - JDO Provider (DataNucleus)\n<size:10>[Container: packaging: jar]</size>" <<JDO.ApacheCausewayPersistenceJDOProviderDataNucleus>> as JDO.ApacheCausewayPersistenceJDOProviderDataNucleus
- rectangle "==Apache Causeway Persistence - JDO (integration)\n<size:10>[Container: packaging: jar]</size>" <<JDO.ApacheCausewayPersistenceJDOintegration>> as JDO.ApacheCausewayPersistenceJDOintegration
- rectangle "==Apache Causeway Persistence - JDO (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<JDO.ApacheCausewayPersistenceJDOmetamodel>> as JDO.ApacheCausewayPersistenceJDOmetamodel
- rectangle "==Apache Causeway Persistence - JDO (provider)\n<size:10>[Container: packaging: jar]</size>" <<JDO.ApacheCausewayPersistenceJDOprovider>> as JDO.ApacheCausewayPersistenceJDOprovider
- rectangle "==Apache Causeway Persistence - JDO (Spring)\n<size:10>[Container: packaging: jar]</size>" <<JDO.ApacheCausewayPersistenceJDOSpring>> as JDO.ApacheCausewayPersistenceJDOSpring
-}
-
-JDO.ApacheCausewayPersistenceJDO .[#707070,thickness=2].> JDO.ApacheCausewayPersistenceJDOProviderDataNucleus : "<color:#707070>"
-JDO.ApacheCausewayPersistenceJDO .[#707070,thickness=2].> JDO.ApacheCausewayPersistenceJDOintegration : "<color:#707070>"
-JDO.ApacheCausewayPersistenceJDO .[#707070,thickness=2].> JDO.ApacheCausewayPersistenceJDOmetamodel : "<color:#707070>"
-JDO.ApacheCausewayPersistenceJDO .[#707070,thickness=2].> JDO.ApacheCausewayPersistenceJDOprovider : "<color:#707070>"
-JDO.ApacheCausewayPersistenceJDO .[#707070,thickness=2].> JDO.ApacheCausewayPersistenceJDOSpring : "<color:#707070>"
-JDO.ApacheCausewayPersistenceJDO .[#707070,thickness=2].> JDO.ApacheCausewayPersistenceJDOapplib : "<color:#707070>"
-@enduml
-----
-
-.Projects/Modules (JDO)
-[cols="3a,5a", options="header"]
-|===
-|Coordinates |Description
-
-|Apache Causeway Persistence - JDO
-[source,yaml]
-----
-Group: org.apache.causeway.persistence
-Artifact: causeway-persistence-jdo
-Type: pom
-Directory: /persistence/jdo
-----
-|Supplementary applib for JDO persistence
-
-|Apache Causeway Persistence - JDO (applib)
-[source,yaml]
-----
-Group: org.apache.causeway.persistence
-Artifact: causeway-persistence-jdo-applib
-Type: jar
-Directory: /persistence/jdo/applib
-----
-|Supplementary applib for JDO persistence
-
-.Dependencies
-****
-org.apache.causeway.commons:causeway-commons:jar:<managed> +
-org.apache.causeway.core:causeway-applib:jar:<managed> +
-org.datanucleus:datanucleus-rdbms:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
-****
-
-.Document Index Entries
-****
-xref:refguide:persistence:index/jdo/applib/CausewayModulePersistenceJdoApplib.adoc[CausewayModulePersistenceJdoApplib], xref:refguide:persistence:index/jdo/applib/services/JdoSupportService.adoc[JdoSupportService], xref:refguide:persistence:index/jdo/applib/types/AddressLine.adoc[AddressLine], xref:refguide:persistence:index/jdo/applib/types/Description.adoc[Description], xref:refguide:persistence:index/jdo/applib/types/Email.adoc[Email], xref:refguide:persistence:index/jdo/applib/types/ [...]
-****
-
-|Apache Causeway Persistence - JDO Provider (DataNucleus)
-[source,yaml]
-----
-Group: org.apache.causeway.persistence
-Artifact: causeway-persistence-jdo-datanucleus
-Type: jar
-Directory: /persistence/jdo/datanucleus
-----
-|JDO Implementation (powered by DataNucleus)
-
-.Components
-****
-o.a.i.persistence.jdo.datanucleus.changetracking.PreAndPostValueEvaluatorServiceJdo +
-o.a.i.persistence.jdo.datanucleus.entities.DnEntityStateProvider +
-o.a.i.persistence.jdo.datanucleus.exrecog.JdoObjectNotFoundRecognizer +
-o.a.i.persistence.jdo.datanucleus.jdosupport.JdoSupportServiceDefault +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnByteIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnCharIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnDatastoreIdImplValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnDatastoreUniqueLongIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnIntIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnLongIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnObjectIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnScoidValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnShortIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.DnStringIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.JdoByteIdentityValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.JdoCharIdentityValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.JdoDatastoreIdValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.JdoIntIdentityValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.JdoLongIdentityValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.JdoObjectIdentityValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.JdoShortIdentityValueSemantics +
-o.a.i.persistence.jdo.datanucleus.valuetypes.JdoStringIdentityValueSemantics +
-****
-
-.Dependencies
-****
-com.h2database:h2:jar:<managed> +
-org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> +
-org.apache.causeway.core:causeway-core-runtime:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-integration:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-provider:jar:<managed> +
-org.datanucleus:datanucleus-api-jdo:jar:<managed> +
-org.datanucleus:datanucleus-core:jar:<managed> +
-org.datanucleus:datanucleus-jdo-query:jar:<managed> +
-org.datanucleus:datanucleus-jodatime:jar:<managed> +
-org.datanucleus:datanucleus-rdbms:jar:<managed> +
-org.springframework.boot:spring-boot-starter-jdbc:jar:<managed> +
-****
-
-.Document Index Entries
-****
-xref:refguide:persistence:index/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.adoc[CausewayModulePersistenceJdoDatanucleus], xref:refguide:persistence:index/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleusMixins.adoc[CausewayModulePersistenceJdoDatanucleusMixins], xref:refguide:persistence:index/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc[JdoLifecycleListener], xref:refguide:persistence:index/jdo/datanucleus/dialect/DnJdoDialect.adoc[DnJdoDialect], xref:refg [...]
-****
-
-|Apache Causeway Persistence - JDO (integration)
-[source,yaml]
-----
-Group: org.apache.causeway.persistence
-Artifact: causeway-persistence-jdo-integration
-Type: jar
-Directory: /persistence/jdo/integration
-----
-|JDO Integration (powered by DataNucleus)
-
-.Dependencies
-****
-org.apache.causeway.commons:causeway-commons:jar:<managed> +
-org.apache.causeway.core:causeway-applib:jar:<managed> +
-org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> +
-org.apache.causeway.core:causeway-core-runtime:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-commons:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-applib:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-metamodel:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-spring:jar:<managed> +
-****
-
-|Apache Causeway Persistence - JDO (metamodel)
-[source,yaml]
-----
-Group: org.apache.causeway.persistence
-Artifact: causeway-persistence-jdo-metamodel
-Type: jar
-Directory: /persistence/jdo/metamodel
-----
-|JDO Metamodel Facets / Programming Model
-
-.Components
-****
-o.a.i.persistence.jdo.metamodel.JdoProgrammingModel +
-****
-
-.Dependencies
-****
-org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> +
-org.apache.causeway.core:causeway-core-runtime:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-commons:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-applib:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-provider:jar:<managed> +
-****
-
-|Apache Causeway Persistence - JDO (provider)
-[source,yaml]
-----
-Group: org.apache.causeway.persistence
-Artifact: causeway-persistence-jdo-provider
-Type: jar
-Directory: /persistence/jdo/provider
-----
-|JDO Provider to be implemented by any actual JDO provider eg. DataNucleus.
-
-.Dependencies
-****
-org.apache.causeway.core:causeway-core-metamodel:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-applib:jar:<managed> +
-org.datanucleus:datanucleus-rdbms:jar:<managed> +
-****
-
-|Apache Causeway Persistence - JDO (Spring)
-[source,yaml]
-----
-Group: org.apache.causeway.persistence
-Artifact: causeway-persistence-jdo-spring
-Type: jar
-Directory: /persistence/jdo/spring
-----
-|JDO Spring integration.
-
-This is a fork of the Spring ORM JDO sources at github,
-for which support had been dropped back in 2016 [1].
-
-Credits to the original authors. See also docs [2].
-
-[1] https://github.com/spring-projects/spring-framework/issues/18702
-[2] https://docs.spring.io/spring-framework/docs/3.0.0.RC2/reference/html/ch13s04.html
-
-.Dependencies
-****
-jakarta.servlet:jakarta.servlet-api:jar:<managed> +
-org.apache.causeway.commons:causeway-commons:jar:<managed> +
-org.apache.causeway.core:causeway-applib:jar:<managed> +
-org.apache.causeway.core:causeway-core-config:jar:<managed> +
-org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-applib:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-provider:jar:<managed> +
-org.springframework:spring-jdbc:jar:<managed> +
-org.springframework:spring-web:jar:<managed> +
-****
-|===
-
=== JPA
[plantuml,JPA,svg]
@@ -2199,7 +1919,7 @@ JPA.ApacheCausewayPersistenceJPA .[#707070,thickness=2].> JPA.ApacheCausewayPers
.Projects/Modules (JPA)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Persistence - JPA
[source,yaml]
@@ -2360,7 +2080,7 @@ rectangle "Security\n<size:10>[Software System]</size>" <<Security>> {
.Projects/Modules (Security)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Security - Simple
[source,yaml]
@@ -2431,7 +2151,7 @@ rectangle "Bypass\n<size:10>[Software System]</size>" <<Bypass>> {
.Projects/Modules (Bypass)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Security - Bypass
[source,yaml]
@@ -2499,7 +2219,7 @@ rectangle "Keycloak\n<size:10>[Software System]</size>" <<Keycloak>> {
.Projects/Modules (Keycloak)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Security - Keycloak
[source,yaml]
@@ -2576,7 +2296,7 @@ rectangle "Shiro\n<size:10>[Software System]</size>" <<Shiro>> {
.Projects/Modules (Shiro)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Security - Shiro
[source,yaml]
@@ -2652,7 +2372,7 @@ rectangle "Spring\n<size:10>[Software System]</size>" <<Spring>> {
.Projects/Modules (Spring)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Security - Spring
[source,yaml]
@@ -2762,7 +2482,7 @@ ViewerCommons.ApacheCausewayViewerCommons .[#707070,thickness=2].> ViewerCommons
.Projects/Modules (Viewer Commons)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Viewer - Commons
[source,yaml]
@@ -2944,7 +2664,7 @@ GraphQL.ApacheCausewayViewerGraphQL .[#707070,thickness=2].> GraphQL.ApacheCause
.Projects/Modules (GraphQL)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Viewer - GraphQL
[source,yaml]
@@ -3165,12 +2885,6 @@ skinparam rectangle<<RestfulObjects.ApacheCausewayViewerROClient>> {
BorderColor #2e6295
shadowing false
}
-skinparam rectangle<<RestfulObjects.ApacheCausewayViewerROJAXRSResteasy>> {
- BackgroundColor #438dd5
- FontColor #fffffe
- BorderColor #2e6295
- shadowing false
-}
skinparam rectangle<<RestfulObjects.ApacheCausewayViewerRORendering>> {
BackgroundColor #438dd5
FontColor #fffffe
@@ -3205,7 +2919,6 @@ rectangle "Restful Objects\n<size:10>[Software System]</size>" <<RestfulObjects>
rectangle "==Apache Causeway Viewer - RO\n<size:10>[Container: packaging: pom]</size>" <<RestfulObjects.ApacheCausewayViewerRO>> as RestfulObjects.ApacheCausewayViewerRO
rectangle "==Apache Causeway Viewer - RO (AppLib)\n<size:10>[Container: packaging: jar]</size>" <<RestfulObjects.ApacheCausewayViewerROAppLib>> as RestfulObjects.ApacheCausewayViewerROAppLib
rectangle "==Apache Causeway Viewer - RO (Client)\n<size:10>[Container: packaging: jar]</size>" <<RestfulObjects.ApacheCausewayViewerROClient>> as RestfulObjects.ApacheCausewayViewerROClient
- rectangle "==Apache Causeway Viewer - RO (JAX-RS Resteasy)\n<size:10>[Container: packaging: jar]</size>" <<RestfulObjects.ApacheCausewayViewerROJAXRSResteasy>> as RestfulObjects.ApacheCausewayViewerROJAXRSResteasy
rectangle "==Apache Causeway Viewer - RO (Rendering)\n<size:10>[Container: packaging: jar]</size>" <<RestfulObjects.ApacheCausewayViewerRORendering>> as RestfulObjects.ApacheCausewayViewerRORendering
rectangle "==Apache Causeway Viewer - RO (Test)\n<size:10>[Container: packaging: jar]</size>" <<RestfulObjects.ApacheCausewayViewerROTest>> as RestfulObjects.ApacheCausewayViewerROTest
rectangle "==Apache Causeway Viewer - RO (Testing)\n<size:10>[Container: packaging: jar]</size>" <<RestfulObjects.ApacheCausewayViewerROTesting>> as RestfulObjects.ApacheCausewayViewerROTesting
@@ -3214,7 +2927,6 @@ rectangle "Restful Objects\n<size:10>[Software System]</size>" <<RestfulObjects>
RestfulObjects.ApacheCausewayViewerRO .[#707070,thickness=2].> RestfulObjects.ApacheCausewayViewerROAppLib : "<color:#707070>"
RestfulObjects.ApacheCausewayViewerRO .[#707070,thickness=2].> RestfulObjects.ApacheCausewayViewerROClient : "<color:#707070>"
-RestfulObjects.ApacheCausewayViewerRO .[#707070,thickness=2].> RestfulObjects.ApacheCausewayViewerROJAXRSResteasy : "<color:#707070>"
RestfulObjects.ApacheCausewayViewerRO .[#707070,thickness=2].> RestfulObjects.ApacheCausewayViewerRORendering : "<color:#707070>"
RestfulObjects.ApacheCausewayViewerRO .[#707070,thickness=2].> RestfulObjects.ApacheCausewayViewerROTest : "<color:#707070>"
RestfulObjects.ApacheCausewayViewerRO .[#707070,thickness=2].> RestfulObjects.ApacheCausewayViewerROTesting : "<color:#707070>"
@@ -3225,7 +2937,7 @@ RestfulObjects.ApacheCausewayViewerRO .[#707070,thickness=2].> RestfulObjects.Ap
.Projects/Modules (Restful Objects)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Viewer - RO
[source,yaml]
@@ -3281,39 +2993,26 @@ org.springframework:spring-context:jar:<managed> +
xref:refguide:viewer:index/restfulobjects/client/ActionParameterListBuilder.adoc[ActionParameterListBuilder], xref:refguide:viewer:index/restfulobjects/client/RestfulClient.adoc[RestfulClient], xref:refguide:viewer:index/restfulobjects/client/RestfulClientConfig.adoc[RestfulClientConfig], xref:refguide:viewer:index/restfulobjects/client/auth/AuthFilter.adoc[AuthFilter], xref:refguide:viewer:index/restfulobjects/client/log/ClientConversationFilter.adoc[ClientConversationFilter], xref:refg [...]
****
-|Apache Causeway Viewer - RO (JAX-RS Resteasy)
+|Apache Causeway Viewer - RO
[source,yaml]
----
Group: org.apache.causeway.viewer
-Artifact: causeway-viewer-restfulobjects-jaxrsresteasy
+Artifact: causeway-viewer-restfulobjects-viewer
Type: jar
-Directory: /viewers/restfulobjects/jaxrs-resteasy
+Directory: /viewers/restfulobjects/viewer
----
-|JAX-RS plugin using jboss resteasy.
+|JAX-RS plugin using Spring REST API.
-.Components
-****
-o.a.i.viewer.restfulobjects.jaxrsresteasy.conneg.RestfulObjectsJaxbWriterForXml +
-o.a.i.viewer.restfulobjects.jaxrsresteasy.webmodule.WebModuleJaxrsResteasy +
-****
.Dependencies
****
org.apache.causeway.viewer:causeway-viewer-restfulobjects-rendering:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-testing:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-viewer:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
-org.jboss.resteasy:resteasy-client:jar:${resteasy.version} +
-org.jboss.resteasy:resteasy-jackson2-provider:jar:${resteasy.version} +
-org.jboss.resteasy:resteasy-jaxb-provider:jar:<managed> +
-org.jboss.resteasy:resteasy-servlet-initializer:jar:${resteasy.version} +
-org.jboss.resteasy:resteasy-spring-boot-starter:jar:<managed> +
-org.jboss.resteasy.spring:resteasy-spring:jar:<managed> +
****
.Document Index Entries
****
-xref:refguide:viewer:index/restfulobjects/jaxrsresteasy/CausewayModuleViewerRestfulObjectsJaxrsResteasy.adoc[CausewayModuleViewerRestfulObjectsJaxrsResteasy], xref:refguide:viewer:index/restfulobjects/jaxrsresteasy/conneg/RestfulObjectsJaxbWriterForXml.adoc[RestfulObjectsJaxbWriterForXml], xref:refguide:viewer:index/restfulobjects/jaxrsresteasy/webmodule/WebModuleJaxrsResteasy.adoc[WebModuleJaxrsResteasy]
****
|Apache Causeway Viewer - RO (Rendering)
@@ -3378,7 +3077,6 @@ org.apache.causeway.security:causeway-security-bypass:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-commons-services:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-client:jar:<managed> +
-org.apache.causeway.viewer:causeway-viewer-restfulobjects-jaxrsresteasy:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-rendering:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-viewer:jar:<managed> +
org.glassfish.jersey.core:jersey-client:jar:<managed> +
@@ -3522,7 +3220,7 @@ Wicket.ApacheCausewayViewerWicket .[#707070,thickness=2].> Wicket.ApacheCauseway
.Projects/Modules (Wicket)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Viewer - Wicket
[source,yaml]
@@ -3606,7 +3304,6 @@ org.apache.wicket:wicket-auth-roles:jar:<managed> +
org.apache.wicket:wicket-devutils:jar:<managed> +
org.apache.wicket:wicket-extensions:jar:<managed> +
org.apache.wicket:wicket-spring:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
org.ow2.asm:asm-util:jar:<managed> +
org.slf4j:slf4j-api:jar:<managed> +
org.webjars:datatables:jar:<managed> +
@@ -3740,7 +3437,7 @@ Valuetypes.ApacheCausewayValJodaTimeparent .[#707070,thickness=2].> Valuetypes.A
.Projects/Modules (Valuetypes)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Value types
[source,yaml]
@@ -3914,7 +3611,7 @@ Asciidoc.ApacheCausewayValAsciidoctorui .[#707070,thickness=2].> Asciidoc.Apache
.Projects/Modules (Asciidoc)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Val - Asciidoctor (parent)
[source,yaml]
@@ -4011,7 +3708,6 @@ Directory: /valuetypes/asciidoc/persistence-jdo
****
org.apache.causeway.core:causeway-core-metamodel:jar:<managed> +
org.apache.causeway.valuetypes:causeway-valuetypes-asciidoc-applib:jar:<managed> +
-org.datanucleus:datanucleus-core:jar:<managed> +
****
.Document Index Entries
@@ -4172,7 +3868,7 @@ Markdown.ApacheCausewayValMarkdownparent .[#707070,thickness=2].> Markdown.Apach
.Projects/Modules (Markdown)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Val - Markdown (parent)
[source,yaml]
@@ -4240,7 +3936,6 @@ Directory: /valuetypes/markdown/persistence-jdo
****
org.apache.causeway.core:causeway-core-metamodel:jar:<managed> +
org.apache.causeway.valuetypes:causeway-valuetypes-markdown-applib:jar:<managed> +
-org.datanucleus:datanucleus-core:jar:<managed> +
****
.Document Index Entries
@@ -4398,7 +4093,7 @@ Vega.ApacheCausewayValVegaparent .[#707070,thickness=2].> Vega.ApacheCausewayVal
.Projects/Modules (Vega)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Val - Vega (parent)
[source,yaml]
@@ -4465,7 +4160,6 @@ Directory: /valuetypes/vega/persistence-jdo
****
org.apache.causeway.core:causeway-core-metamodel:jar:<managed> +
org.apache.causeway.valuetypes:causeway-valuetypes-vega-applib:jar:<managed> +
-org.datanucleus:datanucleus-core:jar:<managed> +
****
.Document Index Entries
@@ -4892,7 +4586,7 @@ Extensions.ApacheCausewayExtTitleCache .[#707070,thickness=2].> Extensions.Apach
.Projects/Modules (Extensions)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Extensions
[source,yaml]
@@ -4961,7 +4655,6 @@ o.a.i.extensions.audittrail.jdo.dom.AuditTrailEntryRepository +
org.apache.causeway.core:causeway-core-runtime:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-audittrail-applib:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-audittrail-applib:test-jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> +
****
@@ -5460,7 +5153,6 @@ o.a.i.extensions.secman.jdo.util.RegexReplacer +
org.apache.causeway.core:causeway-core-runtime:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-secman-applib:test-jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-secman-integration:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> +
****
@@ -5558,7 +5250,6 @@ o.a.i.extensions.sessionlog.jdo.dom.SessionLogEntryRepository +
org.apache.causeway.core:causeway-core-runtime:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-sessionlog-applib:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-sessionlog-applib:test-jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> +
****
@@ -5825,7 +5516,7 @@ ApplibExcel.ApacheCausewayExtExcelparent .[#707070,thickness=2].> ApplibExcel.Ap
.Projects/Modules (Applib: Excel)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Ext - Excel (parent)
[source,yaml]
@@ -5879,7 +5570,6 @@ Directory: /extensions/core/excel/fixture
org.apache.causeway.core:causeway-applib:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-excel-applib:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-excel-testing:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
****
@@ -5894,7 +5584,6 @@ Directory: /extensions/core/excel/integtests
|.Dependencies
****
org.apache.causeway.extensions:causeway-extensions-excel-fixtures:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fakedata-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> +
@@ -5988,7 +5677,7 @@ CoreCommandLog.ApacheCausewayExtCommandLog .[#707070,thickness=2].> CoreCommandL
.Projects/Modules (Core: Command Log)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Ext - Command Log
[source,yaml]
@@ -6052,7 +5741,6 @@ o.a.i.extensions.commandlog.jdo.dom.CommandLogEntryRepository +
****
org.apache.causeway.extensions:causeway-extensions-commandlog-applib:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-commandlog-applib:test-jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-unittestsupport-applib:jar:<managed> +
****
@@ -6141,7 +5829,7 @@ CoreDocGen.ApacheCausewayExtDocgen .[#707070,thickness=2].> CoreDocGen.ApacheCau
.Projects/Modules (Core: DocGen)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Ext - Docgen
[source,yaml]
@@ -6250,7 +5938,7 @@ CoreExecutionLog.ApacheCausewayExtExecutionLog .[#707070,thickness=2].> CoreExec
.Projects/Modules (Core: Execution Log)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Ext - Execution Log
[source,yaml]
@@ -6309,7 +5997,6 @@ o.a.i.extensions.executionlog.jdo.dom.ExecutionLogEntryRepository +
****
org.apache.causeway.extensions:causeway-extensions-executionlog-applib:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-executionlog-applib:test-jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-unittestsupport-applib:jar:<managed> +
****
@@ -6421,7 +6108,7 @@ CoreExecutionOutbox.ApacheCausewayExtExecutionOutbox .[#707070,thickness=2].> Co
.Projects/Modules (Core: Execution Outbox)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Ext - Execution Outbox
[source,yaml]
@@ -6481,7 +6168,6 @@ o.a.i.extensions.executionoutbox.jdo.dom.ExecutionOutboxEntryRepository +
****
org.apache.causeway.extensions:causeway-extensions-executionoutbox-applib:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-executionoutbox-applib:test-jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-unittestsupport-applib:jar:<managed> +
****
@@ -6540,7 +6226,6 @@ org.apache.causeway.mavendeps:causeway-mavendeps-webapp:pom:<managed> +
org.apache.causeway.security:causeway-security-bypass:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-client:jar:<managed> +
-org.apache.causeway.viewer:causeway-viewer-restfulobjects-jaxrsresteasy:jar:<managed> +
****
.Document Index Entries
@@ -6598,7 +6283,7 @@ CoreExecutionRepublisher.ApacheCausewayExtExecutionRepublisher .[#707070,thickne
.Projects/Modules (Core: Execution Republisher)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Ext - Execution Republisher
[source,yaml]
@@ -6682,7 +6367,7 @@ CoreFlyway.ApacheCausewayExtFlyway .[#707070,thickness=2].> CoreFlyway.ApacheCau
.Projects/Modules (Core: Flyway)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Ext - Flyway
[source,yaml]
@@ -6777,7 +6462,7 @@ CoreTabular.ApacheCausewayExtTabularparent .[#707070,thickness=2].> CoreTabular.
.Projects/Modules (Core: Tabular)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Ext - Tabular (parent)
[source,yaml]
@@ -7111,7 +6796,7 @@ RegressionTests.ApacheCausewayRegressionTestsCmdExecAuditSession .[#707070,thick
.Projects/Modules (Regression Tests)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Regression Tests
[source,yaml]
@@ -7147,14 +6832,12 @@ org.apache.causeway.extensions:causeway-extensions-secman-integration:jar:<manag
org.apache.causeway.extensions:causeway-extensions-sse-metamodel:jar:<managed> +
org.apache.causeway.mavendeps:causeway-mavendeps-webapp:pom:<managed> +
org.apache.causeway.persistence:causeway-persistence-commons:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.persistence:causeway-persistence-jpa-eclipselink:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.valuetypes:causeway-valuetypes-asciidoc-metamodel:jar:<managed> +
org.apache.causeway.valuetypes:causeway-valuetypes-markdown-metamodel:jar:<managed> +
org.apache.causeway.valuetypes:causeway-valuetypes-vega-metamodel:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-client:jar:<managed> +
-org.apache.causeway.viewer:causeway-viewer-restfulobjects-jaxrsresteasy:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-wicket-viewer:jar:<managed> +
org.apache.wicket:wicket-tester:jar:<managed> +
****
@@ -7173,7 +6856,6 @@ org.apache.causeway.extensions:causeway-extensions-secman-persistence-jdo:jar:<m
org.apache.causeway.mavendeps:causeway-mavendeps-webapp:pom:<managed> +
org.apache.causeway.regressiontests:causeway-regressiontests-base:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-client:jar:<managed> +
-org.apache.causeway.viewer:causeway-viewer-restfulobjects-jaxrsresteasy:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-wicket-viewer:jar:<managed> +
****
@@ -7193,7 +6875,6 @@ org.apache.causeway.persistence:causeway-persistence-jpa-eclipselink:jar:<manage
org.apache.causeway.regressiontests:causeway-regressiontests-base:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-client:jar:<managed> +
-org.apache.causeway.viewer:causeway-viewer-restfulobjects-jaxrsresteasy:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-wicket-viewer:jar:<managed> +
****
@@ -7256,7 +6937,6 @@ org.apache.causeway.extensions:causeway-extensions-commandlog-persistence-jdo:ja
org.apache.causeway.extensions:causeway-extensions-executionlog-persistence-jdo:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-executionoutbox-persistence-jdo:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-sessionlog-persistence-jdo:jar:<managed> +
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.regressiontests:causeway-regressiontests-cmdexecauditsess-generic:jar:<managed> +
org.apache.causeway.security:causeway-security-bypass:jar:<managed> +
****
@@ -7306,7 +6986,6 @@ Directory: /regressiontests/core-wrapperfactory
----
|.Dependencies
****
-org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> +
org.apache.causeway.regressiontests:causeway-regressiontests-base:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
****
@@ -7456,7 +7135,6 @@ org.apache.causeway.mavendeps:causeway-mavendeps-webapp:pom:<managed> +
org.apache.causeway.regressiontests:causeway-regressiontests-base-jdo:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-client:jar:<managed> +
-org.apache.causeway.viewer:causeway-viewer-restfulobjects-jaxrsresteasy:jar:<managed> +
****
|Apache Causeway Regression Tests - Rest JPA
@@ -7475,7 +7153,6 @@ org.apache.causeway.persistence:causeway-persistence-jpa-eclipselink:jar:<manage
org.apache.causeway.regressiontests:causeway-regressiontests-base-jpa:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-client:jar:<managed> +
-org.apache.causeway.viewer:causeway-viewer-restfulobjects-jaxrsresteasy:jar:<managed> +
****
|Apache Causeway Regression Tests - Value Types
@@ -7582,7 +7259,7 @@ rectangle "Kroviz Client\n<size:10>[Software System]</size>" <<KrovizClient>> {
.Projects/Modules (Kroviz Client)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Incubator - Client kroViz
[source,yaml]
@@ -7652,7 +7329,7 @@ CommandReplay.ApacheCausewayIncCoreCommandReplay .[#707070,thickness=2].> Comman
.Projects/Modules (Command Replay)
[cols="3a,5a", options="header"]
|===
-|Coordinates |Description
+|Coordinates |Description
|Apache Causeway Inc - Core Command Replay
[source,yaml]
@@ -7708,7 +7385,6 @@ org.apache.causeway.core:causeway-schema:jar:<managed> +
org.apache.causeway.extensions:causeway-extensions-commandlog-applib:jar:<managed> +
org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> +
org.apache.causeway.viewer:causeway-viewer-restfulobjects-client:jar:<managed> +
-org.apache.causeway.viewer:causeway-viewer-restfulobjects-jaxrsresteasy:jar:<managed> +
org.glassfish.jersey.ext:jersey-spring6:jar:<managed> +
org.springframework.boot:spring-boot-starter-quartz:jar:<managed> +
****
diff --git a/core/config/generateConfigDocs.groovy b/core/config/generateConfigDocs.groovy
index 0c6fbe460a3..d452bb411cc 100644
--- a/core/config/generateConfigDocs.groovy
+++ b/core/config/generateConfigDocs.groovy
@@ -183,25 +183,12 @@ groups+= new PropertyGroup() {{
searchOrder = 501
}}
-groups+= new PropertyGroup() {{
- prefix = "datanucleus"
- name = "DataNucleus Configuration"
- properties: []
- searchOrder = 100
-}}
-
groups+= new PropertyGroup() {{
prefix = "eclipselink"
name = "Eclipselink Configuration"
searchOrder = 501
}}
-groups+= new PropertyGroup() {{
- prefix = "resteasy"
- name = "RestEasy Configuration"
- searchOrder = 501
-}}
-
groups+= new PropertyGroup() {{
prefix = "spring"
name = "Spring Configuration"
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc b/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
index 4ac647d4127..818efac76a1 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
@@ -15,9 +15,7 @@
** xref:refguide:config:sections/causeway.viewer.graphql.adoc[GraphQL API]
** xref:refguide:config:sections/causeway.viewer.restfulobjects.adoc[REST API (Restful Objects Viewer)]
** xref:refguide:config:sections/causeway.viewer.wicket.adoc[Wicket Viewer]
-** xref:refguide:config:sections/datanucleus.adoc[DataNucleus Configuration]
** xref:refguide:config:sections/eclipselink.adoc[Eclipselink Configuration]
-** xref:refguide:config:sections/resteasy.adoc[RestEasy Configuration]
** xref:refguide:config:sections/causeway.extensions.adoc[Extensions]
** xref:refguide:config:sections/causeway.value-types.adoc[Value types]
** xref:refguide:config:sections/causeway.testing.adoc[Testing]
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/datanucleus.adoc b/core/config/src/main/adoc/modules/config/pages/sections/datanucleus.adoc
deleted file mode 100644
index 75e038e9e6e..00000000000
--- a/core/config/src/main/adoc/modules/config/pages/sections/datanucleus.adoc
+++ /dev/null
@@ -1,196 +0,0 @@
-= DataNucleus Configuration
-:page-role: -toc -narrow
-
-
-: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 [...]
-
-include::../section-hooks/datanucleus~pre.adoc[]
-
-[cols="3a,2a,5a", options="header"]
-|===
-|Property
-|Default
-|Description
-|
-[[datanucleus.cache.level2.mode]]
-datanucleus.cache.level2.mode
-
-| unspecified
-| The mode of operation of the L2 cache, deciding which entities are cached.
-
-The default (UNSPECIFIED) is the same as DISABLE++_++SELECTIVE.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#cache_level2[DataNucleus Cache docs].
-
-
-|
-[[datanucleus.cache.level2.type]]
-datanucleus.cache.level2.type
-
-| soft
-| Name of the type of Level 2 Cache to use.
-
-Can be used to interface with external caching products. Use "none" to turn off L2 caching; other values include "soft", "weak", "javax.cache".
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#cache_level2[DataNucleus Cache docs].
-
-
-|
-[[datanucleus.identifier.case]]
-datanucleus.identifier.case
-
-|
-| Which case to use in generated table/column identifier names. See also the Datastore Identifier Guide. RDBMS defaults to UPPERCASE.
-
-
-|
-[[datanucleus.manage-relationships]]
-datanucleus.manage-relationships
-
-| true
-| Whether DataNucleus will try to manage bidirectional relations, correcting the input objects so that all relations are consistent.
-
-This process runs when flush()/commit() is called. You can set it to false if you always set both sides of a relation when persisting/updating.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs].
-
-
-|
-[[datanucleus.persistence-by-reachability-at-commit]]
-datanucleus. +
-persistence-by-reachability-at- +
-commit
-
-| true
-| Whether to run the "persistence-by-reachability" algorithm at commit time.
-
-This means that objects that were reachable at a call to makePersistent() but that are no longer persistent will be removed from persistence. For performance improvements, consider turning this off.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs].
-
-
-|
-[[datanucleus.schema.auto-create-all]]
-datanucleus.schema.auto-create-all
-
-|
-| Whether to automatically (but lazily) generate any schema, tables, columns, constraints that don’t exist.
-
-For integration testing, it's generally better to use datanucleus.schema.generateDatabase.mode, which will eagerly create all tables on startup.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-@see #setAutoCreateColumns(boolean) @see #setAutoCreateConstraints(boolean) @see #setAutoCreateTables(boolean) @see GenerateDatabase#setMode(String)
-
-
-|
-[[datanucleus.schema.auto-create-columns]]
-datanucleus.schema. +
-auto-create-columns
-
-|
-| Whether to automatically generate any columns that don’t exist.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-@see #setAutoCreateAll(boolean) @see #setAutoCreateConstraints(boolean) @see #setAutoCreateTables(boolean) @see GenerateDatabase#setMode(String)
-
-
-|
-[[datanucleus.schema.auto-create-constraints]]
-datanucleus.schema. +
-auto-create-constraints
-
-|
-| Whether to automatically generate any constraints that don’t exist.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-@see #setAutoCreateAll(boolean) @see #setAutoCreateColumns(boolean) @see #setAutoCreateTables(boolean) @see GenerateDatabase#setMode(String)
-
-
-|
-[[datanucleus.schema.auto-create-database]]
-datanucleus.schema. +
-auto-create-database
-
-|
-| Whether to automatically generate any database (catalog/schema) that doesn’t exist. This depends very much on whether the datastore in question supports this operation.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-
-|
-[[datanucleus.schema.auto-create-tables]]
-datanucleus.schema. +
-auto-create-tables
-
-|
-| Whether to automatically generate any tables that don’t exist.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-@see #setAutoCreateAll(boolean) @see #setAutoCreateColumns(boolean) @see #setAutoCreateConstraints(boolean) @see GenerateDatabase#setMode(String)
-
-
-|
-[[datanucleus.schema.generate-database.mode]]
-datanucleus.schema. +
-generate-database.mode
-
-| none
-| Whether to eagerly create all tables at startup.
-
-For integration testing, this is generally preferred to using datanucleus.schema.autoCreateAll, because the `autoCreateAll` will only create tables lazily, when first persisted to. While lazily initialization is potentially quicker, it can cause issues (eg with rollup mapping to super class tables).
-
-Valid values: *`none`*, `create`, `drop-and-create`, `drop`.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-
-|
-[[datanucleus.schema.validate-all]]
-datanucleus.schema.validate-all
-
-|
-| Alias for defining `validateTables`, `validateColumns` and `validateConstraints` as true.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-
-|
-[[datanucleus.schema.validate-columns]]
-datanucleus.schema. +
-validate-columns
-
-|
-| Whether to validate columns against the persistence definition. This refers to the column detail structure and NOT to whether the column exists or not.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-
-|
-[[datanucleus.schema.validate-constraints]]
-datanucleus.schema. +
-validate-constraints
-
-|
-| Whether to validate table constraints against the persistence definition.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-
-|
-[[datanucleus.schema.validate-tables]]
-datanucleus.schema.validate-tables
-
-|
-| Whether to validate tables against the persistence definition.
-
-For more details, see https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#pmf_properties[DataNucleus Config Property docs] and the https://www.datanucleus.org/products/accessplatform_6_0/jdo/persistence.html#schema[DataNucleus Schema Guide].
-
-
-
-|===
-
-include::../section-hooks/datanucleus~post.adoc[]
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/CausewayPresets.java b/core/config/src/main/java/org/apache/causeway/core/config/presets/CausewayPresets.java
index 1a3ef08d82f..b6cfc73569f 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/CausewayPresets.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/CausewayPresets.java
@@ -32,9 +32,8 @@ public final class CausewayPresets {
public static final String IntrospectLazily = "classpath:/org/apache/causeway/core/config/presets/IntrospectLazily.properties";
public static final String IntrospectFully = "classpath:/org/apache/causeway/core/config/presets/IntrospectFully.properties";
- public static final String DebugPersistence = "classpath:/org/apache/causeway/core/config/presets/DebugPersistence.properties";
- public static final String DebugRequestScopedServices = "classpath:/org/apache/causeway/core/config/presets/DebugRequestScopedServices.properties";
public static final String DebugTransactionScopedServices = "classpath:/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties";
+ public static final String DebugInteractionScopedServices = "classpath:/org/apache/causeway/core/config/presets/DebugInteractionScopedServices.properties";
public static final String DebugDiscovery = "classpath:/org/apache/causeway/core/config/presets/DebugDiscovery.properties";
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugRequestScopedServices.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugInteractionScopedServices.properties
similarity index 54%
rename from core/config/src/main/java/org/apache/causeway/core/config/presets/DebugRequestScopedServices.properties
rename to core/config/src/main/java/org/apache/causeway/core/config/presets/DebugInteractionScopedServices.properties
index a2c9a6f64c9..ab612d577b6 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugRequestScopedServices.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugInteractionScopedServices.properties
@@ -15,8 +15,10 @@
# specific language governing permissions and limitations
# under the License.
-# -- framework internal request scoped --
-logging.level.org.apache.causeway.viewer.restfulobjects.rendering.service.acceptheader.AcceptHeaderServiceForRest = DEBUG
-logging.level.org.apache.causeway.applib.services.iactn.InteractionProvider = DEBUG
-logging.level.org.apache.causeway.applib.services.scratchpad.Scratchpad = DEBUG
-logging.level.org.apache.causeway.core.runtimeservices.publish.PublisherDispatchServiceDefault = DEBUG
+# -- framework interaction scoped --
+logging.level.org.apache.causeway.applib.services.queryresultscache.QueryResultsCache = DEBUG
+logging.level.org.apache.causeway.core.runtimeservices.publish.ExecutionPublisherDefault = DEBUG
+logging.level.org.apache.causeway.extensions.secman.integration.authorizor.AuthorizorSecman.PermissionCache = DEBUG
+logging.level.org.apache.causeway.extensions.secman.integration.spiimpl.ImpersonateMenuAdvisorForSecman.Cache = DEBUG
+logging.level.org.apache.causeway.persistence.commons.integration.changetracking.PreAndPostValueEvaluatorServiceDefault = DEBUG
+logging.level.org.apache.causeway.core.runtimeservices.scratchpad.ScratchpadDefault = DEBUG
\ No newline at end of file
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugPersistence.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugPersistence.properties
deleted file mode 100644
index ca113b80991..00000000000
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugPersistence.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-logging.level.org.apache.causeway.persistence.jdo.datanucleus.persistence.CausewayPlatformTransactionManagerForJdo = DEBUG
-logging.level.org.apache.causeway.persistence.jdo.datanucleus.persistence.PersistenceSession5 = DEBUG
-logging.level.org.apache.causeway.persistence.jdo.datanucleus.persistence.CausewayTransactionJdo = DEBUG
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties
index 86400f3e56d..94d9ecbd42f 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties
+++ b/core/config/src/main/java/org/apache/causeway/core/config/presets/DebugTransactionScopedServices.properties
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-# -- framework internal transaction scoped --
-logging.level.org.apache.causeway.persistence.jdo.datanucleus.metrics.MetricsServiceForJdo = DEBUG
-logging.level.org.apache.causeway.applib.services.queryresultscache.QueryResultsCache = DEBUG
-logging.level.org.apache.causeway.core.runtime.persistence.transaction.ChangedObjectsService = DEBUG
+# -- framework transaction scoped --
+logging.level.org.apache.causeway.persistence.commons.integration.changetracking.EntityChangeTrackerDefault = DEBUG
+logging.level.org.apache.causeway.core.transaction.scope.NoopTransactionSynchronizationService = DEBUG
+logging.level.org.apache.causeway.core.runtimeservices.publish.ObjectLifecyclePublisherDefault = DEBUG
diff --git a/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index b5de8019982..e70737e3f43 100644
--- a/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -1,10 +1,5 @@
{
"properties": [
- {
- "name": "datanucleus.identifier.case",
- "type": "org.apache.causeway.core.config.DatanucleusConfiguration.Identifier.Case",
- "description": "Which case to use in generated table/column identifier names. See also the Datastore Identifier Guide. RDBMS defaults to UPPERCASE."
- },
{
"name": "causeway.value-types.temporal.editing.date-pattern",
"type": "java.lang.String",
@@ -99,7 +94,7 @@
}
}]
},
-
+
{
"name": "causeway.viewer.wicket.themes.provider",
"providers": [{
@@ -232,23 +227,6 @@
"value": "None"
}
]
- },
- {
- "name": "datanucleus.schema.generate-database.mode",
- "values": [
- {
- "value": "none"
- },
- {
- "value": "create"
- },
- {
- "value": "drop-and-create"
- },
- {
- "value": "drop"
- }
- ]
}
]
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/classsubstitutor/ClassSubstitutorDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/classsubstitutor/ClassSubstitutorDefault.java
index 6805c4f0fc3..0bccbb6e227 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/classsubstitutor/ClassSubstitutorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/classsubstitutor/ClassSubstitutorDefault.java
@@ -37,7 +37,6 @@ public ClassSubstitutorDefault() {
ignoreApacheCausewayInternals();
ignoreSpringFramework();
ignoreJacksonAndGson();
- skipDataNucleusProxy();
}
protected void ignoreCglib() {
@@ -66,8 +65,4 @@ protected void ignoreJacksonAndGson() {
ignorePackage("com.google.gson.");
}
- protected void skipDataNucleusProxy() {
- skipProxyPackage("org.datanucleus.");
- }
-
}
diff --git a/core/webapp/src/main/java/org/apache/causeway/core/webapp/confmenu/ConfigurationViewServiceDefault.java b/core/webapp/src/main/java/org/apache/causeway/core/webapp/confmenu/ConfigurationViewServiceDefault.java
index fe69d64ca70..21eb852923f 100644
--- a/core/webapp/src/main/java/org/apache/causeway/core/webapp/confmenu/ConfigurationViewServiceDefault.java
+++ b/core/webapp/src/main/java/org/apache/causeway/core/webapp/confmenu/ConfigurationViewServiceDefault.java
@@ -133,10 +133,8 @@ private List<Map<String, ConfigurationProperty>> loadConfiguration() {
var env = loadEnvironment();
var primary = loadPrimary(List.of(
"causeway.",
- "resteasy.",
- "datanucleus.",
"eclipselink."));
- // we dont't want any duplicates to appear in secondary
+ // we don't want any duplicates to appear in secondary
var secondary = loadSecondary(Stream.concat(env.keySet().stream(), primary.keySet().stream())
.distinct()
.collect(Collectors.toSet()));
diff --git a/regressiontests/bootstrapping/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-domain-services.list b/regressiontests/bootstrapping/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-domain-services.list
index 8157404bdfa..29a2fb9ab87 100644
--- a/regressiontests/bootstrapping/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-domain-services.list
+++ b/regressiontests/bootstrapping/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-domain-services.list
@@ -29,7 +29,6 @@ org.apache.causeway.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompr
org.apache.causeway.extensions.fixtures.fixturescripts.FixtureScripts
ServiceRegistryDefault
UserServiceDefault$SudoServiceSpi
-org.apache.causeway.persistence.jdo.datanucleus.metrics.MetricsServiceForJdo
CommandDtoFactoryDefault
org.apache.causeway.core.runtimeservices.confmenu.ConfigurationViewServiceDefault
org.apache.causeway.core.runtimeservices.email.EmailServiceDefault
diff --git a/regressiontests/bootstrapping/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-requestscoped.list b/regressiontests/bootstrapping/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-requestscoped.list
index 688ad5b3b28..9f44dd2c336 100644
--- a/regressiontests/bootstrapping/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-requestscoped.list
+++ b/regressiontests/bootstrapping/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-requestscoped.list
@@ -20,6 +20,4 @@ org.apache.causeway.applib.services.iactn.InteractionProvider
org.apache.causeway.applib.services.queryresultscache.QueryResultsCacheInternal
org.apache.causeway.applib.services.scratchpad.Scratchpad
org.apache.causeway.core.runtimeservices.changes.ChangedObjectsServiceInternal
-org.apache.causeway.core.runtimeservices.metrics.MetricsServiceForJdo
PublisherDispatchServiceDefault
-org.apache.causeway.objectstore.jdo.datanucleus.service.support.TimestampService
diff --git a/regressiontests/rest-jpa/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-domain-services.list b/regressiontests/rest-jpa/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-domain-services.list
index 8157404bdfa..29a2fb9ab87 100644
--- a/regressiontests/rest-jpa/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-domain-services.list
+++ b/regressiontests/rest-jpa/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-domain-services.list
@@ -29,7 +29,6 @@ org.apache.causeway.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompr
org.apache.causeway.extensions.fixtures.fixturescripts.FixtureScripts
ServiceRegistryDefault
UserServiceDefault$SudoServiceSpi
-org.apache.causeway.persistence.jdo.datanucleus.metrics.MetricsServiceForJdo
CommandDtoFactoryDefault
org.apache.causeway.core.runtimeservices.confmenu.ConfigurationViewServiceDefault
org.apache.causeway.core.runtimeservices.email.EmailServiceDefault
diff --git a/regressiontests/rest-jpa/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-requestscoped.list b/regressiontests/rest-jpa/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-requestscoped.list
index 688ad5b3b28..04973f800fe 100644
--- a/regressiontests/rest-jpa/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-requestscoped.list
+++ b/regressiontests/rest-jpa/src/test/resources/org/apache/causeway/testdomain/bootstrapping/builtin-requestscoped.list
@@ -22,4 +22,3 @@ org.apache.causeway.applib.services.scratchpad.Scratchpad
org.apache.causeway.core.runtimeservices.changes.ChangedObjectsServiceInternal
org.apache.causeway.core.runtimeservices.metrics.MetricsServiceForJdo
PublisherDispatchServiceDefault
-org.apache.causeway.objectstore.jdo.datanucleus.service.support.TimestampService
(causeway) 28/36: CAUSEWAY-3866: more tidy up
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 5c514b0ef5a94b94935ced361cd500728445f4ab
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 19:00:01 2025 +0100
CAUSEWAY-3866: more tidy up
---
.../modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc | 2 +-
.../modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc | 2 +-
antora/components/refguide/modules/applib-ant/pages/Entity.adoc | 2 +-
antora/components/refguide/modules/applib-ant/pages/Nullable.adoc | 5 +----
.../ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc | 2 +-
.../ROOT/partials/properties-collections-actions/properties.adoc | 4 ++--
6 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc
index e6399fc5cc8..50bfa93515a 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Blob_usage-notes.adoc
@@ -4,7 +4,7 @@
== Usage Notes
-If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], `Blob` properties can be mapped using the xref:refguide:persistence:index/jpa/applib/types/BlobJpaEmbeddable.adoc[]:
+If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], `Blob` properties can be mapped using the xref:refguide:persistence:index/jpa/applib/types/BlobJpaEmbeddable.adoc[BlobJpaEmbeddable]:
[source,java]
----
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc
index f74f612ac59..64a2ac84e2a 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/hooks/Clob_usage-notes.adoc
@@ -4,7 +4,7 @@
== Usage Notes
-If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], `Blob` properties can be mapped using the xref:refguide:persistence:index/jpa/applib/types/ClobJpaEmbeddable.adoc[]:
+If using xref:pjpa:ROOT:about.adoc[JPA/Eclipselink], `Blob` properties can be mapped using the xref:refguide:persistence:index/jpa/applib/types/ClobJpaEmbeddable.adoc[ClobJpaEmbeddable]:
[source,java]
----
diff --git a/antora/components/refguide/modules/applib-ant/pages/Entity.adoc b/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
index b09b856f1e9..082e79e690b 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Entity.adoc
@@ -3,7 +3,7 @@
: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 [...]
-// TODO: 3866 - to update
+// TODO: 3866 - to complete
The `@jakarta.persistence.Entity` is used by JPA to indicate that a class is a domain entity to be persisted to the database.
diff --git a/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc b/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
index 0a19fa890bf..7e7eb7ab3e1 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
@@ -3,9 +3,6 @@
: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 [...]
-// TODO: 3866 - remove
-
-
Apache Causeway' defaults for properties and parameters is that they are mandatory unless otherwise stated.
Both the `@jakarta.annotation.Nullable` annotation and `@org.jspecify.annotations.Nullable` annotation are recognized by Apache Causeway for both properties and parameters as means to indicate that the property/parameter is not mandatory.
@@ -45,7 +42,7 @@ xref:refguide:applib:index/annotation/Property.adoc#optionality[@Property#option
xref:refguide:applib-ant:Column.adoc#nullability[@Column#nullable()].
====
-If more than one method is specified then the framework will validate that there are no incompatibilities (and fail to boot otherwise).
+Metamodel validation during bootstrapping checks that there are no conflicting definitions of optionality.
diff --git a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
index a21cd2fd89d..f7095d51b2d 100644
--- a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
+++ b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/removed-annotations.adoc
@@ -172,7 +172,7 @@ For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guid
|
|Either link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Property_optionality[@Property#optionality()] or link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Parameter_optionality[@Parameter#optionality()].
-For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Column_allowsNull[@Column#nullable()]
+For properties, can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Column_allowsNull[@Column#allowsNull()]
Can also use link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Nullable[@Nullable] for either properties or parameters.
|`@Named`
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
index 6545b1979ff..66d010ef284 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/properties.adoc
@@ -273,7 +273,7 @@ More information can be found http://www.opentaps.org/docs/index.php/How_to_Use_
=== ``Blob``s
-Apache Causeway provides the xref:refguide:persistence:index/jpa/applib/types/BlobJpaEmbeddable.adoc[] utility class to allow properties of type `org.apache.causeway.applib.value.Blob` to be persisted.
+Apache Causeway provides the xref:refguide:persistence:index/jpa/applib/types/BlobJpaEmbeddable.adoc[BlobJpaEmbeddable] utility class to allow properties of type `org.apache.causeway.applib.value.Blob` to be persisted.
This is used as follows:
@@ -299,7 +299,7 @@ public void setPdf(final Blob pdf) {
=== ``Clob``s
-Mapping ``Clob``s works in a very similar way to ``Blob``s, using the xref:refguide:persistence:index/jpa/applib/types/ClobJpaEmbeddable.adoc[] utility class:
+Mapping ``Clob``s works in a very similar way to ``Blob``s, using the xref:refguide:persistence:index/jpa/applib/types/ClobJpaEmbeddable.adoc[ClobJpaEmbeddable] utility class:
[source,java]
----
(causeway) 26/36: CAUSEWAY-3866: removes resteasy references
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 8bf012fcce224dc44741c6d1de6579bebe62c42c
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 18:34:16 2025 +0100
CAUSEWAY-3866: removes resteasy references
---
.../modules/ROOT/pages/2025/4.0.0-M1/mignotes.adoc | 65 ++++++++++++++++------
.../src/main/adoc/modules/config/pages/about.adoc | 32 ++++++-----
.../config/pages/section-hooks/resteasy~post.adoc | 4 --
.../config/pages/section-hooks/resteasy~pre.adoc | 4 --
.../modules/config/pages/sections/resteasy.adoc | 41 --------------
.../adoc/modules/executionoutbox/pages/about.adoc | 4 +-
.../src/test/resources/application-test.yml | 8 +--
.../cors/impl/CausewayModuleExtCors.java | 2 +-
.../modules/ROOT/pages/content-negotiation.adoc | 2 +-
.../modules/ROOT/partials/security/webmodule.adoc | 2 +-
10 files changed, 75 insertions(+), 89 deletions(-)
diff --git a/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/mignotes.adoc
index dd6f2df98f2..6cf5df03938 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/mignotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/mignotes.adoc
@@ -36,52 +36,83 @@ Some presets for the _Spring Configuration_ have been removed
== RestEasy Integration Removed
+The Restful Objects viewer no longer has a dependency on JBoss RestEasy, instead using Spring REST APIs.
+As a consequence, the name of the Maven artifact and Spring configuration module have changed, as well as some configurations.
+
+* In your Maven `pom.xml`
++
+remove:
++
[source,xml]
.Maven
----
-<!-- REMOVED
<dependency>
<groupId>org.apache.causeway.viewer</groupId>
<artifactId>causeway-viewer-restfulobjects-jaxrsresteasy</artifactId>
</dependency>
--->
-
-<!-- USE INSTEAD -->
+----
++
+and use instead:
++
+[source,xml]
+.Maven
+----
<dependency>
<groupId>org.apache.causeway.viewer</groupId>
<artifactId>causeway-viewer-restfulobjects-viewer</artifactId>
</dependency>
----
+* in your `AppManifest` (`@Import` staatements):
++
+replace:
++
[source,java]
.Spring bean import
----
@Import({
//..
-
- // REST
-
- // CausewayModuleViewerRestfulObjectsJaxrsResteasy.class <-- REMOVED
- CausewayModuleViewerRestfulObjectsViewer.class, // <-- USE INSTEAD
+ CausewayModuleViewerRestfulObjectsJaxrsResteasy.class,
+ // ...
+})
+----
++
+instead with:
++
+[source,java]
+.Spring bean import
+----
+@Import({
+ //..
+ CausewayModuleViewerRestfulObjectsViewer.class,
+ // ...
})
----
+* in your `application.yaml` configuration properties, change the config properties that configures the servlet-context relative path prefix for the _Restful Objects Viewer_
++
+replace:
++
+[source,yaml]
+.application.yaml (Spring configuration properties)
+----
+resteasy:
+ jaxrs:
+ defaultPath: /restful
+----
++
+replace with:
++
[source,yaml]
.application.yaml (Spring configuration properties)
----
-#configures the servlet-context relative path prefix for the _Restful Objects Viewer_
-
-# removed ..
-#resteasy:
-# jaxrs:
-# defaultPath: /restful
-#
-
causeway:
viewer:
restfulobjects:
basePath: /restful
----
++
+
== Immutable Configuration
diff --git a/core/config/src/main/adoc/modules/config/pages/about.adoc b/core/config/src/main/adoc/modules/config/pages/about.adoc
index 91d8b8a5eb2..4d125ead1e7 100644
--- a/core/config/src/main/adoc/modules/config/pages/about.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/about.adoc
@@ -130,14 +130,18 @@ It looks like this:
----
@Configuration
@Import({
- CausewayModuleCoreRuntimeServices.class, // <.>
- CausewayModuleSecurityShiro.class, // <.>
- CausewayModuleJpaEclipselink.class, // <.>
- CausewayModuleViewerRestfulObjectsViewer.class, // <.>
- CausewayModuleViewerGraphqlViewer.class, // <.>
- CausewayModuleViewerWicketViewer.class, // <.>
+ CausewayModuleCoreRuntimeServices.class, // <.>
+ CausewayModuleJpaEclipselink.class, // <.>
+ CausewayModuleSecuritySpring.class, // <.>
+ CausewayModuleExtSpringSecurityOauth2.class, // <.>
+ CausewayModuleExtSecmanPersistenceJpa.class, // <.>
+ CausewayModuleExtSecmanEncryptionSpring.class, // <.>
+ CausewayModuleExtSecmanDelegatedSpringOauth2.class, // <.>
+ CausewayModuleViewerRestfulObjectsViewer.class, // <.>
+ CausewayModuleViewerGraphqlViewer.class, // <.>
+ CausewayModuleViewerWicketViewer.class, // <.>
...
- ApplicationModule.class, // <.>
+ ApplicationModule.class, // <.>
...
})
public class AppManifest {
@@ -145,12 +149,12 @@ public class AppManifest {
----
<.> Mandatory - specifies the core of the Apache Causeway framework
-<.> Enables the Shiro security mechanism.
-There are several security implementations, precisely one must be selected
-<.> Enables xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] for persistence.
-+
-Optional (though if omitted then only xref:userguide:ROOT:view-models.adoc[view models] may be used, with hand-rolled persistence).
-
+<.> Enables the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store as the persistence mechanism.
+<.> Enables the xref:security:spring:about.adoc[Spring Security], which configures Spring filters to perform authentication.
+<.> Enables the xref:security:spring-oauth2:about.adoc[] extension, that in particular configures Spring for Oauth2.
+<.> Enables the xref:security:secman:about.adoc[Secman] security module, which provides both authorisation (users, roles, permissions) and authentication (although Spring's authentication takes precedence).
+<.> Configures Secman to use JPA for persistence.
+<.> Configures Secman to auto-create delegated users if authenticated by Spring.
<.> Enables the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)].
<.> Enables the xref:gqlv:ROOT:about.adoc[GraphQL API (GraphQL viewer)].
<.> Enables the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)]
@@ -173,7 +177,7 @@ The remainder of this guide lists the various configuration properties available
=== CausewayConfiguration domain service
Applications can discover the current configuration properties for the framework (under the `causeway` top-level key) by injecting the `CausewayConfiguration` domain service.
-There are similar domain services for xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] (`EclipselinkConfiguration`) and RestEasy (`RestEasyConfiguration`), as used by xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)].
+There is a similar domain service for xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] (`EclipselinkConfiguration`).
Applications can also create their own configuration properties file; the xref:docs:starters:simpleapp.adoc[simpleapp] starter app provides an example.
diff --git a/core/config/src/main/adoc/modules/config/pages/section-hooks/resteasy~post.adoc b/core/config/src/main/adoc/modules/config/pages/section-hooks/resteasy~post.adoc
deleted file mode 100644
index 21f4ba4f65c..00000000000
--- a/core/config/src/main/adoc/modules/config/pages/section-hooks/resteasy~post.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-
-: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 [...]
-
-
diff --git a/core/config/src/main/adoc/modules/config/pages/section-hooks/resteasy~pre.adoc b/core/config/src/main/adoc/modules/config/pages/section-hooks/resteasy~pre.adoc
deleted file mode 100644
index 2d47b8f2af6..00000000000
--- a/core/config/src/main/adoc/modules/config/pages/section-hooks/resteasy~pre.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-
-: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 [...]
-
-Configuration that applies to the RestEasy framework (that bootstraps the Restful Objects viewer).
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc b/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc
deleted file mode 100644
index 087d8be828b..00000000000
--- a/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc
+++ /dev/null
@@ -1,41 +0,0 @@
-= RestEasy Configuration
-:page-role: -toc -narrow
-
-
-: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 [...]
-
-include::../section-hooks/resteasy~pre.adoc[]
-
-[cols="3a,2a,5a", options="header"]
-|===
-|Property
-|Default
-|Description
-|
-[[resteasy.jaxrs.app.registration]]
-resteasy.jaxrs.app.registration
-
-| beans
-| How the implementation of the JAX-RS application is discovered.
-
-There should be very little reason to change this from its default.
-
-@see https://github.com/resteasy/resteasy-spring-boot/blob/master/mds/USAGE.md[resteasy-spring-boot-starter docs]
-
-
-|
-[[resteasy.jaxrs.default-path]]
-resteasy.jaxrs.default-path
-
-| /restful
-| The path at which the RO viewer should be mounted.
-
-Note that this is used rather than `prefix` because there is _NO_ implementation of `Application`, so we rely on it being automatically created.
-
-@see https://github.com/resteasy/resteasy-spring-boot/blob/master/mds/USAGE.md[resteasy-spring-boot-starter docs]
-
-
-
-|===
-
-include::../section-hooks/resteasy~post.adoc[]
diff --git a/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc b/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
index 300d4b2902f..67e47d7db1c 100644
--- a/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
+++ b/extensions/core/executionoutbox/adoc/modules/executionoutbox/pages/about.adoc
@@ -247,7 +247,9 @@ To setup the message processor:
=== Usage
To instantiate the `OutboxClient`, specify the URL, user and password.
-The URL will be something like: `http://localhost:8080/restful/`, where the last part is the default path obtainable from the `resteasy.jaxrs.defaultPath` configuration property of the Causeway app.
+The URL will be something like: `http://localhost:8080/restful/`, where the last part is the default path obtainable from the `causeway.viewer.restfulobjects.basePath` configuration property of the Causeway app.
+
+
The `OutboxClient` API consists of three methods:
diff --git a/extensions/core/executionoutbox/restclient/src/test/resources/application-test.yml b/extensions/core/executionoutbox/restclient/src/test/resources/application-test.yml
index 72dbe85409f..771cefd1a42 100644
--- a/extensions/core/executionoutbox/restclient/src/test/resources/application-test.yml
+++ b/extensions/core/executionoutbox/restclient/src/test/resources/application-test.yml
@@ -19,6 +19,9 @@ causeway:
schema:
auto-create-schemas: "CAUSEWAYEXTEXECUTIONOUTBOX"
+ viewer:
+ restfulobjects:
+ basePath: "/restful"
extensions:
session-log:
auto-logout-on-restart: false
@@ -27,8 +30,3 @@ spring:
jpa:
show-sql: true
-resteasy:
- jaxrs:
- app:
- registration: beans
- defaultPath: "/restful"
diff --git a/extensions/vro/cors/impl/src/main/java/org/apache/causeway/extensions/cors/impl/CausewayModuleExtCors.java b/extensions/vro/cors/impl/src/main/java/org/apache/causeway/extensions/cors/impl/CausewayModuleExtCors.java
index a05b2dcc130..aac42841111 100644
--- a/extensions/vro/cors/impl/src/main/java/org/apache/causeway/extensions/cors/impl/CausewayModuleExtCors.java
+++ b/extensions/vro/cors/impl/src/main/java/org/apache/causeway/extensions/cors/impl/CausewayModuleExtCors.java
@@ -54,7 +54,7 @@ public FilterRegistrationBean<Filter> createCorsFilterRegistration(
if(!restfulBase.endsWith("/*")) {
restfulBase = restfulBase + "/*";
}
- log.info("Setting up CORS to filter resteasy-base at '{}' with {}",
+ log.info("Setting up CORS to filter RO base path at '{}' with {}",
restfulBase,
causewayConfiguration.extensions().cors());
diff --git a/viewers/restfulobjects/adoc/modules/ROOT/pages/content-negotiation.adoc b/viewers/restfulobjects/adoc/modules/ROOT/pages/content-negotiation.adoc
index 8049871a5c3..0dadb810f84 100644
--- a/viewers/restfulobjects/adoc/modules/ROOT/pages/content-negotiation.adoc
+++ b/viewers/restfulobjects/adoc/modules/ROOT/pages/content-negotiation.adoc
@@ -36,7 +36,7 @@ The Apache Causeway framework provides three implementations of `ContentNegotiat
One of these implementations, `ContentNegotiationServiceXRoDomainType` will further delegate down to the companion xref:refguide:applib:index/services/conmap/ContentMappingService.adoc[ContentMappingService] service (if configured/available), based on the value of the "x-ro-domain-type" parameter of the header.
+
A typical implementation of `ContentMappingService` will convert the domain object into some sort of DTO (data transfer object) as specified by the "x-ro-domaintype".
-If this DTO is annotated with JAXB or Jackson mappings, then the RO viewer (courtesy of the underlying link:http://resteasy.jboss.org/[RestEasy] framework) can serialize these directly.
+If this DTO is annotated with JAXB or Jackson mappings, then the RO viewer can serialize these directly.
+
What all that means is that, if the underlying entities change, we are required to update the mappings in the `ContentMappingService` to map to the same DTOs.
diff --git a/viewers/restfulobjects/adoc/modules/ROOT/partials/security/webmodule.adoc b/viewers/restfulobjects/adoc/modules/ROOT/partials/security/webmodule.adoc
index 4f47cbf354d..12ebd8f15d4 100644
--- a/viewers/restfulobjects/adoc/modules/ROOT/partials/security/webmodule.adoc
+++ b/viewers/restfulobjects/adoc/modules/ROOT/partials/security/webmodule.adoc
@@ -5,7 +5,7 @@
The xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)] does *not* provide a login page.
Instead it defines the authentication strategy SPI, delegated to by a filter.
-(For more detail on how this is wired together, see the implementation of the xref:refguide:viewer:index/restfulobjects/jaxrsresteasy/webmodule/WebModuleJaxrsResteasy.adoc[WebModuleJaxrsResteasy] web module service).
+(For more detail on how this is wired together, see the implementation of the xref:refguide:viewer:index/restfulobjects/viewer/webmodule/WebModuleRestfulObjects.adoc[WebModuleRestfulObjects] web module service).
The SPI is:
(causeway) 16/36: CAUSEWAY-3866: updates references to javax.validation.constraints and javax.annotation
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 464fdcc9728522f765f61d1655d5f940c06172f7
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 14:16:26 2025 +0100
CAUSEWAY-3866: updates references to javax.validation.constraints and javax.annotation
---
.../refguide/modules/applib-ant/pages/Digits.adoc | 4 +-
.../modules/applib-ant/pages/Nullable.adoc | 4 +-
.../refguide/modules/applib-ant/pages/Pattern.adoc | 47 ++++++++--------------
.../modules/applib-ant/partials/about/jee.adoc | 6 +--
.../properties-collections-actions/actions.adoc | 13 +++---
5 files changed, 27 insertions(+), 47 deletions(-)
diff --git a/antora/components/refguide/modules/applib-ant/pages/Digits.adoc b/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
index 5f405655164..636d84ce7f0 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Digits.adoc
@@ -4,9 +4,7 @@
: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 [...]
-// TODO: 3866 - remove
-
-The `@javax.validation.constraints.Digits` annotation is recognized by Apache Causeway as a means to specify the precision for properties and action parameters of type `java.math.BigDecimal`.
+The `@jakarta.validation.constraints.Digits` annotation is recognized by Apache Causeway as a means to specify the precision for properties and action parameters of type `java.math.BigDecimal`.
For example:
diff --git a/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc b/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
index e23ded529ff..47645df9e1e 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Nullable.adoc
@@ -1,5 +1,5 @@
-[#javax-annotation-Nullable]
-= @Nullable (javax.validation)
+[#jakarta-annotation-Nullable]
+= @Nullable (jakarta.annotation)
: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 [...]
diff --git a/antora/components/refguide/modules/applib-ant/pages/Pattern.adoc b/antora/components/refguide/modules/applib-ant/pages/Pattern.adoc
index de330fed4ea..87da06ca72b 100644
--- a/antora/components/refguide/modules/applib-ant/pages/Pattern.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/Pattern.adoc
@@ -1,57 +1,42 @@
-[#javax-validation-constraints-Pattern]
-= @Pattern (javax.validation)
+[#jakarta-validation-constraints-Pattern]
+= @Pattern (jakarta.validation.constraints)
: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 [...]
-// TODO: 3866 - remove
-
-The `@javax.validation.constraints.Pattern` annotation is recognized by Apache Causeway as a means to specify a regular expression constraint for properties and action parameters of type `java.lang.String`.
+The `@jakarta.validation.constraints.Pattern` annotation is recognized by Apache Causeway as a means to specify a regular expression constraint for properties and action parameters of type `java.lang.String`.
For example, here's the annotation being used on an action parameter:
[source,java]
----
+import jakarta.validation.constraints.Pattern;
+
public Customer updateName(
- @javax.validation.constraints.Pattern(
- regexp="[A-Z].+"
- message="Must begin with a capital."
- )
- final String name) {
+ @Pattern(
+ regexp="[A-Z].+",
+ message="Must begin with a capital."
+ )
+ final String name) {
setName(name);
- return this
+ return this;
}
-...
+// ...
----
and here's an example of its use on a property:
[source,java]
----
-@javax.validation.constraints.Pattern(
- regexp="[A-Z].+"
- message="Must begin with a capital."
-)
-public String getName() {
- return name;
-}
-...
-----
-
-
-For properties, it is also possible to specify against a field if Lombok is being used:
-
-[source,java]
-----
-import javax.validation.constraints.Pattern;
-import lombok.Getter;
-import lombok.Setter;
+import jakarta.validation.constraints.Pattern;
@Pattern(
- regexp="[A-Z].+"
+ regexp="[A-Z].+",
message="Must begin with a capital."
)
@Getter @Setter
private String name;
+...
----
+
diff --git a/antora/components/refguide/modules/applib-ant/partials/about/jee.adoc b/antora/components/refguide/modules/applib-ant/partials/about/jee.adoc
index 30ac8da52a5..43eb9712500 100644
--- a/antora/components/refguide/modules/applib-ant/partials/about/jee.adoc
+++ b/antora/components/refguide/modules/applib-ant/partials/about/jee.adoc
@@ -16,20 +16,20 @@ The table below lists the JEE annotations currently recognized.
|Purpose
|Layer
-|xref:refguide:applib-ant:Digits.adoc[`@javax.validation.` +
+|xref:refguide:applib-ant:Digits.adoc[`@jakarta.validation.` +
`constraints.` +
`Digits`]
|Precision/scale for BigDecimal values.
|Domain
-|xref:refguide:applib-ant:Pattern.adoc[`@javax.validation.` +
+|xref:refguide:applib-ant:Pattern.adoc[`@jakarta.validation.` +
`constraints.` +
`Pattern`]
|Regular expressions for strings
|Domain
-|xref:refguide:applib-ant:Digits.adoc[`@javax.annotation.` +
+|xref:refguide:applib-ant:Digits.adoc[`@jakarta.annotation.` +
`Nullable`]
|Specify that a property/parameter is optional.
|Domain
diff --git a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
index 705918793d4..033bfbfb8b0 100644
--- a/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/properties-collections-actions/actions.adoc
@@ -253,33 +253,30 @@ See also xref:userguide:ROOT:meta-annotations.adoc#properties-vs-parameters[prop
== ``BigDecimal``s (Precision)
-The xref:refguide:applib-ant:Digits.adoc[@javax.validation.constraints.Digits#fraction] annotation/attribute is used to specify the scale/precision of decimals.
+The xref:refguide:applib-ant:Digits.adoc[@jakarta.validation.constraints.Digits#fraction] annotation/attribute is used to specify the scale/precision of decimals.
For example:
[source,java]
----
import jakarta.persistence.Column;
+import jakarta.validation.constraints.Digits;
import lombok.Getter;
import lombok.Setter;
public Order updateDiscount(
- @javax.validation.constraints.Digits(fraction=2) // <.>
+ @Digits(fraction=2) // <.>
@ParameterLayout(named="Discount rate")
String discountRate) {
setDiscountRate(discountRate);
return this;
}
-@Column(scale=2) // <.>
+@Column(scale=2) // <.>
@Getter @Setter
private BigDecimal discountRate;
----
<.> Specifies the parameter precision using xref:refguide:applib-ant:Digits.adoc[@Digits#fraction].
-<.> Specifies the corresponding property precision.
-+
-Note that this uses an ORM-specific annotation (in this case, xref:refguide:applib-ant:Column.adoc#lengthscale-for-bigdecimals[@Column#scale]
-
-
+<.> Specifies the corresponding property precision for the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store.
(causeway) 13/36: CAUSEWAY-3866: removes references to JdoSupportService, also TransactionService#nextTransaction
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 87fb552b0f874e946e7d0e4618ca8b759c667700
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 17 13:21:58 2025 +0100
CAUSEWAY-3866: removes references to JdoSupportService, also TransactionService#nextTransaction
---
.../modules/applib-svc/partials/module-nav.adoc | 3 --
.../hints-and-tips/transactions-and-errors.adoc | 25 +-----------
.../transaction/TransactionServiceSpring.java | 44 ----------------------
3 files changed, 1 insertion(+), 71 deletions(-)
diff --git a/antora/components/refguide/modules/applib-svc/partials/module-nav.adoc b/antora/components/refguide/modules/applib-svc/partials/module-nav.adoc
index 41d3c4dab12..1631b1d4ffe 100644
--- a/antora/components/refguide/modules/applib-svc/partials/module-nav.adoc
+++ b/antora/components/refguide/modules/applib-svc/partials/module-nav.adoc
@@ -86,9 +86,6 @@
** Viewer Common Applib
*** xref:refguide:viewer:index/commons/applib/services/userprof/UserProfileUiService.adoc[UserProfileUiService]
-** Persistence JDO Applib
-*** xref:refguide:persistence:index/jdo/applib/services/JdoSupportService.adoc[]
-
** Persistence JPA Applib
*** xref:refguide:persistence:index/jpa/applib/services/JpaSupportService.adoc[]
diff --git a/antora/components/userguide/modules/btb/partials/hints-and-tips/transactions-and-errors.adoc b/antora/components/userguide/modules/btb/partials/hints-and-tips/transactions-and-errors.adoc
index b10d7cd8426..3751dedd06a 100644
--- a/antora/components/userguide/modules/btb/partials/hints-and-tips/transactions-and-errors.adoc
+++ b/antora/components/userguide/modules/btb/partials/hints-and-tips/transactions-and-errors.adoc
@@ -7,30 +7,7 @@
In Apache Causeway, every interaction (action invocation or property edit) is automatically wrapped in a transaction, and any repository query automatically does a flush before hand.
What that means is that there's no need to explicitly start or commit transactions in Apache Causeway; this will be done for you.
-Indeed, if you do try to manage transactions (eg by reaching into the JDO `PersistenceManager` exposed by the xref:refguide:persistence:index/jdo/applib/services/JdoSupportService.adoc[JdoSupportService] domain service, then you are likely to confuse the framework and get a stack trace for your trouble.
-
-However, you can complete a given transaction and start a new one.
-This is sometimes useful if writing a xref:testing:fixtures:about.adoc[fixture script] which is going to perform some sort of bulk migration of data from an old system.
-For this use case, use the xref:refguide:applib:index/services/xactn/TransactionService.adoc[TransactionService].
-
-For example:
-
-[source,java]
-----
-public class SomeLongRunningFixtureScript extends FixtureScript {
-
- protected void execute(final ExecutionContext executionContext) {
- // do some work
- transactionService.nextTransaction();
- // do some work
- transactionService.nextTransaction();
- // do yet more work
- }
-
- @javax.inject.Inject
- TransactionService transactionService;
-}
-----
+Indeed, if you do try to manage transactions (eg by reaching into the JPA `EntityManager` exposed by the xref:refguide:persistence:index/jpa/applib/services/JpaSupportService.adoc[JpaSupportService] domain service, then you are likely to confuse the framework and get a stack trace for your trouble.
== Raise message in the UI
diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
index db52ec055e8..1c91bf6736b 100644
--- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
+++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
@@ -168,50 +168,6 @@ private void registerTransactionSynchronizations(final TransactionStatus txStatu
}
}
-// @Override
-// public void nextTransaction() {
-//
-// var txManager = singletonTransactionManagerElseFail();
-//
-// try {
-//
-// var txTemplate = new TransactionTemplate(txManager);
-// txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
-//
-// // either reuse existing or create new
-// var txStatus = txManager.getTransaction(txTemplate);
-// if(txStatus.isNewTransaction()) {
-// // we have created a new transaction, so we are done
-// return;
-// }
-// // we are reusing an exiting transaction, so end it and create a new one afterwards
-// if(txStatus.isRollbackOnly()) {
-// txManager.rollback(txStatus);
-// } else {
-// //XXX we removed the entire method, because of following subtlety
- // If the transaction wasn't a new one, omit the commit for proper participation in
-// // the surrounding transaction. If a previous transaction has been suspended to be
-// // able to create a new one, resume the previous transaction after committing the new one.
-// txManager.commit(txStatus);
-// }
-//
-// // begin a new transaction
-// txManager.getTransaction(txTemplate);
-//
-// } catch (RuntimeException ex) {
-//
-// var translatedEx = translateExceptionIfPossible(ex, txManager);
-//
-// if(translatedEx instanceof RuntimeException) {
-// throw ex;
-// }
-//
-// throw new RuntimeException(ex);
-//
-// }
-//
-// }
-
@Override
public void flushTransaction() {
(causeway) 01/36: improves release procedure a little
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit db9e5d2692ec1bfee8a3ba9049b3cb6997a53c89
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 13 06:41:07 2025 +0100
improves release procedure a little
---
scripts/promoterctag.sh | 97 ++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 88 insertions(+), 9 deletions(-)
diff --git a/scripts/promoterctag.sh b/scripts/promoterctag.sh
index 463eeef2eef..6ee562ba201 100755
--- a/scripts/promoterctag.sh
+++ b/scripts/promoterctag.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env 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
@@ -17,14 +17,93 @@
# under the License.
-
#
-# Removes an RC tag and replaces with final one
+# promoterctag — promote an RC tag to final release
+#
+# Removes an RC tag (e.g., causeway-1.2.0-RC1) and replaces it with the final tag (e.g., causeway-1.2.0).
+#
+# Usage:
+# promoterctag <baseTag> <rcSuffix> [--dry-run|--whatif]
+#
+# Example:
+# promoterctag causeway-1.2.0 RC1
#
-# usage:
-# promoterctag causeway-1.2.0 RC1
+# promoterctag causeway-1.2.0 RC1 --dry-run
+#
+
+set -euo pipefail
+
+usage() {
+ echo "Usage: $0 <baseTag> <rcSuffix> [--dry-run|--whatif]"
+ echo
+ echo "Promotes a release candidate (RC) tag to its final release."
+ echo
+ echo "Example:"
+ echo " $0 causeway-1.2.0 RC1"
+ echo " $0 causeway-1.2.0 RC1 --dry-run"
+ exit 1
+}
+
+# --- parse args ---
+if [[ $# -lt 2 ]]; then
+ usage
+fi
+
+BASE_TAG="$1"
+RC_SUFFIX="$2"
+RC_TAG="${BASE_TAG}-${RC_SUFFIX}"
+DRY_RUN=false
+
+if [[ $# -eq 3 ]]; then
+ case "$3" in
+ --dry-run|--whatif)
+ DRY_RUN=true
+ ;;
+ *)
+ echo "Unknown option: $3"
+ usage
+ ;;
+ esac
+fi
+
+# --- sanity checks ---
+if ! git rev-parse "$RC_TAG" >/dev/null 2>&1; then
+ echo "❌ RC tag '$RC_TAG' does not exist."
+ exit 1
+fi
+
+if git rev-parse "$BASE_TAG" >/dev/null 2>&1; then
+ echo "⚠️ Final tag '$BASE_TAG' already exists and will be overwritten."
+fi
+
+echo "=========================================="
+echo " Promoting RC tag to final release"
+echo "------------------------------------------"
+echo " Base tag: $BASE_TAG"
+echo " RC tag: $RC_TAG"
+echo " Remote: origin"
+echo " Dry-run: $DRY_RUN"
+echo "=========================================="
+echo
+
+# --- perform operations ---
+run() {
+ if $DRY_RUN; then
+ echo "[dry-run] $*"
+ else
+ echo "▶ $*"
+ eval "$@"
+ fi
+}
+
+run "git tag -f \"$BASE_TAG\" \"$RC_TAG\""
+run "git tag -d \"$RC_TAG\""
+run "git push origin :refs/tags/$RC_TAG"
+run "git push origin refs/tags/$BASE_TAG:refs/tags/rel/$BASE_TAG"
-git tag -f $1 $1-$2
-git tag -d $1-$2
-git push origin :refs/tags/$1-$2
-git push origin refs/tags/$1:refs/tags/rel/$1
+echo
+if $DRY_RUN; then
+ echo "✅ Dry run complete. No changes made."
+else
+ echo "✅ RC tag '$RC_TAG' promoted to '$BASE_TAG' and pushed."
+fi
(causeway) 04/36: CAUSEWAY-3866: removes further JDO stuff: .adoc and unreferenced java libs/impls
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 98e458de0586b3ef2196b713e77d3dbd4e178b06
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 13 07:15:31 2025 +0100
CAUSEWAY-3866: removes further JDO stuff: .adoc and unreferenced java libs/impls
---
.../CausewayModuleExtCommandLogPersistenceJdo.adoc | 27 ---
...ausewayModuleExtExecutionLogPersistenceJdo.adoc | 27 ---
...ewayModuleExtExecutionOutboxPersistenceJdo.adoc | 27 ---
.../jdo/CausewayModuleExtSecmanPersistenceJdo.adoc | 25 ---
.../applib/CausewayModulePersistenceJdoApplib.adoc | 12 --
.../jdo/applib/services/JdoSupportService.adoc | 136 -------------
.../JdoSupportService_010-examples-and-usage.adoc | 223 ---------------------
.../pages/index/jdo/applib/types/AddressLine.adoc | 27 ---
.../pages/index/jdo/applib/types/Description.adoc | 32 ---
.../pages/index/jdo/applib/types/Email.adoc | 59 ------
.../pages/index/jdo/applib/types/Fqcn.adoc | 27 ---
.../index/jdo/applib/types/LogicalTypeName.adoc | 27 ---
.../pages/index/jdo/applib/types/Money.adoc | 30 ---
.../pages/index/jdo/applib/types/Name.adoc | 27 ---
.../pages/index/jdo/applib/types/Notes.adoc | 32 ---
.../index/jdo/applib/types/ObjectIdentifier.adoc | 27 ---
.../pages/index/jdo/applib/types/Percentage.adoc | 30 ---
.../pages/index/jdo/applib/types/PhoneNumber.adoc | 37 ----
.../pages/index/jdo/applib/types/PostalCode.adoc | 27 ---
.../pages/index/jdo/applib/types/ProperName.adoc | 27 ---
.../pages/index/jdo/applib/types/Reference.adoc | 37 ----
.../pages/index/jdo/applib/types/Title.adoc | 27 ---
.../pages/index/jdo/applib/types/UrlTemplate.adoc | 27 ---
.../pages/index/jdo/applib/types/Username.adoc | 27 ---
.../CausewayModulePersistenceJdoDatanucleus.adoc | 40 ----
...sewayModulePersistenceJdoDatanucleusMixins.adoc | 12 --
.../changetracking/JdoLifecycleListener.adoc | 55 -----
.../jdo/datanucleus/dialect/DnJdoDialect.adoc | 16 --
.../mixins/Persistable_datanucleusVersionLong.adoc | 18 --
.../Persistable_datanucleusVersionTimestamp.adoc | 18 --
.../mixins/Persistable_downloadJdoMetadata.adoc | 16 --
.../applib/CausewayBookmarkConverter.adoc | 14 --
.../applib/CausewayLocalResourcePathConverter.adoc | 14 --
.../applib/CausewayMarkupConverter.adoc | 14 --
.../applib/CausewayPasswordConverter.adoc | 14 --
.../JavaAwtBufferedImageByteArrayConverter.adoc | 14 --
.../schema/v2/CausewayChangesDtoConverter.adoc | 14 --
.../schema/v2/CausewayCommandDtoConverter.adoc | 14 --
.../schema/v2/CausewayInteractionDtoConverter.adoc | 14 --
.../schema/v2/CausewayOidDtoConverter.adoc | 14 --
.../time/OffsetDateTimeConverterForJdo.adoc | 14 --
.../time/OffsetTimeConverterForJdo.adoc | 14 --
.../time/ZonedDateTimeConverterForJdo.adoc | 14 --
.../valuemappings/ByteArrayBlobRdbmsMapping.adoc | 14 --
.../valuemappings/CausewayBlobMapping.adoc | 19 --
.../valuemappings/CausewayClobMapping.adoc | 19 --
.../jdo/CausewayModulePersistenceQueryDslJdo.adoc | 12 --
.../applib/classrules/ArchitectureJdoRules.adoc | 127 ------------
.../teardown/jdo/TeardownFixtureJdoAbstract.adoc | 12 --
.../CausewayModuleValAsciidocPersistenceJdo.adoc | 12 --
.../jdo/converters/CausewayAsciiDocConverter.adoc | 14 --
.../CausewayModuleValMarkdownPersistenceJdo.adoc | 12 --
.../jdo/converters/CausewayMarkdownConverter.adoc | 14 --
.../dn/CausewayModuleValVegaPersistenceJdo.adoc | 12 --
.../jdo/dn/converters/CausewayVegaConverter.adoc | 14 --
.../refguide/modules/applib-ant/pages/about.adoc | 1 -
.../modules/applib-ant/partials/about/jdo.adoc | 110 ----------
.../modules/ROOT/pages/domain-entities.adoc | 1 -
.../modules/ROOT/partials/domain-entities/jdo.adoc | 166 ---------------
.../jdo/RemoveJdoEnhancementTypesFacetFactory.java | 66 ------
.../jdo/RemoveJdoPrefixedMethodsFacetFactory.java | 48 -----
.../jdo/JdoEntityChangePublishingTest.java | 157 ---------------
.../publishing/jdo/JdoCommandPublishingTest.java | 61 ------
.../publishing/jdo/JdoEntityPublishingTest.java | 62 ------
.../publishing/jdo/JdoExecutionPublishingTest.java | 61 ------
.../jdo/JdoLifecycleEventPublishingTest.java | 60 ------
.../publishing/jdo/JdoPropertyPublishingTest.java | 61 ------
starters/adoc/modules/starters/pages/about.adoc | 11 -
.../starters/pages/helloworld-script-jdo.adoc | 11 -
.../adoc/modules/starters/pages/helloworld.adoc | 6 -
.../starters/pages/simpleapp-script-jdo.adoc | 13 --
.../adoc/modules/starters/pages/simpleapp.adoc | 6 -
valuetypes/asciidoc/persistence-jdo/pom.xml | 58 ------
.../persistence-jdo/src/main/java/module-info.java | 27 ---
.../CausewayModuleValAsciidocPersistenceJdo.java | 34 ----
.../jdo/converters/CausewayAsciiDocConverter.java | 46 -----
.../src/main/resources/META-INF/MANIFEST.MF | 6 -
.../persistence-jdo/src/main/resources/plugin.xml | 49 -----
78 files changed, 2749 deletions(-)
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/jdo/CausewayModuleExtCommandLogPersistenceJdo.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/jdo/CausewayModuleExtCommandLogPersistenceJdo.adoc
deleted file mode 100644
index 57c39db0bd3..00000000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/jdo/CausewayModuleExtCommandLogPersistenceJdo.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= CausewayModuleExtCommandLogPersistenceJdo
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleExtCommandLogPersistenceJdo.java
-----
-class CausewayModuleExtCommandLogPersistenceJdo {
- public static final String NAMESPACE;
- public static final String SCHEMA;
- FixtureScript teardownFixture() // <.>
-}
-----
-
-<.> xref:#teardownFixture_[teardownFixture()]
-+
---
-Note that this is _NOT_ an implementation of the _ModuleWithFixtures#getTeardownFixture()_ API; but is provided to allow manual teardown if required.
---
-
-== Members
-
-[#teardownFixture_]
-=== teardownFixture()
-
-Note that this is _NOT_ an implementation of the _ModuleWithFixtures#getTeardownFixture()_ API; but is provided to allow manual teardown if required.
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/executionlog/jdo/CausewayModuleExtExecutionLogPersistenceJdo.adoc b/antora/components/refguide-index/modules/extensions/pages/index/executionlog/jdo/CausewayModuleExtExecutionLogPersistenceJdo.adoc
deleted file mode 100644
index 246e479f382..00000000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/executionlog/jdo/CausewayModuleExtExecutionLogPersistenceJdo.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= CausewayModuleExtExecutionLogPersistenceJdo
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleExtExecutionLogPersistenceJdo.java
-----
-class CausewayModuleExtExecutionLogPersistenceJdo {
- public static final String NAMESPACE;
- public static final String SCHEMA;
- FixtureScript getTeardownFixtureWillDelete() // <.>
-}
-----
-
-<.> xref:#getTeardownFixtureWillDelete_[getTeardownFixtureWillDelete()]
-+
---
-For tests that need to delete the command table first. Should be run in the @BeforeEach of the test.
---
-
-== Members
-
-[#getTeardownFixtureWillDelete_]
-=== getTeardownFixtureWillDelete()
-
-For tests that need to delete the command table first. Should be run in the @BeforeEach of the test.
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/jdo/CausewayModuleExtExecutionOutboxPersistenceJdo.adoc b/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/jdo/CausewayModuleExtExecutionOutboxPersistenceJdo.adoc
deleted file mode 100644
index be0a21ce81c..00000000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/jdo/CausewayModuleExtExecutionOutboxPersistenceJdo.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= CausewayModuleExtExecutionOutboxPersistenceJdo
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleExtExecutionOutboxPersistenceJdo.java
-----
-class CausewayModuleExtExecutionOutboxPersistenceJdo {
- public static final String NAMESPACE;
- public static final String SCHEMA;
- FixtureScript teardownFixture() // <.>
-}
-----
-
-<.> xref:#teardownFixture_[teardownFixture()]
-+
---
-Note that this is _NOT_ an implementation of the _ModuleWithFixtures#getTeardownFixture()_ API; but is provided to allow manual teardown if required.
---
-
-== Members
-
-[#teardownFixture_]
-=== teardownFixture()
-
-Note that this is _NOT_ an implementation of the _ModuleWithFixtures#getTeardownFixture()_ API; but is provided to allow manual teardown if required.
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/jdo/CausewayModuleExtSecmanPersistenceJdo.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/jdo/CausewayModuleExtSecmanPersistenceJdo.adoc
deleted file mode 100644
index c9fb4542608..00000000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/jdo/CausewayModuleExtSecmanPersistenceJdo.adoc
+++ /dev/null
@@ -1,25 +0,0 @@
-= CausewayModuleExtSecmanPersistenceJdo
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleExtSecmanPersistenceJdo.java
-----
-class CausewayModuleExtSecmanPersistenceJdo {
- FixtureScript teardownFixture() // <.>
-}
-----
-
-<.> xref:#teardownFixture_[teardownFixture()]
-+
---
-Note that this is _NOT_ an implementation of the _ModuleWithFixtures#getTeardownFixture()_ API; but is provided to allow manual teardown if required.
---
-
-== Members
-
-[#teardownFixture_]
-=== teardownFixture()
-
-Note that this is _NOT_ an implementation of the _ModuleWithFixtures#getTeardownFixture()_ API; but is provided to allow manual teardown if required.
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/CausewayModulePersistenceJdoApplib.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/CausewayModulePersistenceJdoApplib.adoc
deleted file mode 100644
index 14bafe0c7e4..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/CausewayModulePersistenceJdoApplib.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= CausewayModulePersistenceJdoApplib
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModulePersistenceJdoApplib.java
-----
-class CausewayModulePersistenceJdoApplib {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/services/JdoSupportService.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/services/JdoSupportService.adoc
deleted file mode 100644
index 572537e98f0..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/services/JdoSupportService.adoc
+++ /dev/null
@@ -1,136 +0,0 @@
-= JdoSupportService
-: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 [...]
-
-Primarily provides access to the current thread's _PersistenceManagerFactory_ and hence also the current thread's _PersistenceManager_ .
-
-== API
-
-[source,java]
-.JdoSupportService.java
-----
-interface JdoSupportService {
- PersistenceManagerFactory getPersistenceManagerFactory()
- T refresh(T domainObject) // <.>
- void ensureLoaded(Collection<?> collectionOfDomainObjects)
- List<Map<String, Object>> executeSql(String sql)
- Integer executeUpdate(String sql)
- void deleteAll(Class<?>... pcClasses) // <.>
- List<T> executeQuery(Class<T> cls, BooleanExpression filter) // <.>
- List<T> executeQuery(Class<T> cls)
- T executeQueryUnique(Class<T> cls, BooleanExpression filter) // <.>
- T executeQueryUnique(Class<T> cls)
- JDOQLTypedQuery<T> newTypesafeQuery(Class<T> cls) // <.>
- void disableMultivaluedFetch(JDOQLTypedQuery<?> query) // <.>
- void disableMultivaluedFetch(Query<?> query) // <.>
- PersistenceManager getPersistenceManager()
-}
-----
-
-<.> xref:#refresh_T[refresh(T)]
-+
---
-Force a reload (corresponding to the JDO `PersistenceManager` 's `refresh()` method) of a domain objects.
---
-<.> xref:#deleteAll_Class[deleteAll(Class)]
-+
---
-Force the deletion of all instances of the specified class.
---
-<.> xref:#executeQuery_Class_BooleanExpression[executeQuery(Class, BooleanExpression)]
-+
---
-To perform the most common use-case of executing a (type-safe) query against the specified class, filtering using the provided _BooleanExpression_ , then automatically cloning the returned list and closing the query.
---
-<.> xref:#executeQueryUnique_Class_BooleanExpression[executeQueryUnique(Class, BooleanExpression)]
-+
---
-To perform a common use-case of executing a (type-safe) query against the specified class, filtering a unique match using the provided _BooleanExpression_ , then returning the result and closing the query.
---
-<.> xref:#newTypesafeQuery_Class[newTypesafeQuery(Class)]
-+
---
-To support the execution of type-safe queries using DataNucleus' lower-level APIs (eg for group by and so on).
---
-<.> xref:#disableMultivaluedFetch_JDOQLTypedQuery[disableMultivaluedFetch(JDOQLTypedQuery)]
-+
---
-Fetch Optimization
---
-<.> xref:#disableMultivaluedFetch_Query[disableMultivaluedFetch(Query)]
-+
---
-Fetch Optimization
---
-
-== Members
-
-[#refresh_T]
-=== refresh(T)
-
-Force a reload (corresponding to the JDO `PersistenceManager` 's `refresh()` method) of a domain objects.
-
-In fact, this may just reset the lazy-load state of the domain object, but the effect is the same: to cause the object's state to be reloaded from the database.
-
-The particular example that led to this method being added was a 1:m bidirectional relationship, analogous to `Customer <-> * Order` . Persisting the child `Order` object did not cause the parent `Customer` 's collection of orders to be updated. In fact, JDO does not make any such guarantee to do so. Options are therefore either to maintain the collection in code, or to refresh the parent.
-
-[#deleteAll_Class]
-=== deleteAll(Class)
-
-Force the deletion of all instances of the specified class.
-
-Note: this is intended primarily for testing purposes, eg clearing existing data as part of installing fixtures. It will generate a `SQL DELETE` for each instance. To perform a bulk deletion with a single `SQL DELETE` , use _#executeUpdate(String)_ .
-
-Implementation note: It can occasionally be the case that Causeway' internal adapter for the domain object is still in memory. JDO/DataNucleus seems to bump up the version of the object prior to its deletion, which under normal circumstances would cause Causeway to throw a concurrency exception. Therefore To prevent this from happening (ie to _force_ the deletion of all instances), concurrency checking is temporarily disabled while this method is performed.
-
-[#executeQuery_Class_BooleanExpression]
-=== executeQuery(Class, BooleanExpression)
-
-To perform the most common use-case of executing a (type-safe) query against the specified class, filtering using the provided _BooleanExpression_ , then automatically cloning the returned list and closing the query.
-
-Typical usage:
-
-----
- final QToDoItem q = QToDoItem.candidate();
- return executeQuery(ToDoItem.class,
- q.atPath.eq(atPath).and(
- q.description.indexOf(description).gt(0))
- );
-----
-
-[#executeQueryUnique_Class_BooleanExpression]
-=== executeQueryUnique(Class, BooleanExpression)
-
-To perform a common use-case of executing a (type-safe) query against the specified class, filtering a unique match using the provided _BooleanExpression_ , then returning the result and closing the query.
-
-Typical usage:
-
-----
- final QToDoItem q = QToDoItem.candidate();
- return executeQueryUnique(ToDoItem.class,
- q.atPath.eq(atPath).and(
- q.description.eq(description))
- );
-----
-
-[#newTypesafeQuery_Class]
-=== newTypesafeQuery(Class)
-
-To support the execution of type-safe queries using DataNucleus' lower-level APIs (eg for group by and so on).
-
-Responsibility for cloning any result sets and closing the query is the responsibility of the caller.
-
-[#disableMultivaluedFetch_JDOQLTypedQuery]
-=== disableMultivaluedFetch(JDOQLTypedQuery)
-
-Fetch Optimization
-
-FromDN-5.2...
-
-For RDBMS any single-valued member will be fetched in the original SQL query, but with multiple-valued members this is not supported. However what will happen is that any collection/array field will be retrieved in a single SQL query for all candidate objects (by default using an EXISTS subquery); this avoids the "N+1" problem, resulting in 1 original SQL query plus 1 SQL query per collection member. Note that you can disable this by either not putting multi-valued fields in the FetchPla [...]
-
-[#disableMultivaluedFetch_Query]
-=== disableMultivaluedFetch(Query)
-
-Fetch Optimization
-
-include::hooks/JdoSupportService_010-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/services/hooks/JdoSupportService_010-examples-and-usage.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/services/hooks/JdoSupportService_010-examples-and-usage.adoc
deleted file mode 100644
index a9af56c9e9a..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/services/hooks/JdoSupportService_010-examples-and-usage.adoc
+++ /dev/null
@@ -1,223 +0,0 @@
-: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 [...]
-:page-partial:
-
-
-== Examples and Usage
-
-The `JdoSupportService` service provides a number of general purpose methods for working with the JDO/DataNucleus objectstore.
-In general these act at a lower-level of abstraction than the APIs normally used (specifically, those of xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService]), but nevertheless deal with some of the most common use cases.
-For service also provides access to the underlying JDO `PersistenceManager` for full control.
-
-The following sections discuss the functionality provided by the service, broken out into categories.
-
-[#executing-sql]
-=== Executing SQL
-
-You can use the `JdoSupportService` to perform arbitrary SQL SELECTs or UPDATEs:
-
-[source,java]
-----
-public interface JdoSupportService {
- @Programmatic
- List<Map<String, Object>> executeSql(String sql);
- @Programmatic
- Integer executeUpdate(String sql);
- ...
-}
-----
-
-The `executeSql(...)` method allows arbitrary SQL `SELECT` queries to be submitted:
-
-[source,java]
-----
-List<Map<String, Object>> results = jdoSupportService.executeSql("select * from custMgmt.customers");
-----
-
-The result set is automatically converted into a list of maps, where the map key is the column name.
-
-In a similar manner, the `executeUpdate(...)` allows arbitrary SQL ``UPDATE``s to be performed.
-
-[source,java]
-----
-int count = jdoSupportService.executeUpdate("select count(*) from custMgmt.customers);
-----
-
-The returned value is the number of rows updated.
-
-[TIP]
-====
-As an alternative, consider using DataNucleus' link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/jdoql_typesafe.html[type-safe JDO query API], discussed <<type-safe-jdoql-queries,below>>.
-====
-
-[#type-safe-jdoql-queries]
-=== Type-safe JDOQL Queries
-
-DataNucleus provides an link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/jdoql_typesafe.html[extension to JDO], so that JDOQL queries can be built up and executed using a set of type-safe classes.
-
-The types in question for type safe queries are not the domain entities, but rather are companion "Q..." query classes.
-These classes are generated dynamically by an link:https://www.jcp.org/en/jsr/detail?id=269[annotation processor] as a side-effect of compilation, one "Q..." class for each of the xref:refguide:applib-ant:PersistenceCapable.adoc[@PersistenceCapable] domain entity in your application.
-For example, a `ToDoItem` domain entity will give rise to a `QToDoItem` query class.
-These "Q..." classes mirror the structure of domain entity, but expose properties that allow predicates to be built up for querying instances, as well as other functions in support of order by, group by and other clauses.
-
-[NOTE]
-====
-The IntelliJ IDE automatically enables annotation processing by default, as does Maven.
-Using Eclipse IDE you may need to configure annotation processing manually; see the xref:setupguide:eclipse:about.adoc#enable-annotation-processing[Setup Guide].
-The DataNucleus' link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/jdoql_typesafe.html[documentation] offers some guidance on confirming that APT is enabled.
-====
-
-The `JdoSupportService` service offers two methods at different levels of abstraction:
-
-[source,java]
-----
-public interface JdoSupportService {
- <T> List<T> executeQuery(final Class<T> cls, final BooleanExpression be);
- <T> T executeQueryUnique(final Class<T> cls, final BooleanExpression be);
- <T> TypesafeQuery<T> newTypesafeQuery(Class<T> cls);
- ...
-}
-----
-
-The `executeQuery(...)` method supports the common case of obtaining a set of objects that meet some criteria, filtered using the provided `BooleanExpression`.
-To avoid memory leaks, the returned list is cloned and the underlying query closed.
-
-For example, consider an implementation of `ToDoItemRepository` using type-safe queries.
-The following JDOQL:
-
-[source,sql]
-----
-SELECT
-FROM todoapp.dom.module.todoitem.ToDoItem
-WHERE atPath.indexOf(:atPath) == 0
- && complete == :complete")
-----
-
-can be expressed using type-safe queries as follows:
-
-[source,java]
-----
-public List<ToDoItem> findByAtPathAndCategory(final String atPath, final Category category) {
- final QToDoItem q = QToDoItem.candidate();
- return jdoSupportService.executeQuery(ToDoItem.class,
- q.atPath.eq(atPath).and(
- q.category.eq(category)));
-}
-----
-
-[NOTE]
-====
-You can find the full example of the JDOQL equivalent in the xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService]
-====
-
-The `executeUniqueQuery(...)` method is similar to `executeQuery(...)`, however expects the query to return at most a single object, which it returns (or `null` if none).
-
-The `newTypesafeQuery(...)` method is a lower-level API that allows a type safe query to be instantiated for most sophisticated querying, eg using group by or order by clauses.
-See the DataNucleus link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/jdoql_typesafe.html[documentation] for full details of using this.
-
-One thing to be aware of is that after the query has been executed, it should be closed, using `query.closeAll()`.
-If calling `query.executeList()` we also recommend cloning the resultant list first.
-The following utility method does both of these tasks:
-
-[source,java]
-----
-private static <T> List<T> executeListAndClose(final TypesafeQuery<T> query) {
- final List<T> elements = query.executeList();
- final List<T> list = Lists.newArrayList(elements);
- query.closeAll();
- return list;
-}
-----
-
-
-=== Fixture support
-
-When writing xref:testing:integtestsupport:about.adoc[integration tests] you'll usually need to tear down some/all mutable transactional data before each test.
-One way to do that is to use the `executeUpdate(...)` method described <<executing-sql,above>>.
-
-Alternatively, the `deleteAll(...)` method will let your test delete all instances of a class without resorting to SQL:
-
-[source,java]
-----
-public interface JdoSupportService {
- void deleteAll(Class<?>... pcClasses);
- ...
-}
-----
-
-For example:
-
-[source,java]
-----
-public class TearDownAll extends FixtureScriptAbstract {
- @Override
- protected void execute(final ExecutionContext ec) {
- jdoSupportService.deleteAll(Order.class);
- jdoSupportService.deleteAll(CustomerAddress.class);
- jdoSupportService.deleteAll(Customer.class);
- }
- @Inject
- JdoSupportService jdoSupportService;
-}
-----
-
-[NOTE]
-====
-It can occasionally be the case that Apache Causeway' internal adapter for the domain object is still in memory.
-JDO/DataNucleus seems to bump up the version of the object prior to its deletion, which under normal circumstances would cause Apache Causeway to throw a concurrency exception.
-Therefore to prevent this from happening (ie to _force_ the deletion of all instances), concurrency checking is temporarily disabled while this method is performed.
-====
-
-
-=== Reloading entities
-
-An link:http://www.datanucleus.org:15080/products/accessplatform_5_0/jdo/mapping.html#one_many_relations[(intentional) limitation] of JDO/DataNucleus is that persisting a child entity (in a 1:n bidirectional relationship) does not cause the parent's collection to be updated.
-
-[source,java]
-----
-public interface JdoSupportService {
- <T> T refresh(T domainObject);
- void ensureLoaded(Collection<?> collectionOfDomainObjects);
- ...
-}
-----
-
-The `refresh(T domainObject)` method can be used to reload the parent object (or indeed any object).
-Under the covers it uses the JDO `PersistenceManager#refresh(...)` API.
-
-The `ensureLoaded(...)` method allows a collection of domain objects to be loaded from the database in a single hit.
-This can be valuable as a performance optimization to avoid multiple roundtrips to the database.
-Under the covers it uses the `PersistenceManager#retrieveAll(...)` API.
-
-
-=== JDO PersistenceManager
-
-The functionality provided by `JdoSupportService` focus only on the most common use cases.
-If you require more flexibility than this, eg for dynamically constructed queries, then you can use the service to access the underlying JDO `PersistenceManager` API:
-
-[source,java]
-----
-public interface JdoSupportService {
- PersistenceManager getJdoPersistenceManager();
- ...
-}
-----
-
-For example:
-
-[source,java]
-----
-public class Orders {
-
- public List<Order> findOrders( /* ... */ ) {
- javax.jdo.PersistenceManager pm = jdoSupportService.getPersistenceManager();
-
- ...
-
- return someListOfOrders;
- }
-
- @Inject
- JdoSupportService jdoSupportService;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/AddressLine.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/AddressLine.adoc
deleted file mode 100644
index b2ca907f5c5..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/AddressLine.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @AddressLine
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing a line of an address.
-
-== API
-
-[source,java]
-.AddressLine.java
-----
-@interface AddressLine {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Description.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Description.adoc
deleted file mode 100644
index fd9fa6b9320..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Description.adoc
+++ /dev/null
@@ -1,32 +0,0 @@
-= @Description
-: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 [...]
-
-Meta-annotation for an optional _String_ property or parameter representing a description of some sort.
-
-== API
-
-[source,java]
-.Description.java
-----
-@interface Description {
- int MAX_LENGTH;
- int MULTI_LINE;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "true";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
- @AliasFor(annotation = PropertyLayout.class, attribute = "multiLine")
-int propertyLayoutMultiLine() default MULTI_LINE;
- @AliasFor(annotation = ParameterLayout.class, attribute = "multiLine")
-int parameterLayoutMultiLine() default MULTI_LINE;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Email.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Email.adoc
deleted file mode 100644
index 07adfa4d70b..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Email.adoc
+++ /dev/null
@@ -1,59 +0,0 @@
-= @Email
-: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 [...]
-
-Meta-annotation for an optional _String_ property or parameter representing an email address.
-
-== API
-
-[source,java]
-.Email.java
-----
-@interface Email {
- int MAX_LENGTH; // <.>
- String REGEX_PATTERN; // <.>
- String REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Property.class, attribute = "regexPattern")
-String propertyRegexPattern() default REGEX_PATTERN;
- @AliasFor(annotation = Parameter.class, attribute = "regexPattern")
-String parameterRegexPattern() default REGEX_PATTERN;
- @AliasFor(annotation = Property.class, attribute = "regexPatternReplacement")
-String propertyRegexPatternReplacement() default REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = Parameter.class, attribute = "regexPatternReplacement")
-String parameterRegexPatternReplacement() default REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "true";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
-<.> xref:#MAX_LENGTH[MAX_LENGTH]
-+
---
-Seemaximum length of an email address.
---
-<.> xref:#REGEX_PATTERN[REGEX_PATTERN]
-+
---
-as per http://emailregex.com/
---
-
-== Members
-
-[#MAX_LENGTH]
-=== MAX_LENGTH
-
-Seemaximum length of an email address.
-
-[#REGEX_PATTERN]
-=== REGEX_PATTERN
-
-as per http://emailregex.com/
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Fqcn.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Fqcn.adoc
deleted file mode 100644
index 4c87aaa61b3..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Fqcn.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @Fqcn
-: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 [...]
-
-Meta-annotation for a _String_ property or parameter representing a fully qualified class name
-
-== API
-
-[source,java]
-.Fqcn.java
-----
-@interface Fqcn {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/LogicalTypeName.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/LogicalTypeName.adoc
deleted file mode 100644
index ba6eeccb0f2..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/LogicalTypeName.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @LogicalTypeName
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing a logical type name of a domain object (as per @ _DomainObject#logicalTypeName()_ or @ _Named#value()_ ) and consorts.
-
-== API
-
-[source,java]
-.LogicalTypeName.java
-----
-@interface LogicalTypeName {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Money.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Money.adoc
deleted file mode 100644
index dd939a01631..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Money.adoc
+++ /dev/null
@@ -1,30 +0,0 @@
-= @Money
-: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 [...]
-
-Meta-annotation for an optional _java.math.BigDecimal_ property or parameter representing a monetary amount.
-
-== API
-
-[source,java]
-.Money.java
-----
-@interface Money {
- int INTEGER;
- int FRACTION;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "true";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default Money.INTEGER + Money.FRACTION;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "scale")
-int columnScale() default Money.FRACTION;
- @AliasFor(annotation = jakarta.validation.constraints.Digits.class, attribute = "integer")
-int digitsInteger() default Money.INTEGER;
- @AliasFor(annotation = jakarta.validation.constraints.Digits.class, attribute = "fraction")
-int digitsFraction() default Money.FRACTION;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Name.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Name.adoc
deleted file mode 100644
index 0525c399de8..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Name.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @Name
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing a name of some sort.
-
-== API
-
-[source,java]
-.Name.java
-----
-@interface Name {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Notes.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Notes.adoc
deleted file mode 100644
index 046929e5a49..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Notes.adoc
+++ /dev/null
@@ -1,32 +0,0 @@
-= @Notes
-: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 [...]
-
-Meta-annotation for an optional _String_ property or parameter representing a notes or comments about some object.
-
-== API
-
-[source,java]
-.Notes.java
-----
-@interface Notes {
- int MAX_LENGTH;
- int MULTI_LINE;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "true";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
- @AliasFor(annotation = PropertyLayout.class, attribute = "multiLine")
-int propertyLayoutMultiLine() default MULTI_LINE;
- @AliasFor(annotation = ParameterLayout.class, attribute = "multiLine")
-int parameterLayoutMultiLine() default MULTI_LINE;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/ObjectIdentifier.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/ObjectIdentifier.adoc
deleted file mode 100644
index 77c6ef700f4..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/ObjectIdentifier.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @ObjectIdentifier
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing a the identity of a domain object (with respect to its logical type, as per @ _DomainObject#logicalTypeName()_ or @ _Named#value()_ ) and consorts.
-
-== API
-
-[source,java]
-.ObjectIdentifier.java
-----
-@interface ObjectIdentifier {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Percentage.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Percentage.adoc
deleted file mode 100644
index a44d3f8e3ce..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Percentage.adoc
+++ /dev/null
@@ -1,30 +0,0 @@
-= @Percentage
-: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 [...]
-
-Meta-annotation for an optional _java.math.BigDecimal_ property or parameter representing a percentage amount.
-
-== API
-
-[source,java]
-.Percentage.java
-----
-@interface Percentage {
- int INTEGER;
- int FRACTION;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "true";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default Percentage.INTEGER + Percentage.FRACTION;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "scale")
-int columnScale() default Percentage.FRACTION;
- @AliasFor(annotation = jakarta.validation.constraints.Digits.class, attribute = "integer")
-int digitsInteger() default Percentage.INTEGER;
- @AliasFor(annotation = jakarta.validation.constraints.Digits.class, attribute = "fraction")
-int digitsFraction() default Percentage.FRACTION;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/PhoneNumber.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/PhoneNumber.adoc
deleted file mode 100644
index 5d97c15782e..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/PhoneNumber.adoc
+++ /dev/null
@@ -1,37 +0,0 @@
-= @PhoneNumber
-: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 [...]
-
-Meta-annotation for an optional _String_ property or parameter representing a phone number.
-
-== API
-
-[source,java]
-.PhoneNumber.java
-----
-@interface PhoneNumber {
- int MAX_LENGTH;
- String REGEX_PATTERN;
- String REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Property.class, attribute = "regexPattern")
-String propertyRegexPattern() default REGEX_PATTERN;
- @AliasFor(annotation = Parameter.class, attribute = "regexPattern")
-String parameterRegexPattern() default REGEX_PATTERN;
- @AliasFor(annotation = Property.class, attribute = "regexPatternReplacement")
-String propertyRegexPatternReplacement() default REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = Parameter.class, attribute = "regexPatternReplacement")
-String parameterRegexPatternReplacement() default REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "true";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/PostalCode.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/PostalCode.adoc
deleted file mode 100644
index 7a660762012..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/PostalCode.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @PostalCode
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing a postal code or zip code.
-
-== API
-
-[source,java]
-.PostalCode.java
-----
-@interface PostalCode {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/ProperName.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/ProperName.adoc
deleted file mode 100644
index a3a160666a4..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/ProperName.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @ProperName
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing the "proper" (or formal) name of some sort.
-
-== API
-
-[source,java]
-.ProperName.java
-----
-@interface ProperName {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Reference.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Reference.adoc
deleted file mode 100644
index 9799d1c70c7..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Reference.adoc
+++ /dev/null
@@ -1,37 +0,0 @@
-= @Reference
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing A unique reference code of some sort, restricted to capitals, numbers and '_', '/' and '-'.
-
-== API
-
-[source,java]
-.Reference.java
-----
-@interface Reference {
- int MAX_LENGTH;
- String REGEX_PATTERN;
- String REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.OPTIONAL;
- @AliasFor(annotation = Property.class, attribute = "regexPattern")
-String propertyRegexPattern() default REGEX_PATTERN;
- @AliasFor(annotation = Parameter.class, attribute = "regexPattern")
-String parameterRegexPattern() default REGEX_PATTERN;
- @AliasFor(annotation = Property.class, attribute = "regexPatternReplacement")
-String propertyRegexPatternReplacement() default REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = Parameter.class, attribute = "regexPatternReplacement")
-String parameterRegexPatternReplacement() default REGEX_PATTERN_REPLACEMENT;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Title.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Title.adoc
deleted file mode 100644
index b05affd0fc8..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Title.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @Title
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing a title (or perhaps label) of some sort.
-
-== API
-
-[source,java]
-.Title.java
-----
-@interface Title {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/UrlTemplate.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/UrlTemplate.adoc
deleted file mode 100644
index 50c462c3bab..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/UrlTemplate.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @UrlTemplate
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing a URL template, for example for an entity that holds configuration data to access external systems.
-
-== API
-
-[source,java]
-.UrlTemplate.java
-----
-@interface UrlTemplate {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Username.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Username.adoc
deleted file mode 100644
index 1e39bb5bba7..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/applib/types/Username.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-= @Username
-: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 [...]
-
-Meta-annotation for a mandatory _String_ property or parameter representing the unique username (or login name) of a user of the system.
-
-== API
-
-[source,java]
-.Username.java
-----
-@interface Username {
- int MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "maxLength")
-int propertyMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Parameter.class, attribute = "maxLength")
-int parameterMaxLength() default MAX_LENGTH;
- @AliasFor(annotation = Property.class, attribute = "optionality")
-Optionality propertyOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = Parameter.class, attribute = "optionality")
-Optionality parameterOptionality() default Optionality.MANDATORY;
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "allowsNull")
-String columnAllowsNull() default "false";
- @AliasFor(annotation = javax.jdo.annotations.Column.class, attribute = "length")
-int columnLength() default MAX_LENGTH;
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.adoc
deleted file mode 100644
index 988cd9b0ec6..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.adoc
+++ /dev/null
@@ -1,40 +0,0 @@
-= CausewayModulePersistenceJdoDatanucleus
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModulePersistenceJdoDatanucleus.java
-----
-class CausewayModulePersistenceJdoDatanucleus {
- public static final String NAMESPACE;
- DnJdoDialect getDnJdoDialect(DataSource dataSource) // <.>
- LocalPersistenceManagerFactoryBean getLocalPersistenceManagerFactoryBean(CausewayConfiguration causewayConfiguration, DataSource dataSource, MetaModelContext metaModelContext, ObjectLifecyclePublisher objectLifecyclePublisher, CausewayBeanTypeRegistry beanTypeRegistry, DatanucleusSettings dnSettings)
- TransactionAwarePersistenceManagerFactoryProxy getTransactionAwarePersistenceManagerFactoryProxy(MetaModelContext metaModelContext, LocalPersistenceManagerFactoryBean localPmfBean, CausewayBeanTypeRegistry beanTypeRegistry, List<JdoEntityDiscoveryListener> jdoEntityDiscoveryListeners, DatanucleusSettings dnSettings)
- JdoTransactionManager getTransactionManager(JdoDialect jdoDialect, LocalPersistenceManagerFactoryBean localPmfBean)
- TransactionInterceptor transactionInterceptor(TransactionAttributeSource transactionAttributeSource) // <.>
-}
-----
-
-<.> xref:#getDnJdoDialect_DataSource[getDnJdoDialect(DataSource)]
-+
---
-Conveniently registers this dialect as a _PersistenceExceptionTranslator_ with _Spring_ .
---
-<.> xref:#transactionInterceptor_TransactionAttributeSource[transactionInterceptor(TransactionAttributeSource)]
-+
---
-Works in combination with org.apache.causeway.core.config.beans.TransactionInterceptorPatcher. Replaces the Spring provided _TransactionInterceptor_ , with an overwritten variant.
---
-
-== Members
-
-[#getDnJdoDialect_DataSource]
-=== getDnJdoDialect(DataSource)
-
-Conveniently registers this dialect as a _PersistenceExceptionTranslator_ with _Spring_ .
-
-[#transactionInterceptor_TransactionAttributeSource]
-=== transactionInterceptor(TransactionAttributeSource)
-
-Works in combination with org.apache.causeway.core.config.beans.TransactionInterceptorPatcher. Replaces the Spring provided _TransactionInterceptor_ , with an overwritten variant.
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleusMixins.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleusMixins.adoc
deleted file mode 100644
index 41531775f2e..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleusMixins.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= CausewayModulePersistenceJdoDatanucleusMixins
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModulePersistenceJdoDatanucleusMixins.java
-----
-class CausewayModulePersistenceJdoDatanucleusMixins {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc
deleted file mode 100644
index c0319f9f957..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc
+++ /dev/null
@@ -1,55 +0,0 @@
-= JdoLifecycleListener
-: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 [...]
-
-* enlistCreated <-> postStore (when NEW)
-* enlistDeleting <-> preDelete
-* enlistUpdating <-> preDirty
-* recognizeLoaded <-> postLoad
-* recognizePersisting <-> preStore (when NEW)
-* recognizeUpdating <-> postStore (when NOT NEW)
-
-== API
-
-[source,java]
-.JdoLifecycleListener.java
-----
-class JdoLifecycleListener {
- void postCreate(InstanceLifecycleEvent event)
- void preAttach(InstanceLifecycleEvent event)
- void postAttach(InstanceLifecycleEvent event)
- void postLoad(InstanceLifecycleEvent event)
- void preStore(InstanceLifecycleEvent event)
- void postStore(InstanceLifecycleEvent event)
- void preDirty(InstanceLifecycleEvent event)
- void postDirty(InstanceLifecycleEvent event)
- void preDelete(InstanceLifecycleEvent event)
- void postDelete(InstanceLifecycleEvent event)
- void preClear(InstanceLifecycleEvent event) // <.>
- void postClear(InstanceLifecycleEvent event) // <.>
- void preDetach(InstanceLifecycleEvent event)
- void postDetach(InstanceLifecycleEvent event)
-}
-----
-
-<.> xref:#preClear_InstanceLifecycleEvent[preClear(InstanceLifecycleEvent)]
-+
---
-Does nothing, not important event for Causeway to track.
---
-<.> xref:#postClear_InstanceLifecycleEvent[postClear(InstanceLifecycleEvent)]
-+
---
-Does nothing, not important event for Causeway to track.
---
-
-== Members
-
-[#preClear_InstanceLifecycleEvent]
-=== preClear(InstanceLifecycleEvent)
-
-Does nothing, not important event for Causeway to track.
-
-[#postClear_InstanceLifecycleEvent]
-=== postClear(InstanceLifecycleEvent)
-
-Does nothing, not important event for Causeway to track.
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/dialect/DnJdoDialect.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/dialect/DnJdoDialect.adoc
deleted file mode 100644
index 9a12947aab5..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/dialect/DnJdoDialect.adoc
+++ /dev/null
@@ -1,16 +0,0 @@
-= DnJdoDialect
-: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 [...]
-
-Vendor ( _Datanucleus_ ) specific implementation of _Spring's_ _JdoDialect_ interface.
-
-== API
-
-[source,java]
-.DnJdoDialect.java
-----
-class DnJdoDialect {
- DnJdoDialect(Object connectionFactory)
- DataAccessException translateExceptionIfPossible(RuntimeException cause)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.adoc
deleted file mode 100644
index d3f15ea58cf..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.adoc
+++ /dev/null
@@ -1,18 +0,0 @@
-= Persistable_datanucleusVersionLong
-: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 [...]
-
-Contributes the value of the version (introduced by enhancing, and used by the ORM for optimistic locking) as a property.
-
-Only visible if the version can be cast to a long.
-
-== API
-
-[source,java]
-.Persistable_datanucleusVersionLong.java
-----
-class Persistable_datanucleusVersionLong {
- Long prop()
- boolean hideProp()
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.adoc
deleted file mode 100644
index 29d99fb9554..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.adoc
+++ /dev/null
@@ -1,18 +0,0 @@
-= Persistable_datanucleusVersionTimestamp
-: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 [...]
-
-Contributes the value of the version (introduced by enhancing, and used by the ORM for optimistic locking) as a property.
-
-Only visible if the version can be cast to a _java.sql.Timestamp_ .
-
-== API
-
-[source,java]
-.Persistable_datanucleusVersionTimestamp.java
-----
-class Persistable_datanucleusVersionTimestamp {
- java.sql.Timestamp prop()
- boolean hideProp()
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.adoc
deleted file mode 100644
index dd446105eba..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.adoc
+++ /dev/null
@@ -1,16 +0,0 @@
-= Persistable_downloadJdoMetadata
-: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 the ability to download the JDOclass metadataas XML.
-
-== API
-
-[source,java]
-.Persistable_downloadJdoMetadata.java
-----
-class Persistable_downloadJdoMetadata {
- Clob act(String fileName)
- String default0Act()
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayBookmarkConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayBookmarkConverter.adoc
deleted file mode 100644
index b739f684930..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayBookmarkConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayBookmarkConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayBookmarkConverter.java
-----
-class CausewayBookmarkConverter {
- String toDatastoreType(Bookmark memberValue)
- Bookmark toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayLocalResourcePathConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayLocalResourcePathConverter.adoc
deleted file mode 100644
index 4e977074d0c..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayLocalResourcePathConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayLocalResourcePathConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayLocalResourcePathConverter.java
-----
-class CausewayLocalResourcePathConverter {
- String toDatastoreType(LocalResourcePath memberValue)
- LocalResourcePath toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayMarkupConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayMarkupConverter.adoc
deleted file mode 100644
index d59de97cd66..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayMarkupConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayMarkupConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayMarkupConverter.java
-----
-class CausewayMarkupConverter {
- String toDatastoreType(Markup memberValue)
- Markup toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayPasswordConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayPasswordConverter.adoc
deleted file mode 100644
index 3ff7167df73..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/applib/CausewayPasswordConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayPasswordConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayPasswordConverter.java
-----
-class CausewayPasswordConverter {
- String toDatastoreType(Password memberValue)
- Password toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/image/JavaAwtBufferedImageByteArrayConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/image/JavaAwtBufferedImageByteArrayConverter.adoc
deleted file mode 100644
index 6a62886b2ba..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/image/JavaAwtBufferedImageByteArrayConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= JavaAwtBufferedImageByteArrayConverter
-: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 [...]
-
-== API
-
-[source,java]
-.JavaAwtBufferedImageByteArrayConverter.java
-----
-class JavaAwtBufferedImageByteArrayConverter {
- byte[] toDatastoreType(BufferedImage memberValue)
- BufferedImage toMemberType(byte[] datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayChangesDtoConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayChangesDtoConverter.adoc
deleted file mode 100644
index 88103a73f8a..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayChangesDtoConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayChangesDtoConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayChangesDtoConverter.java
-----
-class CausewayChangesDtoConverter {
- String toDatastoreType(ChangesDto memberValue)
- ChangesDto toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayCommandDtoConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayCommandDtoConverter.adoc
deleted file mode 100644
index ba91e2f19ae..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayCommandDtoConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayCommandDtoConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayCommandDtoConverter.java
-----
-class CausewayCommandDtoConverter {
- String toDatastoreType(CommandDto memberValue)
- CommandDto toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayInteractionDtoConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayInteractionDtoConverter.adoc
deleted file mode 100644
index 2f71435a56f..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayInteractionDtoConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayInteractionDtoConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayInteractionDtoConverter.java
-----
-class CausewayInteractionDtoConverter {
- String toDatastoreType(InteractionDto memberValue)
- InteractionDto toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayOidDtoConverter.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayOidDtoConverter.adoc
deleted file mode 100644
index 02e306c3bd9..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/schema/v2/CausewayOidDtoConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayOidDtoConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayOidDtoConverter.java
-----
-class CausewayOidDtoConverter {
- String toDatastoreType(OidDto memberValue)
- OidDto toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/OffsetDateTimeConverterForJdo.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/OffsetDateTimeConverterForJdo.adoc
deleted file mode 100644
index e44867db38a..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/OffsetDateTimeConverterForJdo.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= OffsetDateTimeConverterForJdo
-: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 [...]
-
-== API
-
-[source,java]
-.OffsetDateTimeConverterForJdo.java
-----
-class OffsetDateTimeConverterForJdo {
- String toDatastoreType(OffsetDateTime offsetDateTime)
- OffsetDateTime toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/OffsetTimeConverterForJdo.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/OffsetTimeConverterForJdo.adoc
deleted file mode 100644
index 486a15e8bfc..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/OffsetTimeConverterForJdo.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= OffsetTimeConverterForJdo
-: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 [...]
-
-== API
-
-[source,java]
-.OffsetTimeConverterForJdo.java
-----
-class OffsetTimeConverterForJdo {
- String toDatastoreType(OffsetTime offsetTime)
- OffsetTime toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/ZonedDateTimeConverterForJdo.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/ZonedDateTimeConverterForJdo.adoc
deleted file mode 100644
index 9f55869a05d..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/typeconverters/time/ZonedDateTimeConverterForJdo.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= ZonedDateTimeConverterForJdo
-: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 [...]
-
-== API
-
-[source,java]
-.ZonedDateTimeConverterForJdo.java
-----
-class ZonedDateTimeConverterForJdo {
- String toDatastoreType(ZonedDateTime zonedDateTime)
- ZonedDateTime toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/ByteArrayBlobRdbmsMapping.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/ByteArrayBlobRdbmsMapping.adoc
deleted file mode 100644
index 163aba62f90..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/ByteArrayBlobRdbmsMapping.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= ByteArrayBlobRdbmsMapping
-: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 [...]
-
-== API
-
-[source,java]
-.ByteArrayBlobRdbmsMapping.java
-----
-class ByteArrayBlobRdbmsMapping {
- ByteArrayBlobRdbmsMapping(JavaTypeMapping mapping, RDBMSStoreManager storeMgr, Column col)
- JavaTypeMapping getJavaTypeMapping()
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/CausewayBlobMapping.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/CausewayBlobMapping.adoc
deleted file mode 100644
index 51b3da6018e..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/CausewayBlobMapping.adoc
+++ /dev/null
@@ -1,19 +0,0 @@
-= CausewayBlobMapping
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayBlobMapping.java
-----
-class CausewayBlobMapping {
- CausewayBlobMapping()
- Class<?> getJavaType()
- void initialize(AbstractMemberMetaData mmd, Table container, ClassLoaderResolver clr)
- void initialize(RDBMSStoreManager storeMgr, String type)
- Object getValueForColumnMapping(NucleusContext nucleusCtx, int index, Object value)
- void setObject(ExecutionContext ec, PreparedStatement preparedStmt, int[] exprIndex, Object value)
- Object getObject(ExecutionContext ec, ResultSet resultSet, int[] exprIndex)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/CausewayClobMapping.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/CausewayClobMapping.adoc
deleted file mode 100644
index bf1348ad7a9..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/valuemappings/CausewayClobMapping.adoc
+++ /dev/null
@@ -1,19 +0,0 @@
-= CausewayClobMapping
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayClobMapping.java
-----
-class CausewayClobMapping {
- CausewayClobMapping()
- Class<?> getJavaType()
- void initialize(AbstractMemberMetaData mmd, Table container, ClassLoaderResolver clr)
- void initialize(RDBMSStoreManager storeMgr, String type)
- Object getValueForColumnMapping(NucleusContext nucleusCtx, int index, Object value)
- void setObject(ExecutionContext ec, PreparedStatement preparedStmt, int[] exprIndex, Object value)
- Object getObject(ExecutionContext ec, ResultSet resultSet, int[] exprIndex)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/querydsl/jdo/CausewayModulePersistenceQueryDslJdo.adoc b/antora/components/refguide-index/modules/persistence/pages/index/querydsl/jdo/CausewayModulePersistenceQueryDslJdo.adoc
deleted file mode 100644
index 6c2f49e5558..00000000000
--- a/antora/components/refguide-index/modules/persistence/pages/index/querydsl/jdo/CausewayModulePersistenceQueryDslJdo.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= CausewayModulePersistenceQueryDslJdo
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModulePersistenceQueryDslJdo.java
-----
-class CausewayModulePersistenceQueryDslJdo {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureJdoRules.adoc b/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureJdoRules.adoc
deleted file mode 100644
index 2ec160f1ec3..00000000000
--- a/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureJdoRules.adoc
+++ /dev/null
@@ -1,127 +0,0 @@
-= ArchitectureJdoRules
-: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 [...]
-
-A library of architecture tests to ensure coding conventions are followed for classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation.
-
-== API
-
-[source,java]
-.ArchitectureJdoRules.java
-----
-class ArchitectureJdoRules {
- ArchRule every_logicalTypeName_and_jdo_discriminator_must_be_same()
- ArchRule every_jdo_PersistenceCapable_must_be_annotated_with_DomainObject_nature_of_ENTITY() // <.>
- ArchRule every_jdo_PersistenceCapable_must_be_annotated_with_Version() // <.>
- ArchRule every_jdo_PersistenceCapable_must_be_annotated_as_XmlJavaAdapter_PersistentEntityAdapter() // <.>
- ArchRule every_jdo_PersistenceCapable_must_implement_Comparable() // <.>
- ArchRule every_jdo_PersistenceCapable_must_be_annotated_as_Uniques_or_Unique() // <.>
- ArchRule every_jdo_PersistenceCapable_with_DATASTORE_identityType_must_be_annotated_as_DataStoreIdentity() // <.>
- ArchRule every_jdo_PersistenceCapable_must_have_schema() // <.>
- DescribedPredicate<JavaAnnotation<?>> PersistenceCapable_schema()
- DescribedPredicate<JavaAnnotation<?>> PersistenceCapable_with_DATASTORE_identityType()
- ArchRule every_injected_field_of_jdo_PersistenceCapable_must_be_annotated_with_NotPersistent() // <.>
- DescribedPredicate<JavaClass> areEntities()
- DescribedPredicate<? super JavaClass> areSubtypeEntities()
-}
-----
-
-<.> xref:#every_jdo_PersistenceCapable_must_be_annotated_with_DomainObject_nature_of_ENTITY_[every_jdo_PersistenceCapable_must_be_annotated_with_DomainObject_nature_of_ENTITY()]
-+
---
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also be annotated with the Apache Causeway xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] annotation specifying that its _DomainObject#nature() nature_ is an _org.apache.causeway.applib.annotation.Nature#ENTITY entity_ .
---
-<.> xref:#every_jdo_PersistenceCapable_must_be_annotated_with_Version_[every_jdo_PersistenceCapable_must_be_annotated_with_Version()]
-+
---
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also be annotated with the JDO _javax.jdo.annotations.Version_ annotation (in support of optimistic locking checks).
---
-<.> xref:#every_jdo_PersistenceCapable_must_be_annotated_as_XmlJavaAdapter_PersistentEntityAdapter_[every_jdo_PersistenceCapable_must_be_annotated_as_XmlJavaAdapter_PersistentEntityAdapter()]
-+
---
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also be annotated with the Apache Causeway _jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter_ annotation with a value of _org.apache.causeway.applib.jaxb.PersistentEntityAdapter_ `.class` .
---
-<.> xref:#every_jdo_PersistenceCapable_must_implement_Comparable_[every_jdo_PersistenceCapable_must_implement_Comparable()]
-+
---
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also implement _Comparable_ .
---
-<.> xref:#every_jdo_PersistenceCapable_must_be_annotated_as_Uniques_or_Unique_[every_jdo_PersistenceCapable_must_be_annotated_as_Uniques_or_Unique()]
-+
---
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation and is not a subtype entity, must also be annotated with the JDO _javax.jdo.annotations.Uniques_ or _javax.jdo.annotations.Unique_ constraints.
---
-<.> xref:#every_jdo_PersistenceCapable_with_DATASTORE_identityType_must_be_annotated_as_DataStoreIdentity_[every_jdo_PersistenceCapable_with_DATASTORE_identityType_must_be_annotated_as_DataStoreIdentity()]
-+
---
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also be annotated with the JDO _javax.jdo.annotations.Uniques_ or _javax.jdo.annotations.Unique_ constraints.
---
-<.> xref:#every_jdo_PersistenceCapable_must_have_schema_[every_jdo_PersistenceCapable_must_have_schema()]
-+
---
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must have the _javax.jdo.annotations.PersistenceCapable#schema() schema_ attribute set.
---
-<.> xref:#every_injected_field_of_jdo_PersistenceCapable_must_be_annotated_with_NotPersistent_[every_injected_field_of_jdo_PersistenceCapable_must_be_annotated_with_NotPersistent()]
-+
---
-This rule requires that injected fields in classes annotated with the JDO _PersistenceCapable_ annotation must also be annotated with JDO _javax.jdo.annotations.NotPersistent_ annotation.
---
-
-== Members
-
-[#every_jdo_PersistenceCapable_must_be_annotated_with_DomainObject_nature_of_ENTITY_]
-=== every_jdo_PersistenceCapable_must_be_annotated_with_DomainObject_nature_of_ENTITY()
-
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also be annotated with the Apache Causeway xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] annotation specifying that its _DomainObject#nature() nature_ is an _org.apache.causeway.applib.annotation.Nature#ENTITY entity_ .
-
-[#every_jdo_PersistenceCapable_must_be_annotated_with_Version_]
-=== every_jdo_PersistenceCapable_must_be_annotated_with_Version()
-
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also be annotated with the JDO _javax.jdo.annotations.Version_ annotation (in support of optimistic locking checks).
-
-The rule does _not_ apply to any entities that are subtype entities where there is a supertype entity.
-
-[#every_jdo_PersistenceCapable_must_be_annotated_as_XmlJavaAdapter_PersistentEntityAdapter_]
-=== every_jdo_PersistenceCapable_must_be_annotated_as_XmlJavaAdapter_PersistentEntityAdapter()
-
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also be annotated with the Apache Causeway _jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter_ annotation with a value of _org.apache.causeway.applib.jaxb.PersistentEntityAdapter_ `.class` .
-
-Tnis is so that entities can be transparently referenced from XML-style view models.
-
-[#every_jdo_PersistenceCapable_must_implement_Comparable_]
-=== every_jdo_PersistenceCapable_must_implement_Comparable()
-
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also implement _Comparable_ .
-
-This is so that entities have a natural ordering and can safely be added to parented collections of type _java.util.SortedSet_ .
-
-[#every_jdo_PersistenceCapable_must_be_annotated_as_Uniques_or_Unique_]
-=== every_jdo_PersistenceCapable_must_be_annotated_as_Uniques_or_Unique()
-
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation and is not a subtype entity, must also be annotated with the JDO _javax.jdo.annotations.Uniques_ or _javax.jdo.annotations.Unique_ constraints.
-
-This is so that entities will have an alternative business key in addition to the system-defined surrogate key.
-
-[#every_jdo_PersistenceCapable_with_DATASTORE_identityType_must_be_annotated_as_DataStoreIdentity_]
-=== every_jdo_PersistenceCapable_with_DATASTORE_identityType_must_be_annotated_as_DataStoreIdentity()
-
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must also be annotated with the JDO _javax.jdo.annotations.Uniques_ or _javax.jdo.annotations.Unique_ constraints.
-
-This is so that entities will have an alternative business key in addition to the system-defined surrogate key.
-
-The rule does _not_ apply to any entities that are subtype entities where there is a supertype entity.
-
-[#every_jdo_PersistenceCapable_must_have_schema_]
-=== every_jdo_PersistenceCapable_must_have_schema()
-
-This rule requires that classes annotated with the JDO _javax.jdo.annotations.PersistenceCapable_ annotation must have the _javax.jdo.annotations.PersistenceCapable#schema() schema_ attribute set.
-
-This is so that entity tables are organised into an appropriate structure (ideally mirroring that of the entities).
-
-[#every_injected_field_of_jdo_PersistenceCapable_must_be_annotated_with_NotPersistent_]
-=== every_injected_field_of_jdo_PersistenceCapable_must_be_annotated_with_NotPersistent()
-
-This rule requires that injected fields in classes annotated with the JDO _PersistenceCapable_ annotation must also be annotated with JDO _javax.jdo.annotations.NotPersistent_ annotation.
-
-The rationale here is that injected services are managed by the runtime and are not/cannot be persisted.
-
-In fact, JDO is tolerant to such fields and will not trip up. So another more pragmatic reason is that, if using JDO type-safe queries, then the injected fields will not appear incorrectly in the generated Q classes.
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jdo/TeardownFixtureJdoAbstract.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jdo/TeardownFixtureJdoAbstract.adoc
deleted file mode 100644
index 1981f895618..00000000000
--- a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jdo/TeardownFixtureJdoAbstract.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= TeardownFixtureJdoAbstract
-: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 [...]
-
-== API
-
-[source,java]
-.TeardownFixtureJdoAbstract.java
-----
-class TeardownFixtureJdoAbstract {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/CausewayModuleValAsciidocPersistenceJdo.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/CausewayModuleValAsciidocPersistenceJdo.adoc
deleted file mode 100644
index 087d9bdff6f..00000000000
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/CausewayModuleValAsciidocPersistenceJdo.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= CausewayModuleValAsciidocPersistenceJdo
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleValAsciidocPersistenceJdo.java
-----
-class CausewayModuleValAsciidocPersistenceJdo {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocConverter.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocConverter.adoc
deleted file mode 100644
index 54a7221e21d..00000000000
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/persistence/jdo/converters/CausewayAsciiDocConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayAsciiDocConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayAsciiDocConverter.java
-----
-class CausewayAsciiDocConverter {
- String toDatastoreType(AsciiDoc memberValue)
- AsciiDoc toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/persistence/jdo/CausewayModuleValMarkdownPersistenceJdo.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/persistence/jdo/CausewayModuleValMarkdownPersistenceJdo.adoc
deleted file mode 100644
index c3ed2ae2d9a..00000000000
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/persistence/jdo/CausewayModuleValMarkdownPersistenceJdo.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= CausewayModuleValMarkdownPersistenceJdo
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleValMarkdownPersistenceJdo.java
-----
-class CausewayModuleValMarkdownPersistenceJdo {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/persistence/jdo/converters/CausewayMarkdownConverter.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/persistence/jdo/converters/CausewayMarkdownConverter.adoc
deleted file mode 100644
index 63775528c93..00000000000
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/persistence/jdo/converters/CausewayMarkdownConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayMarkdownConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayMarkdownConverter.java
-----
-class CausewayMarkdownConverter {
- String toDatastoreType(Markdown memberValue)
- Markdown toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/vega/persistence/jdo/dn/CausewayModuleValVegaPersistenceJdo.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/vega/persistence/jdo/dn/CausewayModuleValVegaPersistenceJdo.adoc
deleted file mode 100644
index 71e2a202d18..00000000000
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/vega/persistence/jdo/dn/CausewayModuleValVegaPersistenceJdo.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= CausewayModuleValVegaPersistenceJdo
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayModuleValVegaPersistenceJdo.java
-----
-class CausewayModuleValVegaPersistenceJdo {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/vega/persistence/jdo/dn/converters/CausewayVegaConverter.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/vega/persistence/jdo/dn/converters/CausewayVegaConverter.adoc
deleted file mode 100644
index ad302476b25..00000000000
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/vega/persistence/jdo/dn/converters/CausewayVegaConverter.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= CausewayVegaConverter
-: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 [...]
-
-== API
-
-[source,java]
-.CausewayVegaConverter.java
-----
-class CausewayVegaConverter {
- String toDatastoreType(Vega memberValue)
- Vega toMemberType(String datastoreValue)
-}
-----
-
diff --git a/antora/components/refguide/modules/applib-ant/pages/about.adoc b/antora/components/refguide/modules/applib-ant/pages/about.adoc
index a75a4dfd946..69405203cf9 100644
--- a/antora/components/refguide/modules/applib-ant/pages/about.adoc
+++ b/antora/components/refguide/modules/applib-ant/pages/about.adoc
@@ -16,7 +16,6 @@ include::partial$about/other.adoc[leveloffset=+1]
include::partial$about/jee.adoc[leveloffset=+1]
include::partial$about/jaxb.adoc[leveloffset=+1]
include::partial$about/jpa.adoc[leveloffset=+1]
-include::partial$about/jdo.adoc[leveloffset=+1]
== Examples
diff --git a/antora/components/refguide/modules/applib-ant/partials/about/jdo.adoc b/antora/components/refguide/modules/applib-ant/partials/about/jdo.adoc
deleted file mode 100644
index f1d4f556ba6..00000000000
--- a/antora/components/refguide/modules/applib-ant/partials/about/jdo.adoc
+++ /dev/null
@@ -1,110 +0,0 @@
-= JDO Annotations
-
-: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 [...]
-:page-partial:
-
-
-The table below lists the xref:pjdo:ROOT:about.adoc[JDO/DataNucleus] annotations currently recognized by Apache Causeway.
-
-
-.JDO Annotations
-[cols="2,4a,1,1", options="header"]
-|===
-|Annotation
-|Purpose
-|Layer
-|Applies to
-
-
-|xref:refguide:applib-ant:Column.adoc[@javax.jdo.annotations. +
-Column]
-|Used to determine whether a property is mandatory or optional. For `String` and `BigDecimal` properties, used to determine length/precision/scale.
-
-|Domain / persistence
-|Property
-
-
-|xref:refguide:applib-ant:Discriminator.adoc[@javax.jdo.annotations. +
-Discriminator]
-|Infer the logical type name.
-This takes precedence of `@PersistenceCapable` (below).
-However, `@DomainObject#logicalTypeName` takes precedence over this.
-|Domain / persistence
-|Class
-
-
-|xref:refguide:applib-ant:NotPersistent.adoc[@javax.jdo.annotations. +
-NotPersistent]
-|Used to determine whether to enforce or skip some metamodel validation on nullability (`@Column` vs equivalent Causeway annotations).
-
-|Domain / persistence
-|Property
-
-
-|xref:refguide:applib-ant:PersistenceCapable.adoc[@javax.jdo.annotations. +
-PersistenceCapable]
-|The `schema` attribute plus table name is used to the logical type name.
-However, `@Discriminator` (above) takes precedence, as does `@DomainObject#logicalTypeName`.
-
-Internally, it also flags that the class is an entity, creating an abstraction layer through which the Causeway framework interacts with the underlying persistent domain object.
-
-|Domain / persistence
-|Class
-
-
-|xref:refguide:applib-ant:PrimaryKey.adoc[@javax.jdo.annotations. +
-PrimaryKey]
-|Used to ensure Apache Causeway does not overwrite application-defined primary keys, and to ensure is read-only in the UI.
-
-|Domain / persistence
-|Property
-
-
-
-|===
-
-
-
-Causeway also parses the following JDO annotations, but the metadata is currently unused.
-
-.JDO Annotations (unused within Apache Causeway)
-[cols="2,4a,1,1", options="header"]
-|===
-|Annotation
-|Purpose
-|Layer
-|Applies to
-
-
-|@javax.jdo.annotations. +
-DataStoreIdentity
-|Unused
-|Persistence
-|Class
-
-
-|@javax.jdo.annotations. +
-Queries
-|Unused
-|Persistence
-|Class
-
-
-|@javax.jdo.annotations. +
-Query
-|Unused
-|Persistence
-|Class
-
-
-|@javax.jdo.annotations. +
-Version
-|Unused
-|Persistence
-|Class
-
-
-|===
-
-
-
diff --git a/antora/components/userguide/modules/ROOT/pages/domain-entities.adoc b/antora/components/userguide/modules/ROOT/pages/domain-entities.adoc
index dc6de27312f..d05a5e456ed 100644
--- a/antora/components/userguide/modules/ROOT/pages/domain-entities.adoc
+++ b/antora/components/userguide/modules/ROOT/pages/domain-entities.adoc
@@ -6,7 +6,6 @@
include::partial$domain-entities/_intro.adoc[leveloffset=+1]
include::partial$domain-entities/progmodel.adoc[leveloffset=+1]
include::partial$domain-entities/jpa.adoc[leveloffset=+1]
-include::partial$domain-entities/jdo.adoc[leveloffset=+1]
diff --git a/antora/components/userguide/modules/ROOT/partials/domain-entities/jdo.adoc b/antora/components/userguide/modules/ROOT/partials/domain-entities/jdo.adoc
deleted file mode 100644
index b514e7cc72a..00000000000
--- a/antora/components/userguide/modules/ROOT/partials/domain-entities/jdo.adoc
+++ /dev/null
@@ -1,166 +0,0 @@
-= Entities (JDO)
-
-: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 [...]
-:page-partial:
-
-
-If the xref:pjdo:ROOT:about.adoc[JDO/DataNucleus object store] is to be used, then the domain entities should be annotated using JDO annotations.
-
-This section shows a simple example.
-See the xref:pjdo:ROOT:about.adoc[JDO/DataNucleus object store] documentation for further information on annotating domain entities.
-
-
-== Class definition
-
-For the domain class itself, this will be `@javax.jdo.annotations.PersistenceCapable` annotation and probably the `@javax.jdo.annotations.DatastoreIdentity`, as well as others to define indices and queries.
-
-[source,java]
-----
-@javax.jdo.annotations.PersistenceCapable( // <.>
- identityType=IdentityType.DATASTORE, // <.>
- schema = "simple", // <.>
- table = "SimpleObject"
-)
-@javax.jdo.annotations.DatastoreIdentity( // <.>
- strategy=javax.jdo.annotations.IdGeneratorStrategy.IDENTITY,
- column="id"
-)
-@javax.jdo.annotations.Version( // <.>
- strategy= VersionStrategy.DATE_TIME,
- column="version"
-)
-@Named("simple.SimpleObject") // <.>
-@DomainObject // <.>
-public class SimpleObject { /* ... */ }
-----
-
-<.> The `@PersistenceCapable` annotation indicates that this is an entity to DataNucleus.
-The DataNucleus enhancer acts on the bytecode of compiled entities, injecting lazy loading and dirty object tracking functionality.
-Enhanced entities end up also implementing the `javax.jdo.spi.PersistenceCapable` interface.
-<.> Indicates how identifiers for the entity are handled.
-Using `DATASTORE` means that a DataNucleus is responsible for assigning the value (rather than the application).
-<.> Specifies the RDBMS database schema and table name for this entity will reside.
-It's recommended that the schema corresponds to the module in which the entity resides.
-The table will default to the entity name if omitted.
-<.> For entities that are using `DATASTORE` identity, indicates how the id will be assigned.
-A common strategy is to allow the database to assign the id, for example using an identity column or a sequence.
-<.> The `@Version` annotation is useful for optimistic locking; the strategy indicates what to store in the `version` column.
-<.> the `@Named` annotation defines a logical name for the concrete class; used in security and bookmarks.
-<.> The `@DomainObject` annotation identifies the domain object to Apache Causeway (not to DataNucleus).
-It isn't necessary to include this annotation -- at least, not for entities -- but it is nevertheless recommended.
-
-
-== Scalar Properties
-
-All domain entities will have some sort of mandatory key properties.
-Additional annotations are also required to define their scalar properties and relationships to other entities.
-
-The example below is a very simple case, where the entity is identified by a `name` property.
-This is often used in database unique indices, and in the `toString()` implementation:
-
-[source,java]
-----
-import javax.jdo.annotations.Column;
-import javax.jdo.annotations.Unique;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-import lombok.ToString.Include;
-...
-@Unique(
- name="SimpleObject_name_UNQ", members = {"name"}) // <.>
-@ToString(onlyExplicitlyIncluded = true)
-public class SimpleObject
- implements Comparable<SimpleObject> { // <.>
-
- public SimpleObject(String name) {
- setName(name);
- }
-
- @Column(allowsNull="false", length=50) // <.>
- @Getter @Setter // <.>
- @ToString.Include // <.>
- private String name;
-
- private final static Comparator<SimpleObject> comparator =
- Comparator.comparing(SimpleObject::getName);
-
- @Override
- public int compareTo(final SimpleObject other) {
- return comparator.compare(this, other); // <.>
- }
-}
-----
-<.> DataNucleus will automatically add a unique index to the primary surrogate id (discussed above), but additional alternative keys can be defined using the `@Unique` annotation.
-In the example above, the "name" property is assumed to be unique.
-<.> Although not required, we strongly recommend that all entities are naturally `Comparable`.
-This then allows parent/child relationships to be defined using ``SortedSet``s; RDBMS after all are set-oriented.
-<.> Chances are that some of the properties of the entity will be mandatory, for example any properties that represent an alternate unique key to the entity.
-The `@Column` annotation specifies the length of the column in the RDBMS, and whether it is mandatory.
-+
-Given there is a unique index on `name`, we want this to be mandatory.
-+
-We can also represent this using a constructor that defines these mandatory properties.
-The ORM will create a no-arg constructor to allow domain entity to be rehydrated from the database at runtime (it then sets all state reflectively).
-
-<.> Use Lombok to generate the getters and setters for the `name` property itself.
-<.> Use Lombok to create a `toString()` implementation that includes the value of `name` property.
-
-<.> Use `java.util.Comparator#comparing()` to implement `Comparable` interface.
-
-
-== Queries
-
-When using JDO, it's also common for domain entities to have queries annotated on them.
-These are used by repository domain services to query for instances of the entity:
-
-[source,java]
-----
-...
-@javax.jdo.annotations.Queries({
- @javax.jdo.annotations.Query( // <.>
- name = "findByName", // <.>
- value = "SELECT " // <.>
- + "FROM domainapp.modules.simple.dom.impl.SimpleObject " // <.>
- + "WHERE name.indexOf(:name) >= 0 ") // <.>
-})
-...
-public class SimpleObject { /* ... */ }
-----
-<.> There may be several `@Query` annotations, nested within a `@Queries` annotation) defines queries using JDOQL.
-
-<.> Defines the name of the query.
-
-<.> The definition of the query, using JDOQL syntax.
-
-<.> The fully-qualified class name. +
-Must correspond to the class on which the annotation is defined (the framework checks this automatically on bootstrapping).
-
-<5> In this particular query, is an implementation of a LIKE "name%" query.
-
-JDO/DataNucleus provides several APIs for defining queries, including entirely programmatic and type-safe APIs; but JDOQL is very similar to SQL and so easily learnt.
-
-To actually use the above definition, the framework provides the xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService].
-This is a generic repository for any domain class.
-
-The corresponding repository method for the above query is:
-
-[source,java]
-----
-public List<SimpleObject> findByName(String name) {
- return repositoryService.allMatches( // <.>
- Query.named(SimpleObject.class, // <.>
- "findByName") // <.>
- .withParameter("name", name) // <.>
- );
-}
-
-@Inject RepositoryService repositoryService;
-----
-<.> find all instances that match the query
-<.> Specifies the class that is annotated with `@Query`
-<.> Corresponds to the `@Query#name` attribute
-<.> Corresponds to the `:name` parameter in the query JDOQL string
-
-
-
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/jdo/RemoveJdoEnhancementTypesFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/jdo/RemoveJdoEnhancementTypesFacetFactory.java
deleted file mode 100644
index fb7966421aa..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/jdo/RemoveJdoEnhancementTypesFacetFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.core.metamodel.facets.object.ignore.jdo;
-
-import java.util.List;
-
-import jakarta.inject.Inject;
-
-import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.commons.internal.factory._InstanceUtil;
-import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-
-/**
- * Removes all methods inherited from <tt>javax.jdo.spi.PersistenceCapable</tt> (if JDO is on the classpath).
- */
-public class RemoveJdoEnhancementTypesFacetFactory
-extends FacetFactoryAbstract {
-
- private final List<ResolvedMethod> jdoEnhancementmethodsToIgnore = _Lists.newArrayList();
-
- @Inject
- public RemoveJdoEnhancementTypesFacetFactory(final MetaModelContext mmc) {
- super(mmc, FeatureType.OBJECTS_ONLY);
-
- final String typeToIgnoreIfOnClasspath = "javax.jdo.spi.PersistenceCapable";
- try {
- Class<?> typeToIgnore = _InstanceUtil.loadClass(typeToIgnoreIfOnClasspath);
- addMethodsToBeIgnored(typeToIgnore);
- } catch(Exception ex) {
- // ignore
- }
- }
-
- private void addMethodsToBeIgnored(final Class<?> typeToIgnore) {
- getClassCache()
- .streamPublicMethods(typeToIgnore)
- .forEach(jdoEnhancementmethodsToIgnore::add);
- }
-
- @Override
- public void process(final ProcessClassContext processClassContext) {
- for (final ResolvedMethod mapt : jdoEnhancementmethodsToIgnore) {
- processClassContext.removeMethod(mapt.name(), null, mapt.paramTypes());
- }
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/jdo/RemoveJdoPrefixedMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/jdo/RemoveJdoPrefixedMethodsFacetFactory.java
deleted file mode 100644
index 8a41fd6d2b4..00000000000
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/jdo/RemoveJdoPrefixedMethodsFacetFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.core.metamodel.facets.object.ignore.jdo;
-
-import jakarta.inject.Inject;
-
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-
-/**
- * Removes all methods inherited from <tt>javax.jdo.spi.PersistenceCapable</tt> (if JDO is on the classpath).
- */
-public class RemoveJdoPrefixedMethodsFacetFactory
-extends FacetFactoryAbstract {
-
- @Inject
- public RemoveJdoPrefixedMethodsFacetFactory(final MetaModelContext mmc) {
- super(mmc, FeatureType.OBJECTS_ONLY);
- }
-
- @Override
- public void process(final ProcessClassContext context) {
-
- getClassCache()
- .streamPublicMethods(context.getCls())
- .filter(method->method.name().startsWith("jdo"))
- .forEach(context::removeMethod);
-
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/entitychangetracking/jdo/JdoEntityChangePublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/entitychangetracking/jdo/JdoEntityChangePublishingTest.java
deleted file mode 100644
index e3cbcc21579..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/entitychangetracking/jdo/JdoEntityChangePublishingTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.entitychangetracking.jdo;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdo;
-import org.apache.causeway.testdomain.jdo.JdoInventoryManager;
-import org.apache.causeway.testdomain.jdo.entities.JdoBook;
-import org.apache.causeway.testdomain.jdo.entities.JdoProduct;
-import org.apache.causeway.testdomain.publishing.conf.Configuration_usingEntityChangesPublishing;
-import org.apache.causeway.testdomain.publishing.conf.Configuration_usingEntityPropertyChangePublishing;
-import org.apache.causeway.testdomain.publishing.subscriber.EntityPropertyChangeSubscriberForTesting;
-import org.apache.causeway.testdomain.util.interaction.InteractionBoundaryProbe;
-import org.apache.causeway.testdomain.util.interaction.InteractionTestAbstract;
-
-import lombok.val;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdo.class,
- Configuration_usingEntityPropertyChangePublishing.class,
- Configuration_usingEntityChangesPublishing.class,
- InteractionBoundaryProbe.class,
- },
- properties = {
- "logging.level.org.apache.causeway.testdomain.util.rest.KVStoreForTesting=DEBUG",
- "logging.level.org.apache.causeway.persistence.jdo.datanucleus.persistence.CausewayTransactionJdo=DEBUG"
- })
-@TestPropertySource({
- CausewayPresets.SilenceWicket
- ,CausewayPresets.UseLog4j2Test
-})
-class JdoEntityChangePublishingTest extends InteractionTestAbstract {
-
- //@Inject protected FixtureScripts fixtureScripts;
-
- @BeforeEach
- void setUp() {
- System.err.println("===BEFORE SETUP");
-
- // cleanup
- EntityPropertyChangeSubscriberForTesting.clearPropertyChangeEntries(kvStoreForTesting);
-
- // given
- //fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
-
- // each test runs in its own interaction context (check)
- val testRunNr = kvStoreForTesting.incrementCounter(JdoEntityChangePublishingTest.class, "test-run");
- assertEquals(testRunNr, InteractionBoundaryProbe.totalInteractionsStarted(kvStoreForTesting));
-
- assertJdoBookCreatePropertyChanges();
-
- System.err.println("===AFTER SETUP");
- }
-
- @AfterEach
- void tearDown() {
- System.err.println("===BEFORE TEARDOWN");
-
- // cleanup
- //fixtureScripts.runPersona(JdoTestDomainPersona.PurgeAll);
-
- assertJdoBookDeletePropertyChanges();
-
- System.err.println("===AFTER TEARDOWN");
- }
-
- @Test
- void wrapperInvocation_shouldSpawnSingleTransaction() {
-
- // given
- val book = getBookSample();
- val inventoryManager = factoryService.create(JdoInventoryManager.class);
-
- assertEquals(99., book.getPrice(), 1E-3);
-
- System.err.println("=1==BEFORE TX");
-
- // spawns its own transactional boundary (check)
- val product = assertTransactional(
- ()->wrapper.wrap(inventoryManager).updateProductPrice(book, 12.));
-
- System.err.println("=1==AFTER TX");
-
- assertEquals(12., product.getPrice(), 1E-3);
-
- assertNoChangedObjectsPending();
- assertJdoBookPriceChangePropertyChanges();
-
- }
-
- @Test
- void actionInteraction_shouldSpawnSingleTransaction() {
-
- // given
- val book = getBookSample();
-
- assertEquals(99., book.getPrice(), 1E-3);
-
- System.err.println("=2==BEFORE TX");
-
- // spawns its own transactional boundary (check)
- val product = (JdoProduct) assertTransactional(
- ()->invokeAction(JdoInventoryManager.class, "updateProductPrice", _Lists.of(book, 12.)));
-
- System.err.println("=2==AFTER TX");
-
- assertEquals(12., product.getPrice(), 1E-3);
-
- assertNoChangedObjectsPending();
- assertJdoBookPriceChangePropertyChanges();
-
- }
-
- // -- HELPER
-
- private JdoBook getBookSample() {
-
- System.err.println("===BEFORE BOOK");
-
- // spawns its own transactional boundary (check)
- val books = assertTransactional(()->repositoryService.allInstances(JdoBook.class));
- assertEquals(1, books.size());
- val book = books.listIterator().next();
-
- assertNoPropertyChanges(); // query only, no entity changes expected
-
- System.err.println("===AFTER BOOK");
- return book;
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoCommandPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoCommandPublishingTest.java
deleted file mode 100644
index 3ea67fc9019..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoCommandPublishingTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.publishing.jdo;
-
-import jakarta.inject.Inject;
-
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
-
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdo;
-import org.apache.causeway.testdomain.jdo.HasPersistenceStandardJdo;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryAbstract;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.causeway.testdomain.publishing.conf.Configuration_usingCommandPublishing;
-import org.apache.causeway.testdomain.publishing.stubs.CommandPublishingTestAbstract;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdo.class,
- Configuration_usingCommandPublishing.class,
- PublishingTestFactoryJdo.class,
- //XrayEnable.class
- },
- properties = {
- "logging.level.org.apache.causeway.applib.services.publishing.log.CommandLogger=DEBUG",
- "logging.level.org.apache.causeway.persistence.jdo.datanucleus.persistence.CausewayTransactionJdo=DEBUG",
- "logging.level.org.apache.causeway.core.runtimeservices.session.CausewayInteractionFactoryDefault=DEBUG",
- "logging.level.org.apache.causeway.persistence.jdo.datanucleus.datanucleus.service.JdoPersistenceLifecycleService=DEBUG"
- })
-@TestPropertySource({
- CausewayPresets.UseLog4j2Test
-})
-class JdoCommandPublishingTest
-extends CommandPublishingTestAbstract
-implements HasPersistenceStandardJdo {
-
- @Inject private PublishingTestFactoryJdo testFactory;
-
- @Override
- protected PublishingTestFactoryAbstract getTestFactory() {
- return testFactory;
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoEntityPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoEntityPublishingTest.java
deleted file mode 100644
index ff96da53fb6..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoEntityPublishingTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.publishing.jdo;
-
-import jakarta.inject.Inject;
-
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
-
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdo;
-import org.apache.causeway.testdomain.jdo.HasPersistenceStandardJdo;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryAbstract;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.causeway.testdomain.publishing.conf.Configuration_usingEntityChangesPublishing;
-import org.apache.causeway.testdomain.publishing.stubs.EntityPublishingTestAbstract;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdo.class,
- Configuration_usingEntityChangesPublishing.class,
- PublishingTestFactoryJdo.class,
- //XrayEnable.class
- },
- properties = {
- "logging.level.org.apache.causeway.applib.services.publishing.log.EntityChangesLogger=DEBUG",
- "logging.level.org.apache.causeway.persistence.jdo.datanucleus.persistence.CausewayTransactionJdo=DEBUG",
- "logging.level.org.apache.causeway.core.runtimeservices.session.CausewayInteractionFactoryDefault=DEBUG",
- "logging.level.org.apache.causeway.persistence.jdo.integration.changetracking.JdoLifecycleListener=DEBUG",
- "logging.level.org.apache.causeway.testdomain.util.kv.KVStoreForTesting=DEBUG",
- })
-@TestPropertySource({
- CausewayPresets.UseLog4j2Test
-})
-class JdoEntityPublishingTest
-extends EntityPublishingTestAbstract
-implements HasPersistenceStandardJdo {
-
- @Inject private PublishingTestFactoryJdo testFactory;
-
- @Override
- protected PublishingTestFactoryAbstract getTestFactory() {
- return testFactory;
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoExecutionPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoExecutionPublishingTest.java
deleted file mode 100644
index 060a58066b4..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoExecutionPublishingTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.publishing.jdo;
-
-import jakarta.inject.Inject;
-
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
-
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdo;
-import org.apache.causeway.testdomain.jdo.HasPersistenceStandardJdo;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryAbstract;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.causeway.testdomain.publishing.conf.Configuration_usingExecutionPublishing;
-import org.apache.causeway.testdomain.publishing.stubs.ExecutionPublishingTestAbstract;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdo.class,
- Configuration_usingExecutionPublishing.class,
- PublishingTestFactoryJdo.class,
- //XrayEnable.class
- },
- properties = {
- "logging.level.org.apache.causeway.applib.services.publishing.log.ExecutionLogger=DEBUG",
- "logging.level.org.apache.causeway.persistence.jdo.datanucleus.persistence.CausewayTransactionJdo=DEBUG",
- "logging.level.org.apache.causeway.core.runtimeservices.session.CausewayInteractionFactoryDefault=DEBUG",
- "logging.level.org.apache.causeway.persistence.jdo.datanucleus.datanucleus.service.JdoPersistenceLifecycleService=DEBUG"
- })
-@TestPropertySource({
- CausewayPresets.UseLog4j2Test
-})
-class JdoExecutionPublishingTest
-extends ExecutionPublishingTestAbstract
-implements HasPersistenceStandardJdo {
-
- @Inject private PublishingTestFactoryJdo testFactory;
-
- @Override
- protected PublishingTestFactoryAbstract getTestFactory() {
- return testFactory;
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoLifecycleEventPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoLifecycleEventPublishingTest.java
deleted file mode 100644
index da9d0a25b40..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoLifecycleEventPublishingTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.publishing.jdo;
-
-import jakarta.inject.Inject;
-
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
-
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdo;
-import org.apache.causeway.testdomain.jdo.HasPersistenceStandardJdo;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryAbstract;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.causeway.testdomain.publishing.conf.Configuration_usingLifecycleEventPublishing;
-import org.apache.causeway.testdomain.publishing.stubs.LifecycleEventPublishingTestAbstract;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdo.class,
- Configuration_usingLifecycleEventPublishing.class,
- PublishingTestFactoryJdo.class,
- //XrayEnable.class
- },
- properties = {
- "logging.level.org.apache.causeway.testdomain.util.event.LifecycleEventSubscriberForTesting=DEBUG",
- "logging.level.org.springframework.orm.jpa.*=DEBUG",
- "logging.level.org.apache.causeway.testdomain.util.kv.KVStoreForTesting=DEBUG",
- })
-@TestPropertySource({
- CausewayPresets.UseLog4j2Test
-})
-class JdoLifecycleEventPublishingTest
-extends LifecycleEventPublishingTestAbstract
-implements HasPersistenceStandardJdo {
-
- @Inject private PublishingTestFactoryJdo testFactory;
-
- @Override
- protected PublishingTestFactoryAbstract getTestFactory() {
- return testFactory;
- }
-
-}
diff --git a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoPropertyPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoPropertyPublishingTest.java
deleted file mode 100644
index 60e77c448ba..00000000000
--- a/regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/publishing/jdo/JdoPropertyPublishingTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.testdomain.publishing.jdo;
-
-import jakarta.inject.Inject;
-
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
-
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.testdomain.conf.Configuration_usingJdo;
-import org.apache.causeway.testdomain.jdo.HasPersistenceStandardJdo;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryAbstract;
-import org.apache.causeway.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.causeway.testdomain.publishing.conf.Configuration_usingEntityPropertyChangePublishing;
-import org.apache.causeway.testdomain.publishing.stubs.PropertyPublishingTestAbstract;
-
-@SpringBootTest(
- classes = {
- Configuration_usingJdo.class,
- Configuration_usingEntityPropertyChangePublishing.class,
- PublishingTestFactoryJdo.class,
- //XrayEnable.class
- },
- properties = {
- "logging.level.org.apache.causeway.applib.services.publishing.log.EntityPropertyChangeLogger=DEBUG",
- "logging.level.org.apache.causeway.testdomain.util.rest.KVStoreForTesting=DEBUG",
- "logging.level.org.apache.causeway.persistence.jdo.integration.changetracking.JdoLifecycleListener=DEBUG",
- "logging.level.org.apache.causeway.core.transaction.changetracking.EntityChangeTrackerDefault=DEBUG",
- })
-@TestPropertySource({
- CausewayPresets.UseLog4j2Test
-})
-class JdoPropertyPublishingTest
-extends PropertyPublishingTestAbstract
-implements HasPersistenceStandardJdo {
-
- @Inject private PublishingTestFactoryJdo testFactory;
-
- @Override
- protected PublishingTestFactoryAbstract getTestFactory() {
- return testFactory;
- }
-
-}
diff --git a/starters/adoc/modules/starters/pages/about.adoc b/starters/adoc/modules/starters/pages/about.adoc
index f194edfe8a8..4193a9c2eba 100644
--- a/starters/adoc/modules/starters/pages/about.adoc
+++ b/starters/adoc/modules/starters/pages/about.adoc
@@ -11,14 +11,8 @@ The helloworld app is a very minimal app, intended just as a starting point to l
The source code is in this link:https://github.com/apache/causeway-app-helloworld[git repo] which you can either fork, or just download as a zip:
-* to use JPA as the ORM, use:
-+
include::helloworld-script-jpa.adoc[]
-* use JDO as the ORM, use:
-+
-include::helloworld-script-jdo.adoc[]
-
TIP: A much more complete explanation of the structure of the app (and how to use it) can be found *xref:docs:starters:helloworld.adoc[here]*.
@@ -30,13 +24,8 @@ It also includes some xref:testing:integtestsupport:about.adoc[integration tests
The source code can be found in this link:https://github.com/apache/causeway-app-simpleapp[git repo] which you can either fork, or just download as a zip:
-* to use JPA for the ORM, use:
-+
include::simpleapp-script-jpa.adoc[]
-* to use JDO as the ORM, use:
-+
-include::simpleapp-script-jdo.adoc[]
diff --git a/starters/adoc/modules/starters/pages/helloworld-script-jdo.adoc b/starters/adoc/modules/starters/pages/helloworld-script-jdo.adoc
deleted file mode 100644
index 42dc8e7253b..00000000000
--- a/starters/adoc/modules/starters/pages/helloworld-script-jdo.adoc
+++ /dev/null
@@ -1,11 +0,0 @@
-
-: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 [...]
-
-[source,bash,subs="attributes+"]
-----
-curl https://codeload.github.com/apache/causeway-app-helloworld/zip/v{fwk-version}-jdo | jar xv
-cd causeway-app-helloworld-{fwk-version}-jdo
-
-mvn clean install
-mvn spring-boot:run
-----
diff --git a/starters/adoc/modules/starters/pages/helloworld.adoc b/starters/adoc/modules/starters/pages/helloworld.adoc
index b2c12f45af0..aa5d5c02c9d 100644
--- a/starters/adoc/modules/starters/pages/helloworld.adoc
+++ b/starters/adoc/modules/starters/pages/helloworld.adoc
@@ -50,12 +50,6 @@ Create a new directory, and `cd` into that directory.
To build the app from the latest stable release:
-* if using JDO as the ORM:
-+
-include::helloworld-script-jdo.adoc[]
-
-* if using JPA as the ORM:
-+
include::helloworld-script-jpa.adoc[]
diff --git a/starters/adoc/modules/starters/pages/simpleapp-script-jdo.adoc b/starters/adoc/modules/starters/pages/simpleapp-script-jdo.adoc
deleted file mode 100644
index cf42d34cdd9..00000000000
--- a/starters/adoc/modules/starters/pages/simpleapp-script-jdo.adoc
+++ /dev/null
@@ -1,13 +0,0 @@
-
-: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 [...]
-:page-partial:
-
-[source,bash,subs="attributes+"]
-----
-curl https://codeload.github.com/apache/causeway-app-simpleapp/zip/v{fwk-version}-jdo | jar xv
-cd causeway-app-simpleapp-{fwk-version}-jdo
-
-mvn clean install
-mvn -pl webapp spring-boot:run
-----
-
diff --git a/starters/adoc/modules/starters/pages/simpleapp.adoc b/starters/adoc/modules/starters/pages/simpleapp.adoc
index b62b55f304e..76f78d4c317 100644
--- a/starters/adoc/modules/starters/pages/simpleapp.adoc
+++ b/starters/adoc/modules/starters/pages/simpleapp.adoc
@@ -56,12 +56,6 @@ Create a new directory, and `cd` into that directory.
To build the app from the latest stable release:
-* if using JDO as the ORM:
-+
-include::simpleapp-script-jdo.adoc[]
-
-* if using JPA as the ORM:
-+
include::simpleapp-script-jpa.adoc[]
diff --git a/valuetypes/asciidoc/persistence-jdo/pom.xml b/valuetypes/asciidoc/persistence-jdo/pom.xml
deleted file mode 100644
index e3d58c2cc73..00000000000
--- a/valuetypes/asciidoc/persistence-jdo/pom.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ 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.
- ~
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.causeway.valuetypes</groupId>
- <artifactId>causeway-valuetypes-asciidoc</artifactId>
- <version>3.4.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>causeway-valuetypes-asciidoc-persistence-jdo</artifactId>
- <name>Apache Causeway Val - Asciidoctor (Persistence JDO)</name>
-
- <properties>
- <jar-plugin.automaticModuleName>org.apache.causeway.valuetypes.asciidoc.persistence.jdo</jar-plugin.automaticModuleName>
- <git-plugin.propertiesDir>org/apache/causeway/valuetypes/asciidoc/persistence-jdo</git-plugin.propertiesDir>
- </properties>
-
- <dependencies>
-
- <dependency>
- <groupId>org.apache.causeway.valuetypes</groupId>
- <artifactId>causeway-valuetypes-asciidoc-applib</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.causeway.core</groupId>
- <artifactId>causeway-core-metamodel</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.datanucleus</groupId>
- <artifactId>datanucleus-core</artifactId>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/valuetypes/asciidoc/persistence-jdo/src/main/java/module-info.java b/valuetypes/asciidoc/persistence-jdo/src/main/java/module-info.java
deleted file mode 100644
index 612b4cd67ff..00000000000
--- a/valuetypes/asciidoc/persistence-jdo/src/main/java/module-info.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-module org.apache.causeway.valuetypes.asciidoc.persistence.jdo {
- exports org.apache.causeway.valuetypes.asciidoc.persistence.jdo;
- exports org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters;
-
- requires org.apache.causeway.core.config;
- requires org.apache.causeway.valuetypes.asciidoc.applib;
- requires org.datanucleus;
- requires spring.context;
-}
\ No newline at end of file
diff --git a/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/CausewayModuleValAsciidocPersistenceJdo.java b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/CausewayModuleValAsciidocPersistenceJdo.java
deleted file mode 100644
index 62e89022510..00000000000
--- a/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/CausewayModuleValAsciidocPersistenceJdo.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.valuetypes.asciidoc.persistence.jdo;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.valuetypes.asciidoc.applib.CausewayModuleValAsciidocApplib;
-
-/**
- * @since 2.0 {@index}
- */
-@Configuration
-@Import({
- CausewayModuleValAsciidocApplib.class
-})
-public class CausewayModuleValAsciidocPersistenceJdo {
-}
diff --git a/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocConverter.java b/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocConverter.java
deleted file mode 100644
index df0b3ec3e70..00000000000
--- a/valuetypes/asciidoc/persistence-jdo/src/main/java/org/apache/causeway/valuetypes/asciidoc/persistence/jdo/converters/CausewayAsciiDocConverter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters;
-
-import org.datanucleus.store.types.converters.TypeConverter;
-
-import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDoc;
-
-/**
- * @since 2.0 {@index}
- */
-public class CausewayAsciiDocConverter implements TypeConverter<AsciiDoc, String>{
-
- private static final long serialVersionUID = 1L;
-
- @Override
- public String toDatastoreType(final AsciiDoc memberValue) {
- return memberValue != null
- ? memberValue.getAdoc()
- : null;
- }
-
- @Override
- public AsciiDoc toMemberType(final String datastoreValue) {
- return datastoreValue != null
- ? AsciiDoc.valueOf(datastoreValue)
- : null;
- }
-
-}
diff --git a/valuetypes/asciidoc/persistence-jdo/src/main/resources/META-INF/MANIFEST.MF b/valuetypes/asciidoc/persistence-jdo/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index ce1539dae58..00000000000
--- a/valuetypes/asciidoc/persistence-jdo/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,6 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Apache Causeway Value Types AsciiDoc Persistence JDO DataNucleus Implementation
-Bundle-SymbolicName: org.apache.causeway.valuetypes.asciidoc.persistence.jdo
-Bundle-Version: 2.0.0
-Bundle-Vendor: Apache Causeway
diff --git a/valuetypes/asciidoc/persistence-jdo/src/main/resources/plugin.xml b/valuetypes/asciidoc/persistence-jdo/src/main/resources/plugin.xml
deleted file mode 100644
index 9292a784232..00000000000
--- a/valuetypes/asciidoc/persistence-jdo/src/main/resources/plugin.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<plugin
- id="org.apache.causeway.valuetypes.asciidoc.persistence.jdo"
- name="Apache Causeway Value Types AsciiDoc Persistence JDO DataNucleus Implementation"
- provider-name="Apache Causeway">
-
-
- <!--
- http://www.datanucleus.org/extensions/java_types.html
- -->
-
- <extension point="org.datanucleus.java_type">
- <java-type
- name="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDoc"
- dfg="false"
- converter-name="causeway.ext.asciidoc-string" />
- </extension>
-
- <!--
- http://www.datanucleus.org/extensions/type_converter.html
- -->
- <extension point="org.datanucleus.type_converter">
- <type-converter
- name="causeway.ext.asciidoc-string"
- member-type="org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDoc"
- datastore-type="java.lang.String"
- converter-class="org.apache.causeway.valuetypes.asciidoc.persistence.jdo.converters.CausewayAsciiDocConverter"/>
- </extension>
-
-
-</plugin>
(causeway) 22/36: CAUSEWAY-3866: cleaned up docs for simpleapp and helloworld app some
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit f8f3f78ebb0807680007295235f3eaf8f55d2318
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 15:19:32 2025 +0100
CAUSEWAY-3866: cleaned up docs for simpleapp and helloworld app some
---
starters/adoc/antora.yml | 5 +-
.../simpleapp-modules-dependencies.pptx | Bin 48298 -> 50097 bytes
.../simpleapp/simpleapp-modules-dependencies.png | Bin 65172 -> 108658 bytes
.../adoc/modules/starters/pages/helloworld.adoc | 49 +++-------
.../adoc/modules/starters/pages/simpleapp.adoc | 108 ++++++++-------------
5 files changed, 55 insertions(+), 107 deletions(-)
diff --git a/starters/adoc/antora.yml b/starters/adoc/antora.yml
index 8dd4e4a4ad7..fe1f86285ac 100644
--- a/starters/adoc/antora.yml
+++ b/starters/adoc/antora.yml
@@ -20,9 +20,6 @@ version: latest
asciidoc:
attributes:
-# fwk-version: '2'
-# fwk-jdk-version: '11'
-# jdk-version: '11'
- fwk-version: '3'
+ fwk-version: '4'
fwk-jdk-version: '17'
jdk-version: '21'
diff --git a/starters/adoc/modules/starters/attachments/simpleapp-modules-dependencies.pptx b/starters/adoc/modules/starters/attachments/simpleapp-modules-dependencies.pptx
index e7cd8066240..d65c13f2029 100644
Binary files a/starters/adoc/modules/starters/attachments/simpleapp-modules-dependencies.pptx and b/starters/adoc/modules/starters/attachments/simpleapp-modules-dependencies.pptx differ
diff --git a/starters/adoc/modules/starters/images/simpleapp/simpleapp-modules-dependencies.png b/starters/adoc/modules/starters/images/simpleapp/simpleapp-modules-dependencies.png
index 5aa8884b2af..f7517146751 100644
Binary files a/starters/adoc/modules/starters/images/simpleapp/simpleapp-modules-dependencies.png and b/starters/adoc/modules/starters/images/simpleapp/simpleapp-modules-dependencies.png differ
diff --git a/starters/adoc/modules/starters/pages/helloworld.adoc b/starters/adoc/modules/starters/pages/helloworld.adoc
index d1f6736e242..228992c5802 100644
--- a/starters/adoc/modules/starters/pages/helloworld.adoc
+++ b/starters/adoc/modules/starters/pages/helloworld.adoc
@@ -4,9 +4,7 @@
The quickest way to start learning about Apache Causeway is to use the `helloworld` starter app.
-
-There are two variations of the application (and so two branches in the git repo).
-One variation uses JDO as the ORM, the other uses JPA, so you can focus on whichever ORM you prefer.
+It uses the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store for persistence.
The application is also built nightly as a docker image, so you can quickly try it out:
@@ -15,8 +13,6 @@ The application is also built nightly as a docker image, so you can quickly try
docker run -d -p 8080:8080 apache/causeway-app-helloworld:v{fwk-version}-jpa-SNAPSHOT
----
-Replace "v{fwk-version}-jpa" with "v{fwk-version}-jdo" if using the JDO ORM.
-
Using the instructions <<Downloading & Running,below>>, you can download a minimal Apache Causeway app, consisting of a single domain entity (`HelloWorldObject`) with supporting domain services.
Both the business logic and supporting bootstrapping classes are in a single Maven module.
@@ -36,12 +32,8 @@ Apache Causeway is a Java based framework, so in terms of prerequisites, you'll
+
Apache Causeway v{fwk-version} requires Java {fwk-jdk-version}, and the helloworld app itself is currently configured for Java {jdk-version}.
-* link:http://maven.apache.org[Apache Maven] 3.9.7+
-
-If using JDO as the ORM, you'll also need to run the Datanucleus enhancer (this post-processes the byte code of the entities).
-The xref:setupguide:ROOT:about.adoc[Setup Guide] explains how to do this for either IntelliJ and Eclipse.
+* link:http://maven.apache.org[Apache Maven] 3.9.11+
-If using JPA as the ORM, the equivalent process to enhancement is performed at run-time, so there are no special setup considerations.
== Downloading & Running
@@ -68,8 +60,9 @@ Choose the generic Wicket UI, and navigate to the login page:
image::helloworld/using/020-login-to-wicket-viewer.png[width="600px"]
-The app itself is configured to run using xref:security:ROOT:about.adoc[shiro security], as configured in the `shiro.ini` config file.
-You can login with:
+
+The app itself is configured to run using xref:security:simple:about.adoc[Simple security module], with the `SimpleRealm` bean defining the users and roles.
+You can log in with:
* username: _sven_
* password: _pass_
@@ -236,8 +229,6 @@ src/main/java/
webapp/
AppManifest.java <!--.-->
HelloWorldApp.java <!--.-->
- META-INF /
- persistence.xml <!--.-->
----
<.> For simplicity, all the Java source files reside in a `domainapp` top-level package.
@@ -252,7 +243,7 @@ Modules may have other packages, common ones include ``types`` (as below), also
<.> Holds classes for the `hwo` ("hello world object") entity/aggregate, consisting of the entity definition itself (`HelloWorldObject`) and a corresponding repository (`HelloWorldObjects`).
The associated `.layout.xml` and `.png` are optional but provide metadata/resources for rendering (Maven is configured to also treat `src/main/java` as a resource location).
-<.> For the `jpa` branch only, uses Spring Data JPA to automatically provide the query implementation.
+<.> Uses Spring Data JPA to automatically provide the query implementations.
<.> The `types` package contains meta-annotations to describe the usage of common value types such as ``String``s.
@@ -266,7 +257,6 @@ This is discussed in more detail xref:#appmanifest[below].
It's pretty much boilerplate - the important piece is that it references `AppManifest`. +
This is discussed in more detail xref:#helloworldapp[below].
-<.> For the `jdo` branch only, the `persistence.xml` file is required boilerplate.
[#helloworldmodule]
@@ -298,9 +288,9 @@ If there were, these would be expressed in terms of module classes (each being a
<.> specifies this class' package as a root to scan for Spring link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html[@Component]s.
-<.> for `jpa` branch only, enables Spring Data JPA repositories
+<.> enables Spring Data JPA repositories
-<.> for `jpa` branch only, to automatically discover JPA entities
+<.> automatically discovers JPA entities
The scanning mechanism is also leveraged by Apache Causeway to pick up three types of classes:
@@ -313,7 +303,7 @@ Depending on their nature, domain services are used to build up the menu, or are
+
In the helloworld starter app, the main domain services is `HelloWorldObjects`.
This appears in the menu, and also acts as a repository for the `HelloWorldObject` entity.
-The `jpa` branch also has the `HelloWorldRepository` Spring Data service.
+It also has the `HelloWorldRepository` repository interface for which Spring Data provides the query implementations.
* all entities.
+
@@ -361,11 +351,10 @@ public class AppManifest {
<.> Provides various optional framework-provided mixins in the UI, such as the `objectIdentifier` and `logicalTypeName` properties
<.> Mandatory - specifies the core of the Apache Causeway framework
-<.> Enables the Simple security mechanism.
+<.> Enables the xref:security:simple:about.adoc[Simple] security mechanism.
There are several security implementations, precisely one must be selected
<.> Enables xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] for persistence.
-Optional (though if omitted then only xref:userguide:ROOT:view-models.adoc[view models] may be used, with hand-rolled persistence).
<.> Enables the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)]
@@ -431,7 +420,6 @@ src/main/resources
banner.txt <!--.-->
log4j2-spring.xml <!--.-->
menubars.layout.xml <!--.-->
- shiro.ini <!--.-->
----
<.> By convention, we use `config/application.properties` to hold configuration properties that change between environments (dev, test, prod).
@@ -445,16 +433,10 @@ Typically this just holds JDBC connection strings, etc.
<.> The `banner.txt` is shown when bootstrapping.
-<.> The `log4j2-spring.xml` configures log4j2 (the logging system used by Apache Causeway)
+<.> The `log4j2-spring.xml` configures log4j2
<.> The `menubars.layout.xml` arranges the actions of the domain services into menus.
-<.> The `shiro.ini` file configures Shiro security integration (see the `CausewayModuleSecurityShiro` module imported in the `AppManifest`, above).
-+
-[TIP]
-====
-The xref:security:shiro:about.adoc[Shiro security] integration is much more flexible than simple file-based authentication.
-====
To call out some of the files under `static`:
@@ -481,7 +463,7 @@ You will find tests in the xref:docs:starters:simpleapp.adoc[SimpleApp starter a
=== pom.xml
-Finally, at the root directory we of course have the `pom.xml`.
+Finally, at the root directory is the top-level `pom.xml`.
This inherits from `causeway-app-starter-parent`:
[source,xml]
@@ -494,7 +476,7 @@ This inherits from `causeway-app-starter-parent`:
</parent>
----
-\... which builds upon Spring Boot's own `org.springframework.boot:spring-boot-starter-parent`.
+\... which in turn depends upon Spring Boot's own `org.springframework.boot:spring-boot-starter-parent`.
This means:
* the set of third party dependencies declared have been validated as compatible by Spring Boot team
@@ -513,11 +495,6 @@ Here's what the setup looks like in IntelliJ IDEA:
image::helloworld/helloworld.png[width="600px"]
-If using JDO as the ORM (rather than JPA), then the DataNucleus enhancer must be run beforehand.
-With IntelliJ this can be done by setting up a different _Run Configuration_ to be executed beforehand:
-
-image::helloworld/helloworld-before-launch.png[width="600px"]
-
== Experimenting with the App
diff --git a/starters/adoc/modules/starters/pages/simpleapp.adoc b/starters/adoc/modules/starters/pages/simpleapp.adoc
index 98aceff1f20..eb560d818b3 100644
--- a/starters/adoc/modules/starters/pages/simpleapp.adoc
+++ b/starters/adoc/modules/starters/pages/simpleapp.adoc
@@ -3,9 +3,7 @@
: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 quickest way to get started building an application "for real" is to use the `simpleapp` starter app.
-
-There are two variations of the application (and so two branches in the git repo).
-One variation uses JPA as the ORM, the other uses JDO, so you can focus on whichever ORM you prefer.
+It uses the xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store for persistence.
The application is also built nightly as a docker image, so you can quickly try it out:
@@ -14,20 +12,17 @@ The application is also built nightly as a docker image, so you can quickly try
docker run -d -p 8080:8080 apache/causeway-app-simpleapp:v{fwk-version}-jpa-SNAPSHOT
----
-Replace "v{fwk-version}-jpa" with "v{fwk-version}-jdo" if using the JDO ORM.
-
As with the xref:docs:starters:helloworld.adoc[HelloWorld] starter app, the instructions <<Downloading & Running,below>> will download a minimal Apache Causeway app consisting of a single entity (`SimpleObject`) with supporting domain services.
-However, unlike HelloWorld, this app also provides more structure to assist you as your application grows, with business logic placed in a separate Maven module (`simpleapp-...-module-simple`) to the module that bootstraps the webapp (`simpleapp-...-webapp`).
-Replace "..." with either "jpa" or "jdo", as appropriate.
+However, unlike xref:docs:starters:helloworld.adoc[HelloWorld], this app also provides more structure to assist you as your application grows, with business logic placed in a separate Maven module (`simpleapp-jpa-module-simple`) to the module that bootstraps the webapp (`simpleapp-jpa-webapp`).
-The idea is that as your application grows in scope that you put each new area of functionality in its own module (copy-n-paste the `simpleapp-...-module-simple` module).
+The idea is that as your application grows in scope that you put each new area of functionality in its own module (copy-n-paste the `simpleapp-jpa-module-simple` module).
These modules can depend on each other, but Maven will to ensure that dependencies between these areas of functionality are unidirectional.
In this way your application will be a "modular monolith"; said another way it will prevent your application from degenerating into a link:https://en.wikipedia.org/wiki/Big_ball_of_mud[big ball of mud].
See also the discussion <<structure-of-the-app,below>>.
The application also includes examples of unit tests and integration tests.
-You'll find these in their own Maven modules (`simpleapp-...-module-simple-tests` and `simpleapp-...-webapp-tests`).
+You'll find these in their own Maven modules (`simpleapp-jpa-module-simple-tests` and `simpleapp-jpa-webapp-tests`).
Normally we recommend that tests should be in the same Maven module as the code that they exercise.
The simpleapp doesn't do it this way just to give you the option to exclude them while initially prototyping/exploring a domain.
You can use them as a reference once your ideas have solidifid and you need to start writing proper "production" code.
@@ -42,12 +37,7 @@ Apache Causeway is a Java based framework, so in terms of prerequisites, you'll
+
Apache Causeway v{fwk-version} requires Java {fwk-jdk-version}, and the simpleapp itself is currently configured for Java {jdk-version}.
-* link:http://maven.apache.org[Apache Maven] 3.9.7+
-
-If using JDO as the ORM, you'll also need to run the Datanucleus enhancer (this post-processes the byte code of the entities).
-The xref:setupguide:ROOT:about.adoc[Setup Guide] explains how to do this for either IntelliJ and Eclipse.
-
-If using JPA as the ORM, the equivalent process to enhancement is performed at run-time, so there are no special setup considerations.
+* link:http://maven.apache.org[Apache Maven] 3.9.11+
== Downloading & Running
@@ -74,8 +64,8 @@ Choose the generic Wicket UI, and navigate to the login page:
image::simpleapp/using/020-login-to-wicket-viewer.png[width="600px"]
-The app itself is configured to run using xref:security:ROOT:about.adoc[shiro security], as configured in the `shiro.ini` config file.
-You can login with:
+The app itself is configured to run using xref:security:simple:about.adoc[Simple security module], with the `SimpleRealm` bean defining the users and roles.
+You can log in with:
* username: _sven_
* password: _pass_
@@ -162,8 +152,8 @@ As well as running in fixtures from the UI, you can also specify a configuration
[source,ini]
.config/application.properties
----
-# causeway.testing.fixtures.initial-script = \
-# domainapp.webapp.application.fixture.scenarios.DomainAppDemo
+causeway.testing.fixtures.initial-script = \
+ domainapp.webapp.application.fixture.scenarios.DomainAppDemo
----
@@ -305,19 +295,17 @@ The application consists of five modules:
[plantuml]
.simpleapp dependencies
----
-[webapp-...-tests] <<maven module>> #LightBlue
-[webapp-...] <<maven module>>
-[module-...-simple-tests] <<maven module>> #LightBlue
-[module-...-simple] <<maven module>>
-
-[webapp-...-tests] .l-> [webapp-...]
-[module-...-simple-tests] .l-> [module-...-simple]
-[webapp-...] .u-> [module-...-simple]
+[webapp-jpa-tests] <<maven module>> #LightBlue
+[webapp-jpa] <<maven module>>
+[module-jpa-simple-tests] <<maven module>> #LightBlue
+[module-jpa-simple] <<maven module>>
+
+[webapp-jpa-tests] .l-> [webapp-jpa]
+[module-jpa-simple-tests] .l-> [module-jpa-simple]
+[webapp-jpa] .u-> [module-jpa-simple]
----
-where "..." is either "jdo" or "jpa", depending on the branch.
-
-The main business logic resides in `module-...-simple`, with the `webapp` module acting as an aggregator.
+The main business logic resides in `module-jpa-simple`, with the `webapp` module acting as an aggregator.
Each of these modules have unit and/or integration tests.
To allow them to be easily excluded (while prototyping/exploration), they have been placed into their own respective modules.
@@ -359,12 +347,10 @@ The link:{attachmentsdir}/simpleapp-modules-dependencies.pptx[diagram] below sho
.Module Dependencies
image::simpleapp/simpleapp-modules-dependencies.png[width="800px"]
-(For a JPA branch, the `JdoDataNucleus5` dependency is replaced by `JpaEclipseLink`).
-
Let's now review the contents of each of the modules in the simpleapp starter app.
-=== module-...-simple's src/main/java
+=== module-jpa-simple's src/main/java
Under `src/main/java` we have:
@@ -388,8 +374,6 @@ src/main/java/
Name.java
Notes.java
SimpleModule.java <!--.-->
- META-INF/
- persistence.xml <!--.-->
----
<.> For simplicity, all the Java source files reside in a `domainapp` top-level package.
Change as required.
@@ -402,7 +386,7 @@ Modules may have other subpackages, common ones include ``types`` and ``fixture`
<.> Holds classes for the `so` ("simple object") entity/aggregate, consisting of the entity definition itself (`SimpleObject`) and a corresponding domain services (`SimpleObjects` and `SimpleObjectRepository`).
The associated `.layout.xml` and `.png` are optional but provide metadata/resources for rendering (Maven is configured to also treat `src/main/java` as a resource location).
-<.> For the `jpa` branch only, uses Spring Data JPA to automatically provide the query implementation.
+<.> Uses Spring Data JPA to automatically provide the query implementation.
<.> The `fixture` package contains classes to set up the database to an initial state (as described xref:#fixtures[earlier].
One of the classes is a `FixtureScript` (defines _how_ to set up the data) the other is a persona enum (defines _what_ data to set up).
@@ -412,7 +396,6 @@ One of the classes is a `FixtureScript` (defines _how_ to set up the data) the o
<.> `SimpleModule` is a Spring link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html[@Configuration] which allows the domain services and entities of the module to be located. +
This is discussed in more detail below.
-<.> For the `jdo` branch only, the `persistence.xml` file is required boilerplate.
==== SimpleModule
@@ -495,7 +478,8 @@ Depending on their nature, domain services are used to build up the menu, or are
+
In the simpleapp starter app, the only domain service is `SimpleObjects`.
This appears in the menu, and also acts as a repository for the `SimpleObject` entity.
-The `jpa` branch also has the `SimpleObjectRepository` Spring Data service.
+It also has the `SimpleObjectRepository` repository interface for which Spring Data provides the query implementations.
+
* all entities.
+
@@ -510,7 +494,7 @@ These are classes that extend from the testing applib's `FixtureScript` class, a
As already discussed, the `fixture` package provides classes to create sample objects, while the `SimpleModule` provides a fixture script to tear down all data from the module.
-=== module-...-simple-test's src/test/java
+=== module-jpa-simple-test's src/test/java
Under `src/test/java` we have:
@@ -587,12 +571,11 @@ public abstract class SimpleModuleIntegTestAbstract
In this case, the test inherits from the `CausewayIntegrationTestAbstractWithFixtures` subclass which also adds in support for running fixtures.
<.> Specifies the modules that make up Apache Causeway framework itself.
-These include core, security set to the bypass implementation (effectively is ignored) and xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] for persistence.
Note that no viewers are bootstrapped because the tests are run through Spring's integration testing framework, rather than (say) as Selenium tests.
-<.> Disables security checks.
+<.> Configures the xref:security:bypass:about.adoc[Bypass] implementation which effectively disables security checks.
-<.> Configures JPA as the ORM.
+<.> Configures xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] object store as the persistence mechanism.
<.> Brings in support for running fixtures.
+
@@ -676,7 +659,8 @@ It's very simple though:
.ApplicationModule.java
----
package domainapp.webapp.application;
-... imports omitted ...
+//...
+
@Configuration
@Import(SimpleModule.class) // <.>
@ComponentScan // <.>
@@ -699,7 +683,7 @@ It looks like this:
@Configuration
@Import({
CausewayModuleCoreRuntimeServices.class, // <.>
- CausewayModuleSecurityShiro.class, // <.>
+ CausewayModuleSecuritySimple.class, // <.>
CausewayModuleJpaEclipseLink.class, // <.>
CausewayModuleViewerRestfulObjectsViewer.class, // <.>
CausewayModuleViewerGraphqlViewer.class, // <.>
@@ -724,9 +708,9 @@ public class AppManifest {
----
<.> Mandatory - specifies the core of the Apache Causeway framework
-<.> Enables the Shiro security mechanism.
+<.> Enables the xref:security:simple:about.adoc[Simple] security mechanism.
There are several security implementations, precisely one must be selected
-<.> Enables JPA/Eclipselink for persistence.
+<.> Enables xref:pjpa:ROOT:about.adoc[JPA/Eclipselink] for persistence
<.> Enables the xref:vro:ROOT:about.adoc[REST API (Restful Objects viewer)] (ie REST API).
<.> Enables the xref:gqlv:ROOT:about.adoc[GraphQL API (GraphQL viewer)].
<.> Enables the xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)]
@@ -790,7 +774,6 @@ src/main/resources
banner.txt <.>
log4j2-spring.xml <.>
menubars.layout.xml <.>
- shiro.ini <.>
----
<.> By convention, we use `config/application.properties` to hold configuration properties that change between environments (dev, test, prod).
@@ -809,16 +792,10 @@ This leverages a feature in Spring Boot's Flyway integration which allows differ
<.> The `banner.txt` is shown when bootstrapping.
-<.> The `log4j2-spring.xml` configures log4j2 (the logging system used by Apache Causeway)
+<.> The `log4j2-spring.xml` configures log4j2
<.> The `menubars.layout.xml` arranges the actions of the domain services into menus.
-<.> The `shiro.ini` file configures Shiro security integration (see the `CausewayModuleSecurityShiro` module imported in the `AppManifest`, above).
-+
-[TIP]
-====
-The xref:security:shiro:about.adoc[Shiro security] integration is much more flexible than simple file-based authentication.
-====
To call out some of the files under `static`:
@@ -921,10 +898,6 @@ Here's what the setup looks like in IntelliJ IDEA:
image::simpleapp/simpleapp-webapp.png[width="600px"]
-If using JDO as the ORM (rather than JPA), then the DataNucleus enhancer must be run beforehand.
-With IntelliJ this can be done by setting up a different _Run Configuration_ to be executed beforehand:
-
-image::simpleapp/simpleapp-webapp-before-launch.png[width="600px"]
@@ -956,11 +929,12 @@ Otherwise, you can easily run up an instance using Docker:
[source,bash]
----
docker run \
- --name sqlserver \
+ --platform linux/amd64 \
+ --name sqlserver-simpleapp \
-e 'ACCEPT_EULA=Y' \
- -e 'SA_PASSWORD=pa$$w0rd' \
+ -e 'SA_PASSWORD=VeryStrongPassword123!' \
-p 1433:1433 \
- -d mcr.microsoft.com/mssql/server:2019-latest
+ -d mcr.microsoft.com/mssql/server:2022-latest
----
You can then connect:
@@ -969,12 +943,12 @@ You can then connect:
+
[source,bash]
----
-docker exec -it sqlserver \
- /opt/mssql-tools/bin/sqlcmd \
- -S localhost -U sa -P pa$$w0rd
+docker exec -it sqlserver-simpleapp \
+ /opt/mssql-tools18/bin/sqlcmd \
+ -S localhost -U sa -P VeryStrongPassword123! -C
----
-* if on Windows, you might instead prefer to use Microsoft's free GUI client, link:https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15[SQL Server Management Studio].
+* if on Windows, you might instead prefer to use Microsoft's free GUI client, link:https://learn.microsoft.com/en-us/ssms/install/install[SQL Server Management Studio].
You then need to create a database and login:
@@ -1060,6 +1034,6 @@ If you were using Docker to try this out, remember to clean up afterwards:
[source,bash]
----
-docker kill sqlserver
-docker rm sqlserver
+docker kill sqlserver-simpleapp
+docker rm sqlserver-simpleapp
----
(causeway) 24/36: CAUSEWAY-3866: removes references to shiro.ini
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 3a152a1f30b27f04bb0993e538b98d4c5632f1ad
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 15:40:14 2025 +0100
CAUSEWAY-3866: removes references to shiro.ini
---
.../secman/adoc/modules/secman/pages/about.adoc | 14 +-
.../secman/pages/setting-up-with-shiro.adoc | 218 ---------------------
.../adoc/modules/secman/pages/setting-up.adoc | 13 +-
.../adoc/modules/secman/partials/module-nav.adoc | 1 -
4 files changed, 21 insertions(+), 225 deletions(-)
diff --git a/extensions/security/secman/adoc/modules/secman/pages/about.adoc b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
index d88a5f50912..7c70267540d 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/about.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
@@ -16,7 +16,7 @@ Authorization is supported by associating users to roles, where each role has a
Permissions can be defined at different scopes, and can either allow or veto access to the underlying feature.
The set of permissions (to features) is derived completely from your application's metamodel; in essence the permissions are "type-safe".
-SecMan can be used just for authorization, or it can be used in conjunction with any of the other xref:refguide:core:index/security/authentication/Authenticator.adoc[Authenticator] implementations, for example xref:security:shiro:about.adoc[Shiro], xref:security:spring:about.adoc[Spring] or xref:security:keycloak:about.adoc[Keycloak].
+SecMan can be used just for authorization, or it can be used in conjunction with any of the other xref:refguide:core:index/security/authentication/Authenticator.adoc[Authenticator] implementations, for example xref:security:spring:about.adoc[Spring] or xref:security:keycloak:about.adoc[Keycloak].
This integration is discussed in more detail <<shiro-integration,below>>.
@@ -221,10 +221,18 @@ The `encryption-jbcrypt` module provides an implementation using the link:https:
[#shiro-integration]
== Using other Authenticators
-While SecMan does provide an implementation of the xref:refguide:core:index/security/authentication/Authenticator.adoc[] SPI, it's also possible to use an alternative `Authenticator` implementation, for example as provided by xref:security:shiro:about.adoc[Apache Shiro], xref:security:spring:about.adoc[Spring] or xref:security:keycloak:about.adoc[Keycloak].
+While SecMan does provide an implementation of the xref:refguide:core:index/security/authentication/Authenticator.adoc[] SPI, it's also possible to use an alternative `Authenticator` implementation; for example as provided by:
+
+* xref:security:spring:about.adoc[Spring]
++
+for more details, see xref:setting-up-with-spring-oauth2.adoc[]
+
+* xref:security:keycloak:about.adoc[Keycloak].
++
+for more details, see xref:setting-up-with-keycloak.adoc[]
-For more details, see xref:security:secman:setting-up-with-shiro.adoc[], xref:setting-up-with-spring-oauth2.adoc[] and xref:setting-up-with-keycloak.adoc[].
+Secman is still responsible for authorization.
== SecMan's structure
diff --git a/extensions/security/secman/adoc/modules/secman/pages/setting-up-with-shiro.adoc b/extensions/security/secman/adoc/modules/secman/pages/setting-up-with-shiro.adoc
deleted file mode 100644
index 13aa355d1f4..00000000000
--- a/extensions/security/secman/adoc/modules/secman/pages/setting-up-with-shiro.adoc
+++ /dev/null
@@ -1,218 +0,0 @@
-= Setting up with Shiro
-
-: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 [...]
-:page-partial:
-
-This section describes how to set up and configure SecMan as an xref:refguide:core:index/security/authorization/Authorizor.adoc[], with framework's xref:security:shiro:about.adoc[Shiro integration] being used as the xref:refguide:core:index/security/authentication/Authenticator.adoc[].
-
-The primary use case this enables is for authentication to be performed through an external mechanism, for example LDAP.
-This is implemented through the SecMan's shiro realm submodule, which provides an implementation of Apache Shiro's `Realm` interface that then calls back into SecMan.
-
-== Local Authentication
-
-The diagram below sketches the high-level architecture:
-
-.SecMan with Shiro local authentication
-image:secman-shiro-architecture.drawio.svg[]
-
-Thus:
-
-* Apache Causeway' xref:security:shiro:about.adoc[Shiro security] integration sets up Shiro web filters to intercept every http request, as well as the xref:refguide:security:index/shiro/authentication/AuthenticatorShiro.adoc[AuthenticatorShiro] implementation.
-* The `AuthenticatorShiro` calls to the Shiro Security Manager to obtain the authenticated principal.
-* The Shiro Security Manager uses the `shiro.ini` configuration file to look up the realm to perform the authentication; in this case we configure it to use Secman's realm (xref:refguide:extensions:index/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.adoc[CausewayModuleExtSecmanShiroRealm]).
-* Secman's realm implementation queries the database and uses this to create an instance of `PrincipalForApplicationUser`, where the `Principal` interface is Shiro's representation of an authenticated user.
-The `PrincipalForApplicationUser` is backed by xref:refguide:extensions:index/secman/applib/user/dom/ApplicationUser.adoc[ApplicationUser], which all of the permissions to object members for this particular user.
-* to render a page, the Apache Causeway viewer uses configured `Authorizor`, in this case
-Secman's own xref:refguide:extensions:index/secman/integration/authorizor/AuthorizorSecman.adoc[AuthorizorSecman].
-This looks up the current xref:refguide:extensions:index/secman/applib/user/dom/ApplicationUser.adoc[ApplicationUser] (which will already reside in-memory) and renders the page according to which object members are visible or not.
-
-
-The above configuration allows Secman to be used to authenticate users; the password is stored as an (typically) encrypted property of the xref:refguide:extensions:index/secman/applib/user/dom/ApplicationUser.adoc[ApplicationUser].
-These are called "local" users, as per the xref:refguide:extensions:index/secman/applib/user/dom/ApplicationUser.adoc[ApplicationUser]'s `accountType` property.
-
-
-== Delegate Authentication
-
-Local authentication - as described in the previous section - does not actually accomplish much; although Shiro's `Authenticator` implementation is in use, since the Shiro Realm just queries the SecMan database, there is no real difference from simply using SecMan's own `Authenticator` implementation.
-
-Where things become more interesting and useful is that Secman's xref:refguide:extensions:index/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.adoc[Realm implementation] also allows an alternative "delegate" realm (eg LDAP) to be queried.
-In such cases Shiro can obtain authentication of "delegated" users is performed by the delegate realm rather than locally.
-
-The diagram below shows where this delegation occurs:
-
-.SecMan with Shiro delegate authentication
-image:secman-shiro-delegate-architecture.drawio.svg[]
-
-When a delegate realm is configured, an `ApplicationUser` entity can be automatically created in the SecMan database for an external user.
-Secman can be configured so that these users are either locked or unlocked by default, as required, see xref:#configure-properties[below].
-
-
-== Dependencies
-
-In addition to the xref:setting-up.adoc#dependencies[regular dependencies] required by Secman, also add in Secman's Shiro Realm implementation:
-
-
-[source,xml]
-.pom.xml
-----
-<dependencies>
- <dependency>
- <groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-secman-persistence-XXX</artifactId> <!--.-->
- </dependency>
- <dependency>
- <groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-secman-encryption-jbcrypt</artifactId> <!--.-->
- </dependency>
- <dependency>
- <groupId>org.apache.causeway.extensions</groupId>
- <artifactId>causeway-extensions-secman-delegated-shiro</artifactId>
- </dependency>
-</dependencies>
-----
-<.> specify either `causeway-extensions-secman-persistence-jpa` or `causeway-extensions-secman-persistence-jdo`, as required
-<.> provides an implementation of `PasswordEncryptionService`
-
-
-
-
-[[_update-appmanifest]]
-== Update AppManifest
-
-In addition to the xref:setting-up.adoc#_update-appmanifest[other modules] that Secman requires to be added to your application's `AppManifest`, also add:
-You will also need to import the fixture module; SecMan uses fixture scripts to seed its entities:
-
-[source,java]
-.AppManifest.java
-----
-@Configuration
-@Import({
- ...
- CausewayModuleExtSecmanRealmShiro.class, // <.>
- ...
-})
-public class AppManifest {
-}
-----
-
-<.> enables Shiro integration (so that Shiro delegates to Secman for authentication).
-+
-This brings in a transitive dependency on the `CausewayModuleSecurityShiro` module.
-
-Ensure that no other `CausewayModuleSecurityXxx` module is imported into the AppManifest.
-
-
-
-
-[#delegate-realms]
-== Shiro (Delegate) Realm
-
-SecMan's Shiro realm is configured using the `shiro.ini` file.
-The following sets up Shiro _without_ delegation:
-
-[source,ini]
-.shiro.ini
-----
-[main]
-
-authenticationStrategy=org.apache.causeway.extensions.secman.delegated.shiro.realm.AuthenticationStrategyForSecMan
-causewayModuleSecurityRealm=org.apache.causeway.extensions.secman.delegated.shiro.realm.CausewayModuleExtSecmanShiroRealm
-
-securityManager.authenticator.authenticationStrategy = $authenticationStrategy
-securityManager.realms = $causewayModuleSecurityRealm
-
-[users]
-[roles]
-----
-
-The `[users]` and `[roles]` sections are required but are unused.
-
-The main point of introducing Shiro though is to introduce support for authentication by external mechanisms such as LDAP.
-In this case we configure Shiro to use the external realm as the primary realm, with Secman's Shiro realm set up as a "delegate" realm.
-We specify the delegate realm implementation in the `shiro.ini` file, and "inject" it into the Secman realm.
-
-For example, to use Shiro's link:https://github.com/apache/shiro/blob/main/core/src/main/java/org/apache/shiro/realm/ldap/DefaultLdapRealm.java[LDAP Realm] as a delegate:
-
-[source,ini]
-.shiro.ini
-----
-[main]
-
-...
-contextFactory = org.apache.shiro.realm.ldap.JndiLdapContextFactory #<.>
-contextFactory.url = ldap://localhost:10389 #<.>
-contextFactory.systemUsername = uid=admin,ou=system
-contextFactory.systemPassword = secret
-contextFactory.authenticationMechanism = CRAM-MD5
-
-ldapRealm = org.apache.shiro.realm.ldap.DefaultLdapRealm #<.>
-ldapRealm.contextFactory = $contextFactory
-
-causewayModuleSecurityRealm.delegateAuthenticationRealm=$ldapRealm #<.>
-
-...
-----
-<.> instantiate a JNDI LDAP context ...
-<.> \... configured with credentials to query users
-<.> instantiate the LDAP realm
-<.> specify the LDAP realm as the delegate realm for SecMan's own realm.
-
-The users should then be defined in the LDAP server appropriately.
-For example, if using link:https://directory.apache.org/apacheds[ApacheDS] server:
-
-* the users are stored under the SASL `searchBaseDn` attribute
-+
-for ApacheDS 1.5.7 this can be found in the `server.xml` file):
-
-* and can be defined as an `inetOrgPerson` with the `uid` and `userPassword` defining the credentials:
-+
-image::060-create-inetOrgPerson.png[width=600]
-
-With this configuration, the user/password is defined in LDAP, while their users permissions are taken from their user/group/perms defined in SecMan.
-
-=== A simpler LDAP configuration
-
-In fact, it's also possible to simplify matters by just configuring Shiro to use LDAP realm, and not define a secman realm at all.
-
-For example:
-
-[source,ini]
-.shiro.ini
-----
-[main]
-
-contextFactory = org.apache.shiro.realm.ldap.JndiLdapContextFactory
-contextFactory.url = ldap://localhost:10389
-contextFactory.systemUsername = uid=admin,ou=system
-contextFactory.systemPassword = secret
-contextFactory.authenticationMechanism = CRAM-MD5
-
-ldapRealm = org.apache.shiro.realm.ldap.DefaultLdapRealm
-
-ldapRealm.contextFactory = $contextFactory
-
-securityManager.realms = $ldapRealm
-----
-
-Although simpler, the key difference with this approach is that will not auto-create ``ApplicationUser``s within secman; they must be created by some separate means.
-If there is an entry in LDAP, but none in secman, then the end-user will be able to "login" but will have access to no features.
-
-[#configure-properties]
-== Configuration Properties
-
-As mentioned in the introduction, if delegate authentication has been set up, this means that authentication may pass for a user that Secman knows nothing about.
-In this case Secman will automatically create an `ApplicationUser` for this externally delegated authenticated user, with the type set to "DELEGATED".
-
-We can configure whether such automatically created accounts should be unlocked or locked by default:
-
-[source,yaml]
-.application.yml
-----
-causeway:
- extensions:
- secman:
- delegated-users:
- auto-create-policy: AUTO_CREATE_AS_LOCKED
-----
-
-
diff --git a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
index 1874bc949cf..2c460e7ac56 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
@@ -5,10 +5,17 @@
This section describes how to setup and configure _SecMan_ for use in your Apache Causeway application, for both authentication (`Authenticator` SPI) and authorization (`Authorizor` SPI).
-It is also possible to use _SecMan_ in conjunction with the framework's xref:security:shiro:about.adoc[integration with Shiro], where Shiro takes primary responsibility for authentication, while still using Secman for authorization.
-This mode allows a separate authentication mechanism such as LDAP to be used.
-For more details, see xref:setting-up-with-shiro.adoc[setting up with Shiro].
+It is also possible to use _SecMan_ in conjunction to use an alternative implementaiton of `Authenticator`, using either:
+* xref:security:spring:about.adoc[Spring]
++
+for more details, see xref:setting-up-with-spring-oauth2.adoc[]
+
+* xref:security:keycloak:about.adoc[Keycloak].
++
+for more details, see xref:setting-up-with-keycloak.adoc[]
+
+Secman is still responsible for authorization.
include::docs:mavendeps:partial$setup-and-configure-dependencyManagement.adoc[leveloffset=+1]
diff --git a/extensions/security/secman/adoc/modules/secman/partials/module-nav.adoc b/extensions/security/secman/adoc/modules/secman/partials/module-nav.adoc
index 188208786df..ae95b5591d5 100644
--- a/extensions/security/secman/adoc/modules/secman/partials/module-nav.adoc
+++ b/extensions/security/secman/adoc/modules/secman/partials/module-nav.adoc
@@ -1,6 +1,5 @@
** xref:security:secman:about.adoc[SecMan]
*** xref:security:secman:setting-up.adoc[Setting up]
-*** xref:security:secman:setting-up-with-shiro.adoc[Setting up with Shiro]
*** xref:security:secman:setting-up-with-spring-oauth2.adoc[Setting up with Spring OAuth2]
*** xref:security:secman:setting-up-with-keycloak.adoc[Setting up with Keycloak]
(causeway) 02/36: adds 4.0.0-M1 release notes
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 4f9c0bf0b5266ee1d1a630b9adf85cdfb350b668
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 13 07:07:35 2025 +0100
adds 4.0.0-M1 release notes
---
.../ROOT/pages/post-release-successful.adoc | 2 +-
antora/components/relnotes/modules/ROOT/nav.adoc | 1 +
.../modules/ROOT/pages/2025/3.5.0/mignotes.adoc | 6 ---
.../modules/ROOT/pages/2025/3.5.0/relnotes.adoc | 8 ---
.../pages/2025/{4.0.0 => 4.0.0-M1}/mignotes.adoc | 22 ++++----
.../modules/ROOT/pages/2025/4.0.0-M1/relnotes.adoc | 58 ++++++++++++++++++++++
.../modules/ROOT/pages/2025/4.0.0/relnotes.adoc | 8 ---
.../relnotes/modules/ROOT/pages/about.adoc | 10 ++++
8 files changed, 81 insertions(+), 34 deletions(-)
diff --git a/antora/components/comguide/modules/ROOT/pages/post-release-successful.adoc b/antora/components/comguide/modules/ROOT/pages/post-release-successful.adoc
index 4b221b2a880..23eb87a5f59 100644
--- a/antora/components/comguide/modules/ROOT/pages/post-release-successful.adoc
+++ b/antora/components/comguide/modules/ROOT/pages/post-release-successful.adoc
@@ -214,7 +214,7 @@ if [ $# -lt 1 ]; then
fi
# constants
-fullname="causeway-bom"
+fullname="causeway-all"
repo_root=https://repository.apache.org/content/repositories/releases/org/apache/causeway
# file suffices
diff --git a/antora/components/relnotes/modules/ROOT/nav.adoc b/antora/components/relnotes/modules/ROOT/nav.adoc
index 4422ee29705..a3d57f39449 100644
--- a/antora/components/relnotes/modules/ROOT/nav.adoc
+++ b/antora/components/relnotes/modules/ROOT/nav.adoc
@@ -3,6 +3,7 @@
* 2025
+** xref:relnotes:ROOT:2025/4.0.0-M1/relnotes.adoc[4.0.0-M1]
** xref:relnotes:ROOT:2025/3.4.0/relnotes.adoc[3.4.0]
** xref:relnotes:ROOT:2025/3.3.0/relnotes.adoc[3.3.0]
** xref:relnotes:ROOT:2025/3.2.0/relnotes.adoc[3.2.0]
diff --git a/antora/components/relnotes/modules/ROOT/pages/2025/3.5.0/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2025/3.5.0/mignotes.adoc
deleted file mode 100644
index 0abd94ed8db..00000000000
--- a/antora/components/relnotes/modules/ROOT/pages/2025/3.5.0/mignotes.adoc
+++ /dev/null
@@ -1,6 +0,0 @@
-= Migrating from 3.4.0 to 3.5.0
-
-: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 [...]
-:page-partial:
-
-No specific migration notes have been recorded to date.
diff --git a/antora/components/relnotes/modules/ROOT/pages/2025/3.5.0/relnotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2025/3.5.0/relnotes.adoc
deleted file mode 100644
index f06332336ec..00000000000
--- a/antora/components/relnotes/modules/ROOT/pages/2025/3.5.0/relnotes.adoc
+++ /dev/null
@@ -1,8 +0,0 @@
-[[r3.5.0]]
-= 3.5.0
-
-: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 [...]
-:page-partial:
-
-
-
diff --git a/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/mignotes.adoc
similarity index 92%
rename from antora/components/relnotes/modules/ROOT/pages/2025/4.0.0/mignotes.adoc
rename to antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/mignotes.adoc
index d601d1acab6..dd6f2df98f2 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0/mignotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/mignotes.adoc
@@ -1,4 +1,4 @@
-= Migrating from 3.x to 4.0.0 (Draft)
+= Migrating from 3.x to 4.0.0-M1
: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 [...]
:page-partial:
@@ -6,12 +6,12 @@
Upgrade Summary:
. stay at *Java 17* baseline (as _Spring_ does; however, JRuby 10.x as used for AsciiDoc extensions requires Java 21+ runtime)
-. upgrade to *Jackson 3* (as _Spring_ does)
+. upgrade to *Jackson 3* (as _Spring_ does)
. upgrade to *JUnit 6* (as _Spring_ does)
. *Shiro* support removed ✅
. *JDO* support removed ✅
. *Joda* time support removed ✅
-. *RestEasy* integration removed ✅
+. *RestEasy* integration removed ✅
. Causeway now uses *slf4j* (instead of _log4j_) ✅
. Migrate build requirements to *Maven 4* ✅
. ditch *rest-client* artifact in favor of Spring's RestClient (optional)
@@ -39,11 +39,11 @@ Some presets for the _Spring Configuration_ have been removed
[source,xml]
.Maven
----
-<!-- REMOVED
+<!-- REMOVED
<dependency>
<groupId>org.apache.causeway.viewer</groupId>
<artifactId>causeway-viewer-restfulobjects-jaxrsresteasy</artifactId>
-</dependency>
+</dependency>
-->
<!-- USE INSTEAD -->
@@ -60,7 +60,7 @@ Some presets for the _Spring Configuration_ have been removed
//..
// REST
-
+
// CausewayModuleViewerRestfulObjectsJaxrsResteasy.class <-- REMOVED
CausewayModuleViewerRestfulObjectsViewer.class, // <-- USE INSTEAD
})
@@ -85,8 +85,8 @@ causeway:
== Immutable Configuration
-`CausewayConfiguration` was refactored using Java records over regular classes,
-in effect all accessors have been renamed, stripping any `get` or `is` prefixes.
+`CausewayConfiguration` was refactored using Java records over regular classes,
+in effect all accessors have been renamed, stripping any `get` or `is` prefixes.
`CausewayConfiguration` is now immutable.
== ErrorDetails
@@ -97,11 +97,11 @@ in effect all accessors have been renamed, stripping any `get` or `is` prefixes.
== Object Icon Support
Object support method `FontAwesomeLayers iconFaLayers()` has been replaced by `IconResource icon(IconWhere iconWhere)`,
-which also supports image data embedding and supersedes `String iconName()`.
+which also supports image data embedding and supersedes `String iconName()`.
However, the latter is still supported for backward compatibility.
With `TitleService` method
-`String iconNameOf(final Object domainObject)` was replaced by
- `IconResource iconOf(Object domainObject, IconWhere iconWhere)`.
+`String iconNameOf(final Object domainObject)` was replaced by
+ `IconResource iconOf(Object domainObject, IconWhere iconWhere)`.
Likewise `IconUiEvent` was updated to reflect the new programming model.
diff --git a/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/relnotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/relnotes.adoc
new file mode 100644
index 00000000000..54f9101d1ce
--- /dev/null
+++ b/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0-M1/relnotes.adoc
@@ -0,0 +1,58 @@
+[[r4.0.0-M1]]
+= 4.0.0-M1
+
+: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 [...]
+:page-partial:
+
+
+[[r4.0.0-M1]]
+= 4.0.0-M1
+
+Apache Causeeway v4 is based on Spring Boot v4.
+In this milestone release, much of the porting has been done, now based on Spring Boot 4.0.0-M3.
+
+Significant other changes in this release:
+
+* JDO support has now been removed.
+Instead use JPA (EclipseLink)
+
+* RestEasy has been removed as a dependency, instead Spring's support for REST is used instead.
+
+* logging has moved from log4j2 to slf4j.
+
+
+
+
+== New Feature
+
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3903[CAUSEWAY-3903] - [Wicket Viewer] Configurable Select2 Ajax Delay
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3892[CAUSEWAY-3892] - *New Major Version 4* (Upgrade from Spring Boot 3.x to 4.x)
+** link:https://issues.apache.org/jira/browse/CAUSEWAY-3872[CAUSEWAY-3872] - [simple app] remove JDO variant
+** link:https://issues.apache.org/jira/browse/CAUSEWAY-3871[CAUSEWAY-3871] - [hello world] remove JDO variant
+** link:https://issues.apache.org/jira/browse/CAUSEWAY-3870[CAUSEWAY-3870] - [demo app] remove JDO profile
+** link:https://issues.apache.org/jira/browse/CAUSEWAY-3866[CAUSEWAY-3866] - Removal of JDO Integration
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3849[CAUSEWAY-3849] - Spring Data JDBC Integration (Experimental)
+
+
+== Improvement
+
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3906[CAUSEWAY-3906] - Select2 JS Consolidation
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3902[CAUSEWAY-3902] - [Tabular] More Background Colors for XLSX Export
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3901[CAUSEWAY-3901] - Log lines written for large XLSX exports
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3900[CAUSEWAY-3900] - [Config] Immutable CausewayConfiguration
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3897[CAUSEWAY-3897] - [RO] Use Spring RestControllers instead of RestEasy (JBoss)
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3875[CAUSEWAY-3875] - [Logging] Avoid Forcing Logging Implementations
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3869[CAUSEWAY-3869] - Switch to Spring Boot default logging provider (log4j2->logback)
+
+
+== Dependency upgrade
+
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3890[CAUSEWAY-3890] - JVM 25 Compatibility Forecasting
+
+
+
+== Task
+
+* link:https://issues.apache.org/jira/browse/CAUSEWAY-3898[CAUSEWAY-3898] - Release activities, 4.0.0-M1
+
+
diff --git a/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0/relnotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0/relnotes.adoc
deleted file mode 100644
index b0f6446ec3d..00000000000
--- a/antora/components/relnotes/modules/ROOT/pages/2025/4.0.0/relnotes.adoc
+++ /dev/null
@@ -1,8 +0,0 @@
-[[r4.0.0]]
-= 4.0.0
-
-: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 [...]
-:page-partial:
-
-
-
diff --git a/antora/components/relnotes/modules/ROOT/pages/about.adoc b/antora/components/relnotes/modules/ROOT/pages/about.adoc
index 6051c145997..67c8717ee3f 100644
--- a/antora/components/relnotes/modules/ROOT/pages/about.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/about.adoc
@@ -16,6 +16,16 @@ This table summarises all releases of Apache Causeway to date.
| Bugs
| Detail
+| 13th Oct 2025
+| 4.0.0-M1
+a| Apache Causeway 4.0.0-M1
+| 7
+| 7
+| 0
+|
+* xref:relnotes:ROOT:2025/4.0.0-M1/relnotes.adoc[Release Notes]
+* xref:relnotes:ROOT:2025/4.0.0-M1/mignotes.adoc[Migration Notes]
+
| 8th Jul 2025
| 3.4.0
a| Apache Causeway 3.4.0
(causeway) 30/36: CAUSEWAY-3866: moves module-info.java (for jpa/applib) from src/main/java-jigsaw ...
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit b3bdc9b7b985df2e67e9005753e352b5aacad1ae
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 22:27:46 2025 +0100
CAUSEWAY-3866: moves module-info.java (for jpa/applib) from src/main/java-jigsaw ...
... to src/main/java, like every other module...
---
persistence/jpa/applib/pom.xml | 3 +--
persistence/jpa/applib/src/main/{java-jigsaw => java}/module-info.java | 0
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/persistence/jpa/applib/pom.xml b/persistence/jpa/applib/pom.xml
index d82ac864468..44671363ed0 100644
--- a/persistence/jpa/applib/pom.xml
+++ b/persistence/jpa/applib/pom.xml
@@ -67,7 +67,7 @@
<artifactId>causeway-core-transaction</artifactId>
<scope>provided</scope>
</dependency>
-
+
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
@@ -105,7 +105,6 @@
<configuration>
<sources>
<source>src/main/java</source>
- <source>src/main/java-jigsaw</source>
</sources>
</configuration>
</execution>
diff --git a/persistence/jpa/applib/src/main/java-jigsaw/module-info.java b/persistence/jpa/applib/src/main/java/module-info.java
similarity index 100%
rename from persistence/jpa/applib/src/main/java-jigsaw/module-info.java
rename to persistence/jpa/applib/src/main/java/module-info.java
(causeway) 19/36: CAUSEWAY-3866: updates references to javax.inject.Named
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3866
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 2d2afe89266c6d82a2907648d2c131df07ad7e66
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Oct 18 09:17:53 2025 +0100
CAUSEWAY-3866: updates references to javax.inject.Named
(haven't change the .xsd schemas though)
---
extensions/security/secman/adoc/modules/secman/pages/about.adoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extensions/security/secman/adoc/modules/secman/pages/about.adoc b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
index b62210e20fe..4c1e176e263 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/about.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/about.adoc
@@ -33,7 +33,7 @@ for example `myapp.customer.CustomerAddress#zipCode`
* next up is an object feature representing an entire type, described using its logical type name.
+
for example `myapp.customer.CustomerAddress`.
-This is usually specified using the `@javax.inject.Named` annotation.
+This is usually specified using the `@jakarta.inject.Named` annotation.
* most general is an object feature representing a namespace
+