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 2021/03/08 11:32:05 UTC

[isis] branch master updated: ISIS-2571: also enforce validation on services that contribute to the meta-model

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 c1dc28c  ISIS-2571: also enforce validation on services that contribute to the meta-model
c1dc28c is described below

commit c1dc28c9934c4288f729c24ac36f97ec4c2df5f2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Mar 8 12:31:49 2021 +0100

    ISIS-2571: also enforce validation on services that contribute to the
    meta-model
---
 .../MethodPrefixBasedFacetFactoryAbstract.java     |  2 +-
 .../facets/OrphanedSupportingMethodValidator.java  |  2 +-
 ...nChoicesForCollectionParameterFacetFactory.java |  2 +-
 .../annotation/HomePageFacetAnnotationFactory.java |  2 +-
 .../annotation/SortedByFacetAnnotationFactory.java |  2 +-
 .../metamodel/facets/jaxb/JaxbFacetFactory.java    |  2 +-
 .../BookmarkPolicyFacetFallbackFactory.java        |  2 +-
 .../DomainObjectAnnotationFacetFactory.java        |  2 +-
 .../DomainServiceFacetAnnotationFactory.java       | 74 ++++++++++------------
 .../mixin/MetaModelValidatorForMixinTypes.java     |  5 +-
 .../NavigableParentAnnotationFacetFactory.java     |  2 +-
 .../ObjectSpecIdMalformedValidator.java            | 10 +--
 ...jectSpecIdFacetDerivedFromClassNameFactory.java |  2 +-
 .../recreatable/RecreatableObjectFacetFactory.java |  2 +-
 .../annotation/TitleAnnotationFacetFactory.java    |  2 +-
 .../core/metamodel/progmodel/ProgrammingModel.java | 14 +++-
 .../validator/MetaModelValidatorAbstract.java      |  4 +-
 .../validator/MetaModelValidatorVisiting.java      | 24 +++----
 .../SupportingMethodValidatorRefinerFactory.java   |  2 +-
 .../jdo/metamodel/JdoProgrammingModel.java         |  4 +-
 .../query/JdoQueryAnnotationFacetFactory.java      |  4 +-
 .../version/JdoVersionAnnotationFacetFactory.java  |  2 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |  2 +-
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java |  2 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |  2 +-
 25 files changed, 85 insertions(+), 88 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
index 00d83dd..d5bc08e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
@@ -98,7 +98,7 @@ implements MethodPrefixBasedFacetFactory {
         
         val noParamsOnly = getConfiguration().getCore().getMetaModel().getValidator().isNoParamsOnly();
 
-        programmingModel.addValidator(new MetaModelValidatorVisiting.Visitor() {
+        programmingModel.addValidatorSkipManagedBeans(new MetaModelValidatorVisiting.Visitor() {
 
             @Override
             public String toString() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java
index 41347bb..ef2090f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java
@@ -60,7 +60,7 @@ implements MetaModelRefiner {
             return; // continue
         }
 
-        programmingModel.addValidator((spec, validationFailures) -> {
+        programmingModel.addValidatorSkipManagedBeans((spec, validationFailures) -> {
             
             if(!(spec instanceof ObjectSpecificationAbstract)) {
                 return true; // continue
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
index 7c19673..36b40ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
@@ -153,7 +153,7 @@ implements MetaModelRefiner {
             }
         };
 
-        programmingModel.addValidator(vistingValidator);
+        programmingModel.addValidatorSkipManagedBeans(vistingValidator);
 
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
index 645d85c..6af6905 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
@@ -69,7 +69,7 @@ implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
-        programmingModel.addValidator(newValidatorVisitor());
+        programmingModel.addValidatorSkipManagedBeans(newValidatorVisitor());
     }
 
     private Visitor newValidatorVisitor() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
index 9e1b9b8..e23b76b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
@@ -54,7 +54,7 @@ implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
-        programmingModel.addValidator(newValidatorVisitor());
+        programmingModel.addValidatorSkipManagedBeans(newValidatorVisitor());
     }
 
     protected MetaModelValidatorVisiting.Visitor newValidatorVisitor() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
index bc2ea52..f1623aa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
@@ -170,7 +170,7 @@ implements MetaModelRefiner {
         final List<TypeValidator> typeValidators = getTypeValidators(getConfiguration());
         final List<PropertyValidator> propertyValidators = getPropertyValidators(getConfiguration());
 
-        programmingModel.addValidator(
+        programmingModel.addValidatorSkipManagedBeans(
                 new MetaModelValidatorVisiting.Visitor() {
                     @Override
                     public boolean visit(
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
index 426a16a..2959204 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
@@ -52,7 +52,7 @@ implements MetaModelRefiner {
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
         
-        programmingModel.addValidator((objectSpec, validator) -> {
+        programmingModel.addValidatorSkipManagedBeans((objectSpec, validator) -> {
 
             // as an optimization only checking declared members (skipping inherited ones)
             objectSpec.streamDeclaredActions(MixedIn.EXCLUDED)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 43ded7d..c810c7c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -532,7 +532,7 @@ implements MetaModelRefiner, PostConstructMethodCache, ObjectSpecIdFacetFactory
 
                 };
 
-        pm.addValidator(ensureUniqueObjectIds);
+        pm.addValidatorSkipManagedBeans(ensureUniqueObjectIds);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
index de15e67..eefd898 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.core.metamodel.facets.object.domainservice.annotation;
 
-
 import java.util.stream.Collectors;
 
 import org.apache.isis.applib.annotation.DomainService;
@@ -33,7 +32,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForValidationFailures;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting;
 
 import lombok.val;
@@ -42,9 +40,6 @@ public class DomainServiceFacetAnnotationFactory
 extends FacetFactoryAbstract 
 implements MetaModelRefiner {
 
-    private MetaModelValidatorForValidationFailures mixinOnlyValidator =
-            new MetaModelValidatorForValidationFailures();
-
     public DomainServiceFacetAnnotationFactory() {
         super(FeatureType.OBJECTS_ONLY);
     }
@@ -52,7 +47,6 @@ implements MetaModelRefiner {
     @Override
     public void setMetaModelContext(MetaModelContext metaModelContext) {
         super.setMetaModelContext(metaModelContext);
-        mixinOnlyValidator.setMetaModelContext(metaModelContext);
     }
 
     @Override
@@ -72,48 +66,44 @@ implements MetaModelRefiner {
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
         
-        val isServiceActionsOnly = true;
-        if (isServiceActionsOnly) {
-            
-            programmingModel.addValidator(new MetaModelValidatorVisiting.Visitor() {
-
-                @Override
-                public boolean visit(final ObjectSpecification thisSpec, final MetaModelValidator validator) {
-                    validate(thisSpec, validator);
-                    return true;
-                }
+        programmingModel.addValidatorSkipManagedBeans(new MetaModelValidatorVisiting.Visitor() {
 
-                private void validate(
-                        final ObjectSpecification thisSpec,
-                        final MetaModelValidator validator) {
+            @Override
+            public boolean visit(final ObjectSpecification thisSpec, final MetaModelValidator validator) {
+                validate(thisSpec, validator);
+                return true;
+            }
 
-                    if(!thisSpec.containsFacet(DomainServiceFacet.class)) {
-                        return;
-                    }
+            private void validate(
+                    final ObjectSpecification objectSpec,
+                    final MetaModelValidator validator) {
 
-                    final String associationNames = thisSpec
-                            .streamAssociations(MixedIn.EXCLUDED)
-                            .map(ObjectAssociation::getName)
-                            // it's okay to have an "association" called "Id" (corresponding to getId() method)
-                            .filter(associationName->!"Id".equalsIgnoreCase(associationName))
-                            .collect(Collectors.joining(", "));
-
-                    if(associationNames.isEmpty()) {
-                        return;
-                    }
+                if(!objectSpec.containsFacet(DomainServiceFacet.class)) {
+                    return;
+                }
 
-                    validator.onFailure(
-                            thisSpec,
-                            thisSpec.getIdentifier(),
-                            "%s: services can only have actions ('%s' config property), not properties or collections; annotate with @Programmatic if required.  Found: %s",
-                            thisSpec.getFullIdentifier(),
-                            "'isis.core.meta-model.validator.serviceActionsOnly'",
-                            associationNames);
+                System.err.println("validate " + objectSpec);
+                
+                final String associationNames = objectSpec
+                        .streamAssociations(MixedIn.EXCLUDED)
+                        .map(ObjectAssociation::getName)
+                        // it's okay to have an "association" called "Id" (corresponding to getId() method)
+                        .filter(associationName->!"Id".equalsIgnoreCase(associationName))
+                        .collect(Collectors.joining(", "));
+
+                if(associationNames.isEmpty()) {
+                    return;
                 }
-            });
-        }
 
-        programmingModel.addValidator(mixinOnlyValidator);
+                validator.onFailure(
+                        objectSpec,
+                        objectSpec.getIdentifier(),
+                        "%s: services can only have actions ('%s' config property), not properties or collections; annotate with @Programmatic if required.  Found: %s",
+                        objectSpec.getFullIdentifier(),
+                        "'isis.core.meta-model.validator.serviceActionsOnly'",
+                        associationNames);
+            }
+        });
 
     }
     
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MetaModelValidatorForMixinTypes.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MetaModelValidatorForMixinTypes.java
index 34ee847..b980eff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MetaModelValidatorForMixinTypes.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MetaModelValidatorForMixinTypes.java
@@ -22,14 +22,15 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.internal.reflection._Reflect;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForValidationFailures;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorAbstract;
 
 import static org.apache.isis.commons.internal.reflection._Reflect.Filter.paramCount;
 
 import lombok.NonNull;
 import lombok.val;
 
-public class MetaModelValidatorForMixinTypes extends MetaModelValidatorForValidationFailures {
+public class MetaModelValidatorForMixinTypes 
+extends MetaModelValidatorAbstract {
 
     private final String annotation;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
index a501fa2..08344ab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
@@ -109,7 +109,7 @@ implements MetaModelRefiner {
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
 
-        programmingModel.addValidator((objectSpec, validate) -> {
+        programmingModel.addValidatorSkipManagedBeans((objectSpec, validate) -> {
 
 
             final Class<?> cls = objectSpec.getCorrespondingClass();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdMalformedValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdMalformedValidator.java
index 4368815..8e1d62d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdMalformedValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdMalformedValidator.java
@@ -26,6 +26,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting;
 
+import lombok.SneakyThrows;
 import lombok.val;
 
 /**
@@ -38,10 +39,10 @@ import lombok.val;
 public class ObjectSpecIdMalformedValidator
 implements MetaModelRefiner {
 
-    @Override
+    @Override @SneakyThrows
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
-
-        programmingModel.addValidator(
+        
+        programmingModel.addValidatorIncludeManagedBeans(
 
             new MetaModelValidatorVisiting.Visitor() {
                 
@@ -50,7 +51,8 @@ implements MetaModelRefiner {
                         ObjectSpecification objectSpec,
                         MetaModelValidator validator) {
                     
-                    if(objectSpec.isEntityOrViewModel()) {
+                    if(objectSpec.isEntityOrViewModel()
+                            || objectSpec.isManagedBean() ) {
                         validate(objectSpec, validator);    
                     }
                     return true;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
index a55b9e0..3f81a57 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
@@ -112,7 +112,7 @@ implements MetaModelRefiner, ObjectSpecIdFacetFactory {
             return;
         }
 
-        programmingModel.addValidator(
+        programmingModel.addValidatorSkipManagedBeans(
 
             new MetaModelValidatorVisiting.Visitor() {
                 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
index e048796..acb8c82 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
@@ -96,7 +96,7 @@ implements MetaModelRefiner, PostConstructMethodCache {
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
 
-        programmingModel.addValidator((objectSpec, validate) -> {
+        programmingModel.addValidatorSkipManagedBeans((objectSpec, validate) -> {
 
             val viewModelFacet = objectSpec.getFacet(ViewModelFacet.class);
             val underlyingFacet = viewModelFacet != null ? viewModelFacet.getUnderlyingFacet() : null;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
index ebac6ba..1334141 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
@@ -149,7 +149,7 @@ implements MetaModelRefiner {
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
 
-        programmingModel.addValidator((objectSpec, validate) -> {
+        programmingModel.addValidatorSkipManagedBeans((objectSpec, validate) -> {
 
             final Class<?> cls = objectSpec.getCorrespondingClass();
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
index 2490359..46c939c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
@@ -154,10 +154,18 @@ public interface ProgrammingModel {
         addValidator(ValidationOrder.A2_AFTER_BUILTIN, supplier.get(), markers);
     }
 
+    /** do not include managed beans */
+    default void addValidatorIncludeManagedBeans(MetaModelValidatorVisiting.Visitor visitor, Marker ... markers) {
+        addValidator(MetaModelValidatorVisiting.of(visitor, 
+                    spec -> !spec.getBeanSort().isUnknown()),
+                markers);
+    }
     
-    /** shortcut for see {@link #addValidator(MetaModelValidator, Marker...)} */
-    default void addValidator(MetaModelValidatorVisiting.Visitor visitor, Marker ... markers) {
-        addValidator(MetaModelValidatorVisiting.of(visitor), markers);
+    /** do not include managed beans */
+    default void addValidatorSkipManagedBeans(MetaModelValidatorVisiting.Visitor visitor, Marker ... markers) {
+        addValidator(MetaModelValidatorVisiting.of(visitor, 
+                    spec -> !spec.isManagedBean() && !spec.getBeanSort().isUnknown()),
+                markers);
     }
     
     default void addValidator(final MetaModelValidatorVisiting.Visitor visitor,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorAbstract.java
index d6ca53f..3f0c7d3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorAbstract.java
@@ -30,7 +30,9 @@ import lombok.NonNull;
 import lombok.Setter;
 
 public abstract class MetaModelValidatorAbstract 
-implements MetaModelValidator, MetaModelContextAware {
+implements 
+    MetaModelValidator, 
+    MetaModelContextAware {
 
     protected final ValidationFailures failures = new ValidationFailures();
     
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorVisiting.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorVisiting.java
index 2176e91..8bcd4e0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorVisiting.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorVisiting.java
@@ -27,7 +27,8 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault;
 import lombok.NonNull;
 import lombok.val;
 
-public class MetaModelValidatorVisiting extends MetaModelValidatorAbstract {
+public class MetaModelValidatorVisiting 
+extends MetaModelValidatorAbstract {
 
     @Override
     public String toString() {
@@ -53,11 +54,6 @@ public class MetaModelValidatorVisiting extends MetaModelValidatorAbstract {
     // -- IMPLEMENTATION
 
     public static MetaModelValidatorVisiting of(
-            final @NonNull Visitor visitor) {
-        return new MetaModelValidatorVisiting(visitor);
-    }
-
-    public static MetaModelValidatorVisiting of(
             final @NonNull Visitor visitor,
             final @NonNull Predicate<ObjectSpecification> includeIf) {
         return new MetaModelValidatorVisiting(visitor, includeIf);
@@ -69,19 +65,12 @@ public class MetaModelValidatorVisiting extends MetaModelValidatorAbstract {
 
     private MetaModelValidatorVisiting(
             final @NonNull Visitor visitor,
-            final @NonNull Predicate<ObjectSpecification> includeIf) {
+            final @NonNull Predicate<ObjectSpecification> includeIf
+            ) {
         this.visitor = visitor;
         this.includeIf = includeIf;
     }
 
-    private MetaModelValidatorVisiting(
-            final @NonNull Visitor visitor) {
-        this(visitor,
-                // by default, exclude managed beans from validation
-                spec -> !spec.isManagedBean() && !spec.getBeanSort().isUnknown()
-        );
-    }
-
     @Override
     public void collectFailuresInto(@NonNull ValidationFailures validationFailures) {
         validateAll();
@@ -102,9 +91,14 @@ public class MetaModelValidatorVisiting extends MetaModelValidatorAbstract {
                     return; // in support of @Action not being forced, we need to relax 
             }
             
+            if(spec.isManagedBean()) {
+                System.err.printf("%s: (include: %b): %s\n", this.getClass(), includeIf.test(spec), spec);
+            }
+            
             if(!includeIf.test(spec)) {
                 return;
             }
+            
             visitor.visit(spec, this);
         });
     }
diff --git a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/facets/SupportingMethodValidatorRefinerFactory.java b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
index 41c05cb..c4b8ee1 100644
--- a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
+++ b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
@@ -56,7 +56,7 @@ implements MetaModelRefiner {
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
 
-        programmingModel.addValidator((spec, validationFailures) -> {
+        programmingModel.addValidatorSkipManagedBeans((spec, validationFailures) -> {
 
             final Class<?> type = spec.getCorrespondingClass();
 
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/JdoProgrammingModel.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/JdoProgrammingModel.java
index c9cc3c4..574ee89 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/JdoProgrammingModel.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/JdoProgrammingModel.java
@@ -97,7 +97,7 @@ public class JdoProgrammingModel implements MetaModelRefiner {
 
     private void addValidatorToEnsureIdentityType(ProgrammingModel pm) {
 
-        pm.addValidator((objSpec, validation) -> {
+        pm.addValidatorSkipManagedBeans((objSpec, validation) -> {
 
             final JdoPersistenceCapableFacet jpcf = objSpec.getFacet(JdoPersistenceCapableFacet.class);
             if(jpcf == null) {
@@ -132,7 +132,7 @@ public class JdoProgrammingModel implements MetaModelRefiner {
 
     private void addValidatorToCheckForUnsupportedAnnotations(ProgrammingModel pm) {
 
-        pm.addValidator((objSpec, validation) -> {
+        pm.addValidatorSkipManagedBeans((objSpec, validation) -> {
             if (objSpec.containsNonFallbackFacet(ParentedCollectionFacet.class) && !objSpec.containsNonFallbackFacet(CollectionFacet.class)) {
                 validation.onFailure(
                         objSpec,
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
index a0bb773..56144b4 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
@@ -74,13 +74,13 @@ implements MetaModelRefiner {
         val isValidateFromClause = 
                 getConfiguration().getCore().getMetaModel().getValidator().getJdoql().isFromClause();
         if (isValidateFromClause) {
-            programmingModel.addValidator(new VisitorForFromClause(this));
+            programmingModel.addValidatorSkipManagedBeans(new VisitorForFromClause(this));
         }
 
         val isValidateVariablesClause = 
                 getConfiguration().getCore().getMetaModel().getValidator().getJdoql().isVariablesClause();
         if (isValidateVariablesClause) {
-            programmingModel.addValidator(new VisitorForVariablesClause(this));
+            programmingModel.addValidatorSkipManagedBeans(new VisitorForVariablesClause(this));
         }
     }
 
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
index 91f9c79..6ab874f 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
@@ -65,7 +65,7 @@ implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
-        programmingModel.addValidator(newValidatorVisitor());
+        programmingModel.addValidatorSkipManagedBeans(newValidatorVisitor());
     }
 
     Visitor newValidatorVisitor() {
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
index 5772e47..4f08767 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
@@ -103,7 +103,7 @@ implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
-        programmingModel.addValidator(newValidatorVisitor());
+        programmingModel.addValidatorSkipManagedBeans(newValidatorVisitor());
     }
 
     private Visitor newValidatorVisitor() {
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
index f3b05bb..a296d38 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
@@ -122,7 +122,7 @@ implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
-        programmingModel.addValidator(newValidatorVisitor());
+        programmingModel.addValidatorSkipManagedBeans(newValidatorVisitor());
     }
 
     private Visitor newValidatorVisitor() {
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
index 6a6a7bd..f787d40 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
@@ -94,7 +94,7 @@ implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
-        programmingModel.addValidator(newValidatorVisitor());
+        programmingModel.addValidatorSkipManagedBeans(newValidatorVisitor());
     }
 
     private Visitor newValidatorVisitor() {