You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/08/11 10:07:31 UTC

[isis] branch master updated: ISIS-3119: convert build-in PK stringifiers to value-semantics-providers

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new de02942469 ISIS-3119: convert build-in PK stringifiers to value-semantics-providers
de02942469 is described below

commit de02942469c0a95c545eb68a0f01304d6bd8e53e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Aug 11 12:07:22 2022 +0200

    ISIS-3119: convert build-in PK stringifiers to value-semantics-providers
---
 .../applib/services/bookmark/IdStringifier.java    |  1 -
 .../ValueSemanticsBasedOnIdStringifier.java        | 87 ++++++++++++++++++++++
 .../valuesemantics/SerializableValueSemantics.java | 42 ++---------
 .../commandlog/jpa/dom/CommandLogEntryPK.java      | 41 ++--------
 .../IsisModuleExtExecutionLogPersistenceJdo.java   |  2 +-
 .../executionlog/jdo/dom/ExecutionLogEntryPK.java  | 17 ++---
 .../IsisModuleExtExecutionLogPersistenceJpa.java   |  2 +-
 .../executionlog/jpa/dom/ExecutionLogEntryPK.java  | 15 ++--
 ...IsisModuleExtExecutionOutboxPersistenceJdo.java |  2 +-
 .../jdo/dom/ExecutionOutboxEntryPK.java            | 10 +--
 ...IsisModuleExtExecutionOutboxPersistenceJpa.java |  2 +-
 .../jpa/dom/ExecutionOutboxEntryPK.java            | 10 +--
 .../jpa/IsisModuleExtSessionLogPersistenceJpa.java |  2 +-
 .../sessionlog/jpa/dom/SessionLogEntryPK.java      |  9 ++-
 14 files changed, 129 insertions(+), 113 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
index 049b71ce76..7ecc3699c4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
@@ -105,7 +105,6 @@ public interface IdStringifier<T> {
             _Assert.assertFalse(correspondingClass.isPrimitive());
 
             this.correspondingClass = correspondingClass;
-                    ClassUtils.resolvePrimitiveIfNecessary(correspondingClass);
         }
 
         @Override
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
new file mode 100644
index 0000000000..6a07f027dc
--- /dev/null
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
@@ -0,0 +1,87 @@
+/*
+ *  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.isis.applib.value.semantics;
+
+import org.springframework.util.ClassUtils;
+
+import org.apache.isis.applib.services.bookmark.IdStringifier;
+import org.apache.isis.commons.internal.assertions._Assert;
+import org.apache.isis.schema.common.v2.ValueType;
+
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.experimental.Accessors;
+
+/**
+ * @since 2.x {@index}
+ */
+public abstract class ValueSemanticsBasedOnIdStringifier<T>
+extends ValueSemanticsAbstract<T>
+implements
+    IdStringifier<T> {
+
+    @Getter @Accessors(makeFinal = true)
+    private final Class<T> correspondingClass;
+
+    protected ValueSemanticsBasedOnIdStringifier(
+            final @NonNull Class<T> correspondingClass) {
+        _Assert.assertFalse(correspondingClass.isPrimitive());
+        this.correspondingClass = correspondingClass;
+    }
+
+    @Override
+    public final ValueType getSchemaValueType() {
+        return ValueType.STRING;
+    }
+
+    // -- ID STRINGIFIER
+
+    @Override
+    public final boolean handles(final @NonNull Class<?> candidateValueClass) {
+        return getCorrespondingClass()
+                .isAssignableFrom(ClassUtils.resolvePrimitiveIfNecessary(candidateValueClass));
+    }
+
+    @Override
+    public String enstring(@NonNull final T value) {
+        return value.toString();
+    }
+
+    @Override
+    public final T destring(@NonNull final String stringified, @NonNull final Class<?> targetEntityClass) {
+        return destring(stringified);
+    }
+
+    // -- COMPOSER
+
+    @Override
+    public final ValueDecomposition decompose(final T value) {
+        return decomposeAsString(value, this::enstring, ()->null);
+    }
+
+    @Override
+    public final T compose(final ValueDecomposition decomposition) {
+        return composeFromString(decomposition, this::destring, ()->null);
+    }
+
+    // --
+
+    protected abstract T destring(@NonNull String stringified);
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
index 527b15920d..252a5c9fd0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
@@ -28,15 +28,12 @@ import javax.inject.Named;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.services.bookmark.IdStringifier;
 import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
-import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.resources._Serializables;
-import org.apache.isis.schema.common.v2.ValueType;
 
 import lombok.NonNull;
 
@@ -48,40 +45,17 @@ import lombok.NonNull;
 @Named("isis.val.SerializableValueSemantics")
 @Priority(PriorityPrecedence.LAST)
 public class SerializableValueSemantics
-extends ValueSemanticsAbstract<Serializable>
-implements
-    IdStringifier<Serializable> {
+extends ValueSemanticsBasedOnIdStringifier<Serializable> {
 
     private final UrlEncodingService codec;
 
     @Inject
     public SerializableValueSemantics(
             final @NonNull UrlEncodingService codec) {
+        super(Serializable.class);
         this.codec = codec;
     }
 
-    @Override
-    public Class<Serializable> getCorrespondingClass() {
-        return Serializable.class;
-    }
-
-    @Override
-    public ValueType getSchemaValueType() {
-        return ValueType.STRING;
-    }
-
-    // -- COMPOSER
-
-    @Override
-    public ValueDecomposition decompose(final Serializable value) {
-        return decomposeAsString(value, this::enstring, ()->null);
-    }
-
-    @Override
-    public Serializable compose(final ValueDecomposition decomposition) {
-        return composeFromString(decomposition, this::destring, ()->null);
-    }
-
     // -- ID STRINGIFIER
 
     @Override
@@ -92,13 +66,6 @@ implements
                 : null;
     }
 
-    @Override
-    public Serializable destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
-        return destring(stringified);
-    }
-
     @Override
     public Can<Serializable> getExamples() {
         return Can.of(
@@ -109,7 +76,8 @@ implements
 
     // -- HELPER
 
-    private Serializable destring(
+    @Override
+    protected Serializable destring(
             @NonNull final String stringified) {
         return destringAs(stringified, Serializable.class);
     }
diff --git a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
index 073df2a148..0e8a8c0ae2 100644
--- a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
+++ b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
@@ -30,12 +30,9 @@ import javax.persistence.Embeddable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.services.bookmark.IdStringifier;
-import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.extensions.commandlog.applib.dom.CommandLogEntry;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
-import org.apache.isis.schema.common.v2.ValueType;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
@@ -68,51 +65,23 @@ public class CommandLogEntryPK implements Serializable {
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
     public static class Semantics
-    extends ValueSemanticsAbstract<CommandLogEntryPK>
-    implements IdStringifier<CommandLogEntryPK> {
+    extends ValueSemanticsBasedOnIdStringifier<CommandLogEntryPK> {
 
-        @Override
-        public Class<CommandLogEntryPK> getCorrespondingClass() {
-            return CommandLogEntryPK.class;
-        }
-
-        @Override
-        public ValueType getSchemaValueType() {
-            return ValueType.STRING;
-        }
-
-        // -- COMPOSER
-
-        @Override
-        public ValueDecomposition decompose(final CommandLogEntryPK value) {
-            return decomposeAsString(value, this::enstring, ()->null);
+        public Semantics() {
+            super(CommandLogEntryPK.class);
         }
 
-        @Override
-        public CommandLogEntryPK compose(final ValueDecomposition decomposition) {
-            return composeFromString(decomposition, this::destring, ()->null);
-        }
-
-        // -- ID STRINGIFIER
-
         @Override
         public String enstring(final CommandLogEntryPK value) {
             return value.getInteractionId().toString();
         }
 
         @Override
-        public CommandLogEntryPK destring(
-                @NonNull final String stringified,
-                @NonNull final Class<?> targetEntityClass) {
-            return destring(stringified);
-        }
-
-        private CommandLogEntryPK destring(
+        protected CommandLogEntryPK destring(
                 @NonNull final String stringified) {
             return new CommandLogEntryPK(UUID.fromString(stringified));
         }
 
-
     }
 
 
diff --git a/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/IsisModuleExtExecutionLogPersistenceJdo.java b/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/IsisModuleExtExecutionLogPersistenceJdo.java
index c8d87d1c5f..caaa4fd54e 100644
--- a/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/IsisModuleExtExecutionLogPersistenceJdo.java
+++ b/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/IsisModuleExtExecutionLogPersistenceJdo.java
@@ -40,7 +40,7 @@ import org.apache.isis.testing.fixtures.applib.teardown.jdo.TeardownFixtureJdoAb
 
         // @Service's
         ExecutionLogEntryRepository.class,
-        ExecutionLogEntryPK.Stringifier.class,
+        ExecutionLogEntryPK.Semantics.class,
 
         // entities
         ExecutionLogEntry.class
diff --git a/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/dom/ExecutionLogEntryPK.java b/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/dom/ExecutionLogEntryPK.java
index 1cb39e0ad0..fb82c34319 100644
--- a/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/dom/ExecutionLogEntryPK.java
+++ b/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/dom/ExecutionLogEntryPK.java
@@ -27,7 +27,7 @@ import javax.annotation.Priority;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.services.bookmark.IdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
@@ -62,22 +62,19 @@ public class ExecutionLogEntryPK implements Serializable {
 
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
-    public static class Stringifier extends IdStringifier.Abstract<ExecutionLogEntryPK> {
+    public static class Semantics
+    extends ValueSemanticsBasedOnIdStringifier<ExecutionLogEntryPK> {
 
-        public Stringifier() {
+        public Semantics() {
             super(ExecutionLogEntryPK.class);
         }
 
-        @Override
-        public String enstring(final ExecutionLogEntryPK value) {
-            return value.toString();
-        }
-
         @Override
         public ExecutionLogEntryPK destring(
-                final @NonNull String stringified,
-                final @NonNull Class<?> targetEntityClass) {
+                final @NonNull String stringified) {
             return new ExecutionLogEntryPK(stringified);
         }
+
+
     }
 }
diff --git a/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/IsisModuleExtExecutionLogPersistenceJpa.java b/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/IsisModuleExtExecutionLogPersistenceJpa.java
index 608a73f72a..8c86479bfe 100644
--- a/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/IsisModuleExtExecutionLogPersistenceJpa.java
+++ b/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/IsisModuleExtExecutionLogPersistenceJpa.java
@@ -44,7 +44,7 @@ import org.apache.isis.testing.fixtures.applib.teardown.jpa.TeardownFixtureJpaAb
 
         // @Service's
         ExecutionLogEntryRepository.class,
-        ExecutionLogEntryPK.Stringifier.class,
+        ExecutionLogEntryPK.Semantics.class,
 
         // entities
         ExecutionLogEntry.class
diff --git a/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/dom/ExecutionLogEntryPK.java b/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/dom/ExecutionLogEntryPK.java
index d7d7eb56b5..7cdb2bf1b7 100644
--- a/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/dom/ExecutionLogEntryPK.java
+++ b/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/dom/ExecutionLogEntryPK.java
@@ -30,7 +30,7 @@ import javax.persistence.Embeddable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.services.bookmark.IdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 
 import lombok.AccessLevel;
@@ -73,21 +73,16 @@ public class ExecutionLogEntryPK implements Serializable {
 
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
-    public static class Stringifier extends IdStringifier.Abstract<ExecutionLogEntryPK> {
+    public static class Semantics
+    extends ValueSemanticsBasedOnIdStringifier<ExecutionLogEntryPK> {
 
-        public Stringifier() {
+        public Semantics() {
             super(ExecutionLogEntryPK.class);
         }
 
-        @Override
-        public String enstring(final ExecutionLogEntryPK value) {
-            return value.toString();
-        }
-
         @Override
         public ExecutionLogEntryPK destring(
-                final @NonNull String stringified,
-                final @NonNull Class<?> targetEntityClass) {
+                final @NonNull String stringified) {
             return new ExecutionLogEntryPK(stringified);
         }
     }
diff --git a/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/IsisModuleExtExecutionOutboxPersistenceJdo.java b/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/IsisModuleExtExecutionOutboxPersistenceJdo.java
index c876d65bdb..a27348c297 100644
--- a/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/IsisModuleExtExecutionOutboxPersistenceJdo.java
+++ b/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/IsisModuleExtExecutionOutboxPersistenceJdo.java
@@ -40,7 +40,7 @@ import org.apache.isis.testing.fixtures.applib.teardown.jdo.TeardownFixtureJdoAb
 
         // @Service's
         ExecutionOutboxEntryRepository.class,
-        ExecutionOutboxEntryPK.Stringifier.class,
+        ExecutionOutboxEntryPK.Semantics.class,
 
         // entities
         ExecutionOutboxEntry.class
diff --git a/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java b/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
index 662c67452b..79a2be7db0 100644
--- a/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
+++ b/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
@@ -27,7 +27,7 @@ import javax.annotation.Priority;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.services.bookmark.IdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
@@ -62,9 +62,10 @@ public class ExecutionOutboxEntryPK implements Serializable {
 
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
-    public static class Stringifier extends IdStringifier.Abstract<ExecutionOutboxEntryPK> {
+    public static class Semantics
+    extends ValueSemanticsBasedOnIdStringifier<ExecutionOutboxEntryPK> {
 
-        public Stringifier() {
+        public Semantics() {
             super(ExecutionOutboxEntryPK.class);
         }
 
@@ -75,8 +76,7 @@ public class ExecutionOutboxEntryPK implements Serializable {
 
         @Override
         public ExecutionOutboxEntryPK destring(
-                final @NonNull String stringified,
-                final @NonNull Class<?> targetEntityClass) {
+                final @NonNull String stringified) {
             return new ExecutionOutboxEntryPK(stringified);
         }
     }
diff --git a/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/IsisModuleExtExecutionOutboxPersistenceJpa.java b/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/IsisModuleExtExecutionOutboxPersistenceJpa.java
index c7929ec451..3899fdd8ed 100644
--- a/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/IsisModuleExtExecutionOutboxPersistenceJpa.java
+++ b/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/IsisModuleExtExecutionOutboxPersistenceJpa.java
@@ -44,7 +44,7 @@ import org.apache.isis.testing.fixtures.applib.teardown.jpa.TeardownFixtureJpaAb
 
         // @Service's
         ExecutionOutboxEntryRepository.class,
-        ExecutionOutboxEntryPK.Stringifier.class,
+        ExecutionOutboxEntryPK.Semantics.class,
 
         // entities
         ExecutionOutboxEntry.class
diff --git a/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java b/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
index 98f854f364..059d038058 100644
--- a/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
+++ b/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
@@ -30,7 +30,7 @@ import javax.persistence.Embeddable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.services.bookmark.IdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 
 import lombok.AccessLevel;
@@ -73,9 +73,10 @@ public class ExecutionOutboxEntryPK implements Serializable {
 
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
-    public static class Stringifier extends IdStringifier.Abstract<ExecutionOutboxEntryPK> {
+    public static class Semantics
+    extends ValueSemanticsBasedOnIdStringifier<ExecutionOutboxEntryPK> {
 
-        public Stringifier() {
+        public Semantics() {
             super(ExecutionOutboxEntryPK.class);
         }
 
@@ -86,8 +87,7 @@ public class ExecutionOutboxEntryPK implements Serializable {
 
         @Override
         public ExecutionOutboxEntryPK destring(
-                final @NonNull String stringified,
-                final @NonNull Class<?> targetEntityClass) {
+                final @NonNull String stringified) {
             return new ExecutionOutboxEntryPK(stringified);
         }
     }
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java
index 49a4f22f8d..2140b863ac 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java
+++ b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java
@@ -44,7 +44,7 @@ import org.apache.isis.testing.fixtures.applib.teardown.jpa.TeardownFixtureJpaAb
 
         // services
         SessionLogEntryRepository.class,
-        SessionLogEntryPK.Stringifier.class,
+        SessionLogEntryPK.Semantics.class,
 
         // entities, eager meta-model introspection
         SessionLogEntry.class,
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
index f9c1e1cc94..42517e6979 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
+++ b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
@@ -31,7 +31,7 @@ import javax.persistence.Embeddable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.services.bookmark.IdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 
@@ -63,9 +63,10 @@ public class SessionLogEntryPK implements Serializable {
 
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
-    public static class Stringifier extends IdStringifier.Abstract<SessionLogEntryPK> {
+    public static class Semantics
+    extends ValueSemanticsBasedOnIdStringifier<SessionLogEntryPK> {
 
-        public Stringifier() {
+        public Semantics() {
             super(SessionLogEntryPK.class);
         }
 
@@ -75,7 +76,7 @@ public class SessionLogEntryPK implements Serializable {
         }
 
         @Override
-        public SessionLogEntryPK destring(@NonNull final String stringified, @NonNull final Class<?> targetEntityClass) {
+        public SessionLogEntryPK destring(@NonNull final String stringified) {
             return new SessionLogEntryPK(UUID.fromString(stringified));
         }
     }