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'",

Reply via email to