This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 5558386a0c CAUSEWAY-3508: adds support for NonDurable entities
new 9f76d8e4ac Merge branch 'CAUSEWAY-3508'
5558386a0c is described below
commit 5558386a0c4befd0214310211b7d69b6789331a6
Author: danhaywood <[email protected]>
AuthorDate: Wed Jun 28 19:10:28 2023 +0100
CAUSEWAY-3508: adds support for NonDurable entities
---
.../applib/services/bookmark/IdStringifier.java | 2 --
.../CausewayModulePersistenceJdoDatanucleus.java | 4 +++
.../idstringifers/IdStringifierForDnSCOID.java | 31 ++++++++++++++++++++++
.../metamodel/facets/entity/JdoEntityFacet.java | 4 ++-
4 files changed, 38 insertions(+), 3 deletions(-)
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 ce2e93fe10..5e9791d67d 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
@@ -43,8 +43,6 @@ import lombok.val;
* An example of such is the JPA implementation of the
<code>commandlog</code> extension.
* </p>
*
- * @see org.apache.causeway.core.runtime.idstringifier.IdStringifierService
- *
* @since 2.0 {@index}
*/
@SuppressWarnings("javadoc")
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.java
index 01a6cfbc58..d376c0551e 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/CausewayModulePersistenceJdoDatanucleus.java
@@ -25,6 +25,8 @@ import javax.jdo.JDOException;
import javax.jdo.PersistenceManagerFactory;
import javax.sql.DataSource;
+import
org.apache.causeway.persistence.jdo.datanucleus.idstringifers.IdStringifierForDnSCOID;
+
import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
import org.datanucleus.metadata.PersistenceUnitMetaData;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -105,6 +107,8 @@ import lombok.extern.log4j.Log4j2;
DnStringIdValueSemantics.class,
DnObjectIdValueSemantics.class,
+ IdStringifierForDnSCOID.class,
+
// @Service's
JdoSupportServiceDefault.class,
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/idstringifers/IdStringifierForDnSCOID.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/idstringifers/IdStringifierForDnSCOID.java
new file mode 100644
index 0000000000..c50abf994e
--- /dev/null
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/idstringifers/IdStringifierForDnSCOID.java
@@ -0,0 +1,31 @@
+package org.apache.causeway.persistence.jdo.datanucleus.idstringifers;
+
+import javax.annotation.Priority;
+
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
+import org.apache.causeway.applib.services.bookmark.IdStringifier;
+import org.datanucleus.identity.SCOID;
+
+import org.springframework.stereotype.Component;
+
+import lombok.NonNull;
+
+@Component
+@Priority(PriorityPrecedence.LATE + 100) // after the implementations of
DatastoreId; for a custom impl.
+public class IdStringifierForDnSCOID implements IdStringifier<SCOID> {
+
+ @Override
+ public Class<SCOID> getCorrespondingClass() {
+ return SCOID.class;
+ }
+
+ @Override
+ public String enstring(@NonNull SCOID value) {
+ return value.getSCOClass();
+ }
+
+ @Override
+ public SCOID destring(@NonNull Class<?> targetEntityClass, @NonNull String
stringified) {
+ return new SCOID(stringified);
+ }
+}
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
index 9f881c76d0..a24a169a4c 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
@@ -33,6 +33,7 @@ import javax.jdo.PersistenceManager;
import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
import org.datanucleus.api.jdo.JDOQuery;
import org.datanucleus.enhancement.Persistable;
+import org.datanucleus.identity.SCOID;
import org.datanucleus.store.rdbms.RDBMSPropertyNames;
import org.springframework.lang.Nullable;
@@ -232,8 +233,9 @@ implements EntityFacet {
return clr.classForName(objectIdClass);
case DATASTORE:
return
nucleusContext.getIdentityManager().getDatastoreIdClass();
- case UNSPECIFIED:
case NONDURABLE:
+ return SCOID.class;
+ case UNSPECIFIED:
default:
throw new IllegalStateException(String.format(
"JdoEntityFacet has been incorrectly installed on '%s'
which has an supported identityType of '%s'",