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/18 14:29:12 UTC
(causeway) branch CAUSEWAY-3866 updated (9b2a3e51f25 -> 1135734c12d)
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
from 9b2a3e51f25 CAUSEWAY-3866: updating docs, removing references to JDO
new b6678969b06 CAUSEWAY-3866: updating docs is all for v4
new 2ec8c14e8a5 CAUSEWAY-3866: removes more jdo references
new 9507e82e3fc CAUSEWAY-3866: removes more jdo references
new 972c31c087a CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
new a6cf672682e CAUSEWAY-3866: removes more jdo, datanucleus and resteasy references
new ac05932f543 CAUSEWAY-3866: removes more jdo and datanucleus references
new 7c83d21d6e3 CAUSEWAY-3866: removes references to JdoSupportService, also TransactionService#nextTransaction
new 87acedba75e CAUSEWAY-3866: removes references to javax.jdo.annotation
new bdfab6ab341 CAUSEWAY-3866: updates references to javax.persistence
new f8c4ec57881 CAUSEWAY-3866: updates references to javax.validation.constraints and javax.annotation
new 995f65232bc CAUSEWAY-3866: updates references to javax.annotation
new 3f4c549a9e8 CAUSEWAY-3866: updates references to javax.inject.Provider
new b47ee1756ed CAUSEWAY-3866: updates references to javax.inject.Named
new 95b54486f54 CAUSEWAY-3866: removes javax.jdo reference
new c01d997c6e7 CAUSEWAY-3866: removes 'JDO' references
new 21b514c239b CAUSEWAY-3866: cleaned up docs for simpleapp and helloworld app some
new 1135734c12d CAUSEWAY-3866: removes more references to JDO in .adoc etc
The 17 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:
.../ROOT/partials/module-nav/components.adoc | 2 -
.../applib/pages/index/annotation/Optionality.adoc | 4 +-
.../applib/pages/index/annotation/Property.adoc | 2 +-
.../hooks/DomainServiceLayout_021-menuBar.adoc | 2 +-
.../hooks/PropertyLayout_31_typicalLength.adoc | 3 +-
.../hooks/Property_010-examples-and-usage.adoc | 17 +-
.../annotation/hooks/Property_021-optionality.adoc | 58 +-
.../annotation/hooks/Property_023-maxLength.adoc | 5 +-
...ntentMappingService_020-examples-and-usage.adoc | 2 +-
.../services/exceprecog/ExceptionRecognizer.adoc | 2 +-
.../ExceptionRecognizer_010-implementation.adoc | 4 +-
.../GridSystemService_020-examples-and-usage.adoc | 2 +-
.../hooks/MetricsService_010-implementation.adoc | 2 +-
.../RepositoryService_020-examples-and-usage.adoc | 62 +-
.../RoutingService_020-examples-and-usage.adoc | 2 +-
.../SwaggerService_020-examples-and-usage.adoc | 2 +-
.../hooks/ObjectContracts_examples-and-usage.adoc | 79 ---
...yPersistenceJdoMetaModelRoleAndPermissions.adoc | 16 -
.../refguide/modules/applib-ant/pages/Column.adoc | 146 +++--
.../refguide/modules/applib-ant/pages/Digits.adoc | 20 +-
.../modules/applib-ant/pages/Nullable.adoc | 23 +-
.../refguide/modules/applib-ant/pages/Pattern.adoc | 47 +-
.../modules/applib-ant/partials/about/jee.adoc | 6 +-
.../modules/applib-ant/partials/about/jpa.adoc | 6 +-
.../applib-classes/pages/mixees-and-mixins.adoc | 24 -
.../applib-classes/partials/module-nav.adoc | 5 -
.../refguide/modules/applib-svc/pages/about.adoc | 4 +-
.../modules/applib-svc/partials/module-nav.adoc | 3 -
.../2.0.0-M1/mignotes/removed-annotations.adoc | 2 +-
.../ROOT/partials/2024/2.0.0/_relnotes.adoc | 1 +
.../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/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 -
.../petclinic/pages/010-getting-started.adoc | 5 +-
.../petclinic/pages/030-petowner-entity.adoc | 4 +-
.../further-business-logic-worked-examples.txt | 708 ---------------------
.../userguide/modules/ROOT/pages/value-types.adoc | 32 +-
.../modules/ROOT/partials/_deployment-options.adoc | 5 +-
.../modules/ROOT/partials/domain-entities/jpa.adoc | 85 ++-
.../ROOT/partials/domain-services/crud.adoc | 12 +-
.../partials/domain-services/initialization.adoc | 2 +-
.../partials/domain-services/inject-services.adoc | 12 +-
.../ROOT/partials/domain-services/overriding.adoc | 4 +-
.../ROOT/partials/domain-services/progmodel.adoc | 2 +-
.../partials/domain-services/scoped-services.adoc | 8 +-
.../ROOT/partials/meta-annotations/progmodel.adoc | 15 +-
.../modules/ROOT/partials/modules/decoupling.adoc | 2 +-
.../modules/ROOT/partials/modules/progmodel.adoc | 4 +-
.../properties-collections-actions/actions.adoc | 27 +-
.../collections.adoc | 60 +-
.../properties-collections-actions/properties.adoc | 12 +-
.../ROOT/partials/the-theory/metamodel.adoc | 7 +-
.../partials/the-theory/naked-objects-pattern.adoc | 2 +-
.../modules/ROOT/partials/view-models/_intro.adoc | 26 +-
.../replacing-default-service-implementations.adoc | 2 +-
.../hints-and-tips/transactions-and-errors.adoc | 25 +-
antora/playbooks/site.NEXT.yml | 2 +-
antora/supplemental-ui/index.html | 69 +-
.../causeway/applib/annotation/DomainObject.java | 16 +-
.../apache/causeway/applib/annotation/Nature.java | 5 +-
.../causeway/applib/annotation/Optionality.java | 4 +-
.../causeway/applib/annotation/Property.java | 20 +-
.../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 +-
.../queryresultscache/QueryResultsCache.java | 2 +-
.../applib/services/repository/EntityState.java | 23 +-
.../services/repository/RepositoryService.java | 32 +-
.../src/main/adoc/modules/schema/pages/common.adoc | 5 +-
causeway-tooling.yml | 1 -
.../commons/internal/reflection/_ClassCache.java | 7 -
.../internal/reflection/_ClassCacheUtil.java | 27 +-
core/adoc/modules/_overview/pages/about.adoc | 400 ++----------
core/config/generateConfigDocs.groovy | 13 -
.../src/main/adoc/modules/config/pages/about.adoc | 14 +-
.../section-hooks/causeway.core.config~pre.adoc | 2 +-
.../causeway.persistence.schema~pre.adoc | 2 +-
.../adoc/modules/config/pages/sections/_nav.adoc | 2 -
.../config/pages/sections/causeway.applib.adoc | 24 +-
.../causeway.core.meta-model.validator.adoc | 23 +-
.../sections/causeway.persistence.commons.adoc | 4 +-
.../sections/causeway.persistence.schema.adoc | 7 +-
.../modules/config/pages/sections/datanucleus.adoc | 196 ------
.../core/config/CausewayConfiguration.java | 51 +-
.../config/beans/CausewayBeanTypeClassifier.java | 3 -
.../config/beans/CausewayBeanTypeRegistry.java | 18 +-
.../core/config/presets/CausewayPresets.java | 3 +-
...s => DebugInteractionScopedServices.properties} | 12 +-
.../config/presets/DebugPersistence.properties | 20 -
.../DebugTransactionScopedServices.properties | 8 +-
.../additional-spring-configuration-metadata.json | 24 +-
.../interactions-commands-and-executions.adoc | 1 -
.../main/adoc/modules/metamodel/pages/about.adoc | 5 +-
core/metamodel/src/main/java/module-info.java | 7 -
.../DomainObjectAnnotationFacetFactory.java | 2 +-
...oveDatanucleusPersistableTypesFacetFactory.java | 66 --
.../RemoveDnPrefixedMethodsFacetFactory.java | 48 --
.../objectvalue/digits/MaxTotalDigitsFacet.java | 8 +-
.../classsubstitutor/ClassSubstitutorDefault.java | 5 -
.../objectlifecycle/ObjectLifecyclePublisher.java | 16 +-
.../adoc/modules/runtimeservices/pages/about.adoc | 2 +-
.../session/InteractionServiceDefault.java | 8 +-
.../transaction/TransactionServiceSpring.java | 44 --
.../changetracking/EntityChangeTracker.java | 9 +-
.../main/adoc/modules/webapp/pages/webmodules.adoc | 2 +-
.../confmenu/ConfigurationViewServiceDefault.java | 4 +-
.../adoc/modules/commandlog/pages/about.adoc | 17 +-
.../demoapp/todomodule/dom/ExcelDemoToDoItem.java | 62 --
.../todomodule/dom/ExcelDemoToDoItem.layout.xml | 3 -
extensions/core/excel/integtests/translations.pot | 129 ----
.../adoc/modules/executionlog/pages/about.adoc | 17 +-
.../adoc/modules/executionoutbox/pages/about.adoc | 18 +-
.../adoc/modules/audittrail/pages/about.adoc | 13 +-
.../secman/adoc/modules/secman/pages/about.adoc | 4 +-
.../adoc/modules/secman/pages/setting-up.adoc | 32 +-
...PersistenceJpaMetaModelRoleAndPermissions.java} | 10 +-
.../scripts/SeedUsersAndRolesFixtureScript.java | 15 +-
.../adoc/modules/sessionlog/pages/about.adoc | 13 +-
extensions/vw/pdfjs/fixtures/.gitignore | 1 -
.../pdfjs/fixtures/logging-dn-enhance.properties | 41 --
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 -
mavendeps/adoc/modules/mavendeps/pages/about.adoc | 3 +-
.../setup-and-configure-mavendeps-jdo.adoc | 25 -
.../modules/ROOT/pages/dependency-injection.adoc | 6 +-
.../adoc/modules/ROOT/pages/hints-and-tips.adoc | 1 -
.../jpa/adoc/modules/ROOT/pages/mapping-guide.adoc | 4 +-
.../ROOT/pages/setup-and-configuration.adoc | 4 +-
.../jpa/adoc/modules/ROOT/partials/module-nav.adoc | 2 +-
.../jpa/eclipselink/src/main/java/module-info.java | 2 +
.../CausewayModulePersistenceJpaEclipselink.java | 5 +-
.../jpa/eclipselink/app/JpaMetamodelMenu.java | 10 +
.../jpa/eclipselink/config/ElSettings.java | 1 -
...xLengthFromJpaColumnAnnotationFacetFactory.java | 3 -
.../querydsl/adoc/modules/ROOT/pages/about.adoc | 5 +-
.../ROOT/pages/setup-and-configuration.adoc | 11 -
.../testdomain/conf/Configuration_usingWicket.java | 17 -
.../testdomain/fixtures/EntityTestFixtures.java | 9 +-
.../stubs/ExecutionPublishingTestAbstract.java | 2 -
.../bootstrapping/builtin-domain-services.list | 1 -
.../bootstrapping/builtin-requestscoped.list | 2 -
.../incubating/log4j2-debug-persistence.xml | 28 +-
regressiontests/incubating/log4j2-test.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 ---
.../bootstrapping/builtin-domain-services.list | 1 -
.../bootstrapping/builtin-requestscoped.list | 1 -
retired/scripts/enhance.sh | 131 ----
security/adoc/modules/ROOT/pages/about.adoc | 2 +-
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 | 52 +-
.../adoc/modules/starters/pages/simpleapp.adoc | 155 ++---
testing/adoc/modules/ROOT/pages/about.adoc | 4 +-
.../adoc/modules/archtestsupport/pages/about.adoc | 22 +-
.../demomodule/dom/FakeDataDemoObjectWithAll.java | 29 -
testing/fakedata/integtests/translations.pot | 25 -
.../adoc/modules/integtestsupport/pages/about.adoc | 14 +-
.../integtestsupport/pages/swagger-exporter.adoc | 16 +-
.../adoc/modules/asciidoc/pages/about.adoc | 22 +-
.../adoc/modules/markdown/pages/about.adoc | 23 +-
valuetypes/vega/adoc/modules/vega/pages/about.adoc | 22 +-
.../adoc/modules/ROOT/pages/hints-and-tips.adoc | 1 -
.../ROOT/pages/hints-and-tips/troubleshooting.adoc | 88 ---
191 files changed, 759 insertions(+), 5488 deletions(-)
delete mode 100644 antora/components/refguide-index/modules/extensions/pages/index/secman/applib/role/seed/CausewayPersistenceJdoMetaModelRoleAndPermissions.adoc
delete mode 100644 antora/components/setupguide/modules/eclipse/attachments/causeway-templates.xml
delete mode 100644 antora/components/setupguide/modules/eclipse/attachments/jmock2-templates.xml
delete mode 100644 antora/components/setupguide/modules/eclipse/attachments/junit4-templates.xml
delete mode 100644 antora/components/setupguide/modules/eclipse/images/2017-oxygen/010-lombok-locate-jar.png
delete mode 100644 antora/components/setupguide/modules/eclipse/images/2017-oxygen/020-lombok-install-into-eclipse.png
delete mode 100644 antora/components/setupguide/modules/eclipse/images/2017-oxygen/030-datanucleus-install-new-software.png
delete mode 100644 antora/components/setupguide/modules/eclipse/images/2017-oxygen/040-datanucleus-specify-repository.png
delete mode 100644 antora/components/setupguide/modules/eclipse/images/2017-oxygen/050-datanucleus-select-plugin.png
delete mode 100644 antora/components/setupguide/modules/eclipse/images/2017-oxygen/060-enable-annotation-processor.png
delete mode 100644 antora/components/setupguide/modules/intellij/attachments/.gitignore
delete mode 100644 antora/components/setupguide/modules/intellij/attachments/causeway-settings-file-templates.jar
delete mode 100644 antora/components/setupguide/modules/intellij/partials/coding-standards.txt
delete mode 100644 antora/components/setupguide/modules/intellij/partials/file-templates.txt
delete mode 100644 antora/components/setupguide/modules/intellij/partials/live-templates.txt
delete mode 100644 antora/components/tutorials/modules/petclinic/pages/further-business-logic-worked-examples.txt
delete mode 100644 core/config/src/main/adoc/modules/config/pages/sections/datanucleus.adoc
rename core/config/src/main/java/org/apache/causeway/core/config/presets/{DebugRequestScopedServices.properties => DebugInteractionScopedServices.properties} (54%)
delete mode 100644 core/config/src/main/java/org/apache/causeway/core/config/presets/DebugPersistence.properties
delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java
delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/datanucleus/RemoveDnPrefixedMethodsFacetFactory.java
rename extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/{CausewayPersistenceJdoMetaModelRoleAndPermissions.java => CausewayPersistenceJpaMetaModelRoleAndPermissions.java} (88%)
delete mode 100644 extensions/vw/pdfjs/fixtures/.gitignore
delete mode 100644 extensions/vw/pdfjs/fixtures/logging-dn-enhance.properties
delete mode 100644 extensions/vw/pdfjs/fixtures/pom.xml
delete mode 100644 extensions/vw/pdfjs/fixtures/src/main/java/META-INF/persistence.xml
delete mode 100644 extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/PdfjsFixturesModule.java
delete mode 100644 extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/dom/PdfJsDemoObjectWithBlob.java
delete mode 100644 extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/dom/PdfJsDemoObjectWithBlobMenu.java
delete mode 100644 extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/fixturescripts/PdfJsDemoObjectWithBlob_createUpTo5_fakeData.java
delete mode 100644 extensions/vw/pdfjs/fixtures/src/main/java/org/causewayaddons/wicket/pdfjs/fixture/demoapp/demomodule/fixturescripts/PdfJsDemoObjectWithBlob_tearDown.java
delete mode 100644 mavendeps/adoc/modules/mavendeps/partials/setup-and-configure-mavendeps-jdo.adoc
create mode 100644 persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/app/JpaMetamodelMenu.java
delete mode 100644 regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/AbstractShiroTest.java
delete mode 100644 regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanLdapTest.java
delete mode 100644 regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanLdap_restfulStressTest.java
delete mode 100644 regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSecmanTest.java
delete mode 100644 regressiontests/incubating/src/test/java/org/apache/causeway/testdomain/shiro/ShiroSimpleTest.java
delete mode 100755 retired/scripts/enhance.sh
delete mode 100644 viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips/troubleshooting.adoc
(causeway) 17/17: 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 1135734c12df32b2fa6aff690565eaec8387622b
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) 08/17: 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 87acedba75e28798dd980b1b3d8116dd96dedb18
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) 05/17: 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 a6cf672682e3f2a301933c995d58042691ec8ac3
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) 16/17: 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 21b514c239b6c50aba94bd94638039fdf9ccd86a
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) 10/17: 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 f8c4ec57881bcda85285bd1156046dc5296b75c5
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) 12/17: 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 3f4c549a9e8b1413944c3093ffef42afc25b60ad
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) 11/17: 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 995f65232bc7e9ce697b075fea92c26757b19b52
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) 09/17: 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 bdfab6ab34190a410aeccecc650fcc8dac783980
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) 15/17: 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 c01d997c6e7ddd51a59182956f84353607f994ac
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) 03/17: 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 9507e82e3fc66f88c39dd4dee737840d7679922c
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) 04/17: 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 972c31c087a21675868d1876c6a09701aaf3efe2
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) 02/17: 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 2ec8c14e8a58bfb1ebf8257db9bc71a99aa95a8e
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) 07/17: 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 7c83d21d6e3e82720146d555df2ea9c702bc82dd
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) 14/17: 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 95b54486f54dc5cc8f995248f7f0e4b91e123fef
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/17: 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 ac05932f5436efa35e998366d1ccd7805157651d
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) 01/17: 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 b6678969b06f6696213715f57188d3abfcee784f
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) 13/17: 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 b47ee1756ed5b19ba8a4a60e0379586b82560705
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
+