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 13:33:58 UTC

[23/51] [abbrv] isis git commit: ISIS-1408: simpifying InstallerLookup and IsisComponentProvider.

ISIS-1408: simpifying InstallerLookup and IsisComponentProvider.

Right now is slightly broken... not picking up the app manifest.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/b6dc190b
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/b6dc190b
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/b6dc190b

Branch: refs/heads/master
Commit: b6dc190b8a177e869f9c6e3bef3703f0429d4586
Parents: 04bf1f2
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu May 19 20:50:17 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu May 19 20:54:34 2016 +0100

----------------------------------------------------------------------
 .../guides/_rgcfg_specifying-components.adoc    |   2 +
 .../integtestsupport/IsisSystemForTest.java     |  40 +--
 .../configbuilder/IsisConfigurationBuilder.java |  10 +-
 .../runtime/fixtures/FixturesInstaller.java     |   3 +-
 .../installerregistry/InstallerLookup.java      |  56 +---
 .../runner/opts/OptionHandlerReflector.java     |  71 -----
 .../isis/core/runtime/system/IsisSystem.java    |  13 +-
 .../core/runtime/system/SystemConstants.java    |  59 +---
 .../AuthenticatorBypass.java                    |  40 +++
 .../IsisComponentProvider.java                  | 262 +++++++++++++++++-
 .../IsisComponentProviderAbstract.java          | 269 -------------------
 .../IsisComponentProviderDefault2.java          | 164 ++---------
 .../IsisComponentProviderUsingInstallers.java   | 121 ++-------
 .../core/runtime/installer-registry.properties  |  12 -
 14 files changed, 382 insertions(+), 740 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc
index 3205a5b..f5bc353 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc
@@ -82,6 +82,8 @@ The mechanism to discover and load domain services:
 
 This property is IGNORED if the `isis.appManifest` configuration property is specified, or if an xref:rgcms.adoc#_rgcms_classes_super_AppManifest[`AppManifest`] is provided programmatically.
 
+This property is also IGNORED completely in 1.13.0+; the `configuration-and-annotation` implementation is always used.
+
 
 |===
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index 82bf0d5..c4ac9fd 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -155,12 +155,12 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
 
 
     // these fields 'xxxForComponentProvider' are used to initialize the IsisComponentProvider, but shouldn't be used thereafter.
-    private final AppManifest appManifestForComponentProvider;
-    private final IsisConfiguration configurationForComponentProvider;
-    private final List<Object> servicesForComponentProvider;
-    private final List<InstallableFixture> fixturesForComponentProvider;
-    private final MetaModelValidator metaModelValidatorForComponentProvider;
-    private final ProgrammingModel programmingModelForComponentProvider;
+    private final AppManifest appManifestIfAny;
+    private final IsisConfiguration configurationOverride;
+    private final List<Object> servicesIfAny;
+    private final List<InstallableFixture> fixturesIfAny;
+    private final MetaModelValidator metaModelValidatorOverride;
+    private final ProgrammingModel programmingModelOverride;
 
     // populated at #setupSystem
     private IsisComponentProvider componentProvider;
@@ -335,15 +335,15 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
             final List<InstallableFixture> fixturesIfAny,
             final ProgrammingModel programmingModelOverride,
             final MetaModelValidator metaModelValidatorOverride,
-            final AuthenticationRequest authenticationRequest,
+            final AuthenticationRequest authenticationRequestIfAny,
             final List<Listener> listeners) {
-        this.appManifestForComponentProvider = appManifestIfAny;
-        this.configurationForComponentProvider = configurationOverride;
-        this.servicesForComponentProvider = servicesIfAny;
-        this.fixturesForComponentProvider = fixturesIfAny;
-        this.programmingModelForComponentProvider = programmingModelOverride;
-        this.metaModelValidatorForComponentProvider = metaModelValidatorOverride;
-        this.authenticationRequestIfAny = authenticationRequest;
+        this.appManifestIfAny = appManifestIfAny;
+        this.configurationOverride = configurationOverride;
+        this.servicesIfAny = servicesIfAny;
+        this.fixturesIfAny = fixturesIfAny;
+        this.programmingModelOverride = programmingModelOverride;
+        this.metaModelValidatorOverride = metaModelValidatorOverride;
+        this.authenticationRequestIfAny = authenticationRequestIfAny;
         this.listeners = listeners;
     }
 
@@ -398,12 +398,12 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
 
             componentProvider = new IsisComponentProviderDefault(
                     DeploymentType.UNIT_TESTING,
-                    appManifestForComponentProvider,
-                    servicesForComponentProvider,
-                    fixturesForComponentProvider,
-                    configurationForComponentProvider,
-                    programmingModelForComponentProvider,
-                    metaModelValidatorForComponentProvider
+                    appManifestIfAny,
+                    servicesIfAny,
+                    fixturesIfAny,
+                    configurationOverride,
+                    programmingModelOverride,
+                    metaModelValidatorOverride
             );
 
             isisSystem = new IsisSystem(componentProvider);

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
index ed229ef..423d01a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
@@ -346,14 +346,14 @@ public final class IsisConfigurationBuilder {
      * Log a summary of resources found or not found.
      */
     public void dumpResourcesToLog() {
-        if (LOG.isInfoEnabled()) {
-            LOG.info("Configuration resources FOUND:");
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Configuration resources FOUND:");
             for (String resource : configurationResourcesFound) {
-                LOG.info("*  " + resource);
+                LOG.debug("*  {}", resource);
             }
-            LOG.info("Configuration resources NOT FOUND (but not needed):");
+            LOG.debug("Configuration resources NOT FOUND (but not needed):");
             for (String resource : configurationResourcesNotFound) {
-                LOG.info("*  " + resource);
+                LOG.debug("*  {}", resource);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java
index dcf6356..bb1b2f8 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java
@@ -21,12 +21,11 @@ package org.apache.isis.core.runtime.fixtures;
 
 import org.apache.isis.applib.fixtures.InstallableFixture;
 import org.apache.isis.applib.fixtures.LogonFixture;
-import org.apache.isis.core.commons.components.Installer;
 
 /**
  * A particular mechanism to install fixtures.
  */
-public interface FixturesInstaller extends Installer {
+public interface FixturesInstaller {
 
     /**
      * NB: this has the suffix '-installer' because in the command line we must

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/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 6d27751..cac2a50 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,15 +43,15 @@ 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.SpecificationLoaderInstaller;
 import org.apache.isis.core.runtime.IsisInstallerRegistry;
 import org.apache.isis.core.runtime.about.AboutIsis;
 import org.apache.isis.core.runtime.about.ComponentDetails;
 import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
 import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
 import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
-import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
+import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
 import org.apache.isis.core.runtime.services.ServicesInstaller;
+import org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation;
 import org.apache.isis.core.runtime.system.IsisSystem;
 import org.apache.isis.core.runtime.system.SystemConstants;
 import org.apache.isis.core.runtime.systemdependencyinjector.SystemDependencyInjector;
@@ -81,7 +81,7 @@ import org.apache.isis.core.runtime.systemdependencyinjector.SystemDependencyInj
  * even if it has not been registered in <tt>installer-registry.properties</tt>
  * : just specify the {@link Installer}'s fully qualified class name.
  */
-public class InstallerLookup implements InstallerRepository, ApplicationScopedComponent, SystemDependencyInjector {
+public class InstallerLookup implements ApplicationScopedComponent, SystemDependencyInjector {
 
     private static final Logger LOG = LoggerFactory.getLogger(InstallerLookup.class);
 
@@ -136,32 +136,12 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
     }
     //endregion
 
-    //region > InstallerRepository impl.
-
-    @Override
-    public Installer[] getInstallers(final Class<?> cls) {
-        final List<Installer> list = new ArrayList<Installer>();
-        for (final Installer comp : installerList) {
-            if (cls.isAssignableFrom(comp.getClass())) {
-                list.add(comp);
-            }
-        }
-        return list.toArray(new Installer[list.size()]);
-    }
-    //endregion
-
-
-    //region > metamodel
-    public SpecificationLoaderInstaller reflectorInstaller(final String requested) {
-        return getInstaller(SpecificationLoaderInstaller.class, requested, SystemConstants.REFLECTOR_KEY, SystemConstants.REFLECTOR_DEFAULT);
-    }
-    //endregion
-
     //region > framework
 
     public AuthenticationManagerInstaller authenticationManagerInstaller(final String requested) {
         return getInstaller(
-                AuthenticationManagerInstaller.class, requested,
+                AuthenticationManagerInstaller.class,
+                requested,
                 SystemConstants.AUTHENTICATION_INSTALLER_KEY,
                 SystemConstants.AUTHENTICATION_DEFAULT);
     }
@@ -173,31 +153,11 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
                 SystemConstants.AUTHORIZATION_DEFAULT);
     }
 
-    public FixturesInstaller fixturesInstaller(final String requested) {
-        return getInstaller(
-                FixturesInstaller.class, requested,
-                SystemConstants.FIXTURES_INSTALLER_KEY,
-                SystemConstants.FIXTURES_INSTALLER_DEFAULT);
-    }
-
-    public PersistenceMechanismInstaller persistenceMechanismInstaller(final String requested) {
-        return getInstaller(
-                PersistenceMechanismInstaller.class, requested,
-                SystemConstants.OBJECT_PERSISTOR_KEY,
-                SystemConstants.OBJECT_PERSISTOR_DEFAULT);
-    }
-
-    public ServicesInstaller servicesInstaller(final String requestedImplementationName) {
-        return getInstaller(
-                ServicesInstaller.class, requestedImplementationName,
-                SystemConstants.SERVICES_INSTALLER_KEY,
-                SystemConstants.SERVICES_INSTALLER_DEFAULT);
-    }
     //endregion
 
     //region > framework - generic
     @SuppressWarnings("unchecked")
-    public <T extends Installer> T getInstaller(final Class<T> cls, final String implName) {
+    private <T extends Installer> T getInstaller(final Class<T> cls, final String implName) {
         Assert.assertNotNull("No name specified", implName);
         for (final Installer installer : installerList) {
             if (cls.isAssignableFrom(installer.getClass()) && installer.getName().equals(implName)) {
@@ -217,7 +177,8 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
             }
             return installer;
         } catch (final InstanceCreationException e) {
-            throw new InstanceCreationException("Specification error in " + IsisInstallerRegistry.INSTALLER_REGISTRY_FILE, e);
+            throw new InstanceCreationException(
+                    "Specification error in " + IsisInstallerRegistry.INSTALLER_REGISTRY_FILE, e);
         } catch (final UnavailableClassException e) {
             return null;
         }
@@ -259,7 +220,6 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
     }
     //endregion
 
-
     //region > SystemDependencyInjector, Injectable
     @Override
     public <T> T injectDependenciesInto(final T candidate) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/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
deleted file mode 100644
index 4ac20dc..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java
+++ /dev/null
@@ -1,71 +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.runtime.runner.opts;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-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.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;
-import org.apache.isis.core.runtime.runner.Constants;
-import org.apache.isis.core.runtime.system.SystemConstants;
-
-import static org.apache.isis.core.runtime.runner.Constants.REFLECTOR_LONG_OPT;
-import static org.apache.isis.core.runtime.runner.Constants.REFLECTOR_OPT;
-
-/**
- * @deprecated - far better to use `isis.reflector.facets.include` and `isis.reflector.facets.exclude`; no longer registered in IsisRunner/IsisWebServer
- */
-@Deprecated
-public class OptionHandlerReflector extends OptionHandlerAbstract {
-
-    private final InstallerRepository installerRepository;
-    private String reflector;
-
-    public OptionHandlerReflector(final InstallerRepository installerRepository) {
-        this.installerRepository = installerRepository;
-    }
-
-    @Override
-    @SuppressWarnings("static-access")
-    public void addOption(final Options options) {
-        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);
-
-    }
-
-    @Override
-    public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
-        reflector = commandLine.getOptionValue(Constants.REFLECTOR_OPT);
-        return true;
-    }
-
-    @Override
-    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
-        isisConfigurationBuilder.add(SystemConstants.REFLECTOR_KEY, reflector);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/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 3f82837..caf7bdd 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
@@ -156,9 +156,9 @@ public class IsisSystem implements ApplicationScopedComponent {
 
             // authentication, authorization
             final AuthenticationManager authenticationManager =
-                    isisComponentProvider.provideAuthenticationManager(deploymentType);
+                    isisComponentProvider.provideAuthenticationManager();
             final AuthorizationManager authorizationManager =
-                    isisComponentProvider.provideAuthorizationManager(deploymentType);
+                    isisComponentProvider.provideAuthorizationManager();
 
             // specificationLoader
             final Collection<MetaModelRefiner> metaModelRefiners =
@@ -170,7 +170,7 @@ public class IsisSystem implements ApplicationScopedComponent {
             // persistenceSessionFactory
             final PersistenceSessionFactory persistenceSessionFactory =
                     isisComponentProvider.providePersistenceSessionFactory(
-                            deploymentType, servicesInjector, specificationLoader);
+                            deploymentType, servicesInjector);
 
             // runtimeContext
             final RuntimeContextFromSession runtimeContext =
@@ -274,9 +274,6 @@ public class IsisSystem implements ApplicationScopedComponent {
     private void installFixturesIfRequired() throws IsisSystemException {
 
         fixtureInstaller = isisComponentProvider.provideFixturesInstaller();
-        if (isNoop(fixtureInstaller)) {
-            return;
-        }
 
         IsisContext.openSession(new InitialisationSession());
         fixtureInstaller.installFixtures();
@@ -291,10 +288,6 @@ public class IsisSystem implements ApplicationScopedComponent {
         }
     }
 
-    private boolean isNoop(final FixturesInstaller candidate) {
-        return candidate == null || (fixtureInstaller instanceof Noop);
-    }
-
     /**
      * The act of invoking titleOf(...) will cause translations to be requested.
      */

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
index c8aa4e5..ca446f1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
@@ -22,15 +22,11 @@ package org.apache.isis.core.runtime.system;
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.core.commons.config.ConfigurationConstants;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
 import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
-import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
 import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
-import org.apache.isis.core.runtime.services.ServicesInstaller;
 
 public final class SystemConstants {
 
@@ -44,24 +40,6 @@ public final class SystemConstants {
     public static final String DEPLOYMENT_TYPE_KEY = ConfigurationConstants.ROOT + "deploymentType";
 
 
-    /**
-     * Key used to lookup {@link SpecificationLoader specification Loader} in
-     * {@link IsisConfiguration}, and root for any
-     * {@link SpecificationLoaderInstaller reflector}-specific configuration keys.
-     *
-     * @deprecated
-     */
-    @Deprecated
-    public final static String REFLECTOR_KEY = ConfigurationConstants.ROOT + SpecificationLoaderInstaller.TYPE;
-    
-    /**
-     * Default for {@link #REFLECTOR_KEY}
-     *
-     * @deprecated
-     */
-    @Deprecated
-    public static final String REFLECTOR_DEFAULT = "java";
-
 
     /**
      * Key used to lookup {@link org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory persistor} in
@@ -74,20 +52,6 @@ public final class SystemConstants {
     @Deprecated
     public final static String OBJECT_PERSISTOR_INSTALLER_KEY = ConfigurationConstants.ROOT + PersistenceMechanismInstaller.TYPE;
 
-    /**
-     *
-     * @deprecated
-     */
-    @Deprecated
-    public static final String OBJECT_PERSISTOR_KEY = OBJECT_PERSISTOR_INSTALLER_KEY;
-
-    /**
-     *
-     * @deprecated
-     */
-    @Deprecated
-    public static final String OBJECT_PERSISTOR_DEFAULT = "datanucleus";
-
 
     /**
      * Key used to lookup {@link AppManifest} (if any) from the {@link IsisConfiguration}.
@@ -118,27 +82,7 @@ public final class SystemConstants {
      */
     public static final String AUTHORIZATION_DEFAULT = "shiro";
 
-    /**
-     * Key used to lookup {@link ServicesInstaller services installer} in
-     * {@link IsisConfiguration}, and root for any {@link ServicesInstaller
-     * services installer}-specific configuration keys.
-     */
-    public static final String SERVICES_INSTALLER_KEY = ConfigurationConstants.ROOT + ServicesInstaller.TYPE;
-    /**
-     * Default for {@link #SERVICES_INSTALLER_KEY}
-     */
-    public static final String SERVICES_INSTALLER_DEFAULT = "configuration-and-annotation";
 
-    /**
-     * Key used to lookup {@link FixturesInstaller fixtures installer} in
-     * {@link IsisConfiguration}, and root for any {@link FixturesInstaller
-     * fixtures installer}-specific configuration keys.
-     */
-    public static final String FIXTURES_INSTALLER_KEY = ConfigurationConstants.ROOT + FixturesInstaller.TYPE;
-    /**
-     * Default for {@link #FIXTURES_INSTALLER_KEY}
-     */
-    public static final String FIXTURES_INSTALLER_DEFAULT = "configuration";
 
     /**
      * Key by which requested fixture (eg via command line) is made available in
@@ -146,6 +90,8 @@ public final class SystemConstants {
      */
     public final static String FIXTURE_KEY = ConfigurationConstants.ROOT + "fixtures";
 
+
+
     /**
      * Key by which requested user (eg via command line) is made available in
      * {@link IsisConfiguration} .
@@ -164,6 +110,7 @@ public final class SystemConstants {
     @Deprecated
     public final static String PASSWORD_KEY = ConfigurationConstants.ROOT + "password";
 
+
     /**
      * Key as to whether to show splash (eg via command line) is made available
      * in {@link IsisConfiguration}.

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/AuthenticatorBypass.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/AuthenticatorBypass.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/AuthenticatorBypass.java
new file mode 100644
index 0000000..7703ab7
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/AuthenticatorBypass.java
@@ -0,0 +1,40 @@
+/*
+ *  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.runtime.systemusinginstallers;
+
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
+import org.apache.isis.core.runtime.authentication.standard.AuthenticatorAbstract;
+
+class AuthenticatorBypass extends AuthenticatorAbstract {
+
+    public AuthenticatorBypass(final IsisConfiguration configuration) {
+        super(configuration);
+    }
+
+    @Override
+    public boolean isValid(final AuthenticationRequest request) {
+        return true;
+    }
+
+    @Override
+    public boolean canAuthenticate(Class<? extends AuthenticationRequest> authenticationRequestClass) {
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 20d9337..96698fb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@ -20,45 +20,281 @@
 package org.apache.isis.core.runtime.systemusinginstallers;
 
 import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
+import javax.annotation.Nullable;
+import javax.jdo.annotations.PersistenceCapable;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import org.reflections.Reflections;
+import org.reflections.vfs.Vfs;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
 import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
+import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
+import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
+import org.apache.isis.core.runtime.services.ServicesInstallerFromAnnotation;
+import org.apache.isis.core.runtime.services.ServicesInstallerFromConfiguration;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.IsisSystemException;
+import org.apache.isis.core.runtime.system.SystemConstants;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
+import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller;
+import org.apache.isis.objectstore.jdo.service.RegisterEntities;
+import org.apache.isis.progmodels.dflt.JavaReflectorInstaller;
+
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
 
 /**
  * 
  */
-public interface IsisComponentProvider {
+public abstract class IsisComponentProvider {
+
+    //region > constructor, fields
+
+    private final DeploymentType deploymentType;
+    private final AppManifest appManifestIfAny;
+    private final IsisConfigurationDefault configuration;
+
+    public IsisComponentProvider(
+            final DeploymentType deploymentType,
+            final AppManifest appManifestIfAny,
+            final IsisConfigurationDefault configuration) {
+
+        this.deploymentType = deploymentType;
+        this.appManifestIfAny = appManifestIfAny;
+        this.configuration = configuration;
+
+        if(appManifestIfAny != null) {
+
+            putAppManifestKey(appManifestIfAny);
+            findAndRegisterTypes(appManifestIfAny);
+            specifyServicesAndRegisteredEntitiesUsing(appManifestIfAny);
+
+            overrideConfigurationUsing(appManifestIfAny);
+        }
+
+    }
+
+    public DeploymentType getDeploymentType() {
+        return deploymentType;
+    }
+
+    public AppManifest getAppManifestIfAny() {
+        return appManifestIfAny;
+    }
+
+    public IsisConfigurationDefault getConfiguration() {
+        return configuration;
+    }
+
+    //endregion
+
+
+    //region > helpers (appManifest)
+
+    private void putAppManifestKey(final AppManifest appManifest) {
+        // required to prevent RegisterEntities validation from complaining
+        // if it can't find any @PersistenceCapable entities in a module
+        // that contains only services.
+        putConfigurationProperty(
+                SystemConstants.APP_MANIFEST_KEY, appManifest.getClass().getName()
+        );
+    }
+
+    private void findAndRegisterTypes(final AppManifest appManifest) {
+        final Iterable<String> packageNameList = modulePackageNamesFrom(appManifest);
+        final AppManifest.Registry registry = AppManifest.Registry.instance();
+
+        final List<String> packages = Lists.newArrayList();
+        packages.addAll(AppManifest.Registry.FRAMEWORK_PROVIDED_SERVICES);
+        Iterables.addAll(packages, packageNameList);
+
+        Vfs.setDefaultURLTypes(ClassDiscoveryServiceUsingReflections.getUrlTypes());
 
-    DeploymentType getDeploymentType();
+        final Reflections reflections = new Reflections(packages);
+        final Set<Class<?>> domainServiceTypes = reflections.getTypesAnnotatedWith(DomainService.class);
+        final Set<Class<?>> persistenceCapableTypes = reflections.getTypesAnnotatedWith(PersistenceCapable.class);
+        final Set<Class<? extends FixtureScript>> fixtureScriptTypes = reflections.getSubTypesOf(FixtureScript.class);
 
-    IsisConfigurationDefault getConfiguration();
+        final Set<Class<?>> mixinTypes = Sets.newHashSet();
+        mixinTypes.addAll(reflections.getTypesAnnotatedWith(Mixin.class));
+        final Set<Class<?>> domainObjectTypes = reflections.getTypesAnnotatedWith(DomainObject.class);
+        mixinTypes.addAll(
+                Lists.newArrayList(Iterables.filter(domainObjectTypes, new Predicate<Class<?>>() {
+                    @Override
+                    public boolean apply(@Nullable final Class<?> input) {
+                        if(input == null) { return false; }
+                        final DomainObject annotation = input.getAnnotation(DomainObject.class);
+                        return annotation.nature() == Nature.MIXIN;
+                    }
+                }))
+        );
 
-    AuthenticationManager provideAuthenticationManager(DeploymentType deploymentType);
-    AuthorizationManager provideAuthorizationManager(final DeploymentType deploymentType);
+        registry.setDomainServiceTypes(domainServiceTypes);
+        registry.setPersistenceCapableTypes(persistenceCapableTypes);
+        registry.setFixtureScriptTypes(fixtureScriptTypes);
+        registry.setMixinTypes(mixinTypes);
+    }
 
-    ServicesInjectorDefault provideServiceInjector();
 
+    private void specifyServicesAndRegisteredEntitiesUsing(final AppManifest appManifest) {
+        final Iterable<String> packageNames = modulePackageNamesFrom(appManifest);
+        final String packageNamesCsv = Joiner.on(',').join(packageNames);
 
-    FixturesInstaller provideFixturesInstaller();
+        putConfigurationProperty(ServicesInstallerFromAnnotation.PACKAGE_PREFIX_KEY, packageNamesCsv);
+        putConfigurationProperty(RegisterEntities.PACKAGE_PREFIX_KEY, packageNamesCsv);
 
-    SpecificationLoader provideSpecificationLoader(
+        final List<Class<?>> additionalServices = appManifest.getAdditionalServices();
+        if(additionalServices != null) {
+            putConfigurationProperty(
+                    ServicesInstallerFromConfiguration.SERVICES_KEY, classNamesFrom(additionalServices));
+        }
+    }
+
+    private Iterable<String> modulePackageNamesFrom(final AppManifest appManifest) {
+        List<Class<?>> modules = appManifest.getModules();
+        if (modules == null || modules.isEmpty()) {
+            throw new IllegalArgumentException(
+                    "If an appManifest is provided then it must return a non-empty set of modules");
+        }
+
+        return Iterables.transform(modules, ClassUtil.Functions.packageNameOf());
+    }
+
+    protected String classNamesFrom(final List<?> objectsOrClasses) {
+        if (objectsOrClasses == null) {
+            return null;
+        }
+        final Iterable<String> fixtureClassNames = Iterables.transform(objectsOrClasses, classNameOf());
+        return Joiner.on(',').join(fixtureClassNames);
+    }
+
+    private static Function<Object, String> classNameOf() {
+        return new Function<Object, String>() {
+            @Nullable @Override
+            public String apply(final Object input) {
+                Class<?> aClass = input instanceof Class ? (Class<?>) input : input.getClass();
+                return aClass.getName();
+            }
+        };
+    }
+
+    private void overrideConfigurationUsing(final AppManifest appManifest) {
+        final Map<String, String> configurationProperties = appManifest.getConfigurationProperties();
+        if (configurationProperties != null) {
+            for (Map.Entry<String, String> configProp : configurationProperties.entrySet()) {
+                putConfigurationProperty(configProp.getKey(), configProp.getValue());
+            }
+        }
+    }
+
+    /**
+     * TODO: hacky, {@link IsisConfiguration} is meant to be immutable...
+     */
+    void putConfigurationProperty(final String key, final String value) {
+        if(value == null) {
+            return;
+        }
+        this.configuration.put(key, value);
+    }
+
+    //endregion
+
+
+    //region > services, configuration, authenticationManager, authorizationManager (populated by subclass)
+
+    /**
+     * populated by subclass, in its constructor.
+     */
+    protected List<Object> services;
+    /**
+     * populated by subclass, in its constructor.
+     */
+    protected AuthenticationManager authenticationManager;
+    /**
+     * populated by subclass, in its constructor.
+     */
+    protected AuthorizationManager authorizationManager;
+
+
+    /**
+     * Provided for subclasses to call to ensure that they have correctly populated all fields.
+     */
+    protected void ensureInitialized() {
+        ensureThatState(authenticationManager, is(not(nullValue())));
+        ensureThatState(authorizationManager, is(not(nullValue())));
+        ensureThatState(services, is(not(nullValue())));
+        ensureThatState(configuration, is(not(nullValue())));
+    }
+    //endregion
+
+    //region > provide*
+
+    public AuthenticationManager provideAuthenticationManager() {
+        return authenticationManager;
+    }
+
+    public AuthorizationManager provideAuthorizationManager() {
+        return authorizationManager;
+    }
+
+    public ServicesInjectorDefault provideServiceInjector() {
+        return new ServicesInjectorDefault(services);
+    }
+
+    public FixturesInstaller provideFixturesInstaller()  {
+        return new FixturesInstallerFromConfiguration(getConfiguration());
+    }
+
+    public SpecificationLoader provideSpecificationLoader(
             final DeploymentType deploymentType,
             final ServicesInjectorSpi servicesInjector,
-            final Collection<MetaModelRefiner> metaModelRefiners)
-            throws IsisSystemException;
+            final Collection<MetaModelRefiner> metaModelRefiners)  throws IsisSystemException {
 
-    PersistenceSessionFactory providePersistenceSessionFactory(
+        final SpecificationLoaderInstaller reflectorInstaller = new JavaReflectorInstaller(getConfiguration());
+
+        return reflectorInstaller.createReflector(
+                deploymentType.getDeploymentCategory(), metaModelRefiners, servicesInjector);
+    }
+
+    public PersistenceSessionFactory providePersistenceSessionFactory(
             final DeploymentType deploymentType,
-            final ServicesInjectorSpi servicesInjector,
-            final SpecificationLoader specificationLoader);
+            final ServicesInjectorSpi servicesInjector) {
+        final PersistenceMechanismInstaller persistenceMechanismInstaller =
+                new DataNucleusPersistenceMechanismInstaller(getConfiguration());
+
+        return persistenceMechanismInstaller.createPersistenceSessionFactory(
+                deploymentType, servicesInjector);
+    }
+
+    //endregion
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
deleted file mode 100644
index 3a40061..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
+++ /dev/null
@@ -1,269 +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.runtime.systemusinginstallers;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.jdo.annotations.PersistenceCapable;
-
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
-import org.reflections.Reflections;
-import org.reflections.vfs.Vfs;
-
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.Mixin;
-import org.apache.isis.applib.annotation.Nature;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.commons.lang.ClassUtil;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
-import org.apache.isis.core.runtime.authentication.AuthenticationManager;
-import org.apache.isis.core.runtime.authorization.AuthorizationManager;
-import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
-import org.apache.isis.core.runtime.services.ServicesInstallerFromAnnotation;
-import org.apache.isis.core.runtime.services.ServicesInstallerFromConfiguration;
-import org.apache.isis.core.runtime.system.DeploymentType;
-import org.apache.isis.core.runtime.system.SystemConstants;
-import org.apache.isis.objectstore.jdo.service.RegisterEntities;
-
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-
-public abstract class IsisComponentProviderAbstract implements IsisComponentProvider {
-
-    protected final DeploymentType deploymentType;
-    /**
-     * may be null.
-     */
-    protected final AppManifest appManifest;
-
-    /**
-     * populated by subclass, in its constructor.
-     */
-    protected IsisConfigurationDefault configuration;
-    /**
-     * populated by subclass, in its constructor.
-     */
-    protected List<Object> services;
-    /**
-     * populated by subclass, in its constructor.
-     */
-    protected FixturesInstaller fixturesInstaller;
-    /**
-     * populated by subclass, in its constructor.
-     */
-    protected AuthenticationManager authenticationManager;
-    /**
-     * populated by subclass, in its constructor.
-     */
-    protected AuthorizationManager authorizationManager;
-
-    public IsisComponentProviderAbstract(
-            final DeploymentType deploymentType,
-            final AppManifest appManifest) {
-
-        this.deploymentType = deploymentType;
-        this.appManifest = appManifest;
-
-    }
-
-    protected void putAppManifestKey(final AppManifest appManifest) {
-        // required to prevent RegisterEntities validation from complaining
-        // if it can't find any @PersistenceCapable entities in a module
-        // that contains only services.
-        putConfigurationProperty(
-                SystemConstants.APP_MANIFEST_KEY, appManifest.getClass().getName()
-        );
-    }
-
-    /**
-     * Provided for subclasses to call to ensure that they have correctly populated all fields.
-     */
-    protected void ensureInitialized() {
-        ensureThatState(authenticationManager, is(not(nullValue())));
-        ensureThatState(authorizationManager, is(not(nullValue())));
-        ensureThatState(services, is(not(nullValue())));
-        ensureThatState(fixturesInstaller, is(not(nullValue())));
-        ensureThatState(configuration, is(not(nullValue())), "fixtureInstaller could not be looked up");
-    }
-
-
-    //region > appManifest helpers
-    protected void specifyServicesAndRegisteredEntitiesUsing(final AppManifest appManifest) {
-        final Iterable<String> packageNames = modulePackageNamesFrom(appManifest);
-        final String packageNamesCsv = Joiner.on(',').join(packageNames);
-
-        putConfigurationProperty(ServicesInstallerFromAnnotation.PACKAGE_PREFIX_KEY, packageNamesCsv);
-        putConfigurationProperty(RegisterEntities.PACKAGE_PREFIX_KEY, packageNamesCsv);
-
-        final List<Class<?>> additionalServices = appManifest.getAdditionalServices();
-        if(additionalServices != null) {
-            putConfigurationProperty(ServicesInstallerFromConfiguration.SERVICES_KEY, classNamesFrom(additionalServices));
-        }
-    }
-
-    /**
-     * @deprecated - unused, renamed to {@link #findAndRegisterTypes(AppManifest)}.
-     */
-    @Deprecated
-    protected void registerPackageNames(final AppManifest appManifest) {
-        findAndRegisterTypes(appManifest);
-    }
-    protected void findAndRegisterTypes(final AppManifest appManifest) {
-        final Iterable<String> packageNameList = modulePackageNamesFrom(appManifest);
-        final AppManifest.Registry registry = AppManifest.Registry.instance();
-
-        final List<String> packages = Lists.newArrayList();
-        packages.addAll(AppManifest.Registry.FRAMEWORK_PROVIDED_SERVICES);
-        Iterables.addAll(packages, packageNameList);
-
-        Vfs.setDefaultURLTypes(ClassDiscoveryServiceUsingReflections.getUrlTypes());
-
-        final Reflections reflections = new Reflections(packages);
-        final Set<Class<?>> domainServiceTypes = reflections.getTypesAnnotatedWith(DomainService.class);
-        final Set<Class<?>> persistenceCapableTypes = reflections.getTypesAnnotatedWith(PersistenceCapable.class);
-        final Set<Class<? extends FixtureScript>> fixtureScriptTypes = reflections.getSubTypesOf(FixtureScript.class);
-
-        final Set<Class<?>> mixinTypes = Sets.newHashSet();
-        mixinTypes.addAll(reflections.getTypesAnnotatedWith(Mixin.class));
-        final Set<Class<?>> domainObjectTypes = reflections.getTypesAnnotatedWith(DomainObject.class);
-        mixinTypes.addAll(
-                Lists.newArrayList(Iterables.filter(domainObjectTypes, new Predicate<Class<?>>() {
-                    @Override
-                    public boolean apply(@Nullable final Class<?> input) {
-                        if(input == null) { return false; }
-                        final DomainObject annotation = input.getAnnotation(DomainObject.class);
-                        return annotation.nature() == Nature.MIXIN;
-                    }
-                }))
-        );
-
-        registry.setDomainServiceTypes(domainServiceTypes);
-        registry.setPersistenceCapableTypes(persistenceCapableTypes);
-        registry.setFixtureScriptTypes(fixtureScriptTypes);
-        registry.setMixinTypes(mixinTypes);
-    }
-
-    private Iterable<String> modulePackageNamesFrom(final AppManifest appManifest) {
-        List<Class<?>> modules = appManifest.getModules();
-        if (modules == null || modules.isEmpty()) {
-            throw new IllegalArgumentException(
-                    "If an appManifest is provided then it must return a non-empty set of modules");
-        }
-
-        return Iterables.transform(modules, ClassUtil.Functions.packageNameOf());
-    }
-
-    protected String classNamesFrom(final List<?> objectsOrClasses) {
-        if (objectsOrClasses == null) {
-            return null;
-        }
-        final Iterable<String> fixtureClassNames = Iterables.transform(objectsOrClasses, classNameOf());
-        return Joiner.on(',').join(fixtureClassNames);
-    }
-
-    private static Function<Object, String> classNameOf() {
-        return new Function<Object, String>() {
-                        @Nullable @Override
-                        public String apply(final Object input) {
-                            Class<?> aClass =
-                                    input instanceof Class
-                                        ? (Class<?>)input
-                                        : input.getClass();
-                            return aClass.getName();
-                        }
-                    };
-    }
-
-    protected void overrideConfigurationUsing(final AppManifest appManifest) {
-        final Map<String, String> configurationProperties = appManifest.getConfigurationProperties();
-        if (configurationProperties != null) {
-            for (Map.Entry<String, String> configProp : configurationProperties.entrySet()) {
-                putConfigurationProperty(configProp.getKey(), configProp.getValue());
-            }
-        }
-    }
-
-    protected final void putConfigurationProperty(final String key, final String value) {
-        if(value == null) {
-            return;
-        }
-        doPutConfigurationProperty(key, value);
-    }
-
-
-    /**
-     * For subclasses to implement, to update their implementation of {@link IsisConfiguration}.
-     */
-    protected abstract void doPutConfigurationProperty(final String key, final String value);
-
-    //endregion
-
-    //region > API impl.
-
-    @Override
-    public DeploymentType getDeploymentType() {
-        return deploymentType;
-    }
-
-    @Override
-    public IsisConfigurationDefault getConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public AuthenticationManager provideAuthenticationManager(final DeploymentType deploymentType) {
-        return authenticationManager;
-    }
-
-    @Override
-    public  AuthorizationManager provideAuthorizationManager(final DeploymentType deploymentType) {
-        return authorizationManager;
-    }
-
-    @Override
-    public FixturesInstaller provideFixturesInstaller() {
-        return fixturesInstaller;
-    }
-
-    @Override
-    public ServicesInjectorDefault provideServiceInjector() {
-        return new ServicesInjectorDefault(services);
-    }
-
-    //endregion
-
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
index 2af84d9..ef7d119 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
@@ -26,7 +26,6 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.fixtures.InstallableFixture;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
@@ -40,24 +39,18 @@ import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
-import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
 import org.apache.isis.core.runtime.authentication.standard.AuthenticationManagerStandard;
-import org.apache.isis.core.runtime.authentication.standard.Authenticator;
-import org.apache.isis.core.runtime.authentication.standard.AuthenticatorAbstract;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
 import org.apache.isis.core.runtime.authorization.standard.AuthorizationManagerStandard;
-import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
 import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
 import org.apache.isis.core.runtime.services.ServicesInstallerFromConfiguration;
 import org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.IsisSystemException;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
-import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller;
 import org.apache.isis.progmodels.dflt.JavaReflectorHelper;
 import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
 
-public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract {
+public class IsisComponentProviderDefault2 extends IsisComponentProvider  {
 
     private final ProgrammingModel programmingModel;
     private final MetaModelValidator metaModelValidator;
@@ -70,62 +63,28 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
             final IsisConfiguration configurationOverride,
             final ProgrammingModel programmingModelOverride,
             final MetaModelValidator metaModelValidatorOverride) {
-        super(deploymentType, appManifestIfAny);
+        super(deploymentType, appManifestIfAny, elseDefault(configurationOverride));
 
-        this.configuration = elseDefault(configurationOverride);
+        this.services = appManifestIfAny != null
+                ? new ServicesInstallerFromConfigurationAndAnnotation(getConfiguration()).getServices()
+                : servicesOverride != null
+                    ? servicesOverride
+                    : new ServicesInstallerFromConfiguration(getConfiguration()).getServices();
 
-        final String fixtureClassNamesCsv;
-        if(appManifest != null) {
-
-            putAppManifestKey(appManifest);
-            findAndRegisterTypes(appManifest);
-            specifyServicesAndRegisteredEntitiesUsing(appManifest);
-
-            List<Class<? extends FixtureScript>> fixtureClasses = appManifest.getFixtures();
-            fixtureClassNamesCsv = classNamesFrom(fixtureClasses);
-
-            overrideConfigurationUsing(appManifest);
-
-            this.services = createServices(configuration);
-
-        } else {
-            fixtureClassNamesCsv = classNamesFrom(fixturesOverride);
-
-            this.services = elseDefault(servicesOverride, configuration);
-        }
+        final String fixtureClassNamesCsv = classNamesFrom(
+                        appManifestIfAny != null ? appManifestIfAny.getFixtures() : fixturesOverride);
 
         putConfigurationProperty(FixturesInstallerFromConfiguration.FIXTURES, fixtureClassNamesCsv);
-        this.fixturesInstaller = new FixturesInstallerFromConfiguration(configuration);
 
         // integration tests ignore appManifest for authentication and authorization.
-        this.authenticationManager = createAuthenticationManager(configuration);
-        this.authorizationManager = createAuthorizationManager(configuration);
+        this.authenticationManager = createAuthenticationManager();
+        this.authorizationManager = createAuthorizationManager();
 
-        this.programmingModel = elseDefault(programmingModelOverride, configuration);
+        this.programmingModel = elseDefault(programmingModelOverride);
         this.metaModelValidator = elseDefault(metaModelValidatorOverride);
 
     }
 
-
-
-    //region > appManifest
-
-    private List<Object> createServices(final IsisConfigurationDefault configuration) {
-        final ServicesInstallerFromConfigurationAndAnnotation servicesInstaller =
-                new ServicesInstallerFromConfigurationAndAnnotation(configuration);
-        return servicesInstaller.getServices();
-    }
-
-
-    @Override
-    protected void doPutConfigurationProperty(final String key, final String value) {
-        // bit hacky :-(
-        IsisConfigurationDefault configurationDefault = this.configuration;
-        configurationDefault.put(key, value);
-    }
-
-    //endregion
-
     /**
      * Default will read <tt>isis.properties</tt> (and other optional property files) from the &quot;config&quot;
      * package on the current classpath.
@@ -136,33 +95,19 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
                 : new IsisConfigurationDefault(ResourceStreamSourceContextLoaderClassPath.create("config"));
     }
 
-    private static List<Object> elseDefault(
-            final List<Object> servicesOverride,
-            final IsisConfigurationDefault configuration) {
-        return servicesOverride != null
-                ? servicesOverride
-                : createDefaultServices(configuration);
-    }
-
-    private static List<Object> createDefaultServices(
-            final IsisConfigurationDefault configuration) {
-        final ServicesInstallerFromConfiguration servicesInstaller = new ServicesInstallerFromConfiguration( configuration);
-        return servicesInstaller.getServices();
+    private ProgrammingModel elseDefault(final ProgrammingModel programmingModel) {
+        return programmingModel != null ? programmingModel : createDefaultProgrammingModel();
     }
 
+    // TODO: this is duplicating logic in JavaReflectorInstaller; need to unify.
+    private ProgrammingModel createDefaultProgrammingModel() {
 
-    private static ProgrammingModel elseDefault(final ProgrammingModel programmingModel, final IsisConfiguration configuration) {
-        return programmingModel != null
-                ? programmingModel
-                : createDefaultProgrammingModel(configuration);
-    }
-
-    // TODO: this is duplicating logic in JavaReflectorInstallerNoDecorators; need to unify.
-    private static ProgrammingModel createDefaultProgrammingModel(final IsisConfiguration configuration) {
         final ProgrammingModelFacetsJava5 programmingModel = new ProgrammingModelFacetsJava5();
 
+        final IsisConfigurationDefault configuration = getConfiguration();
         ProgrammingModel.Util.includeFacetFactories(configuration, programmingModel);
         ProgrammingModel.Util.excludeFacetFactories(configuration, programmingModel);
+
         return programmingModel;
     }
 
@@ -173,58 +118,21 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
     }
 
     /**
-     * The standard authentication manager, configured with the default authenticator (allows all requests through).
+     * The standard authentication manager, configured with the 'bypass' authenticator (allows all requests through).
      */
-    private static AuthenticationManager createAuthenticationManager(final IsisConfiguration configuration) {
-        final AuthenticationManagerStandard authenticationManager = new AuthenticationManagerStandard(configuration);
-        Authenticator authenticator = new AuthenticatorBypass(configuration);
-        authenticationManager.addAuthenticator(authenticator);
+    private AuthenticationManager createAuthenticationManager() {
+        final AuthenticationManagerStandard authenticationManager =
+                new AuthenticationManagerStandard(getConfiguration());
+        authenticationManager.addAuthenticator(new AuthenticatorBypass(getConfiguration()));
         return authenticationManager;
     }
 
-    private static class AuthenticatorBypass extends AuthenticatorAbstract {
-
-        public AuthenticatorBypass(final IsisConfiguration configuration) {
-            super(configuration);
-        }
-
-        @Override
-        public boolean isValid(final AuthenticationRequest request) {
-            return true;
-        }
-
-        @Override
-        public boolean canAuthenticate(final Class<? extends AuthenticationRequest> authenticationRequestClass) {
-            return true;
-        }
-
-    }
-
-
-    /**
-     * The standard authorization manager, allowing all access.
-     */
-    private static AuthorizationManager createAuthorizationManager(final IsisConfiguration configuration) {
-        return new AuthorizationManagerStandard(configuration);
+    private AuthorizationManager createAuthorizationManager() {
+        return new AuthorizationManagerStandard(getConfiguration());
     }
 
 
     @Override
-    public DeploymentType getDeploymentType() {
-        return deploymentType;
-    }
-
-    @Override
-    public IsisConfigurationDefault getConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public FixturesInstaller provideFixturesInstaller()  {
-        return fixturesInstaller;
-    }
-
-    @Override
     public SpecificationLoader provideSpecificationLoader(
             final DeploymentType deploymentType,
             final ServicesInjectorSpi servicesInjector,
@@ -244,26 +152,4 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
                         servicesInjector);
     }
 
-    @Override
-    public AuthenticationManager provideAuthenticationManager(DeploymentType deploymentType) {
-        return authenticationManager;
-    }
-
-    @Override
-    public AuthorizationManager provideAuthorizationManager(DeploymentType deploymentType) {
-        return authorizationManager;
-    }
-
-    @Override
-    public PersistenceSessionFactory providePersistenceSessionFactory(
-            DeploymentType deploymentType,
-            final ServicesInjectorSpi servicesInjector,
-            final SpecificationLoader specificationLoader) {
-        DataNucleusPersistenceMechanismInstaller installer =
-                new DataNucleusPersistenceMechanismInstaller(configuration);
-        return installer.createPersistenceSessionFactory(
-                deploymentType, servicesInjector
-        );
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
index dd8bb72..192750c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
@@ -19,112 +19,68 @@
 
 package org.apache.isis.core.runtime.systemusinginstallers;
 
-import java.util.Collection;
 import java.util.List;
 
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.factory.InstanceUtil;
-import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
 import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
 import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
 import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
 import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
-import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
 import org.apache.isis.core.runtime.services.ServicesInstaller;
 import org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.SystemConstants;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
 
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
 import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.nullValue;
 
-public class IsisComponentProviderUsingInstallers extends IsisComponentProviderAbstract {
+public class IsisComponentProviderUsingInstallers extends IsisComponentProvider {
 
-    private final InstallerLookup installerLookup;
-
-    private SpecificationLoaderInstaller reflectorInstaller;
-    private PersistenceMechanismInstaller persistenceMechanismInstaller;
 
     public IsisComponentProviderUsingInstallers(
             final DeploymentType deploymentType,
             final AppManifest appManifestIfAny,
             final InstallerLookup installerLookup) {
-        super(deploymentType, appManifestIfAny(appManifestIfAny, installerLookup));
-
-        ensureThatArg(deploymentType, is(not(nullValue())));
-        ensureThatArg(installerLookup, is(not(nullValue())));
-
-        this.installerLookup = installerLookup;
-
-        if(appManifest != null) {
+        super(deploymentType,
+                appManifestIfAny(appManifestIfAny, installerLookup),
+                configurationFrom(installerLookup));
 
-            putAppManifestKey(appManifest);
-            findAndRegisterTypes(appManifest);
-            specifyServicesAndRegisteredEntitiesUsing(appManifest);
+        if(getAppManifestIfAny() != null) {
 
-            putConfigurationProperty(SystemConstants.SERVICES_INSTALLER_KEY, ServicesInstallerFromConfigurationAndAnnotation.NAME);
-
-            final String authenticationMechanism = appManifest.getAuthenticationMechanism();
+            final String authenticationMechanism = getAppManifestIfAny().getAuthenticationMechanism();
             putConfigurationProperty(SystemConstants.AUTHENTICATION_INSTALLER_KEY, authenticationMechanism);
 
-            final String authorizationMechanism = appManifest.getAuthorizationMechanism();
+            final String authorizationMechanism = getAppManifestIfAny().getAuthorizationMechanism();
             putConfigurationProperty(SystemConstants.AUTHORIZATION_INSTALLER_KEY, authorizationMechanism);
+        }
 
-            List<Class<? extends FixtureScript>> fixtureClasses = appManifest.getFixtures();
+        if(getAppManifestIfAny() != null) {
+            List<Class<? extends FixtureScript>> fixtureClasses = getAppManifestIfAny().getFixtures();
             final String fixtureClassNamesCsv = classNamesFrom(fixtureClasses);
             putConfigurationProperty(FixturesInstallerFromConfiguration.FIXTURES, fixtureClassNamesCsv);
-
-            overrideConfigurationUsing(appManifest);
         }
 
         // loading installers causes the configuration to be appended to successively
-        AuthenticationManagerInstaller authenticationInstaller = this.installerLookup.authenticationManagerInstaller(
-                configProperty(SystemConstants.AUTHENTICATION_INSTALLER_KEY));
+        final String requestedAuthencn = getConfiguration().getString(SystemConstants.AUTHENTICATION_INSTALLER_KEY);
+        AuthenticationManagerInstaller authenticationInstaller =
+                installerLookup.authenticationManagerInstaller(requestedAuthencn);
 
-        AuthorizationManagerInstaller authorizationInstaller = this.installerLookup.authorizationManagerInstaller(
-                configProperty(SystemConstants.AUTHORIZATION_INSTALLER_KEY));
+        final String requestedAuthorzn = getConfiguration().getString(SystemConstants.AUTHORIZATION_INSTALLER_KEY);
+        AuthorizationManagerInstaller authorizationInstaller =
+                installerLookup.authorizationManagerInstaller(requestedAuthorzn);
 
-        this.fixturesInstaller = this.installerLookup.fixturesInstaller(
-                configProperty(SystemConstants.FIXTURES_INSTALLER_KEY));
-
-        ServicesInstaller servicesInstaller = this.installerLookup.servicesInstaller(null);
-
-        // although there is only one implementation of PersistenceMechanismInstaller, we still do the lookup
-        // because this will add the persistor_datanucleus.properties and persistor.properties to the set of
-        // config files from which we read configuration properties.
-        persistenceMechanismInstaller = this.installerLookup.persistenceMechanismInstaller(
-                configProperty(SystemConstants.OBJECT_PERSISTOR_INSTALLER_KEY)
-        );
-
-        reflectorInstaller = this.installerLookup.reflectorInstaller(
-                configProperty(SystemConstants.REFLECTOR_KEY));
+        ServicesInstaller servicesInstaller = new ServicesInstallerFromConfigurationAndAnnotation(getConfiguration());
 
         // ensure we were able to load all components via InstallerLookup (fail fast)
         ensureThatState(authenticationInstaller, is(not(nullValue())),
                 "authenticationInstaller could not be looked up");
         ensureThatState(authorizationInstaller, is(not(nullValue())),
                 "authorizationInstaller could not be looked up");
-        ensureThatState(servicesInstaller, is(not(nullValue())),
-                "servicesInstaller could not be looked up");
-        ensureThatState(fixturesInstaller, is(not(nullValue())),
-                "fixtureInstaller could not be looked up");
-        ensureThatState(persistenceMechanismInstaller, is(not(nullValue())),
-                "persistenceMechanismInstaller could not be looked up");
-        ensureThatState(reflectorInstaller, is(not(nullValue())),
-                "reflectorInstaller could not be looked up");
-
-
-        // capture the final configuration once all components have been loaded
-        configuration = this.installerLookup.getConfiguration();
 
         // eagerly calculate
         authenticationManager = authenticationInstaller.createAuthenticationManager();
@@ -146,48 +102,23 @@ public class IsisComponentProviderUsingInstallers extends IsisComponentProviderA
         if(appManifestFromConstructor != null) {
             return appManifestFromConstructor;
         }
-        final String appManifestFromConfiguration = installerLookup.getConfiguration().getString(SystemConstants.APP_MANIFEST_KEY);
-        return appManifestFromConfiguration != null? InstanceUtil.createInstance(appManifestFromConfiguration, AppManifest.class): null;
+        final IsisConfigurationDefault configuration = configurationFrom(installerLookup);
+        final String appManifestFromConfiguration = configuration.getString(SystemConstants.APP_MANIFEST_KEY);
+        return appManifestFromConfiguration != null
+                ? InstanceUtil.createInstance(appManifestFromConfiguration, AppManifest.class)
+                : null;
     }
 
-    protected void doPutConfigurationProperty(final String key, final String value) {
-        IsisConfigurationDefault configuration = (IsisConfigurationDefault) this.installerLookup.getConfiguration();
-        configuration.put(key, value);
-    }
-    //endregion
-
-
-
-    @Override
-    public SpecificationLoader provideSpecificationLoader(
-            final DeploymentType deploymentType,
-            final ServicesInjectorSpi servicesInjector,
-            final Collection<MetaModelRefiner> metaModelRefiners) {
-        return reflectorInstaller.createReflector(deploymentType.getDeploymentCategory(), metaModelRefiners,
-                servicesInjector);
-    }
 
+    //endregion
 
-    @Override
-    public PersistenceSessionFactory providePersistenceSessionFactory(
-            final DeploymentType deploymentType,
-            final ServicesInjectorSpi servicesInjector,
-            final SpecificationLoader specificationLoader) {
-        return persistenceMechanismInstaller.createPersistenceSessionFactory(
-                    deploymentType,
-                servicesInjector);
-    }
 
     //region > helpers
 
-    /**
-     * Returns the current value of the configuration property.
-     *
-     * Note that this may change over time as new installers are loaded (= new config property files).
-     */
-    private String configProperty(final String key) {
-        return this.installerLookup.getConfiguration().getString(key);
+    private static IsisConfigurationDefault configurationFrom(final InstallerLookup installerLookup) {
+        return installerLookup.getConfiguration();
     }
+
     //endregion
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties b/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties
index 7ee6aef..7f9efeb 100644
--- a/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties
+++ b/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties
@@ -16,8 +16,6 @@
 #  under the License.
 
 
-# ObjectReflectorInstaller
-org.apache.isis.progmodels.dflt.JavaReflectorInstaller                                  # "java"
 
 # AuthenticationManagerInstaller
 org.apache.isis.core.security.authentication.BypassAuthenticationManagerInstaller       # "bypass"
@@ -27,14 +25,4 @@ org.apache.isis.security.shiro.authentication.ShiroAuthenticationManagerInstalle
 org.apache.isis.core.security.authorization.BypassAuthorizationManagerInstaller         # "bypass"
 org.apache.isis.security.shiro.authorization.ShiroAuthorizationManagerInstaller         # "shiro"
 
-# FixturesInstaller
-org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration                # "configuration"
-
-# ServicesInstaller
-org.apache.isis.core.runtime.services.ServicesInstallerFromConfiguration                # "configuration"
-org.apache.isis.core.runtime.services.ServicesInstallerFromAnnotation                   # "annotation"
-org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation   # "configuration-and-annotation"
-
-# PersistenceMechanismInstaller
-org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller    # datanucleus