Core MetaModel Introspection

Configuration of the introspector component that actually builds the metamodel by introspecting the domain object classes"

Property Default Description

causeway.core.meta-model.
introspector.
lock-after-full-introspection

true

If true, then no new specifications will be allowed to be loaded once introspection has been complete.

Only applies if the introspector is configured to perform full introspection up-front (either because of IntrospectionMode#FULL or IntrospectionMode#LAZY_UNLESS_PRODUCTION when in production); otherwise is ignored.

causeway.core.meta-model.
introspector.mode

Whether all known types should be fully introspected as part of the bootstrapping, or should only be partially introspected initially.

Leaving this as lazy means that there’s a chance that metamodel validation errors will not be discovered during bootstrap. That said, metamodel validation is still run incrementally for any classes introspected lazily after initial bootstrapping (unless #isValidateIncrementally() is disabled.

causeway.core.meta-model.
introspector.parallelize

Whether to perform metamodel introspection in parallel, intended to speed up bootstrapping.

For now this is experimental. We recommend this is left as disabled (the default).

causeway.core.meta-model.
introspector.policy

Policy as to how introspection should process class members and supporting methods.

Default is to only introspect public class members, while annotating these is optional.

causeway.core.meta-model.
introspector.
validate-incrementally

true

If true, then metamodel validation is performed after any new specification has been loaded (after the initial bootstrapping).

This does not apply if the introspector is configured to perform full introspection up-front AND when the metamodel is locked after initial bootstrapping (because in that case the lock check will simply prevent any new specs from being loaded). But it will apply otherwise.

In particular, this setting can still apply even if the mode is set to full, because that in itself does not preclude some code from attempting to load some previously unknown type. For example, a fixture script could attempt to invoke an action on some new type using the WrapperFactory - this will cause introspection of that new type to be performed.