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) {