You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/05/20 07:04:28 UTC

[07/31] isis git commit: ISIS-1407: SpecificationLoader is now a concrete class (rolled ObjectReflector up into it).

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 2c3f87c..3517aa0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -53,7 +53,7 @@ import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader.Reader
 import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader2;
 import org.apache.isis.core.metamodel.methodutils.MethodScope;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java
index c9802c8..e75c2b3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java
@@ -18,7 +18,7 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import java.util.List;
 import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
 
 public class FacetedMethodsBuilderContext {

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index d3f31ef..0dd0d1a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -58,7 +58,7 @@ import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
 import org.apache.isis.core.metamodel.spec.DomainModelException;
 import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index dd9ccd2..3306a6e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -58,7 +58,7 @@ import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.services.command.CommandDtoServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 68eaf9b..0ca7200 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -90,7 +90,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.ObjectSpecificationDependencies;
 import org.apache.isis.core.metamodel.spec.ObjectSpecificationException;
 import org.apache.isis.core.metamodel.spec.Persistability;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
index 8c6d1bf..633d354 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
@@ -37,7 +37,7 @@ import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index 3ccf7c8..5d0ec7b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -42,7 +42,7 @@ import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.services.publishing.PublishingServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
 
 public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault implements MixedInMember2 {

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidator.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidator.java
index 17b151f..42349d9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidator.java
@@ -20,7 +20,7 @@
 package org.apache.isis.core.metamodel.specloader.validator;
 
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoaderAware;
 
 public interface MetaModelValidator extends SpecificationLoaderAware, ApplicationScopedComponent {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorAbstract.java
----------------------------------------------------------------------
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 85224d5..1f194db 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
@@ -23,7 +23,7 @@ import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 public abstract class MetaModelValidatorAbstract implements MetaModelValidator {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java
index 053b4d8..99ee00c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java
@@ -19,12 +19,11 @@
 
 package org.apache.isis.core.metamodel.specloader.validator;
 
-import java.util.Collections;
 import java.util.List;
 
 import com.google.common.collect.Lists;
 
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 public class MetaModelValidatorComposite extends MetaModelValidatorAbstract {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
index e1ed792..fefcecb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
@@ -24,14 +24,14 @@ import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 
@@ -62,7 +62,7 @@ public final class JavaReflectorHelper  {
             programmingModel.refineMetaModelValidator(metaModelValidator, configuration);
         }
 
-        return new ObjectReflectorDefault(
+        return new SpecificationLoader(
                 deploymentCategory, configuration,
                 programmingModel, metaModelValidator, layoutMetadataReaders, servicesInjector);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java
index a6018de..60c9093 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java
@@ -19,10 +19,173 @@
 
 package org.apache.isis.progmodels.dflt;
 
+import java.util.Collection;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.core.commons.components.InstallerAbstract;
+import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.core.commons.factory.InstanceUtil;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
+import org.apache.isis.core.metamodel.specloader.ReflectorConstants;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+
+public class JavaReflectorInstaller extends InstallerAbstract implements SpecificationLoaderInstaller {
+
+    //region > constants
+
+    private static final Logger LOG = LoggerFactory.getLogger(JavaReflectorInstaller.class);
+
+    public static final String PROPERTY_BASE = ConfigurationConstants.ROOT;
+
+    //endregion
+
+    //region > constructor
 
-public class JavaReflectorInstaller extends JavaReflectorInstallerNoDecorators {
     public JavaReflectorInstaller(final IsisConfigurationDefault isisConfiguration) {
-        super(isisConfiguration);
+        this("java", isisConfiguration);
+    }
+
+    public JavaReflectorInstaller(final String name, final IsisConfigurationDefault isisConfiguration) {
+        super(SpecificationLoaderInstaller.TYPE, name, isisConfiguration);
+
+    }
+    //endregion
+
+    //region > createReflector, doCreateReflector
+
+    @Override
+    public SpecificationLoader createReflector(
+            final DeploymentCategory deploymentCategory,
+            final Collection<MetaModelRefiner> metaModelRefiners,
+            final ServicesInjectorSpi servicesInjector) {
+
+        final ProgrammingModel programmingModel = createProgrammingModel(getConfiguration());
+        final MetaModelValidator mmv = createMetaModelValidator(getConfiguration());
+        final List<LayoutMetadataReader> layoutMetadataReaders = createLayoutMetadataReaders(getConfiguration());
+
+        return JavaReflectorHelper.createObjectReflector(deploymentCategory, getConfiguration(), programmingModel, metaModelRefiners,
+                layoutMetadataReaders, mmv,
+                servicesInjector);
+    }
+
+    //endregion
+
+    //region > createProgrammingModel
+
+    /**
+     * Hook method to allow subclasses to specify a different implementations
+     * (that is, sets of {@link ProgrammingModel} .
+     *
+     * <p>
+     * By default, looks up implementation from provided
+     * {@link IsisConfiguration} using
+     * {@link ReflectorConstants#PROGRAMMING_MODEL_FACETS_CLASS_NAME}. If not
+     * specified, then defaults to
+     * {@link ReflectorConstants#PROGRAMMING_MODEL_FACETS_CLASS_NAME_DEFAULT}.
+     *
+     * <p>
+     * The list of facets can be adjusted using
+     * {@link ReflectorConstants#FACET_FACTORY_INCLUDE_CLASS_NAME_LIST} to
+     * specify additional {@link FacetFactory factories} to include, and
+     * {@link ReflectorConstants#FACET_FACTORY_EXCLUDE_CLASS_NAME_LIST} to
+     * exclude.
+     */
+    protected ProgrammingModel createProgrammingModel(final IsisConfiguration configuration) {
+        final ProgrammingModel programmingModel = lookupAndCreateProgrammingModelFacets(configuration);
+        includeAndExcludeFacetFactories(configuration, programmingModel);
+        return programmingModel;
+    }
+
+    private ProgrammingModel lookupAndCreateProgrammingModelFacets(final IsisConfiguration configuration) {
+        final String progModelFacetsClassName = configuration.getString(ReflectorConstants.PROGRAMMING_MODEL_FACETS_CLASS_NAME, ReflectorConstants.PROGRAMMING_MODEL_FACETS_CLASS_NAME_DEFAULT);
+        final ProgrammingModel programmingModel = InstanceUtil.createInstance(progModelFacetsClassName, ProgrammingModel.class);
+        return programmingModel;
     }
+
+    private void includeAndExcludeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
+        includeFacetFactories(configuration, programmingModel);
+        excludeFacetFactories(configuration, programmingModel);
+    }
+
+    //endregion
+
+    //region > includeFacetFactories, excludeFacetFactories
+
+    /**
+     * Factored out of {@link #createProgrammingModel(IsisConfiguration)}
+     * so that subclasses that choose to override can still support
+     * customization of their {@link ProgrammingModel} in a similar way.
+     */
+    protected void includeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
+        ProgrammingModel.Util.includeFacetFactories(configuration, programmingModel);
+    }
+
+    /**
+     * Factored out of {@link #createProgrammingModel(IsisConfiguration)}
+     * so that subclasses that choose to override can still support
+     * customization of their {@link ProgrammingModel} in a similar way.
+     */
+    protected void excludeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
+        ProgrammingModel.Util.excludeFacetFactories(configuration, programmingModel);
+    }
+
+    //endregion
+
+    //region > createMetaModelValidator
+
+    /**
+     * Hook method to allow subclasses to specify a different implementation of
+     * {@link MetaModelValidator}.
+     *
+     * <p>
+     * By default, looks up implementation from provided
+     * {@link IsisConfiguration} using
+     * {@link ReflectorConstants#META_MODEL_VALIDATOR_CLASS_NAME}.
+     */
+    protected MetaModelValidator createMetaModelValidator(final IsisConfiguration configuration) {
+        final String metaModelValidatorClassName = configuration.getString(ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME, ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME_DEFAULT);
+        return InstanceUtil.createInstance(metaModelValidatorClassName, MetaModelValidator.class);
+    }
+
+    //endregion
+
+    //region > createLayoutMetadataReaders
+
+    protected List<LayoutMetadataReader> createLayoutMetadataReaders(final IsisConfiguration configuration) {
+        final List<LayoutMetadataReader> layoutMetadataReaders = Lists.newArrayList();
+        final String[] layoutMetadataReaderClassNames = configuration.getList(ReflectorConstants.LAYOUT_METADATA_READER_LIST, ReflectorConstants.LAYOUT_METADATA_READER_LIST_DEFAULT);
+        if (layoutMetadataReaderClassNames != null) {
+            for (final String layoutMetadataReaderClassName : layoutMetadataReaderClassNames) {
+                final LayoutMetadataReader layoutMetadataReader = InstanceUtil.createInstance(layoutMetadataReaderClassName, LayoutMetadataReader.class);
+                layoutMetadataReaders.add(layoutMetadataReader);
+            }
+        }
+        return layoutMetadataReaders;
+    }
+
+    //endregion
+
+    //region > getTypes
+
+    @Override
+    public List<Class<?>> getTypes() {
+        return listOf(SpecificationLoader.class);
+    }
+
+    //endregion
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
deleted file mode 100644
index e4d3379..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.progmodels.dflt;
-
-import java.util.Collection;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.components.InstallerAbstract;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.commons.factory.InstanceUtil;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
-import org.apache.isis.core.metamodel.facets.FacetFactory;
-import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
-import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.ObjectReflectorInstaller;
-import org.apache.isis.core.metamodel.specloader.ReflectorConstants;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
-
-public class JavaReflectorInstallerNoDecorators extends InstallerAbstract implements ObjectReflectorInstaller {
-
-    //region > constants
-
-    private static final Logger LOG = LoggerFactory.getLogger(JavaReflectorInstallerNoDecorators.class);
-
-    public static final String PROPERTY_BASE = ConfigurationConstants.ROOT;
-
-    //endregion
-
-    //region > constructor
-
-    public JavaReflectorInstallerNoDecorators(final IsisConfigurationDefault isisConfiguration) {
-        this("java", isisConfiguration);
-    }
-
-    public JavaReflectorInstallerNoDecorators(final String name, final IsisConfigurationDefault isisConfiguration) {
-        super(ObjectReflectorInstaller.TYPE, name, isisConfiguration);
-        
-    }
-    //endregion
-
-    //region > createReflector, doCreateReflector
-
-    @Override
-    public SpecificationLoader createReflector(
-            final DeploymentCategory deploymentCategory,
-            final Collection<MetaModelRefiner> metaModelRefiners,
-            final ServicesInjectorSpi servicesInjector) {
-
-        final ProgrammingModel programmingModel = createProgrammingModel(getConfiguration());
-        final MetaModelValidator mmv = createMetaModelValidator(getConfiguration());
-        final List<LayoutMetadataReader> layoutMetadataReaders = createLayoutMetadataReaders(getConfiguration());
-
-        return JavaReflectorHelper.createObjectReflector(deploymentCategory, getConfiguration(), programmingModel, metaModelRefiners,
-                layoutMetadataReaders, mmv,
-                servicesInjector);
-    }
-
-    //endregion
-
-    //region > createProgrammingModel
-
-    /**
-     * Hook method to allow subclasses to specify a different implementations
-     * (that is, sets of {@link ProgrammingModel} .
-     * 
-     * <p>
-     * By default, looks up implementation from provided
-     * {@link IsisConfiguration} using
-     * {@link ReflectorConstants#PROGRAMMING_MODEL_FACETS_CLASS_NAME}. If not
-     * specified, then defaults to
-     * {@link ReflectorConstants#PROGRAMMING_MODEL_FACETS_CLASS_NAME_DEFAULT}.
-     * 
-     * <p>
-     * The list of facets can be adjusted using
-     * {@link ReflectorConstants#FACET_FACTORY_INCLUDE_CLASS_NAME_LIST} to
-     * specify additional {@link FacetFactory factories} to include, and
-     * {@link ReflectorConstants#FACET_FACTORY_EXCLUDE_CLASS_NAME_LIST} to
-     * exclude.
-     */
-    protected ProgrammingModel createProgrammingModel(final IsisConfiguration configuration) {
-        final ProgrammingModel programmingModel = lookupAndCreateProgrammingModelFacets(configuration);
-        includeAndExcludeFacetFactories(configuration, programmingModel);
-        return programmingModel;
-    }
-
-    private ProgrammingModel lookupAndCreateProgrammingModelFacets(final IsisConfiguration configuration) {
-        final String progModelFacetsClassName = configuration.getString(ReflectorConstants.PROGRAMMING_MODEL_FACETS_CLASS_NAME, ReflectorConstants.PROGRAMMING_MODEL_FACETS_CLASS_NAME_DEFAULT);
-        final ProgrammingModel programmingModel = InstanceUtil.createInstance(progModelFacetsClassName, ProgrammingModel.class);
-        return programmingModel;
-    }
-
-    private void includeAndExcludeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
-        includeFacetFactories(configuration, programmingModel);
-        excludeFacetFactories(configuration, programmingModel);
-    }
-
-    //endregion
-
-    //region > includeFacetFactories, excludeFacetFactories
-
-    /**
-     * Factored out of {@link #createProgrammingModel(IsisConfiguration)}
-     * so that subclasses that choose to override can still support
-     * customization of their {@link ProgrammingModel} in a similar way.
-     */
-    protected void includeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
-        ProgrammingModel.Util.includeFacetFactories(configuration, programmingModel);
-    }
-
-    /**
-     * Factored out of {@link #createProgrammingModel(IsisConfiguration)}
-     * so that subclasses that choose to override can still support
-     * customization of their {@link ProgrammingModel} in a similar way.
-     */
-    protected void excludeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
-        ProgrammingModel.Util.excludeFacetFactories(configuration, programmingModel);
-    }
-
-    //endregion
-
-    //region > createMetaModelValidator
-
-    /**
-     * Hook method to allow subclasses to specify a different implementation of
-     * {@link MetaModelValidator}.
-     * 
-     * <p>
-     * By default, looks up implementation from provided
-     * {@link IsisConfiguration} using
-     * {@link ReflectorConstants#META_MODEL_VALIDATOR_CLASS_NAME}.
-     */
-    protected MetaModelValidator createMetaModelValidator(final IsisConfiguration configuration) {
-        final String metaModelValidatorClassName = configuration.getString(ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME, ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME_DEFAULT);
-        return InstanceUtil.createInstance(metaModelValidatorClassName, MetaModelValidator.class);
-    }
-
-    //endregion
-
-    //region > createLayoutMetadataReaders
-
-    protected List<LayoutMetadataReader> createLayoutMetadataReaders(final IsisConfiguration configuration) {
-        final List<LayoutMetadataReader> layoutMetadataReaders = Lists.newArrayList();
-        final String[] layoutMetadataReaderClassNames = configuration.getList(ReflectorConstants.LAYOUT_METADATA_READER_LIST, ReflectorConstants.LAYOUT_METADATA_READER_LIST_DEFAULT);
-        if (layoutMetadataReaderClassNames != null) {
-            for (final String layoutMetadataReaderClassName : layoutMetadataReaderClassNames) {
-                final LayoutMetadataReader layoutMetadataReader = InstanceUtil.createInstance(layoutMetadataReaderClassName, LayoutMetadataReader.class);
-                layoutMetadataReaders.add(layoutMetadataReader);
-            }
-        }
-        return layoutMetadataReaders;
-    }
-
-    //endregion
-
-    //region > getTypes
-
-    @Override
-    public List<Class<?>> getTypes() {
-        return listOf(SpecificationLoader.class);
-    }
-
-    //endregion
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
index 75feaff..dd73306 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
@@ -43,7 +43,7 @@ import org.apache.isis.core.metamodel.facets.object.domainobject.autocomplete.Au
 import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
index 5375a62..a1514ef 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
@@ -39,7 +39,7 @@ import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
 import junit.framework.TestCase;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index 5b44f54..86acf64 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -42,7 +42,7 @@ import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFa
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
deleted file mode 100644
index 40c7332..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.specloader;
-
-import java.util.Collections;
-
-import com.google.common.collect.Lists;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import org.apache.isis.applib.services.grid.GridService;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
-import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
-import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
-import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
-import org.apache.isis.core.metamodel.layoutmetadata.json.LayoutMetadataReaderFromJson;
-import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
-import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
-
-public abstract class ObjectReflectorDefaultTestAbstract {
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_ONLY);
-
-    @Rule
-    public ExpectedException expectedException = ExpectedException.none();
-
-    private RuntimeContext runtimeContext;
-
-    @Mock
-    private IsisConfiguration mockConfiguration;
-    @Mock
-    private DeploymentCategoryProvider mockDeploymentCategoryProvider;
-    @Mock
-    private AuthenticationSessionProvider mockAuthenticationSessionProvider;
-    @Mock
-    private ServicesInjectorSpi mockServicesInjector;
-    @Mock
-    private GridService mockGridService;
-
-    // is loaded by subclasses
-    protected ObjectSpecification specification;
-
-    
-    @Before
-    public void setUp() throws Exception {
-
-        context.checking(new Expectations() {{
-            ignoring(mockConfiguration);
-
-            allowing(mockServicesInjector).lookupService(ConfigurationServiceInternal.class);
-            will(returnValue(new IsisConfigurationDefault(null)));
-
-            allowing(mockServicesInjector).lookupService(DeploymentCategoryProvider.class);
-            will(returnValue(mockDeploymentCategoryProvider));
-
-            allowing(mockDeploymentCategoryProvider).getDeploymentCategory();
-            will(returnValue(DeploymentCategory.PRODUCTION));
-
-            allowing(mockServicesInjector).lookupService(AuthenticationSessionProvider.class);
-            will(returnValue(mockAuthenticationSessionProvider));
-
-            allowing(mockServicesInjector).lookupService(GridService.class);
-            will(returnValue(mockGridService));
-
-            ignoring(mockGridService).existsFor(with(any(Class.class)));
-
-            ignoring(mockServicesInjector).getRegisteredServices();
-
-            ignoring(mockServicesInjector).isRegisteredService(with(any(Class.class)));
-        }});
-
-        final ObjectReflectorDefault reflector =
-                new ObjectReflectorDefault(DeploymentCategory.PRODUCTION,
-                        mockConfiguration,
-                        new ProgrammingModelFacetsJava5(),
-                        new MetaModelValidatorDefault(),
-                        Lists.<LayoutMetadataReader>newArrayList(
-                                new LayoutMetadataReaderFromJson()), mockServicesInjector);
-        runtimeContext =
-                new RuntimeContextNoRuntime(
-                        new ServicesInjectorDefault(Collections.emptyList()), reflector);
-        reflector.init(runtimeContext);
-        
-        specification = loadSpecification(reflector);
-    }
-
-    protected abstract ObjectSpecification loadSpecification(ObjectReflectorDefault reflector);
-
-    @Test
-    public void testLayoutMetadataReaderEmptyList() {
-        expectedException.expect(IllegalArgumentException.class);
-        expectedException.expectMessage("illegal argument, expected: is not an empty collection");
-
-        new ObjectReflectorDefault(DeploymentCategory.PRODUCTION ,
-                mockConfiguration,
-                new ProgrammingModelFacetsJava5(),
-                new MetaModelValidatorDefault(),
-                Lists.<LayoutMetadataReader>newArrayList(),
-                mockServicesInjector);
-    }
-
-    @Test
-    public void testLayoutMetadataReaderNull() {
-        expectedException.expect(IllegalArgumentException.class);
-        expectedException.expectMessage("illegal argument, expected: is not null");
-
-        new ObjectReflectorDefault(DeploymentCategory.PRODUCTION,
-                mockConfiguration,
-                new ProgrammingModelFacetsJava5(),
-                new MetaModelValidatorDefault(),
-                null,
-                mockServicesInjector);
-    }
-
-    @Test
-    public void testCollectionFacet() throws Exception {
-        final Facet facet = specification.getFacet(CollectionFacet.class);
-        Assert.assertNull(facet);
-    }
-
-    @Test
-    public void testTypeOfFacet() throws Exception {
-        final TypeOfFacet facet = specification.getFacet(TypeOfFacet.class);
-        Assert.assertNull(facet);
-    }
-
-    @Test
-    public void testNamedFaced() throws Exception {
-        final Facet facet = specification.getFacet(NamedFacet.class);
-        Assert.assertNotNull(facet);
-    }
-
-    @Test
-    public void testPluralFaced() throws Exception {
-        final Facet facet = specification.getFacet(PluralFacet.class);
-        Assert.assertNotNull(facet);
-    }
-
-    @Test
-    public void testDescriptionFacet() throws Exception {
-        final Facet facet = specification.getFacet(DescribedAsFacet.class);
-        Assert.assertNotNull(facet);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_array.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_array.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_array.java
deleted file mode 100644
index 86639ea..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_array.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.specloader;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public class ObjectReflectorDefaultTest_array extends ObjectReflectorDefaultTestAbstract {
-
-    @Override
-    protected ObjectSpecification loadSpecification(final ObjectReflectorDefault reflector) {
-        return reflector.loadSpecification(ReflectorTestPojo[].class);
-    }
-
-    @Test
-    public void testType() throws Exception {
-        Assert.assertTrue(specification.isParentedOrFreeCollection());
-    }
-
-    @Test
-    public void testName() throws Exception {
-        Assert.assertEquals(ReflectorTestPojo[].class.getName(), specification.getFullIdentifier());
-    }
-
-    @Test
-    @Override
-    public void testCollectionFacet() throws Exception {
-        final Facet facet = specification.getFacet(CollectionFacet.class);
-        Assert.assertNotNull(facet);
-    }
-
-    @Test
-    @Override
-    public void testTypeOfFacet() throws Exception {
-        final TypeOfFacet facet = specification.getFacet(TypeOfFacet.class);
-        Assert.assertNotNull(facet);
-        Assert.assertEquals(ReflectorTestPojo.class, facet.value());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_collection.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_collection.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_collection.java
deleted file mode 100644
index a673884..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_collection.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.specloader;
-
-import java.util.Vector;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public class ObjectReflectorDefaultTest_collection extends ObjectReflectorDefaultTestAbstract {
-
-    @Override
-    protected ObjectSpecification loadSpecification(final ObjectReflectorDefault reflector) {
-        return reflector.loadSpecification(Vector.class);
-    }
-
-    @Test
-    public void testType() throws Exception {
-        Assert.assertTrue(specification.isParentedOrFreeCollection());
-    }
-
-    @Test
-    public void testName() throws Exception {
-        Assert.assertEquals(Vector.class.getName(), specification.getFullIdentifier());
-    }
-
-    @Test
-    @Override
-    public void testCollectionFacet() throws Exception {
-        final Facet facet = specification.getFacet(CollectionFacet.class);
-        Assert.assertNotNull(facet);
-    }
-
-    @Test
-    @Override
-    public void testTypeOfFacet() throws Exception {
-        final TypeOfFacet facet = specification.getFacet(TypeOfFacet.class);
-        Assert.assertNotNull(facet);
-        Assert.assertEquals(Object.class, facet.value());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_object.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_object.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_object.java
index 30f354f..8f5d2d5 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_object.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_object.java
@@ -33,14 +33,14 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.facets.object.objectvalidprops.ObjectValidPropertiesFacet;
 
-public class ObjectReflectorDefaultTest_object extends ObjectReflectorDefaultTestAbstract {
+public class ObjectReflectorDefaultTest_object extends SpecificationLoaderTestAbstract {
 
     public static class TestDomainObject {
 
     }
 
     @Override
-    protected ObjectSpecification loadSpecification(final ObjectReflectorDefault reflector) {
+    protected ObjectSpecification loadSpecification(final SpecificationLoader reflector) {
         return reflector.loadSpecification(TestDomainObject.class);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_value.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_value.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_value.java
deleted file mode 100644
index cb7c488..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_value.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.specloader;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public class ObjectReflectorDefaultTest_value extends ObjectReflectorDefaultTestAbstract {
-
-    @Override
-    protected ObjectSpecification loadSpecification(final ObjectReflectorDefault reflector) {
-        return reflector.loadSpecification(String.class);
-    }
-
-    @Test
-    public void testType() throws Exception {
-        Assert.assertTrue(specification.isNotCollection());
-    }
-
-    @Test
-    public void testName() throws Exception {
-        Assert.assertEquals(String.class.getName(), specification.getFullIdentifier());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
new file mode 100644
index 0000000..26faff6
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
@@ -0,0 +1,185 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.specloader;
+
+import java.util.Collections;
+
+import com.google.common.collect.Lists;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import org.apache.isis.applib.services.grid.GridService;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
+import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
+import org.apache.isis.core.metamodel.layoutmetadata.json.LayoutMetadataReaderFromJson;
+import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
+import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
+import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
+import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
+
+public abstract class SpecificationLoaderTestAbstract {
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_ONLY);
+
+    @Rule
+    public ExpectedException expectedException = ExpectedException.none();
+
+    private RuntimeContext runtimeContext;
+
+    @Mock
+    private IsisConfiguration mockConfiguration;
+    @Mock
+    private DeploymentCategoryProvider mockDeploymentCategoryProvider;
+    @Mock
+    private AuthenticationSessionProvider mockAuthenticationSessionProvider;
+    @Mock
+    private ServicesInjectorSpi mockServicesInjector;
+    @Mock
+    private GridService mockGridService;
+
+    // is loaded by subclasses
+    protected ObjectSpecification specification;
+
+    
+    @Before
+    public void setUp() throws Exception {
+
+        context.checking(new Expectations() {{
+            ignoring(mockConfiguration);
+
+            allowing(mockServicesInjector).lookupService(ConfigurationServiceInternal.class);
+            will(returnValue(new IsisConfigurationDefault(null)));
+
+            allowing(mockServicesInjector).lookupService(DeploymentCategoryProvider.class);
+            will(returnValue(mockDeploymentCategoryProvider));
+
+            allowing(mockDeploymentCategoryProvider).getDeploymentCategory();
+            will(returnValue(DeploymentCategory.PRODUCTION));
+
+            allowing(mockServicesInjector).lookupService(AuthenticationSessionProvider.class);
+            will(returnValue(mockAuthenticationSessionProvider));
+
+            allowing(mockServicesInjector).lookupService(GridService.class);
+            will(returnValue(mockGridService));
+
+            ignoring(mockGridService).existsFor(with(any(Class.class)));
+
+            ignoring(mockServicesInjector).getRegisteredServices();
+
+            ignoring(mockServicesInjector).isRegisteredService(with(any(Class.class)));
+        }});
+
+        final SpecificationLoader reflector =
+                new SpecificationLoader(DeploymentCategory.PRODUCTION,
+                        mockConfiguration,
+                        new ProgrammingModelFacetsJava5(),
+                        new MetaModelValidatorDefault(),
+                        Lists.<LayoutMetadataReader>newArrayList(
+                                new LayoutMetadataReaderFromJson()), mockServicesInjector);
+        runtimeContext =
+                new RuntimeContextNoRuntime(
+                        new ServicesInjectorDefault(Collections.emptyList()), reflector);
+        reflector.init(runtimeContext);
+        
+        specification = loadSpecification(reflector);
+    }
+
+    protected abstract ObjectSpecification loadSpecification(SpecificationLoader reflector);
+
+    @Test
+    public void testLayoutMetadataReaderEmptyList() {
+        expectedException.expect(IllegalArgumentException.class);
+        expectedException.expectMessage("illegal argument, expected: is not an empty collection");
+
+        new SpecificationLoader(DeploymentCategory.PRODUCTION ,
+                mockConfiguration,
+                new ProgrammingModelFacetsJava5(),
+                new MetaModelValidatorDefault(),
+                Lists.<LayoutMetadataReader>newArrayList(),
+                mockServicesInjector);
+    }
+
+    @Test
+    public void testLayoutMetadataReaderNull() {
+        expectedException.expect(IllegalArgumentException.class);
+        expectedException.expectMessage("illegal argument, expected: is not null");
+
+        new SpecificationLoader(DeploymentCategory.PRODUCTION,
+                mockConfiguration,
+                new ProgrammingModelFacetsJava5(),
+                new MetaModelValidatorDefault(),
+                null,
+                mockServicesInjector);
+    }
+
+    @Test
+    public void testCollectionFacet() throws Exception {
+        final Facet facet = specification.getFacet(CollectionFacet.class);
+        Assert.assertNull(facet);
+    }
+
+    @Test
+    public void testTypeOfFacet() throws Exception {
+        final TypeOfFacet facet = specification.getFacet(TypeOfFacet.class);
+        Assert.assertNull(facet);
+    }
+
+    @Test
+    public void testNamedFaced() throws Exception {
+        final Facet facet = specification.getFacet(NamedFacet.class);
+        Assert.assertNotNull(facet);
+    }
+
+    @Test
+    public void testPluralFaced() throws Exception {
+        final Facet facet = specification.getFacet(PluralFacet.class);
+        Assert.assertNotNull(facet);
+    }
+
+    @Test
+    public void testDescriptionFacet() throws Exception {
+        final Facet facet = specification.getFacet(DescribedAsFacet.class);
+        Assert.assertNotNull(facet);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_array.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_array.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_array.java
new file mode 100644
index 0000000..25065c0
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_array.java
@@ -0,0 +1,62 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.specloader;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class SpecificationLoaderTest_array extends SpecificationLoaderTestAbstract {
+
+    @Override
+    protected ObjectSpecification loadSpecification(final SpecificationLoader reflector) {
+        return reflector.loadSpecification(ReflectorTestPojo[].class);
+    }
+
+    @Test
+    public void testType() throws Exception {
+        Assert.assertTrue(specification.isParentedOrFreeCollection());
+    }
+
+    @Test
+    public void testName() throws Exception {
+        Assert.assertEquals(ReflectorTestPojo[].class.getName(), specification.getFullIdentifier());
+    }
+
+    @Test
+    @Override
+    public void testCollectionFacet() throws Exception {
+        final Facet facet = specification.getFacet(CollectionFacet.class);
+        Assert.assertNotNull(facet);
+    }
+
+    @Test
+    @Override
+    public void testTypeOfFacet() throws Exception {
+        final TypeOfFacet facet = specification.getFacet(TypeOfFacet.class);
+        Assert.assertNotNull(facet);
+        Assert.assertEquals(ReflectorTestPojo.class, facet.value());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_collection.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_collection.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_collection.java
new file mode 100644
index 0000000..6a6df8b
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_collection.java
@@ -0,0 +1,64 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.specloader;
+
+import java.util.Vector;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class SpecificationLoaderTest_collection extends SpecificationLoaderTestAbstract {
+
+    @Override
+    protected ObjectSpecification loadSpecification(final SpecificationLoader reflector) {
+        return reflector.loadSpecification(Vector.class);
+    }
+
+    @Test
+    public void testType() throws Exception {
+        Assert.assertTrue(specification.isParentedOrFreeCollection());
+    }
+
+    @Test
+    public void testName() throws Exception {
+        Assert.assertEquals(Vector.class.getName(), specification.getFullIdentifier());
+    }
+
+    @Test
+    @Override
+    public void testCollectionFacet() throws Exception {
+        final Facet facet = specification.getFacet(CollectionFacet.class);
+        Assert.assertNotNull(facet);
+    }
+
+    @Test
+    @Override
+    public void testTypeOfFacet() throws Exception {
+        final TypeOfFacet facet = specification.getFacet(TypeOfFacet.class);
+        Assert.assertNotNull(facet);
+        Assert.assertEquals(Object.class, facet.value());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_value.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_value.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_value.java
new file mode 100644
index 0000000..f942a0a
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_value.java
@@ -0,0 +1,44 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.specloader;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class SpecificationLoaderTest_value extends SpecificationLoaderTestAbstract {
+
+    @Override
+    protected ObjectSpecification loadSpecification(final SpecificationLoader reflector) {
+        return reflector.loadSpecification(String.class);
+    }
+
+    @Test
+    public void testType() throws Exception {
+        Assert.assertTrue(specification.isNotCollection());
+    }
+
+    @Test
+    public void testName() throws Exception {
+        Assert.assertEquals(String.class.getName(), specification.getFullIdentifier());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
index 9c124d5..b7d4390 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
@@ -42,7 +42,7 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetU
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.ObjectSpecificationException;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
index eba4cf5..6d27751 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
@@ -43,7 +43,7 @@ import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.commons.factory.UnavailableClassException;
 import org.apache.isis.core.commons.lang.ObjectExtensions;
 import org.apache.isis.core.commons.lang.StringExtensions;
-import org.apache.isis.core.metamodel.specloader.ObjectReflectorInstaller;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
 import org.apache.isis.core.runtime.IsisInstallerRegistry;
 import org.apache.isis.core.runtime.about.AboutIsis;
 import org.apache.isis.core.runtime.about.ComponentDetails;
@@ -152,8 +152,8 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
 
 
     //region > metamodel
-    public ObjectReflectorInstaller reflectorInstaller(final String requested) {
-        return getInstaller(ObjectReflectorInstaller.class, requested, SystemConstants.REFLECTOR_KEY, SystemConstants.REFLECTOR_DEFAULT);
+    public SpecificationLoaderInstaller reflectorInstaller(final String requested) {
+        return getInstaller(SpecificationLoaderInstaller.class, requested, SystemConstants.REFLECTOR_KEY, SystemConstants.REFLECTOR_DEFAULT);
     }
     //endregion
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
index f8599f7..3ebbb98 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
@@ -41,7 +41,7 @@ import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 9b2db6a..89ab049 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -41,7 +41,7 @@ import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.InstanceAbstract;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.Specification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
index acbbe6f..58d0f89 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index f6df1e4..ced961a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -39,7 +39,7 @@ import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAb
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAbstract;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.transactions.TransactionState;
 import org.apache.isis.core.metamodel.transactions.TransactionStateProvider;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryAbstract.java
index f46eb2d..cbdd81b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryAbstract.java
@@ -25,7 +25,7 @@ import org.apache.isis.core.commons.encoding.DataInputExtended;
 import org.apache.isis.core.commons.encoding.DataOutputExtended;
 import org.apache.isis.core.commons.encoding.Encodable;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceQuery;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/Constants.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/Constants.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/Constants.java
index 54d5a48..21f37e4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/Constants.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/Constants.java
@@ -19,8 +19,7 @@
 
 package org.apache.isis.core.runtime.runner;
 
-import org.apache.isis.core.metamodel.specloader.ObjectReflectorInstaller;
-import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
 import org.apache.isis.core.runtime.logging.LoggingConstants;
 import org.apache.isis.core.runtime.system.DeploymentType;
 
@@ -36,7 +35,7 @@ public final class Constants {
     public static final String TYPE_SERVER = DeploymentType.SERVER.friendlyName();
 
     public static final String REFLECTOR_OPT = "l";
-    public static final String REFLECTOR_LONG_OPT = ObjectReflectorInstaller.TYPE;
+    public static final String REFLECTOR_LONG_OPT = SpecificationLoaderInstaller.TYPE;
 
     public static final String CONFIGURATION_OPT = "c";
     public static final String CONFIGURATION_LONG_OPT = "config";

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java
index 684874b..4ac20dc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java
@@ -25,7 +25,7 @@ import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
 import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
-import org.apache.isis.core.metamodel.specloader.ObjectReflectorInstaller;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
 import org.apache.isis.core.runtime.installerregistry.InstallerRepository;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
@@ -51,7 +51,7 @@ public class OptionHandlerReflector extends OptionHandlerAbstract {
     @Override
     @SuppressWarnings("static-access")
     public void addOption(final Options options) {
-        final Object[] reflectors = installerRepository.getInstallers(ObjectReflectorInstaller.class);
+        final Object[] reflectors = installerRepository.getInstallers(SpecificationLoaderInstaller.class);
         final Option option = OptionBuilder.withArgName("name|class name").hasArg().withLongOpt(REFLECTOR_LONG_OPT).withDescription("reflector to use (ignored if type is prototype or client): " + availableInstallers(reflectors) + "; or class name").create(REFLECTOR_OPT);
         options.addOption(option);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
index c93e844..74929e5 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
@@ -43,7 +43,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
 import org.apache.isis.core.metamodel.services.command.CommandDtoServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
index 3022223..4e7b16b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
@@ -37,7 +37,7 @@ import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
 import org.apache.isis.core.metamodel.services.command.CommandDtoServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java
index fa7b036..324dd6c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java
@@ -20,7 +20,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.session.IsisSession;

http://git-wip-us.apache.org/repos/asf/isis/blob/04bf1f22/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
index d65e23d..3f82837 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
@@ -44,7 +44,7 @@ import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInterna
 import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.ServiceInitializer;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;