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 2019/10/31 15:35:28 UTC

[isis] 02/02: ISIS-2158: move service loader 'IsisJdoMetamodelPlugin' -> jdo-common

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

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

commit 8d2ce6a61ce1cba620bf3b54d4b41727f64ca8c6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 31 16:34:29 2019 +0100

    ISIS-2158: move service loader 'IsisJdoMetamodelPlugin' -> jdo-common
    
    - also decouples DomainObjectInvocationHandler from JDO
---
 .../facets/object/entity/EntityFacet.java          |  9 +++++
 .../specimpl/ObjectSpecificationAbstract.java      |  5 ---
 .../isis/jdo/entities/JdoEntityTypeRegistry.java   |  2 +-
 .../JdoStoreLifecycleListenerForIsis.java          |  2 +-
 .../jdo}/metamodel/IsisJdoMetamodelPlugin.java     |  6 ++--
 .../isis/jdo}/metamodel/JdoMetamodelUtil.java      | 14 +++++---
 ...JdoDatastoreIdentityAnnotationFacetFactory.java |  2 +-
 .../JdoDiscriminatorAnnotationFacetFactory.java    |  2 +-
 ...doPersistenceCapableAnnotationFacetFactory.java |  2 +-
 .../JdoPersistenceCapableFacetImpl.java            |  7 +++-
 .../query/JdoQueryAnnotationFacetFactory.java      |  2 +-
 .../version/JdoVersionAnnotationFacetFactory.java  |  2 +-
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java |  2 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |  2 +-
 .../JdoNotPersistentAnnotationFacetFactory.java    |  2 +-
 .../JdoPrimaryKeyAnnotationFacetFactory.java       |  2 +-
 ...rtPlugin5.java => IsisJdoMetamodelPlugin5.java} | 36 +++++++++++++++----
 ...pache.isis.jdo.metamodel.IsisJdoMetamodelPlugin |  1 +
 ...rg.apache.isis.metamodel.IsisJdoMetamodelPlugin |  1 -
 .../handlers/DomainObjectInvocationHandler.java    | 40 +++++++---------------
 20 files changed, 83 insertions(+), 58 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
index 95bff0b..9c48676 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.object.entity;
 
+import java.lang.reflect.Method;
+
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
@@ -34,4 +36,11 @@ public interface EntityFacet extends Facet {
     
     void persist(ObjectSpecification spec, Object pojo);
 
+    /**
+     * Whether given method originates from byte code mangling.
+     * @param method
+     * @return
+     */
+    boolean isProxyEnhancement(Method method);
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 7529992..c86f86a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -43,7 +43,6 @@ import org.apache.isis.commons.internal.ioc.BeanSort;
 import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
 import org.apache.isis.commons.internal.reflection._Reflect;
 import org.apache.isis.config.registry.IsisBeanTypeRegistry;
-import org.apache.isis.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.commons.ClassExtensions;
 import org.apache.isis.metamodel.commons.ToString;
 import org.apache.isis.metamodel.consent.Consent;
@@ -1094,10 +1093,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         if(containsFacet(EntityFacet.class)) {
             return BeanSort.ENTITY;
         }
-        val correspondingClass = getCorrespondingClass();
-        if(JdoMetamodelUtil.isPersistenceEnhanced(correspondingClass)) {
-            return BeanSort.ENTITY;
-        }
 
         return BeanSort.UNKNOWN;
     }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/entities/JdoEntityTypeRegistry.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/entities/JdoEntityTypeRegistry.java
index 1e7d2e7..b5bfb68 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/entities/JdoEntityTypeRegistry.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/entities/JdoEntityTypeRegistry.java
@@ -27,7 +27,7 @@ import javax.jdo.annotations.PersistenceCapable;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.config.registry.IsisBeanTypeRegistry;
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 
 import static org.apache.isis.commons.internal.base._NullSafe.stream;
 
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/lifecycles/JdoStoreLifecycleListenerForIsis.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/lifecycles/JdoStoreLifecycleListenerForIsis.java
index 03c30c2..c8c9c85 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/lifecycles/JdoStoreLifecycleListenerForIsis.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/lifecycles/JdoStoreLifecycleListenerForIsis.java
@@ -21,7 +21,7 @@ package org.apache.isis.jdo.lifecycles;
 import javax.inject.Inject;
 import javax.jdo.listener.InstanceLifecycleEvent;
 
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.runtime.system.persistence.events.PersistenceEventService;
 import org.apache.isis.runtime.system.persistence.events.PostStoreEvent;
 import org.apache.isis.runtime.system.persistence.events.PreStoreEvent;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/IsisJdoMetamodelPlugin.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/IsisJdoMetamodelPlugin.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/isis/metamodel/IsisJdoMetamodelPlugin.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/IsisJdoMetamodelPlugin.java
index 637b2ae..ab02aec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/IsisJdoMetamodelPlugin.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/IsisJdoMetamodelPlugin.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.metamodel;
+package org.apache.isis.jdo.metamodel;
 
 import java.lang.reflect.Method;
 
@@ -36,10 +36,10 @@ public interface IsisJdoMetamodelPlugin {
     public boolean isPersistenceEnhanced(@Nullable Class<?> cls);
 
     /**
-     * Equivalent to org.datanucleus.enhancement.Persistable.class.getDeclaredMethods().
+     * Equivalent to any match with org.datanucleus.enhancement.Persistable.class.getDeclaredMethods().
      * @return
      */
-    public Method[] getMethodsProvidedByEnhancement();
+    public boolean isMethodProvidedByEnhancement(Method method);
 
     // -- LOOKUP
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/JdoMetamodelUtil.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/JdoMetamodelUtil.java
similarity index 80%
rename from core/metamodel/src/main/java/org/apache/isis/metamodel/JdoMetamodelUtil.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/JdoMetamodelUtil.java
index a5f42e1..bd0705f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/JdoMetamodelUtil.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/JdoMetamodelUtil.java
@@ -16,13 +16,19 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.metamodel;
+package org.apache.isis.jdo.metamodel;
 
-public class JdoMetamodelUtil {
-
-    public static boolean isPersistenceEnhanced(Class<?> cls) {
+import javax.annotation.Nullable;
 
+public class JdoMetamodelUtil {
+    
+    public static boolean isPersistenceEnhanced(@Nullable Class<?> cls) {
+        if(cls==null) {
+            return false;
+        }
         return IsisJdoMetamodelPlugin.get().isPersistenceEnhanced(cls);
     }
+    
+    
 
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/datastoreidentity/JdoDatastoreIdentityAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/datastoreidentity/JdoDatastoreIdentityAnnotationFacetFactory.java
index 285a39f..e2ac315 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/datastoreidentity/JdoDatastoreIdentityAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/datastoreidentity/JdoDatastoreIdentityAnnotationFacetFactory.java
@@ -22,7 +22,7 @@ package org.apache.isis.jdo.metamodel.facets.object.datastoreidentity;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facets.Annotations;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
index 118ffc5..17d01d8 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
@@ -22,7 +22,7 @@ package org.apache.isis.jdo.metamodel.facets.object.discriminator;
 import javax.jdo.annotations.Discriminator;
 
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
index 80c2812..508585f 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
@@ -23,7 +23,7 @@ import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.PersistenceCapable;
 
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facets.Annotations;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
index 13d0769..6bbd1c7 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
@@ -18,12 +18,14 @@
  */
 package org.apache.isis.jdo.metamodel.facets.object.persistencecapable;
 
+import java.lang.reflect.Method;
 import java.util.UUID;
 
 import javax.jdo.annotations.IdentityType;
 
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.jdo.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
@@ -101,7 +103,10 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
         return persistable_type.get().isAssignableFrom(type);
     }
 
-
+    @Override
+    public boolean isProxyEnhancement(Method method) {
+        return IsisJdoMetamodelPlugin.get().isMethodProvidedByEnhancement(method);
+    }
 
 
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
index a71a401..f19c003 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
@@ -24,7 +24,7 @@ import java.util.regex.Pattern;
 import javax.jdo.annotations.Queries;
 import javax.jdo.annotations.Query;
 
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facetapi.MetaModelRefiner;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
index 5435c25..c797e87 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
@@ -21,7 +21,7 @@ package org.apache.isis.jdo.metamodel.facets.object.version;
 
 import javax.jdo.annotations.Version;
 
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facetapi.MetaModelRefiner;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
index c833998..1a55e91 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
@@ -24,10 +24,10 @@ import javax.jdo.annotations.Column;
 import javax.jdo.annotations.IdentityType;
 
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
 import org.apache.isis.jdo.metamodel.facets.prop.notpersistent.JdoNotPersistentFacet;
 import org.apache.isis.jdo.metamodel.facets.prop.primarykey.OptionalFacetDerivedFromJdoPrimaryKeyAnnotation;
-import org.apache.isis.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facetapi.MetaModelRefiner;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
index e83b4e9..8cae219 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
@@ -23,9 +23,9 @@ import java.util.stream.Stream;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.IdentityType;
 
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
 import org.apache.isis.jdo.metamodel.facets.prop.notpersistent.JdoNotPersistentFacet;
-import org.apache.isis.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facetapi.MetaModelRefiner;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/notpersistent/JdoNotPersistentAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/notpersistent/JdoNotPersistentAnnotationFacetFactory.java
index ff1ec48..e74ef43 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/notpersistent/JdoNotPersistentAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/notpersistent/JdoNotPersistentAnnotationFacetFactory.java
@@ -20,7 +20,7 @@ package org.apache.isis.jdo.metamodel.facets.prop.notpersistent;
 
 import javax.jdo.annotations.NotPersistent;
 
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facets.FacetFactoryAbstract;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/primarykey/JdoPrimaryKeyAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/primarykey/JdoPrimaryKeyAnnotationFacetFactory.java
index dc34eed..6833a42 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/primarykey/JdoPrimaryKeyAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/primarykey/JdoPrimaryKeyAnnotationFacetFactory.java
@@ -20,7 +20,7 @@ package org.apache.isis.jdo.metamodel.facets.prop.primarykey;
 
 import javax.jdo.annotations.PrimaryKey;
 
-import org.apache.isis.metamodel.JdoMetamodelUtil;
+import org.apache.isis.jdo.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.metamodel.facets.FacetedMethod;
diff --git a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoSupportPlugin5.java b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoMetamodelPlugin5.java
similarity index 52%
rename from core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoSupportPlugin5.java
rename to core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoMetamodelPlugin5.java
index 7eb21b0..ca46bf6 100644
--- a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoSupportPlugin5.java
+++ b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoMetamodelPlugin5.java
@@ -19,15 +19,16 @@
 package org.apache.isis.jdo.jdosupport;
 
 import java.lang.reflect.Method;
+import java.util.Set;
 
-import javax.annotation.Nullable;
+import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.jdo.metamodel.IsisJdoMetamodelPlugin;
 
-import org.apache.isis.metamodel.IsisJdoMetamodelPlugin;
-
-public class IsisJdoSupportPlugin5 implements IsisJdoMetamodelPlugin {
+public class IsisJdoMetamodelPlugin5 implements IsisJdoMetamodelPlugin {
 
     @Override
-    public boolean isPersistenceEnhanced(@Nullable Class<?> cls) {
+    public boolean isPersistenceEnhanced(Class<?> cls) {
         if(cls==null) {
             return false;
         }
@@ -35,7 +36,30 @@ public class IsisJdoSupportPlugin5 implements IsisJdoMetamodelPlugin {
     }
 
     @Override
-    public Method[] getMethodsProvidedByEnhancement() {
+    public boolean isMethodProvidedByEnhancement(Method method) {
+        if(method==null) {
+            return false;
+        }
+        ensureInit();
+        return /*methodStartsWith(method, "jdo") || */ 
+                jdoMethodsProvidedByEnhancement.contains(method.toString());
+    }
+    
+    // -- HELPER
+
+    private final Set<String> jdoMethodsProvidedByEnhancement = _Sets.newHashSet();
+    
+    private static Method[] getMethodsProvidedByEnhancement() {
         return org.datanucleus.enhancement.Persistable.class.getDeclaredMethods();
     }
+
+    private void ensureInit() {
+        if(jdoMethodsProvidedByEnhancement.isEmpty()) {
+            _NullSafe.stream(getMethodsProvidedByEnhancement())
+            .map(Method::toString)
+            .forEach(jdoMethodsProvidedByEnhancement::add);
+        }
+    }
+    
+    
 }
diff --git a/core/plugins/jdo/datanucleus-5/src/main/resources/META-INF/services/org.apache.isis.jdo.metamodel.IsisJdoMetamodelPlugin b/core/plugins/jdo/datanucleus-5/src/main/resources/META-INF/services/org.apache.isis.jdo.metamodel.IsisJdoMetamodelPlugin
new file mode 100644
index 0000000..efba94b
--- /dev/null
+++ b/core/plugins/jdo/datanucleus-5/src/main/resources/META-INF/services/org.apache.isis.jdo.metamodel.IsisJdoMetamodelPlugin
@@ -0,0 +1 @@
+org.apache.isis.jdo.jdosupport.IsisJdoMetamodelPlugin5
\ No newline at end of file
diff --git a/core/plugins/jdo/datanucleus-5/src/main/resources/META-INF/services/org.apache.isis.metamodel.IsisJdoMetamodelPlugin b/core/plugins/jdo/datanucleus-5/src/main/resources/META-INF/services/org.apache.isis.metamodel.IsisJdoMetamodelPlugin
deleted file mode 100644
index 4a6e9b3..0000000
--- a/core/plugins/jdo/datanucleus-5/src/main/resources/META-INF/services/org.apache.isis.metamodel.IsisJdoMetamodelPlugin
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.isis.jdo.jdosupport.IsisJdoSupportPlugin5
\ No newline at end of file
diff --git a/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/handlers/DomainObjectInvocationHandler.java b/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/handlers/DomainObjectInvocationHandler.java
index 2ac89b5..d7bf0a6 100644
--- a/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -25,7 +25,6 @@ import java.util.Collection;
 import java.util.EnumSet;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 import java.util.function.Supplier;
 import java.util.stream.Stream;
 
@@ -42,15 +41,13 @@ import org.apache.isis.applib.services.wrapper.events.PropertyAccessEvent;
 import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
 import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
 import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
-import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Arrays;
-import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.consent.InteractionResult;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.ImperativeFacet.Intent;
+import org.apache.isis.metamodel.facets.object.entity.EntityFacet;
 import org.apache.isis.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -96,22 +93,22 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
      */
     protected Method __isis_executionMode;
 
-    protected final Set<String> jdoMethodsProvidedByEnhancement = _Sets.newHashSet();
+    private EntityFacet entityFacet; 
 
     public DomainObjectInvocationHandler(
             final MetaModelContext metaModelContext,
-            final T delegate,
+            final T domainObject,
             final EnumSet<ExecutionMode> mode,
             final ProxyContextHandler proxy) {
         
-        super(metaModelContext.getServiceRegistry(), delegate, mode);
+        super(metaModelContext.getServiceRegistry(), domainObject, mode);
 
         this.mmContext = metaModelContext;
         this.proxy = proxy;
         this.executionMode = mode;
 
         try {
-            titleMethod = delegate.getClass().getMethod("title", new Class[]{});
+            titleMethod = domainObject.getClass().getMethod("title", new Class[]{});
         } catch (final NoSuchMethodException e) {
             // ignore
         }
@@ -119,22 +116,9 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
             __isis_saveMethod = WrappingObject.class.getMethod("__isis_save", new Class[]{});
             __isis_wrappedMethod = WrappingObject.class.getMethod("__isis_wrapped", new Class[]{});
             __isis_executionMode = WrappingObject.class.getMethod("__isis_executionMode", new Class[]{});
-
-            _NullSafe.stream(IsisJdoMetamodelPlugin.get().getMethodsProvidedByEnhancement())
-            .map(Method::getName)
-            .forEach(jdoMethodsProvidedByEnhancement::add);
-
-            // legacy of ...
-            //            dnPersistableMethods.addAll(
-            //                    _Lists.newArrayList(
-            //                            Iterables.transform(
-            //                                    Arrays.asList(Persistable.class.getDeclaredMethods()),
-            //                                    new Function<Method, String>() {
-            //                                        @Override
-            //                                        public String apply(final Method input) {
-            //                                            return input.getName();
-            //                                        }
-            //                                    })));
+            
+            entityFacet = metaModelContext.getSpecification(domainObject.getClass())
+                    .getFacet(EntityFacet.class);
 
         } catch (final NoSuchMethodException nsme) {
             throw new IllegalStateException(
@@ -150,7 +134,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
             return delegate(method, args);
         }
 
-        if(isJdoMethod(method)) {
+        if(isEnhancedEntityMethod(method)) {
             return delegate(method, args);
         }
 
@@ -344,8 +328,10 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         return null;
     }
 
-    private boolean isJdoMethod(final Method method) {
-        return methodStartsWith(method, "jdo") || jdoMethodsProvidedByEnhancement.contains(method.getName());
+    private boolean isEnhancedEntityMethod(final Method method) {
+        return entityFacet!=null 
+                ? entityFacet.isProxyEnhancement(method)
+                        : false;
     }
 
     private static boolean isInjectMethod(final Method method) {