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/19 12:53:26 UTC

[1/4] isis git commit: ISIS-1406: lots more refactoring around IsisConfiguration and IsisConfigurationBuilder.

Repository: isis
Updated Branches:
  refs/heads/ISIS-1406 dcaab8ead -> 745658883


http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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 159e2ac..214a362 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
@@ -95,7 +95,7 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
         }
 
         putConfigurationProperty(FixturesInstallerFromConfiguration.FIXTURES, fixtureClassNamesCsv);
-        this.fixturesInstaller = createFixturesInstaller(configuration);
+        this.fixturesInstaller = new FixturesInstallerFromConfiguration(configuration);
 
         // integration tests ignore appManifest for authentication and authorization.
         this.authenticationManager = createAuthenticationManager(configuration);
@@ -110,10 +110,9 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
 
     //region > appManifest
 
-    private List<Object> createServices(final IsisConfiguration configuration) {
+    private List<Object> createServices(final IsisConfigurationDefault configuration) {
         final ServicesInstallerFromConfigurationAndAnnotation servicesInstaller =
-                new ServicesInstallerFromConfigurationAndAnnotation();
-        servicesInstaller.setConfiguration(configuration);
+                new ServicesInstallerFromConfigurationAndAnnotation(configuration);
         return servicesInstaller.getServices();
     }
 
@@ -121,7 +120,7 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
     @Override
     protected void doPutConfigurationProperty(final String key, final String value) {
         // bit hacky :-(
-        IsisConfigurationDefault configurationDefault = (IsisConfigurationDefault) this.configuration;
+        IsisConfigurationDefault configurationDefault = this.configuration;
         configurationDefault.put(key, value);
     }
 
@@ -139,16 +138,15 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
 
     private static List<Object> elseDefault(
             final List<Object> servicesOverride,
-            final IsisConfiguration configuration) {
+            final IsisConfigurationDefault configuration) {
         return servicesOverride != null
                 ? servicesOverride
                 : createDefaultServices(configuration);
     }
 
     private static List<Object> createDefaultServices(
-            final IsisConfiguration configuration) {
-        final ServicesInstallerFromConfiguration servicesInstaller = new ServicesInstallerFromConfiguration();
-        servicesInstaller.setConfiguration(configuration);
+            final IsisConfigurationDefault configuration) {
+        final ServicesInstallerFromConfiguration servicesInstaller = new ServicesInstallerFromConfiguration( configuration);
         return servicesInstaller.getServices();
     }
 
@@ -174,12 +172,6 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
                 : new MetaModelValidatorDefault();
     }
 
-    private static FixturesInstaller createFixturesInstaller(final IsisConfiguration configuration) {
-        final FixturesInstallerFromConfiguration fixturesInstallerFromConfiguration = new FixturesInstallerFromConfiguration();
-        fixturesInstallerFromConfiguration.setConfiguration(configuration);
-        return fixturesInstallerFromConfiguration;
-    }
-
     /**
      * The standard authentication manager, configured with the default authenticator (allows all requests through).
      */
@@ -268,9 +260,9 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
             final ServicesInjectorSpi servicesInjector,
             final SpecificationLoaderSpi specificationLoader) {
         DataNucleusPersistenceMechanismInstaller installer =
-                new DataNucleusPersistenceMechanismInstaller();
+                new DataNucleusPersistenceMechanismInstaller(configuration);
         return installer.createPersistenceSessionFactory(
-                deploymentType, configuration, servicesInjector
+                deploymentType, servicesInjector
         );
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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 9d00f39..e43c9e6 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
@@ -24,7 +24,6 @@ import java.util.List;
 
 import org.apache.isis.applib.AppManifest;
 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.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
@@ -130,6 +129,7 @@ public class IsisComponentProviderUsingInstallers extends IsisComponentProviderA
         // eagerly calculate
         authenticationManager = authenticationInstaller.createAuthenticationManager();
         authorizationManager = authorizationInstaller.createAuthorizationManager();
+
         services = servicesInstaller.getServices();
 
         ensureInitialized();
@@ -174,7 +174,7 @@ public class IsisComponentProviderUsingInstallers extends IsisComponentProviderA
             final ServicesInjectorSpi servicesInjector,
             final SpecificationLoaderSpi specificationLoader) {
         return persistenceMechanismInstaller.createPersistenceSessionFactory(
-                    deploymentType, getConfiguration(),
+                    deploymentType,
                 servicesInjector);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
index cfcab14..977f700 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
@@ -19,28 +19,22 @@
 
 package org.apache.isis.core.webapp;
 
-import java.util.List;
-
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 
-import com.google.common.collect.Lists;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderResourceStreams;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.config.NotFoundPolicy;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceComposite;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
+import org.apache.isis.core.commons.resource.ResourceStreamSourceCurrentClassClassPath;
 import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
-import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
 import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
 import org.apache.isis.core.runtime.runner.IsisInjectModule;
 import org.apache.isis.core.runtime.runner.opts.OptionHandlerInitParameters;
@@ -82,47 +76,26 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
         try {
             final ServletContext servletContext = servletContextEvent.getServletContext();
 
-            final String webappDir = servletContext.getRealPath("/");
             final String webInfDir = servletContext.getRealPath("/WEB-INF");
             loggingConfigurer.configureLogging(webInfDir, new String[0]);
 
-            final String configLocation = servletContext.getInitParameter(WebAppConstants.CONFIG_DIR_PARAM);
-            final ResourceStreamSourceComposite compositeSource = new ResourceStreamSourceComposite(
-                    ResourceStreamSourceContextLoaderClassPath.create(), 
-                    new ResourceStreamSourceForWebInf(servletContext)) ;
-
-            if ( configLocation != null ) {
-                LOG.info( "Config override location: " + configLocation );
-                compositeSource.addResourceStreamSource(ResourceStreamSourceFileSystem.create(configLocation));
-            } else {
-                LOG.info( "Config override location: No override location configured" );
-            }
-            
-            // will load either from WEB-INF, from the classpath or from config directory.
-            final IsisConfigurationBuilder isisConfigurationBuilder = new IsisConfigurationBuilderResourceStreams(compositeSource);
-
-            primeConfigurationBuilder(isisConfigurationBuilder, servletContext);
-
+            final IsisConfigurationBuilder isisConfigurationBuilder = obtainIsisConfigurationBuilder(servletContext);
             isisConfigurationBuilder.addDefaultConfigurationResources();
 
-            final DeploymentType deploymentType = determineDeploymentType(isisConfigurationBuilder, servletContext);
-
+            final DeploymentType deploymentType = determineDeploymentType(servletContext, isisConfigurationBuilder);
             addConfigurationResourcesForDeploymentType(isisConfigurationBuilder, deploymentType);
 
+            final String webappDir = servletContext.getRealPath("/");
             isisConfigurationBuilder.add(WebAppConstants.WEB_APP_DIR, webappDir);
-
             isisConfigurationBuilder.add(SystemConstants.NOSPLASH_KEY, "true");
 
-            IsisConfigurationDefault isisConfiguration = isisConfigurationBuilder.getConfiguration();
-
-            final InstallerLookup installerLookup = new InstallerLookup(isisConfiguration);
+            final IsisConfigurationDefault isisConfiguration = isisConfigurationBuilder.getConfiguration();
 
             injector = createGuiceInjector(isisConfiguration, deploymentType);
-
             final IsisSystem system = injector.getInstance(IsisSystem.class);
 
-
             servletContext.setAttribute(WebAppConstants.ISIS_SYSTEM_KEY, system);
+
         } catch (final RuntimeException e) {
             LOG.error("startup failed", e);
             throw e;
@@ -130,6 +103,48 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
         LOG.info("server started");
     }
 
+    protected IsisConfigurationBuilder obtainIsisConfigurationBuilder(final ServletContext servletContext) {
+        return obtainConfigBuilderFrom(servletContext);
+    }
+
+    /**
+     * publis so can also be used by Wicket viewer.
+     */
+    public static IsisConfigurationBuilder obtainConfigBuilderFrom(final ServletContext servletContext) {
+        final IsisConfigurationBuilder isisConfigurationBuilder = lookupIsisConfigurationBuilder(servletContext);
+        isisConfigurationBuilder.primeWith(new OptionHandlerInitParameters(servletContext));
+
+        addResourceStreamSources(servletContext, isisConfigurationBuilder);
+        return isisConfigurationBuilder;
+    }
+
+    public static IsisConfigurationBuilder lookupIsisConfigurationBuilder(final ServletContext servletContext) {
+        IsisConfigurationBuilder isisConfigurationBuilder =
+                (IsisConfigurationBuilder) servletContext.getAttribute(WebAppConstants.CONFIGURATION_BUILDER_KEY);
+        if(isisConfigurationBuilder == null) {
+            isisConfigurationBuilder = new IsisConfigurationBuilder();
+        }
+        return isisConfigurationBuilder;
+    }
+
+    private static void addResourceStreamSources(
+            final ServletContext servletContext,
+            final IsisConfigurationBuilder isisConfigurationBuilder) {
+
+        isisConfigurationBuilder.addResourceStreamSource(ResourceStreamSourceContextLoaderClassPath.create());
+        isisConfigurationBuilder.addResourceStreamSource(new ResourceStreamSourceCurrentClassClassPath());
+        isisConfigurationBuilder.addResourceStreamSource(new ResourceStreamSourceForWebInf(servletContext));
+
+        // will load either from WEB-INF, from the classpath or from config directory.
+        final String configLocation = servletContext.getInitParameter(WebAppConstants.CONFIG_DIR_PARAM);
+        if ( configLocation != null ) {
+            LOG.info( "Config override location: " + configLocation );
+            isisConfigurationBuilder.addResourceStreamSource(ResourceStreamSourceFileSystem.create(configLocation));
+        } else {
+            LOG.info( "Config override location: No override location configured" );
+        }
+    }
+
     private Injector createGuiceInjector(
             final IsisConfigurationDefault isisConfiguration,
             final DeploymentType deploymentType) {
@@ -137,22 +152,6 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
         return Guice.createInjector(isisModule);
     }
 
-    @SuppressWarnings("unchecked")
-    private static void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder, final ServletContext servletContext) {
-        LOG.info("loading properties from option handlers");
-        final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers = Lists.newArrayList();
-        final List<IsisConfigurationBuilderPrimer> primers = (List<IsisConfigurationBuilderPrimer>) servletContext.getAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY);
-        if(primers != null) {
-            isisConfigurationBuilderPrimers.addAll(primers);
-        }
-        // also support loading from init parameters (specifically, to support simplericity's jetty-console)
-        isisConfigurationBuilderPrimers.add(new OptionHandlerInitParameters(servletContext));
-        for (final IsisConfigurationBuilderPrimer isisConfigurationBuilderPrimer : isisConfigurationBuilderPrimers) {
-            LOG.debug("priming configurations for " + isisConfigurationBuilderPrimer);
-            isisConfigurationBuilderPrimer.primeConfigurationBuilder(isisConfigurationBuilder);
-        }
-    }
-
     /**
      * Checks {@link IsisConfigurationBuilder configuration} for
      * {@value SystemConstants#DEPLOYMENT_TYPE_KEY}, (that is, from the command
@@ -162,27 +161,42 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
      * <p>
      * If no setting is found, defaults to {@link WebAppConstants#DEPLOYMENT_TYPE_DEFAULT}.
      */
-    private DeploymentType determineDeploymentType(
-            final IsisConfigurationBuilder isisConfigurationBuilder,
-            final ServletContext servletContext) {
-        String deploymentTypeStr = servletContext.getInitParameter(WebAppConstants.DEPLOYMENT_TYPE_KEY);
-        if (deploymentTypeStr == null) {
-            deploymentTypeStr = servletContext.getInitParameter(SystemConstants.DEPLOYMENT_TYPE_KEY);
+    protected DeploymentType determineDeploymentType(
+            final ServletContext servletContext,
+            final IsisConfigurationBuilder isisConfigurationBuilder) {
+        String deploymentTypeStr = determineDeploymentTypeStr(servletContext, isisConfigurationBuilder);
+        return DeploymentType.lookup(deploymentTypeStr);
+    }
+
+    private String determineDeploymentTypeStr(
+            final ServletContext servletContext,
+            final IsisConfigurationBuilder isisConfigurationBuilder) {
+
+        String deploymentTypeStr;
+
+        deploymentTypeStr = servletContext.getInitParameter(WebAppConstants.DEPLOYMENT_TYPE_KEY);
+        if (deploymentTypeStr != null) {
+            return deploymentTypeStr;
         }
-        if (deploymentTypeStr == null) {
-            deploymentTypeStr = isisConfigurationBuilder.getConfiguration().getString(SystemConstants.DEPLOYMENT_TYPE_KEY);
+
+        deploymentTypeStr = servletContext.getInitParameter(SystemConstants.DEPLOYMENT_TYPE_KEY);
+        if (deploymentTypeStr != null) {
+            return deploymentTypeStr;
         }
-        if (deploymentTypeStr == null) {
-            deploymentTypeStr = WebAppConstants.DEPLOYMENT_TYPE_DEFAULT;
+
+        deploymentTypeStr = isisConfigurationBuilder.peekConfiguration().getString(SystemConstants.DEPLOYMENT_TYPE_KEY);
+        if (deploymentTypeStr != null) {
+            return deploymentTypeStr;
         }
-        return DeploymentType.lookup(deploymentTypeStr);
+
+        return WebAppConstants.DEPLOYMENT_TYPE_DEFAULT;
     }
 
-    private static void addConfigurationResourcesForDeploymentType(
-            final IsisConfigurationBuilder configurationLoader,
+    protected void addConfigurationResourcesForDeploymentType(
+            final IsisConfigurationBuilder isisConfigurationBuilder,
             final DeploymentType deploymentType) {
         final String resourceName = deploymentType.name().toLowerCase() + ".properties";
-        configurationLoader.addConfigurationResource(resourceName, NotFoundPolicy.CONTINUE);
+        isisConfigurationBuilder.addConfigurationResource(resourceName, NotFoundPolicy.CONTINUE);
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java
index fdaac88..ea308d1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.webapp;
 
 import org.apache.isis.applib.fixtures.LogonFixture;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.IsisSystem;
 
@@ -33,18 +32,16 @@ public final class WebAppConstants {
      */
     public static final String DEPLOYMENT_TYPE_KEY = "deploymentType";
     /**
-     * Deployment type to use if there is none {@link DEPLOYMENT_TYPE_KEY
-     * specified}.
+     * Deployment type to use if there is none {@link #DEPLOYMENT_TYPE_KEY specified}.
      */
     public static final String DEPLOYMENT_TYPE_DEFAULT = DeploymentType.SERVER.name();
 
     /**
-     * Key under which the list of {@link IsisConfigurationBuilderPrimer}s is
-     * bound as a servlet context attribute (
-     * <tt>ServletContext#getAttribute(String)</tt>); used to pass from the
-     * <tt>webserver</tt> module to this.
+     * Key under which the {@link org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder} is
+     * bound as a servlet context attribute (<tt>ServletContext#getAttribute(String)</tt>); used to pass
+     * from the <tt>webserver</tt> module to this.
      */
-    public static final String CONFIGURATION_PRIMERS_KEY = "isis.configurationPrimers";
+    public static final String CONFIGURATION_BUILDER_KEY = "isis.configurationBuilder";
 
     /**
      * Key under which the {@link IsisSystem} is bound as a servlet context

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
index 07cf783..5b2ea63 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
@@ -23,8 +23,7 @@ import java.util.List;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.core.commons.components.Installer;
-import org.apache.isis.core.commons.config.InstallerAbstract;
+import org.apache.isis.core.commons.components.InstallerAbstract;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -34,14 +33,6 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
 
 /**
- * Configuration files are read in the usual fashion (as per {@link Installer#getConfigurationResources()}, ie will consult all of:
- * <ul>
- * <li><tt>persistor_datanucleus.properties</tt>
- * <li><tt>persistor.properties</tt>
- * <li><tt>isis.properties</tt>
- * </ul>
- * 
- * <p>
  * With respect to configuration, all properties under {@value #DATANUCLEUS_CONFIG_PREFIX} prefix are passed
  * through verbatim to the DataNucleus runtime. For example:
  * <table>
@@ -59,18 +50,25 @@ public class DataNucleusPersistenceMechanismInstaller extends InstallerAbstract
     public static final String JDO_OBJECTSTORE_CONFIG_PREFIX = "isis.persistor.datanucleus";  // specific to the JDO objectstore
     public static final String DATANUCLEUS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl"; // reserved for datanucleus' own config props
 
+    /**
+     * @deprecated - this will be ignored...
+     */
+    @Deprecated
     public DataNucleusPersistenceMechanismInstaller() {
-        super(PersistenceMechanismInstaller.TYPE, NAME);
+        super(PersistenceMechanismInstaller.TYPE, NAME, null);
+    }
+
+    public DataNucleusPersistenceMechanismInstaller(final IsisConfigurationDefault isisConfiguration) {
+        super(PersistenceMechanismInstaller.TYPE, NAME, isisConfiguration);
     }
 
     //region > createPersistenceSessionFactory
     @Override
     public PersistenceSessionFactory createPersistenceSessionFactory(
             final DeploymentType deploymentType,
-            final IsisConfigurationDefault configuration,
             final ServicesInjectorSpi servicesInjector) {
 
-        return new PersistenceSessionFactory(deploymentType, configuration);
+        return new PersistenceSessionFactory(deploymentType, getConfiguration());
     }
     //endregion
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authentication/ShiroAuthenticationManagerInstaller.java
----------------------------------------------------------------------
diff --git a/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authentication/ShiroAuthenticationManagerInstaller.java b/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authentication/ShiroAuthenticationManagerInstaller.java
index 117bc8f..6df1a2d 100644
--- a/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authentication/ShiroAuthenticationManagerInstaller.java
+++ b/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authentication/ShiroAuthenticationManagerInstaller.java
@@ -20,23 +20,24 @@ package org.apache.isis.security.shiro.authentication;
 
 import java.util.List;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.runtime.authentication.AuthenticationManagerStandardInstallerAbstractForDfltRuntime;
 import org.apache.isis.core.runtime.authentication.standard.Authenticator;
 import org.apache.isis.security.shiro.ShiroAuthenticatorOrAuthorizor;
 
-import com.google.common.collect.Lists;
-
-public class ShiroAuthenticationManagerInstaller extends AuthenticationManagerStandardInstallerAbstractForDfltRuntime {
+public class ShiroAuthenticationManagerInstaller
+        extends AuthenticationManagerStandardInstallerAbstractForDfltRuntime {
 
     public static String NAME = "shiro";
 
-    public ShiroAuthenticationManagerInstaller() {
-        super(NAME);
+    public ShiroAuthenticationManagerInstaller(final IsisConfigurationDefault isisConfiguration) {
+        super(NAME, isisConfiguration);
     }
 
     @Override
-    protected List<Authenticator> createAuthenticators(final IsisConfiguration configuration) {
-        return Lists.<Authenticator> newArrayList(new ShiroAuthenticatorOrAuthorizor(configuration));
+    protected List<Authenticator> createAuthenticators() {
+        return Lists.<Authenticator> newArrayList(new ShiroAuthenticatorOrAuthorizor(getConfiguration()));
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authorization/ShiroAuthorizationManagerInstaller.java
----------------------------------------------------------------------
diff --git a/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authorization/ShiroAuthorizationManagerInstaller.java b/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authorization/ShiroAuthorizationManagerInstaller.java
index 8dd09b2..f8df59d 100644
--- a/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authorization/ShiroAuthorizationManagerInstaller.java
+++ b/core/security-shiro/src/main/java/org/apache/isis/security/shiro/authorization/ShiroAuthorizationManagerInstaller.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.security.shiro.authorization;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.runtime.authorization.standard.AuthorizationManagerStandardInstallerAbstract;
 import org.apache.isis.core.runtime.authorization.standard.Authorizor;
 import org.apache.isis.security.shiro.ShiroAuthenticatorOrAuthorizor;
@@ -27,13 +27,13 @@ public class ShiroAuthorizationManagerInstaller extends AuthorizationManagerStan
 
     public static String NAME = "shiro";
 
-    public ShiroAuthorizationManagerInstaller() {
-        super(NAME);
+    public ShiroAuthorizationManagerInstaller(final IsisConfigurationDefault isisConfiguration) {
+        super(NAME, isisConfiguration);
     }
 
     @Override
-    protected Authorizor createAuthorizor(final IsisConfiguration configuration) {
-        return new ShiroAuthenticatorOrAuthorizor(configuration);
+    protected Authorizor createAuthorizor() {
+        return new ShiroAuthenticatorOrAuthorizor(getConfiguration());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/security/src/main/java/org/apache/isis/core/security/authentication/BypassAuthenticationManagerInstaller.java
----------------------------------------------------------------------
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/BypassAuthenticationManagerInstaller.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/BypassAuthenticationManagerInstaller.java
index 5dd9489..68e2552 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/BypassAuthenticationManagerInstaller.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/BypassAuthenticationManagerInstaller.java
@@ -23,7 +23,7 @@ import java.util.List;
 
 import com.google.common.collect.Lists;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.runtime.authentication.AuthenticationManagerStandardInstallerAbstractForDfltRuntime;
 import org.apache.isis.core.runtime.authentication.standard.Authenticator;
 
@@ -37,13 +37,13 @@ import org.apache.isis.core.runtime.authentication.standard.Authenticator;
  */
 public class BypassAuthenticationManagerInstaller extends AuthenticationManagerStandardInstallerAbstractForDfltRuntime {
 
-    public BypassAuthenticationManagerInstaller() {
-        super("bypass");
+    public BypassAuthenticationManagerInstaller(final IsisConfigurationDefault isisConfiguration) {
+        super("bypass", isisConfiguration);
     }
 
     @Override
-    protected List<Authenticator> createAuthenticators(final IsisConfiguration configuration) {
-        return Lists.<Authenticator> newArrayList(new AuthenticatorBypass(configuration));
+    protected List<Authenticator> createAuthenticators() {
+        return Lists.<Authenticator> newArrayList(new AuthenticatorBypass(getConfiguration()));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/security/src/main/java/org/apache/isis/core/security/authorization/BypassAuthorizationManagerInstaller.java
----------------------------------------------------------------------
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authorization/BypassAuthorizationManagerInstaller.java b/core/security/src/main/java/org/apache/isis/core/security/authorization/BypassAuthorizationManagerInstaller.java
index 383cbb1..e8a2876 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authorization/BypassAuthorizationManagerInstaller.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authorization/BypassAuthorizationManagerInstaller.java
@@ -19,18 +19,18 @@
 
 package org.apache.isis.core.security.authorization;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.runtime.authorization.standard.AuthorizationManagerStandardInstallerAbstract;
 import org.apache.isis.core.runtime.authorization.standard.Authorizor;
 
 public class BypassAuthorizationManagerInstaller extends AuthorizationManagerStandardInstallerAbstract {
 
-    public BypassAuthorizationManagerInstaller() {
-        super("bypass");
+    public BypassAuthorizationManagerInstaller(final IsisConfigurationDefault isisConfiguration) {
+        super("bypass", isisConfiguration);
     }
 
     @Override
-    protected Authorizor createAuthorizor(final IsisConfiguration configuration) {
+    protected Authorizor createAuthorizor() {
         return new AuthorizorBypass();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 09ec550..aa86820 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -24,8 +24,6 @@ import java.util.List;
 import java.util.ServiceLoader;
 import java.util.Set;
 
-import javax.servlet.ServletContext;
-
 import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -61,25 +59,17 @@ import org.wicketstuff.select2.ApplicationSettings;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderResourceStreams;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceComposite;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceCurrentClassClassPath;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
 import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
 import org.apache.isis.core.runtime.runner.IsisInjectModule;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerInitParameters;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.IsisSystem;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.webapp.WebAppConstants;
-import org.apache.isis.core.webapp.config.ResourceStreamSourceForWebInf;
+import org.apache.isis.core.webapp.IsisWebAppBootstrapper;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
@@ -245,16 +235,18 @@ public class IsisWicketApplication
 
             getResourceSettings().setParentFolderPlaceholder("$up$");
 
-            determineDeploymentTypeIfRequired();
+            final IsisConfigurationBuilder isisConfigurationBuilder = obtainConfigBuilder();
+            isisConfigurationBuilder.addDefaultConfigurationResources();
+
+            final IsisConfigurationDefault configuration = isisConfigurationBuilder.getConfiguration();
+
+            deploymentType = determineDeploymentType(configuration.getString("isis.deploymentType"));
 
             RequestCycleListenerCollection requestCycleListeners = getRequestCycleListeners();
             IRequestCycleListener requestCycleListenerForIsis = newWebRequestCycleForIsis();
             requestCycleListeners.add(requestCycleListenerForIsis);
             requestCycleListeners.add(new PageRequestHandlerTracker());
 
-            final IsisConfigurationBuilder isisConfigurationBuilder = createConfigBuilder();
-            final IsisConfigurationDefault configuration = isisConfigurationBuilder.getConfiguration();
-
             final IsisInjectModule isisModule = newIsisModule(deploymentType, configuration);
             final Injector injector = Guice.createInjector(isisModule, newIsisWicketModule());
             initWicketComponentInjection(injector);
@@ -397,8 +389,9 @@ public class IsisWicketApplication
 
         determiningDeploymentType = true;
         try {
-            final IsisConfigurationBuilder isisConfigurationBuilder = createConfigBuilder();
-            final IsisConfiguration configuration = isisConfigurationBuilder.getConfiguration();
+            final IsisConfigurationBuilder isisConfigurationBuilder = obtainConfigBuilder();
+
+            final IsisConfiguration configuration = isisConfigurationBuilder.peekConfiguration();
             String deploymentTypeFromConfig = configuration.getString("isis.deploymentType");
             deploymentType = determineDeploymentType(deploymentTypeFromConfig);
         } finally {
@@ -428,49 +421,12 @@ public class IsisWicketApplication
 
     // //////////////////////////////////////
 
-    private IsisConfigurationBuilder createConfigBuilder() {
-        return createConfigBuilder(getServletContext());
-    }
-
-    protected IsisConfigurationBuilder createConfigBuilder(final ServletContext servletContext) {
+    private IsisConfigurationBuilder isisConfigurationBuilder;
 
-        final String configLocation = servletContext.getInitParameter(WebAppConstants.CONFIG_DIR_PARAM);
-        final ResourceStreamSourceForWebInf rssWebInf = new ResourceStreamSourceForWebInf(servletContext);
-        final ResourceStreamSourceContextLoaderClassPath rssContextLoaderClassPath = ResourceStreamSourceContextLoaderClassPath.create();
-        final ResourceStreamSourceCurrentClassClassPath rssCurrentClassPath = new ResourceStreamSourceCurrentClassClassPath();
-        final ResourceStreamSourceComposite compositeSource = new ResourceStreamSourceComposite(rssWebInf, rssContextLoaderClassPath, rssCurrentClassPath);
-
-        if ( configLocation != null ) {
-            LOG.info( "Config override location: " + configLocation );
-            compositeSource.addResourceStreamSource(ResourceStreamSourceFileSystem.create(configLocation));
-        } else {
-            LOG.info( "Config override location: No override location configured!" );
-        }
-
-        final IsisConfigurationBuilder configurationBuilder = new IsisConfigurationBuilderResourceStreams(compositeSource);
-
-        primeConfigurationBuilder(configurationBuilder, servletContext);
-        configurationBuilder.addDefaultConfigurationResources();
-
-        return configurationBuilder;
-    }
-
-    @SuppressWarnings("unchecked")
-    private static void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder, final ServletContext servletContext) {
-        LOG.info("loading properties from option handlers");
-        final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers = Lists.newArrayList();
-        final List<IsisConfigurationBuilderPrimer> primers = (List<IsisConfigurationBuilderPrimer>) servletContext.getAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY);
-        if(primers != null) {
-            isisConfigurationBuilderPrimers.addAll(primers);
-        }
-        // also support loading from init parameters (specifically, to support simplericity's jetty-console)
-        isisConfigurationBuilderPrimers.add(new OptionHandlerInitParameters(servletContext));
-        for (final IsisConfigurationBuilderPrimer isisConfigurationBuilderPrimer : isisConfigurationBuilderPrimers) {
-            if(LOG.isDebugEnabled()) {
-                LOG.debug("priming configurations for " + isisConfigurationBuilderPrimer);
-            }
-            isisConfigurationBuilderPrimer.primeConfigurationBuilder(isisConfigurationBuilder);
-        }
+    protected IsisConfigurationBuilder obtainConfigBuilder() {
+        return isisConfigurationBuilder != null
+                    ? isisConfigurationBuilder
+                    : (isisConfigurationBuilder = IsisWebAppBootstrapper.obtainConfigBuilderFrom(getServletContext()));
     }
 
     // //////////////////////////////////////
@@ -693,7 +649,9 @@ public class IsisWicketApplication
         return deploymentType.getConfigurationType();
     }
     
-    protected IsisInjectModule newIsisModule(final DeploymentType deploymentType, final IsisConfigurationDefault isisConfiguration) {
+    protected IsisInjectModule newIsisModule(
+            final DeploymentType deploymentType,
+            final IsisConfigurationDefault isisConfiguration) {
         return new IsisInjectModule(deploymentType, isisConfiguration);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java
index 2dda4ef..8150859 100644
--- a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java
+++ b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java
@@ -30,7 +30,7 @@ import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.IsisSystem;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
index f93220e..c663af2 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
@@ -19,26 +19,58 @@
 
 package org.apache.isis.core.webserver;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
+import java.io.File;
 import java.net.URI;
+import java.util.Arrays;
 import java.util.Formatter;
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.Lists;
 
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.webapp.WebAppContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderDefault;
+import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.lang.ArrayExtensions;
-import org.apache.isis.core.runtime.runner.IsisRunner;
+import org.apache.isis.core.commons.lang.ObjectExtensions;
+import org.apache.isis.core.commons.resource.ResourceStreamSource;
+import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
+import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
+import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
+import org.apache.isis.core.runtime.optionhandler.OptionHandler;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerAdditionalProperty;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerAppManifest;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerConfiguration;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixture;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixtureFromEnvironmentVariable;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerHelp;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerSystemProperties;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerVersion;
+import org.apache.isis.core.webapp.WebAppConstants;
 import org.apache.isis.core.webserver.internal.OptionHandlerDeploymentTypeWebServer;
 import org.apache.isis.core.webserver.internal.OptionHandlerPort;
 import org.apache.isis.core.webserver.internal.OptionHandlerStartupMode;
 
+import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_PORT_DEFAULT;
+import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_PORT_KEY;
+import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_RESOURCE_BASE_DEFAULT;
+import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_RESOURCE_BASE_KEY;
+import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_STARTUP_MODE_DEFAULT;
+import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY;
+
 public class WebServer {
 
-    public static enum StartupMode {
+    private static final Logger LOG = LoggerFactory.getLogger(WebServer.class);
+    private static final String SRC_MAIN_WEBAPP = "src/main/webapp";
+
+    public enum StartupMode {
         FOREGROUND, BACKGROUND;
 
         public static StartupMode lookup(final String value) {
@@ -55,37 +87,18 @@ public class WebServer {
         public boolean isForeground() {
             return this == FOREGROUND;
         }
-
         public boolean isBackground() {
             return this == BACKGROUND;
         }
-
     }
 
+
     private Server jettyServer;
 
     public static void main(final String[] args) {
-//        System.out.println("press any key to start...");
-//        readLine();
-//        final String[] args2 = ArrayExtensions.append(args, "--" + Constants.NO_SPLASH_LONG_OPT);
         new WebServer().run(args);
     }
 
-    private static void readLine() {
-        try{
-            BufferedReader br =
-                    new BufferedReader(new InputStreamReader(System.in));
-
-            br.readLine();
-        } catch(IOException io){
-            io.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    /**
-     * Originally introduced to allow the WebServer to be used by tests.
-     */
     public void run(final int port) {
         String[] args = new String[0];
         args = OptionHandlerStartupMode.appendArg(args, StartupMode.BACKGROUND);
@@ -93,34 +106,111 @@ public class WebServer {
         run(args);
     }
 
+    private final IsisLoggingConfigurer loggingConfigurer = new IsisLoggingConfigurer();
+
     public void run(final String[] args) {
-        final IsisRunner runner = new IsisRunner(args, new OptionHandlerDeploymentTypeWebServer());
-        addOptionHandlersAndValidators(runner);
-        if (!runner.parseAndValidate()) {
+
+        // setup logging immediately
+        loggingConfigurer.configureLogging(guessConfigDirectory(), args);
+
+        // set up the configuration
+        final IsisConfigurationBuilder isisConfigurationBuilder = new IsisConfigurationBuilder();
+        isisConfigurationBuilder.addResourceStreamSources(resourceStreamSources());
+
+        if(!isisConfigurationBuilder.parseAndPrimeWith(standardHandlers(), args)) {
             return;
         }
-        runner.setConfigurationBuilder(new IsisConfigurationBuilderDefault());
-        runner.primeConfigurationWithCommandLineOptions();
-        runner.loadInitialProperties();
-        
-        final WebServerBootstrapper bootstrapper = new WebServerBootstrapper(runner);
-        bootstrapper.bootstrap(null);
-        jettyServer = bootstrapper.getJettyServer();
+
+        // create and start
+        jettyServer = createJettyServerAndBindConfig(isisConfigurationBuilder);
+
+        final IsisConfiguration configuration = isisConfigurationBuilder.peekConfiguration();
+        final String startupModeStr = configuration.getString(
+                EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY, EMBEDDED_WEB_SERVER_STARTUP_MODE_DEFAULT);
+        final StartupMode startupMode = StartupMode.lookup(startupModeStr);
+
+        start(jettyServer, startupMode);
     }
 
-    private void addOptionHandlersAndValidators(IsisRunner runner) {
+    private static List<OptionHandler> standardHandlers() {
+        return Lists.newArrayList(
+                   new OptionHandlerConfiguration(),
+                new OptionHandlerFixture(),
+                new OptionHandlerAppManifest(),
+                new OptionHandlerAdditionalProperty(),
+                new OptionHandlerFixtureFromEnvironmentVariable(),
+                new OptionHandlerSystemProperties(),
+                new OptionHandlerHelp(),
+                new OptionHandlerVersion(),
+                new OptionHandlerPort(),
+                new OptionHandlerDeploymentTypeWebServer()
+        );
+    }
+
+    // REVIEW: hacky...
+    private static String guessConfigDirectory() {
+        return new File(ConfigurationConstants.WEBINF_FULL_DIRECTORY).exists() ?
+                ConfigurationConstants.WEBINF_FULL_DIRECTORY :
+                ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY;
+    }
+
+
+    private Server createJettyServerAndBindConfig(final IsisConfigurationBuilder configurationBuilder) {
+
+        // the Isis system is actually bootstrapped by the ServletContextInitializer in the web.xml
+        final IsisConfiguration configuration = configurationBuilder.peekConfiguration();
+        final int port = configuration.getInteger(
+                EMBEDDED_WEB_SERVER_PORT_KEY, EMBEDDED_WEB_SERVER_PORT_DEFAULT);
+        final String webappContextPath = configuration.getString(
+                EMBEDDED_WEB_SERVER_RESOURCE_BASE_KEY, EMBEDDED_WEB_SERVER_RESOURCE_BASE_DEFAULT);
+
+        LOG.info("Running Jetty on port '{}' to serve the web application", port);
+
+        final Server jettyServer = new Server(port);
+        final WebAppContext context = new WebAppContext(SRC_MAIN_WEBAPP, webappContextPath);
+        jettyServer.setHandler(context);
+
+        context.setAttribute(WebAppConstants.CONFIGURATION_BUILDER_KEY, configurationBuilder);
 
-        // adjustments
-        runner.addOptionHandler(new OptionHandlerPort());
+        return jettyServer;
+    }
 
-        // unused
-        // runner.addOptionHandler(new OptionHandlerAddress());
+    private static void start(final Server jettyServer, final StartupMode startupMode) {
+        long start = System.currentTimeMillis();
+        try {
+            jettyServer.start();
+            LOG.info("Started the application in {}ms", System.currentTimeMillis() - start);
+            if (startupMode.isForeground()) {
+                System.in.read();
+                System.out.println(">>> STOPPING EMBEDDED JETTY SERVER");
+                jettyServer.stop();
+                jettyServer.join();
+            }
+        } catch (final Exception ex) {
+            throw new IsisException("Unable to start Jetty server", ex);
+        }
+    }
+
+    @SuppressWarnings("unused")
+    private void copyDeploymentTypeIntoInitParams(final WebAppContext context) {
+        Map<String, String> initParams = context.getInitParams();
+        Map<String, String> convertedInitParams = ObjectExtensions.asT(initParams);
+        initParams.clear();
+        initParams.putAll(convertedInitParams);
+    }
 
-        // too obscure
-        // runner.addOptionHandler(new OptionHandlerResourceBase());
 
-        // REVIEW: clashes with -a flag.
-        //runner.addOptionHandler(new OptionHandlerStartupMode());
+    /**
+     * Set of locations to search for config files.
+     */
+    private static List<ResourceStreamSource> resourceStreamSources() {
+        final List<ResourceStreamSource> rssList = Lists.newArrayList();
+        rssList.addAll(Arrays.asList(
+                ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY),
+                ResourceStreamSourceFileSystem.create(ConfigurationConstants.WEBINF_FULL_DIRECTORY),
+                ResourceStreamSourceContextLoaderClassPath.create(),
+                ResourceStreamSourceContextLoaderClassPath.create(ConfigurationConstants.WEBINF_DIRECTORY)));
+        return rssList;
     }
 
     public void stop() {

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java
deleted file mode 100644
index ee6e5f4..0000000
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java
+++ /dev/null
@@ -1,125 +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.webserver;
-
-import java.util.List;
-import java.util.Map;
-
-import com.google.inject.Injector;
-
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.lang.ObjectExtensions;
-import org.apache.isis.core.runtime.runner.IsisBootstrapper;
-import org.apache.isis.core.runtime.runner.IsisRunner;
-import org.apache.isis.core.webapp.WebAppConstants;
-import org.apache.isis.core.webserver.WebServer.StartupMode;
-
-import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_PORT_DEFAULT;
-import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_PORT_KEY;
-import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_RESOURCE_BASE_DEFAULT;
-import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_RESOURCE_BASE_KEY;
-import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_STARTUP_MODE_DEFAULT;
-import static org.apache.isis.core.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY;
-
-final class WebServerBootstrapper implements IsisBootstrapper {
-
-    private static final Logger LOG = LoggerFactory.getLogger(WebServerBootstrapper.class);
-    private static final String SRC_MAIN_WEBAPP = "src/main/webapp";
-
-    private final IsisRunner runner;
-
-    private Server jettyServer;
-
-    WebServerBootstrapper(final IsisRunner runner) {
-        this.runner = runner;
-    }
-
-    /**
-     * ignores the arguments and just bootstraps JettyViewer, come what may.
-     */
-    @Override
-    public void bootstrap(final Injector injector) {
-
-        final IsisConfigurationBuilder isisConfigurationBuilder = runner.getStartupConfiguration();
-
-        // we don't actually bootstrap the system here; instead we expect it to
-        // be bootstrapped
-        // from the ServletContextInitializer in the web.xml
-        final IsisConfiguration configuration = isisConfigurationBuilder.getConfiguration();
-        final int port = configuration.getInteger(EMBEDDED_WEB_SERVER_PORT_KEY, EMBEDDED_WEB_SERVER_PORT_DEFAULT);
-        final String webappContextPath = configuration.getString(EMBEDDED_WEB_SERVER_RESOURCE_BASE_KEY, EMBEDDED_WEB_SERVER_RESOURCE_BASE_DEFAULT);
-        final StartupMode startupMode = StartupMode.lookup(configuration.getString(EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY, EMBEDDED_WEB_SERVER_STARTUP_MODE_DEFAULT));
-        // TODO get and use the address
-
-        jettyServer = new Server(port);
-        final WebAppContext context = new WebAppContext(SRC_MAIN_WEBAPP, webappContextPath);
-
-        copyConfigurationPrimersIntoServletContext(context);
-
-        jettyServer.setHandler(context);
-
-        LOG.info("Starting Jetty on port '{}' to serve the web application", port);
-        long start = System.currentTimeMillis();
-        try {
-            jettyServer.start();
-            LOG.info("Started the application in {}ms", System.currentTimeMillis() - start);
-            if (startupMode.isForeground()) {
-                System.in.read();
-                System.out.println(">>> STOPPING EMBEDDED JETTY SERVER");
-                jettyServer.stop();
-                jettyServer.join();
-            }
-        } catch (final Exception ex) {
-             throw new IsisException("Unable to start Jetty server", ex);
-        }
-    }
-
-    public Server getJettyServer() {
-        return jettyServer;
-    }
-
-    /**
-     * Bound to the {@link WebAppContext} so that they can be used when
-     * bootstrapping.
-     *
-     * @param context
-     */
-    @SuppressWarnings("unchecked")
-    private void copyConfigurationPrimersIntoServletContext(final WebAppContext context) {
-        final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers = (List<IsisConfigurationBuilderPrimer>) (List<?>) runner.getOptionHandlers();
-        context.setAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY, isisConfigurationBuilderPrimers);
-    }
-
-    @SuppressWarnings("unused")
-    private void copyDeploymentTypeIntoInitParams(final WebAppContext context) {
-        Map<String, String> initParams = context.getInitParams();
-        Map<String, String> convertedInitParams = ObjectExtensions.asT(initParams);
-        initParams.clear();
-        initParams.putAll(convertedInitParams);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerAddress.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerAddress.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerAddress.java
index ef1512e..87537f1 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerAddress.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerAddress.java
@@ -27,7 +27,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandler;
 import org.apache.isis.core.webserver.WebServerConstants;
@@ -55,7 +55,7 @@ public final class OptionHandlerAddress implements OptionHandler {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         if (address == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerPort.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerPort.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerPort.java
index 922b567..f84589a 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerPort.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerPort.java
@@ -27,7 +27,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.lang.ArrayExtensions;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandler;
@@ -60,7 +60,7 @@ public final class OptionHandlerPort implements OptionHandler {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         if (port == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerResourceBase.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerResourceBase.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerResourceBase.java
index 5000fd1..4a2c965 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerResourceBase.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerResourceBase.java
@@ -24,7 +24,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandler;
 import org.apache.isis.core.webserver.WebServerConstants;
@@ -52,7 +52,7 @@ public final class OptionHandlerResourceBase implements OptionHandler {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         if (resourceBase == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerStartupMode.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerStartupMode.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerStartupMode.java
index 7ea9002..4e7d865 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerStartupMode.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerStartupMode.java
@@ -24,7 +24,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.lang.ArrayExtensions;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandler;
@@ -56,7 +56,7 @@ public final class OptionHandlerStartupMode implements OptionHandler {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         if (startupMode != null) {
             isisConfigurationBuilder.add(WebServerConstants.EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY, startupMode.name());
         }


[4/4] isis git commit: ISIS-1406: lots more refactoring around IsisConfiguration and IsisConfigurationBuilder.

Posted by da...@apache.org.
ISIS-1406: lots more refactoring around IsisConfiguration and IsisConfigurationBuilder.

specifically:
- simplified IsisConfigurationBuilder, now a single class (rather than an interface with 4 different impls, only 2 of which were used).
- removed IsisRunner, so that the command line options are now a responsibility of the IsisConfigurationBuilder
- IsisConfigurationBuilder is passed from o.a.i.WebServer to IsisWicketApplication (not just the "primers"
- removed OptionValidator, wasn't being used
- FacetFactoryAbstract responsible for providing IsisConfiguration to all subclass impls
- InstallerLookup simplified, no longer responsible for appending to the IsisConfigurationBuilder
- InstallerAbstract impls now all have the IsisConfiguration injected into them (constructor injection).
- removed duplication between IsisWebAppBootstrapper and IsisWicketApplication

As of this commit the app runs, but the fixtures are not being automatically installed.


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

Branch: refs/heads/ISIS-1406
Commit: 7456588834a18ff4b47e59af93e1ccaa29912457
Parents: dcaab8e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu May 19 13:53:08 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu May 19 13:53:08 2016 +0100

----------------------------------------------------------------------
 .../integtestsupport/IsisSystemForTest.java     |   2 +-
 .../isis/core/commons/components/Installer.java |  34 --
 .../commons/components/InstallerAbstract.java   | 117 ++++++
 .../core/commons/config/InstallerAbstract.java  | 176 ---------
 .../core/commons/config/IsisConfiguration.java  |   3 +-
 .../config/IsisConfigurationBuilder.java        |  73 ----
 .../config/IsisConfigurationBuilderAware.java   |  25 --
 .../config/IsisConfigurationBuilderDefault.java |  76 ----
 .../IsisConfigurationBuilderFileSystem.java     |  57 ---
 .../config/IsisConfigurationBuilderPrimer.java  |  26 --
 ...IsisConfigurationBuilderResourceStreams.java | 289 ---------------
 .../config/IsisConfigurationDefault.java        |   4 -
 .../isis/core/commons/config/JmxBeanServer.java |  73 ----
 .../core/commons/config/PropertiesReader.java   |  54 ---
 .../isis/core/commons/config/package-info.java  |   2 +-
 .../ConfigurationResourceAndPolicy.java         |  46 +++
 .../configbuilder/IsisConfigurationBuilder.java | 371 +++++++++++++++++++
 .../commons/configbuilder/PropertiesReader.java |  54 +++
 .../isis/core/commons/factory/InstanceUtil.java |  69 +++-
 .../isis/core/commons/jmx/JmxBeanServer.java    |  67 ++++
 ...sourceStreamSourceChainOfResponsibility.java |   3 +
 .../metamodel/facets/FacetFactoryAbstract.java  |  11 +-
 ...llectionIdentifyingFacetFactoryAbstract.java |  14 -
 .../action/ActionAnnotationFacetFactory.java    |  20 +-
 .../paged/PagedFacetOnActionFactory.java        |  10 +-
 .../CollectionAnnotationFacetFactory.java       |   7 +-
 .../paged/PagedFacetOnCollectionFactory.java    |  10 +-
 .../facets/fallback/FallbackFacetFactory.java   |  16 -
 ...FacetOnActionFromConfiguredRegexFactory.java |  18 +-
 .../annotprop/CssClassFacetOnMemberFactory.java |   7 +-
 .../CssClassFaFacetOnMemberFactory.java         |   8 +-
 .../ViewModelSemanticCheckingFacetFactory.java  |  14 +-
 ...FacetAnnotationElseConfigurationFactory.java |  26 +-
 .../DomainObjectAnnotationFacetFactory.java     |  26 +-
 .../DomainObjectLayoutFacetFactory.java         |  19 +-
 ...FacetAnnotationElseConfigurationFactory.java |  20 +-
 ...FacetAnnotationElseConfigurationFactory.java |  25 +-
 ...ueFacetAnnotationOrConfigurationFactory.java |  24 +-
 ...ValueFacetUsingSemanticsProviderFactory.java |  14 -
 .../PropertyAnnotationFacetFactory.java         |   8 +-
 .../ConfigurationServiceInternal.java           |   2 -
 .../facetprocessor/FacetProcessor.java          |   1 -
 ...icationManagerStandardInstallerAbstract.java |  14 +-
 ...izationManagerStandardInstallerAbstract.java |  20 +-
 .../runtime/optionhandler/OptionHandler.java    |  11 +-
 .../runtime/runner/opts/OptionValidator.java    |  28 ++
 .../IsisConfigurationBuilderForWebapp.java      |  44 ---
 .../progmodels/dflt/JavaReflectorInstaller.java |   5 +
 .../JavaReflectorInstallerNoDecorators.java     |  47 ++-
 .../ConfigurationBuilderFileSystemTest.java     |  76 ----
 ...ourceStreamsConfigResourceAndPolicyTest.java |  47 ---
 .../ConfigurationBuilderTwoDirectoriesTest.java |  37 --
 ...ourceStreamsConfigResourceAndPolicyTest.java |  49 +++
 .../ObjectReflectorDefaultTestAbstract.java     |   3 -
 ...StandardInstallerAbstractForDfltRuntime.java |   7 +-
 .../fixtures/FixturesInstallerAbstract.java     |   7 +-
 .../FixturesInstallerFromConfiguration.java     |   9 +-
 .../runtime/fixtures/FixturesInstallerNoop.java |  44 ---
 .../installerregistry/InstallerLookup.java      |   8 +-
 .../PersistenceMechanismInstaller.java          |   5 +-
 .../core/runtime/runner/IsisBootstrapper.java   |  29 --
 .../isis/core/runtime/runner/IsisRunner.java    | 276 --------------
 .../opts/OptionHandlerAdditionalProperty.java   |   4 +-
 .../runner/opts/OptionHandlerAppManifest.java   |   6 +-
 .../runner/opts/OptionHandlerConfiguration.java |   4 +-
 .../runtime/runner/opts/OptionHandlerDebug.java |   4 +-
 .../opts/OptionHandlerDeploymentType.java       |  10 +-
 .../runner/opts/OptionHandlerDiagnostics.java   |   4 +-
 .../opts/OptionHandlerFixtureAbstract.java      |   4 +-
 ...onHandlerFixtureFromEnvironmentVariable.java |   4 +-
 .../runtime/runner/opts/OptionHandlerHelp.java  |   4 +-
 .../opts/OptionHandlerInitParameters.java       |   4 +-
 .../runner/opts/OptionHandlerNoSplash.java      |   4 +-
 .../runner/opts/OptionHandlerPassword.java      |   4 +-
 .../runtime/runner/opts/OptionHandlerQuiet.java |   4 +-
 .../runner/opts/OptionHandlerReflector.java     |   4 +-
 .../opts/OptionHandlerSystemProperties.java     |   4 +-
 .../runtime/runner/opts/OptionHandlerUser.java  |   4 +-
 .../runner/opts/OptionHandlerVerbose.java       |   4 +-
 .../runner/opts/OptionHandlerVersion.java       |   4 +-
 .../runtime/runner/opts/OptionValidator.java    |  28 --
 .../OptionValidatorUserAndPasswordCombo.java    |  48 ---
 .../runtime/services/ServicesInstaller.java     |   4 +-
 .../services/ServicesInstallerAbstract.java     |  10 +-
 .../ServicesInstallerFromAnnotation.java        |  67 +++-
 .../ServicesInstallerFromConfiguration.java     |  16 +-
 ...InstallerFromConfigurationAndAnnotation.java |  33 +-
 .../core/runtime/system/IsisSystemFactory.java  |   3 -
 .../system/persistence/PersistenceSession.java  |  28 +-
 .../IsisComponentProviderDefault2.java          |  26 +-
 .../IsisComponentProviderUsingInstallers.java   |   4 +-
 .../core/webapp/IsisWebAppBootstrapper.java     | 142 +++----
 .../isis/core/webapp/WebAppConstants.java       |  13 +-
 ...ataNucleusPersistenceMechanismInstaller.java |  24 +-
 .../ShiroAuthenticationManagerInstaller.java    |  17 +-
 .../ShiroAuthorizationManagerInstaller.java     |  10 +-
 .../BypassAuthenticationManagerInstaller.java   |  10 +-
 .../BypassAuthorizationManagerInstaller.java    |   8 +-
 .../wicket/viewer/IsisWicketApplication.java    |  80 +---
 .../wicket/viewer/IsisWicket_providers.java     |   2 +-
 .../apache/isis/core/webserver/WebServer.java   | 180 ++++++---
 .../core/webserver/WebServerBootstrapper.java   | 125 -------
 .../internal/OptionHandlerAddress.java          |   4 +-
 .../webserver/internal/OptionHandlerPort.java   |   4 +-
 .../internal/OptionHandlerResourceBase.java     |   4 +-
 .../internal/OptionHandlerStartupMode.java      |   4 +-
 106 files changed, 1326 insertions(+), 2335 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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 475420e..82bf0d5 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
@@ -240,7 +240,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
                     Joiner.on(",").join(packagePrefixes)
             );
 
-            final ServicesInstaller installer = new ServicesInstallerFromConfigurationAndAnnotation();
+            final ServicesInstaller installer = new ServicesInstallerFromConfigurationAndAnnotation(configuration);
 
             //installer.setConfiguration(configuration);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java
index b756b19..48badad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java
@@ -49,47 +49,13 @@ public interface Installer extends ApplicationScopedComponent {
      * Because all implementations of a given subinterface of {@link Installer}
      * should return the same value for this method, by convention these
      * subinterfaces define a constant which the implementation can just return.
-     * 
-     * <p>
-     * Used, with {@link #getName()}, to determine the config files and config
-     * keys for this installer.
-     * 
-     * @see #getConfigurationResources()
      */
     String getType();
 
     /**
      * The name (qualified by type).
-     * 
-     * <p>
-     * Used, with {@link #getType()}, to determine the config files and config
-     * keys for this installer.
-     * 
-     * @see #getConfigurationResources()
      */
     String getName();
 
-    /**
-     * The configuration resources (files) to merge in configuration properties.
-     * 
-     * <p>
-     * For example, would return list of [<tt>persistor.properties</tt>, and
-     * <tt>persistor_in-memory.properties</tt>] for the in-memory object store.
-     * 
-     * <p>
-     * The implementation should look under keys prefixed either
-     * <tt>isis.persistor</tt> or <tt>isis.persistor.in-memory</tt>.
-     * 
-     * <p>
-     * Note that we use an '_' underscore to join the {@link #getType() type}
-     * and {@link #getName() name} in the filenames, but a '.' (period) for the
-     * keys.
-     */
-    List<String> getConfigurationResources();
-
-    /**
-     * The (classes of) the types that this installer makes available in the
-     * {@link #getModule() module}.
-     */
     List<Class<?>> getTypes();
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
new file mode 100644
index 0000000..a9238ab
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
@@ -0,0 +1,117 @@
+/*
+ *  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.commons.components;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+
+public abstract class InstallerAbstract implements Installer {
+
+    //region > constructor, fields
+
+    private final String type;
+    private final String name;
+    private final IsisConfigurationDefault isisConfiguration;
+
+    /**
+     * Subclasses should pass in the type defined as a constant in the
+     * subinterface of Installer.
+     * 
+     * <p>
+     * For example, <tt>PersistenceMechanismInstaller</tt> has a constant
+     * <tt>PersistenceMechanismInstaller#TYPE</tt>. Any implementation of
+     * <tt>PersistenceMechanismInstaller</tt> should pass this constant value up
+     * to this constructor.
+     */
+    public InstallerAbstract(
+            final String type,
+            final String name,
+            final IsisConfigurationDefault isisConfiguration) {
+        this.type = type;
+        this.name = name;
+        this.isisConfiguration = isisConfiguration;
+    }
+
+    //endregion
+
+    //region > type, name
+
+    @Override
+    public String getType() {
+        return type;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    //endregion
+
+    //region > configuration (injected)
+
+    public IsisConfigurationDefault getConfiguration() {
+        return isisConfiguration;
+    }
+    //endregion
+
+    //region > init, shutdown
+
+    /**
+     * Default implementation does nothing.
+     */
+    public void init() {
+        // no-op implementation, subclasses may override!
+    }
+
+    /**
+     * Default implementation does nothing.
+     */
+    public void shutdown() {
+        // no-op implementation, subclasses may override!
+    }
+
+    //endregion
+
+    //region > helpers (for subclasses)
+
+    /**
+     * Helper for subclasses implementing {@link #getTypes()}.
+     */
+    protected static List<Class<?>> listOf(final Class<?>... classes) {
+        return Collections.unmodifiableList(Lists.<Class<?>> newArrayList(classes));
+    }
+
+    /**
+     * Helper for subclasses implementing {@link #getTypes()}.
+     */
+    protected static List<Class<?>> listOf(final List<Class<?>> classList, final Class<?>... classes) {
+        final List<Class<?>> arrayList = Lists.<Class<?>> newArrayList(classes);
+        arrayList.addAll(0, classList);
+        return Collections.unmodifiableList(arrayList);
+    }
+
+    //endregion
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
deleted file mode 100644
index 21048ef..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
+++ /dev/null
@@ -1,176 +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.commons.config;
-
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.core.commons.components.Installer;
-
-public abstract class InstallerAbstract implements Installer, IsisConfigurationBuilderAware {
-
-    private final String type;
-    private final String name;
-
-    private IsisConfigurationBuilder isisConfigurationBuilder;
-    private IsisConfiguration configuration;
-
-    /**
-     * Subclasses should pass in the type defined as a constant in the
-     * subinterface of Installer.
-     * 
-     * <p>
-     * For example, <tt>PersistenceMechanismInstaller</tt> has a constant
-     * <tt>PersistenceMechanismInstaller#TYPE</tt>. Any implementation of
-     * <tt>PersistenceMechanismInstaller</tt> should pass this constant value up
-     * to this constructor.
-     */
-    public InstallerAbstract(final String type, final String name) {
-        this.type = type;
-        this.name = name;
-    }
-
-    @Override
-    public String getType() {
-        return type;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Returns <tt>[type.properties, type_name.properties</tt>.
-     * 
-     * <p>
-     * For example,
-     * <tt>[persistor.properties, persistor_in-memory.properties]</tt>.
-     * 
-     * @see #getType()
-     * @see #getName()
-     */
-    @Override
-    public List<String> getConfigurationResources() {
-        final List<String> resourceList = Lists.newArrayList();
-        final String componentImplementationFile = getType() + "_" + getName() + ".properties";
-        resourceList.add(componentImplementationFile);
-        final String componentFile = getType() + ".properties";
-        resourceList.add(componentFile);
-        addConfigurationResources(resourceList);
-        return Collections.unmodifiableList(resourceList);
-    }
-
-    /**
-     * Optional hook method to allow subclasses to specify any additional config
-     * resources.
-     */
-    protected void addConfigurationResources(final List<String> configurationResources) {
-    }
-
-    // ////////////////////////////////////////////////////
-    // init, shutdown
-    // ////////////////////////////////////////////////////
-
-    /**
-     * Default implementation does nothing.
-     */
-    public void init() {
-        // no-op implementation, subclasses may override!
-    }
-
-    /**
-     * Default implementation does nothing.
-     */
-    public void shutdown() {
-        // no-op implementation, subclasses may override!
-    }
-
-    /**
-     * Either this method or {@link #setConfiguration(IsisConfiguration)} should
-     * be called prior to calling {@link #getConfiguration()}.
-     * 
-     * <p>
-     * If a {@link #setConfiguration(IsisConfiguration) configuration} has
-     * already been provided, then throws {@link IllegalStateException}.
-     */
-    @Override
-    public void setConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
-        if (configuration != null) {
-            throw new IllegalStateException("A IsisConfiguration has already been provided.");
-        }
-        this.isisConfigurationBuilder = isisConfigurationBuilder;
-    }
-
-    /**
-     * Either this method or
-     * {@link #setConfigurationBuilder(IsisConfigurationBuilder)} should be
-     * called prior to calling {@link #getConfiguration()}.
-     * 
-     * <p>
-     * If a {@link #setConfigurationBuilder(IsisConfigurationBuilder)
-     * configuration builder} has already been provided, then throws
-     * {@link IllegalStateException}.
-     */
-    public void setConfiguration(final IsisConfiguration configuration) {
-        if (isisConfigurationBuilder != null) {
-            throw new IllegalStateException("An IsisConfigurationBuilder has already been provided.");
-        }
-        this.configuration = configuration;
-    }
-
-    /**
-     * Returns a <i>snapshot</i> of the current configuration provided by the
-     * {@link #setConfigurationBuilder(IsisConfigurationBuilder) injected}
-     * {@link IsisConfigurationBuilder}.
-     * 
-     * <p>
-     * Implementation note: the implementation is in fact just
-     * {@link InstallerLookup}.
-     */
-    public IsisConfiguration getConfiguration() {
-        if (isisConfigurationBuilder != null) {
-            return isisConfigurationBuilder.getConfiguration();
-        } else if (configuration != null) {
-            return configuration;
-        } else {
-            throw new IllegalStateException("Neither a ConfigurationBuilder nor Configuration has not been provided");
-        }
-    }
-
-    /**
-     * Helper for subclasses implementing {@link #getTypes()}.
-     */
-    protected static List<Class<?>> listOf(final Class<?>... classes) {
-        return Collections.unmodifiableList(Lists.<Class<?>> newArrayList(classes));
-    }
-
-    /**
-     * Helper for subclasses implementing {@link #getTypes()}.
-     */
-    protected static List<Class<?>> listOf(final List<Class<?>> classList, final Class<?>... classes) {
-        final List<Class<?>> arrayList = Lists.<Class<?>> newArrayList(classes);
-        arrayList.addAll(0, classList);
-        return Collections.unmodifiableList(arrayList);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
index 59e8039..12a0c11 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.resource.ResourceStreamSource;
 
 /**
@@ -43,8 +44,6 @@ import org.apache.isis.core.commons.resource.ResourceStreamSource;
  */
 public interface IsisConfiguration extends Iterable<String>, ApplicationScopedComponent {
 
-    void injectInto(Object candidate);
-
     /**
      * Creates a new IsisConfiguration containing the properties starting with
      * the specified prefix. The names of the new properties will have the

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
deleted file mode 100644
index c118c87..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
+++ /dev/null
@@ -1,73 +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.commons.config;
-
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
-
-/**
- * Holds a mutable set of properties representing the configuration.
- * 
- * <p>
- * Mutable/immutable pair with the {@link IsisConfiguration}. To obtain the
- * configuration, use {@link #getConfiguration()}.
- * 
- * @see IsisConfiguration for more details on the mutable/immutable pair
- *      pattern.
- */
-public interface IsisConfigurationBuilder {
-
-    void injectInto(Object candidate);
-
-    /**
-     * Returns a currently known {@link IsisConfiguration}.
-     */
-    IsisConfigurationDefault getConfiguration();
-
-    void addDefaultConfigurationResources();
-    
-    void addConfigurationResource(final String installerName, final NotFoundPolicy notFoundPolicy);
-
-    /**
-     * Adds additional property; if already present then will _not_ be replaced.
-     */
-    void add(final String key, final String value);
-
-    /**
-     * Adds/updates property; if already present then _will_ be replaced.
-     */
-    void put(final String key, final String value);
-
-    /**
-     * The underlying {@link ResourceStreamSource} from which the configuration
-     * is being read.
-     * 
-     * <p>
-     * Note that this may be a {@link ResourceStreamSourceChainOfResponsibility composite}.
-     */
-    ResourceStreamSource getResourceStreamSource();
-    
-    /**
-     * Log a summary of resources found or not found.
-     */
-    void dumpResourcesToLog();
-
-    void lockConfiguration();
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderAware.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderAware.java
deleted file mode 100644
index 07023b7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderAware.java
+++ /dev/null
@@ -1,25 +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.commons.config;
-
-public interface IsisConfigurationBuilderAware {
-
-    void setConfigurationBuilder(IsisConfigurationBuilder configurationLoader);
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderDefault.java
deleted file mode 100644
index ed06d2b..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderDefault.java
+++ /dev/null
@@ -1,76 +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.commons.config;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import com.google.common.collect.Lists;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
-
-/**
- * Convenience implementation of {@link IsisConfigurationBuilder} that loads
- * configuration resource as per {@link IsisConfigurationBuilderFileSystem} and
- * otherwise from the {@link ResourceStreamSourceContextLoaderClassPath
- * classpath}.
- * 
- * @see ResourceStreamSourceFileSystem
- */
-public class IsisConfigurationBuilderDefault extends IsisConfigurationBuilderResourceStreams {
-
-    @SuppressWarnings("unused")
-    private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderDefault.class);
-
-    public IsisConfigurationBuilderDefault() {
-        super(resourceStreamSources(null));
-    }
-
-    public IsisConfigurationBuilderDefault(final String firstDirectory) {
-        super(resourceStreamSources(firstDirectory));
-    }
-
-    private static ResourceStreamSource[] resourceStreamSources(final String firstDirectory) {
-        final ArrayList<ResourceStreamSource> rssList = Lists.newArrayList();
-        if (firstDirectory != null) {
-            rssList.add(fromFileSystem(firstDirectory));
-        }
-        rssList.addAll(Arrays.asList(fromFileSystem(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY), fromFileSystem(ConfigurationConstants.WEBINF_FULL_DIRECTORY), fromClassPath(), fromClassPath(ConfigurationConstants.WEBINF_DIRECTORY)));
-        return rssList.toArray(new ResourceStreamSource[0]);
-    }
-
-    private static ResourceStreamSource fromFileSystem(final String directory) {
-        return ResourceStreamSourceFileSystem.create(directory);
-    }
-
-    private static ResourceStreamSource fromClassPath() {
-        return ResourceStreamSourceContextLoaderClassPath.create();
-    }
-
-    private static ResourceStreamSource fromClassPath(final String prefix) {
-        return ResourceStreamSourceContextLoaderClassPath.create(prefix);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderFileSystem.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderFileSystem.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderFileSystem.java
deleted file mode 100644
index f481ce7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderFileSystem.java
+++ /dev/null
@@ -1,57 +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.commons.config;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
-
-/**
- * Convenience implementation of {@link IsisConfigurationBuilder} that loads
- * configuration resource from a specified directory (or directories) on the
- * filesystem.
- * 
- * @see ResourceStreamSourceFileSystem
- */
-public class IsisConfigurationBuilderFileSystem extends IsisConfigurationBuilderResourceStreams {
-
-    @SuppressWarnings("unused")
-    private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderFileSystem.class);
-
-    private static ResourceStreamSource createResourceStreamSource(final String... directories) {
-        final ResourceStreamSourceChainOfResponsibility composite = new ResourceStreamSourceChainOfResponsibility();
-        for (final String directory : directories) {
-            composite.addResourceStreamSource(new ResourceStreamSourceFileSystem(directory));
-        }
-        return composite;
-    }
-
-    public IsisConfigurationBuilderFileSystem(final String... directories) {
-        super(createResourceStreamSource(directories));
-    }
-
-    public IsisConfigurationBuilderFileSystem() {
-        super(ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderPrimer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderPrimer.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderPrimer.java
deleted file mode 100644
index 70e4df8..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderPrimer.java
+++ /dev/null
@@ -1,26 +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.commons.config;
-
-public interface IsisConfigurationBuilderPrimer {
-
-    void primeConfigurationBuilder(IsisConfigurationBuilder isisConfigurationBuilder);
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
deleted file mode 100644
index 695cfd9..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
+++ /dev/null
@@ -1,289 +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.commons.config;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.Sets;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
-
-/**
- * Adapter for {@link IsisConfigurationBuilder}, loading the specified
- * configuration resource (file) from the given {@link ResourceStreamSource}(s).
- * 
- * <p>
- * If a property is in multiple configuration resources then the latter
- * resources will overwrite the former.
- */
-public class IsisConfigurationBuilderResourceStreams implements IsisConfigurationBuilder {
-
-    private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderResourceStreams.class);
-    
-    static class ConfigurationResourceAndPolicy {
-        private final String configurationResource;
-        private final NotFoundPolicy notFoundPolicy;
-
-        public ConfigurationResourceAndPolicy(final String configurationResource, final NotFoundPolicy notFoundPolicy) {
-            this.configurationResource = configurationResource;
-            this.notFoundPolicy = notFoundPolicy;
-        }
-
-        public String getConfigurationResource() {
-            return configurationResource;
-        }
-
-        public NotFoundPolicy getNotFoundPolicy() {
-            return notFoundPolicy;
-        }
-
-        @Override
-        public String toString() {
-            return String.format("%s{%s}", configurationResource, notFoundPolicy);
-        }
-    }
-
-    private final Set<String> configurationResourcesFound = Sets.newLinkedHashSet();
-    private final Set<String> configurationResourcesNotFound = Sets.newLinkedHashSet();
-    private final ResourceStreamSource resourceStreamSource;
-    private final IsisConfigurationDefault configuration;
-    private final List<ConfigurationResourceAndPolicy> configurationResources = new ArrayList<ConfigurationResourceAndPolicy>();
-    private boolean locked;
-
-    // ////////////////////////////////////////////////////////////
-    // Constructor, initialization
-    // ////////////////////////////////////////////////////////////
-
-    private static ResourceStreamSource createComposite(final ResourceStreamSource... resourceStreamSources) {
-        final ResourceStreamSourceChainOfResponsibility composite = new ResourceStreamSourceChainOfResponsibility();
-        for (final ResourceStreamSource rss : resourceStreamSources) {
-            if (rss == null) {
-                continue;
-            }
-            composite.addResourceStreamSource(rss);
-        }
-        return composite;
-    }
-
-    public IsisConfigurationBuilderResourceStreams() {
-        this(ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY));
-    }
-
-    public IsisConfigurationBuilderResourceStreams(final ResourceStreamSource... resourceStreamSources) {
-        this(createComposite(resourceStreamSources));
-    }
-
-    public IsisConfigurationBuilderResourceStreams(final ResourceStreamSource resourceStreamSource) {
-        this.resourceStreamSource = resourceStreamSource;
-        configuration = new IsisConfigurationDefault(resourceStreamSource);
-    }
-
-    public void addDefaultConfigurationResources() {
-        addConfigurationResource(ConfigurationConstants.DEFAULT_CONFIG_FILE, NotFoundPolicy.FAIL_FAST);
-        addConfigurationResource(ConfigurationConstants.WEB_CONFIG_FILE, NotFoundPolicy.CONTINUE); //web.properties
-        addConfigurationResource("war.properties", NotFoundPolicy.CONTINUE);
-
-        addConfigurationResource("viewer_wicket.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("viewer_restful.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("viewer_restfulobjects.properties", NotFoundPolicy.CONTINUE);
-
-        addConfigurationResource("persistor_datanucleus.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("persistor.properties", NotFoundPolicy.CONTINUE);
-
-        addConfigurationResource("authentication_shiro.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("authentication_bypass.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("authentication.properties", NotFoundPolicy.CONTINUE);
-
-        addConfigurationResource("authorization_shiro.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("authorization_bypass.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("authorization.properties", NotFoundPolicy.CONTINUE);
-
-        addConfigurationResource("reflector_java.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("reflector.properties", NotFoundPolicy.CONTINUE);
-
-        addConfigurationResource("fixtures-installer_configuration.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("fixtures-installer_noop.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("fixtures-installer.properties", NotFoundPolicy.CONTINUE);
-
-        addConfigurationResource("services-installer_annotation.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("services-installer_configuration.properties", NotFoundPolicy.CONTINUE);
-
-        addConfigurationResource("services-installer_configuration-and-annotation.properties", NotFoundPolicy.CONTINUE);
-        addConfigurationResource("services-installer.properties", NotFoundPolicy.CONTINUE);
-
-    }
-
-    // ////////////////////////////////////////////////////////////
-    // ResourceStreamSource
-    // ////////////////////////////////////////////////////////////
-
-    @Override
-    public ResourceStreamSource getResourceStreamSource() {
-        return resourceStreamSource;
-    }
-
-    // ////////////////////////////////////////////////////////////
-    // populating or updating
-    // ////////////////////////////////////////////////////////////
-
-    /**
-     * Registers the configuration resource (usually, a file) with the specified
-     * name from the first {@link ResourceStreamSource} available.
-     * 
-     * <p>
-     * If the configuration resource cannot be found then the provided
-     * {@link NotFoundPolicy} determines whether an exception is thrown or not.
-     * 
-     * <p>
-     * Must be called before {@link IsisConfigurationBuilder#getConfiguration()}; the resource is
-     * actually read on {@link IsisConfigurationBuilder#getConfiguration()}.
-     */
-    @Override
-    public synchronized void addConfigurationResource(final String configurationResource, final NotFoundPolicy notFoundPolicy) {
-        LOG.debug("looking for properties file " + configurationResource);
-        loadConfigurationResource(configuration, new ConfigurationResourceAndPolicy(configurationResource, notFoundPolicy));
-        configurationResources.add(new ConfigurationResourceAndPolicy(configurationResource, notFoundPolicy));
-    }
-
-    @Override
-    public synchronized void add(final String key, final String value) {
-        if (locked) {
-            throw new IsisException("Configuration has been locked and cannot be changed");
-        }
-        configuration.add(key, value);
-    }
-
-    @Override
-    public synchronized void put(final String key, final String value) {
-        if (locked) {
-            throw new IsisException("Configuration has been locked and cannot be changed");
-        }
-        configuration.put(key, value);
-    }
-
-    public void lockConfiguration() {
-        locked = true;
-    }
-    
-    // ////////////////////////////////////////////////////////////
-    // getConfiguration
-    // ////////////////////////////////////////////////////////////
-
-    /**
-     * Returns the current {@link IsisConfiguration configuration}.
-     */
-    @Override
-    public synchronized IsisConfigurationDefault getConfiguration() {
-        if(!locked) {
-            lockConfiguration();
-            dumpResourcesToLog();
-        }
-        return configuration;
-     }
-
-    private void loadConfigurationResource(final IsisConfigurationDefault configuration, final ConfigurationResourceAndPolicy configResourceAndPolicy) {
-        final String configurationResource = configResourceAndPolicy.getConfigurationResource();
-        final NotFoundPolicy notFoundPolicy = configResourceAndPolicy.getNotFoundPolicy();
-        LOG.debug("checking availability of configuration resource: " + configurationResource + ", notFoundPolicy: " + notFoundPolicy);
-        loadConfigurationResource(configuration, configurationResource, notFoundPolicy);
-    }
-
-    /**
-     * Loads the configuration resource (usually, a file) with the specified
-     * name from the first {@link ResourceStreamSource} available.
-     * 
-     * <p>
-     * If the configuration resource cannot be found then the provided
-     * {@link NotFoundPolicy} determines whether an exception is thrown or not.
-     */
-    protected void loadConfigurationResource(final IsisConfigurationDefault configuration, final String configurationResource, final NotFoundPolicy notFoundPolicy) {
-        try {
-            final PropertiesReader propertiesReader = loadConfigurationResource(resourceStreamSource, configurationResource);
-            LOG.info("loading properties from " + configurationResource);
-            configuration.add(propertiesReader.getProperties());
-            configurationResourcesFound.add(configurationResource);
-            return;
-        } catch (final IOException ignore) { }
-        if (notFoundPolicy == NotFoundPolicy.FAIL_FAST) {
-            throw new IsisException("failed to load '" + configurationResource + "'; tried using: " + resourceStreamSource.getName());
-        } else {
-            configurationResourcesNotFound.add(configurationResource);
-            LOG.debug("'" + configurationResource + "' not found, but not needed");
-        }
-    }
-
-    private PropertiesReader loadConfigurationResource(final ResourceStreamSource resourceStreamSource, final String configurationResource) throws IOException {
-        return new PropertiesReader(resourceStreamSource, configurationResource);
-    }
-
-    
-    // TODO review this, should this option default to yes?
-    private void addShowExplorationOptionsIfNotSpecified(final IsisConfigurationDefault configuration) {
-        if (configuration.getString(ConfigurationConstants.SHOW_EXPLORATION_OPTIONS) == null) {
-            configuration.add(ConfigurationConstants.SHOW_EXPLORATION_OPTIONS, "yes");
-        }
-    }
-    
-    // ////////////////////////////////////////////////////////////
-    // Logging
-    // ////////////////////////////////////////////////////////////
-
-    @Override
-    public void dumpResourcesToLog() {
-        if (LOG.isInfoEnabled()) {
-            LOG.info("Configuration resources FOUND:");
-            for (String resource : configurationResourcesFound) {
-                LOG.info("*  " + resource);
-            }
-            LOG.info("Configuration resources NOT FOUND (but not needed):");
-            for (String resource : configurationResourcesNotFound) {
-                LOG.info("*  " + resource);
-            }
-        }
-    }
-
-
-    // ////////////////////////////////////////////////////////////
-    // Injectable
-    // ////////////////////////////////////////////////////////////
-
-    public void injectInto(final Object candidate) {
-        if (IsisConfigurationBuilderAware.class.isAssignableFrom(candidate.getClass())) {
-            final IsisConfigurationBuilderAware cast = IsisConfigurationBuilderAware.class.cast(candidate);
-            cast.setConfigurationBuilder(this);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return Objects.toStringHelper(this).add("resourceStream", resourceStreamSource).add("configResources", configurationResources).toString();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
index 72f2c40..d433584 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
@@ -458,10 +458,6 @@ public class IsisConfigurationDefault implements IsisConfiguration, Configuratio
     // ////////////////////////////////////////////////////////////////////
 
     @Override
-    public void injectInto(final Object candidate) {
-    }
-
-    @Override
     public Map<String,String> asMap() {
         final Map<String, String> map = Maps.newHashMap();
         for(String propertyName: this) {

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/JmxBeanServer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/JmxBeanServer.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/JmxBeanServer.java
deleted file mode 100644
index 71d7363..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/JmxBeanServer.java
+++ /dev/null
@@ -1,73 +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.commons.config;
-
-import java.lang.management.ManagementFactory;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class JmxBeanServer {
-
-    private static final Logger LOG = LoggerFactory.getLogger(JmxBeanServer.class);
-
-    private static JmxBeanServer instance;
-    private final MBeanServer server;
-
-    private JmxBeanServer() {
-        server = ManagementFactory.getPlatformMBeanServer();
-        instance = this;
-    }
-
-    public static JmxBeanServer getInstance() {
-        if (instance == null) {
-            LOG.info("JMX bean server created");
-            instance = new JmxBeanServer();
-        }
-        return instance;
-    }
-
-    public void register(final String name, final Object object) {
-        try {
-            final ObjectName objectName = new ObjectName("Isis:name=" + name);
-            server.registerMBean(object, objectName);
-            LOG.info(name + " JMX mbean registered: " + object);
-        } catch (final MalformedObjectNameException e) {
-            throw new RuntimeException(e);
-        } catch (final NullPointerException e) {
-            throw new RuntimeException(e);
-        } catch (final InstanceAlreadyExistsException e) {
-            LOG.info(name + " JMX mbean already registered: " + object);
-        } catch (final MBeanRegistrationException e) {
-            throw new RuntimeException(e);
-        } catch (final NotCompliantMBeanException e) {
-            throw new RuntimeException(e);
-        }
-
-    }
-}
-
-// Copyright (c) Naked Objects Group Ltd.

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/PropertiesReader.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/PropertiesReader.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/PropertiesReader.java
deleted file mode 100644
index 7e5f09d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/PropertiesReader.java
+++ /dev/null
@@ -1,54 +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.commons.config;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.apache.isis.core.commons.lang.CloseableExtensions;
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-
-/**
- * Loads properties using the specified {@link ResourceStreamSource}.
- */
-class PropertiesReader {
-
-    private final Properties properties = new Properties();
-
-    public PropertiesReader(final ResourceStreamSource resourceStream, final String configurationResource) throws IOException {
-
-        InputStream in = null;
-        try {
-            in = resourceStream.readResource(configurationResource);
-            if (in == null) {
-                throw new IOException("Unable to find resource " + configurationResource);
-            }
-            properties.load(in);
-        } finally {
-            CloseableExtensions.closeSafely(in);
-        }
-    }
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
index db80586..17030cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
@@ -32,7 +32,7 @@
  * 
  * <p>
  * The {@link org.apache.isis.core.commons.config.ConfigurationBuilder} is used
- * by {@link org.apache.isis.core.commons.config.InstallerAbstract}, an
+ * by {@link org.apache.isis.core.commons.components.InstallerAbstract}, an
  * implementation of {@link org.apache.isis.core.commons.components.Installer} 
  * that allows the configuration to be added to as each component is
  * installed. 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/ConfigurationResourceAndPolicy.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/ConfigurationResourceAndPolicy.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/ConfigurationResourceAndPolicy.java
new file mode 100644
index 0000000..f36bb83
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/ConfigurationResourceAndPolicy.java
@@ -0,0 +1,46 @@
+/*
+ *  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.commons.configbuilder;
+
+import org.apache.isis.core.commons.config.NotFoundPolicy;
+
+class ConfigurationResourceAndPolicy {
+
+    private final String configurationResource;
+    private final NotFoundPolicy notFoundPolicy;
+
+    public ConfigurationResourceAndPolicy(
+            final String configurationResource,
+            final NotFoundPolicy notFoundPolicy) {
+        this.configurationResource = configurationResource;
+        this.notFoundPolicy = notFoundPolicy;
+    }
+
+    public String getConfigurationResource() {
+        return configurationResource;
+    }
+    public NotFoundPolicy getNotFoundPolicy() {
+        return notFoundPolicy;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s{%s}", configurationResource, notFoundPolicy);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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
new file mode 100644
index 0000000..ed229ef
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
@@ -0,0 +1,371 @@
+/*
+ *  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.commons.configbuilder;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import org.apache.commons.cli.BasicParser;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.config.NotFoundPolicy;
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.resource.ResourceStreamSource;
+import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
+import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
+import org.apache.isis.core.runtime.optionhandler.BootPrinter;
+import org.apache.isis.core.runtime.optionhandler.OptionHandler;
+
+/**
+ * Holds a mutable set of properties representing the configuration.
+ *
+ * This implementation loads the specified
+ * configuration resource (file) from the given {@link ResourceStreamSource}(s).
+ *
+ * <p>
+ * If a property is in multiple configuration resources then the latter
+ * resources will overwrite the former.
+ *
+ * <p>
+ * Mutable/immutable pair with the {@link IsisConfiguration}. To obtain the
+ * configuration, use {@link #getConfiguration()}.
+ *
+ * @see {@link IsisConfiguration} for more details on the mutable/immutable pair pattern.
+ *
+ */
+public final class IsisConfigurationBuilder {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilder.class);
+
+    //region > constructor, fields
+
+    private final ResourceStreamSourceChainOfResponsibility resourceStreamSourceChain;
+    private final List<ConfigurationResourceAndPolicy> configurationResources = Lists.newArrayList();
+
+    private final IsisConfigurationDefault configuration;
+    private boolean locked;
+
+    private final Set<String> configurationResourcesFound = Sets.newLinkedHashSet();
+    private final Set<String> configurationResourcesNotFound = Sets.newLinkedHashSet();
+
+    public IsisConfigurationBuilder() {
+        this(ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY));
+    }
+
+    public IsisConfigurationBuilder(final ResourceStreamSource... resourceStreamSources) {
+        this(createComposite(Arrays.asList(resourceStreamSources)));
+    }
+
+    public IsisConfigurationBuilder(final List<ResourceStreamSource> resourceStreamSources) {
+        this(createComposite(resourceStreamSources));
+    }
+
+    public IsisConfigurationBuilder(final ResourceStreamSourceChainOfResponsibility resourceStreamSourceChain) {
+        this.resourceStreamSourceChain = resourceStreamSourceChain;
+        configuration = new IsisConfigurationDefault(resourceStreamSourceChain);
+    }
+
+    private static ResourceStreamSourceChainOfResponsibility createComposite(
+            final List<ResourceStreamSource> resourceStreamSources) {
+        final ResourceStreamSourceChainOfResponsibility composite = new ResourceStreamSourceChainOfResponsibility();
+        for (final ResourceStreamSource rss : resourceStreamSources) {
+            if (rss == null) {
+                continue;
+            }
+            composite.addResourceStreamSource(rss);
+        }
+        return composite;
+    }
+
+    public void addDefaultConfigurationResources() {
+        addConfigurationResource(ConfigurationConstants.DEFAULT_CONFIG_FILE, NotFoundPolicy.FAIL_FAST);
+        addConfigurationResource(ConfigurationConstants.WEB_CONFIG_FILE, NotFoundPolicy.CONTINUE); //web.properties
+        addConfigurationResource("war.properties", NotFoundPolicy.CONTINUE);
+
+        addConfigurationResource("viewer_wicket.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("viewer_restful.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("viewer_restfulobjects.properties", NotFoundPolicy.CONTINUE);
+
+        addConfigurationResource("persistor_datanucleus.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("persistor.properties", NotFoundPolicy.CONTINUE);
+
+        addConfigurationResource("authentication_shiro.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("authentication_bypass.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("authentication.properties", NotFoundPolicy.CONTINUE);
+
+        addConfigurationResource("authorization_shiro.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("authorization_bypass.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("authorization.properties", NotFoundPolicy.CONTINUE);
+
+        addConfigurationResource("reflector_java.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("reflector.properties", NotFoundPolicy.CONTINUE);
+
+        addConfigurationResource("fixtures-installer_configuration.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("fixtures-installer.properties", NotFoundPolicy.CONTINUE);
+
+        addConfigurationResource("services-installer_annotation.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("services-installer_configuration.properties", NotFoundPolicy.CONTINUE);
+
+        addConfigurationResource("services-installer_configuration-and-annotation.properties", NotFoundPolicy.CONTINUE);
+        addConfigurationResource("services-installer.properties", NotFoundPolicy.CONTINUE);
+    }
+
+    //endregion
+
+    //region > addResourceStreamSource, addResourceStreamSources
+
+    public void addResourceStreamSource(final ResourceStreamSource resourceStreamSource) {
+        addResourceStreamSources(resourceStreamSource);
+    }
+
+    public void addResourceStreamSources(final ResourceStreamSource... resourceStreamSources) {
+        addResourceStreamSources(Arrays.asList(resourceStreamSources));
+    }
+
+    public void addResourceStreamSources(final List<ResourceStreamSource> resourceStreamSources) {
+        ensureNotLocked();
+        for (ResourceStreamSource resourceStreamSource : resourceStreamSources) {
+            this.resourceStreamSourceChain.addResourceStreamSource(resourceStreamSource);
+        }
+    }
+
+    //endregion
+
+    //region > addConfigurationResource
+
+    /**
+     * Registers the configuration resource (usually, a file) with the specified
+     * name from the first {@link ResourceStreamSource} available.
+     *
+     * <p>
+     * If the configuration resource cannot be found then the provided
+     * {@link NotFoundPolicy} determines whether an exception is thrown or not.
+     *
+     * <p>
+     * Must be called before {@link IsisConfigurationBuilder#getConfiguration()}; the resource is
+     * actually read on {@link IsisConfigurationBuilder#getConfiguration()}.
+     */
+    public synchronized void addConfigurationResource(
+            final String configurationResource,
+            final NotFoundPolicy notFoundPolicy) {
+
+        ensureNotLocked();
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug(String.format(
+                    "checking availability of configuration resource: %s, notFoundPolicy: %s",
+                    configurationResource, notFoundPolicy));
+        }
+        loadConfigurationResource(configurationResource, notFoundPolicy);
+        configurationResources.add(new ConfigurationResourceAndPolicy(configurationResource, notFoundPolicy));
+    }
+
+    /**
+     * Loads the configuration resource (usually, a file) with the specified
+     * name from the first {@link ResourceStreamSource} available.
+     *
+     * <p>
+     * If the configuration resource cannot be found then the provided
+     * {@link NotFoundPolicy} determines whether an exception is thrown or not.
+     */
+    private void loadConfigurationResource(
+            final String configurationResource,
+            final NotFoundPolicy notFoundPolicy) {
+        try {
+            final PropertiesReader propertiesReader =
+                    loadConfigurationResource(resourceStreamSourceChain, configurationResource);
+            LOG.info("loading properties from " + configurationResource);
+            configuration.add(propertiesReader.getProperties());
+            configurationResourcesFound.add(configurationResource);
+            return;
+        } catch (final IOException ignore) {
+            // ignore
+        }
+        if (notFoundPolicy == NotFoundPolicy.FAIL_FAST) {
+            throw new IsisException(String.format(
+                    "failed to load '%s'; tried using: %s",
+                    configurationResource, resourceStreamSourceChain.getName()));
+        }
+        configurationResourcesNotFound.add(configurationResource);
+        if(LOG.isDebugEnabled()) {
+            LOG.debug(String.format("'%s' not found, but not needed", configurationResource));
+
+        }
+    }
+
+    private PropertiesReader loadConfigurationResource(final ResourceStreamSource resourceStreamSource, final String configurationResource) throws IOException {
+        return new PropertiesReader(resourceStreamSource, configurationResource);
+    }
+
+
+    //endregion
+
+    //region > add, put
+
+    /**
+     * Adds additional property; if already present then will _not_ be replaced.
+     */
+    public synchronized void add(final String key, final String value) {
+        ensureNotLocked();
+        configuration.add(key, value);
+    }
+
+    /**
+     * Adds/updates property; if already present then _will_ be replaced.
+     */
+    public synchronized void put(final String key, final String value) {
+        ensureNotLocked();
+        configuration.put(key, value);
+    }
+
+
+    //endregion
+
+    //region > parseAndPrimeWith, primeWith
+
+    public boolean parseAndPrimeWith(final List<OptionHandler> optionHandlers, final String[] args) {
+
+        // add options (ie cmd line flags)
+        final Options options = new Options();
+        for (final OptionHandler optionHandler : optionHandlers) {
+            optionHandler.addOption(options);
+        }
+
+        // parse options from the cmd line
+        final boolean parsedOk = parseAndPrimeWith(options, optionHandlers, args);
+
+        if(parsedOk) {
+            for (final OptionHandler optionHandler : optionHandlers) {
+                primeWith(optionHandler);
+            }
+        }
+
+        return parsedOk;
+    }
+
+    private boolean parseAndPrimeWith(final Options options, final List<OptionHandler> optionHandlers, final String[] args) {
+        final BootPrinter printer = new BootPrinter(getClass());
+        final CommandLineParser parser = new BasicParser();
+        try {
+            final CommandLine commandLine = parser.parse(options, args);
+            for (final OptionHandler optionHandler : optionHandlers) {
+                if (!optionHandler.handle(commandLine, printer, options)) {
+                    return false;
+                }
+            }
+        } catch (final ParseException e) {
+            printer.printErrorMessage(e.getMessage());
+            printer.printHelp(options);
+            return false;
+        }
+        return true;
+    }
+
+    public void primeWith(final OptionHandler optionHandler) {
+        ensureNotLocked();
+
+        LOG.debug("priming configurations for '{}'", optionHandler);
+        optionHandler.prime(this);
+    }
+
+    //endregion
+
+    //region > getConfiguration, peekConfiguration, isLocked
+
+    /**
+     * Returns the {@link IsisConfiguration}; this will cause the configuration to be locked
+     */
+    public synchronized IsisConfigurationDefault getConfiguration() {
+        if(!locked) {
+            locked = true;
+            dumpResourcesToLog();
+        }
+        return configuration;
+    }
+
+    /**
+     * Set once {@link #getConfiguration()} is called.
+     */
+    public boolean isLocked() {
+        return locked;
+    }
+
+    /**
+     * Creates a copy of the current {@link #getConfiguration()}, without locking.
+     *
+     * <p>
+     *     Used while bootstrapping, to obtain the web.server port etc.
+     * </p>
+     */
+    public synchronized IsisConfigurationDefault peekConfiguration() {
+        return new IsisConfigurationDefault(resourceStreamSourceChain);
+    }
+
+    private void ensureNotLocked() {
+        if (locked) {
+            throw new IsisException("Configuration has been locked and cannot be changed");
+        }
+    }
+
+    //endregion
+
+    //region > dumpResourcesToLog, toString
+
+    /**
+     * Log a summary of resources found or not found.
+     */
+    public void dumpResourcesToLog() {
+        if (LOG.isInfoEnabled()) {
+            LOG.info("Configuration resources FOUND:");
+            for (String resource : configurationResourcesFound) {
+                LOG.info("*  " + resource);
+            }
+            LOG.info("Configuration resources NOT FOUND (but not needed):");
+            for (String resource : configurationResourcesNotFound) {
+                LOG.info("*  " + resource);
+            }
+        }
+    }
+
+    @Override
+    public String toString() {
+        return Objects.toStringHelper(this)
+                .add("resourceStream", resourceStreamSourceChain)
+                .add("configResources", configurationResources).toString();
+    }
+
+    //endregion
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java
new file mode 100644
index 0000000..2c58d15
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java
@@ -0,0 +1,54 @@
+/*
+ *  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.commons.configbuilder;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.apache.isis.core.commons.lang.CloseableExtensions;
+import org.apache.isis.core.commons.resource.ResourceStreamSource;
+
+/**
+ * Loads properties using the specified {@link ResourceStreamSource}.
+ */
+class PropertiesReader {
+
+    private final Properties properties = new Properties();
+
+    public PropertiesReader(final ResourceStreamSource resourceStream, final String configurationResource) throws IOException {
+
+        InputStream in = null;
+        try {
+            in = resourceStream.readResource(configurationResource);
+            if (in == null) {
+                throw new IOException("Unable to find resource " + configurationResource);
+            }
+            properties.load(in);
+        } finally {
+            CloseableExtensions.closeSafely(in);
+        }
+    }
+
+    public Properties getProperties() {
+        return properties;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
index 2d29fdb..d9df199 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
@@ -19,6 +19,9 @@
 
 package org.apache.isis.core.commons.factory;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.lang.ObjectExtensions;
 
@@ -27,23 +30,27 @@ public final class InstanceUtil {
     private InstanceUtil() {
     }
 
-    public static Object createInstance(final String className) {
-        return createInstance(className, (Class<?>) null, null);
+    public static Object createInstance(final String className, Object... args) {
+        return createInstance(className, (Class<?>) null, null, args);
     }
 
-    public static Object createInstance(final Class<?> cls) {
-        return createInstance(cls, (Class<?>) null, null);
+    public static Object createInstance(final Class<?> cls, Object... args) {
+        return createInstance(cls, (Class<?>) null, null, args);
     }
 
-    public static <T> T createInstance(final String className, final Class<T> requiredClass) {
-        return createInstance(className, (Class<T>) null, requiredClass);
+    public static <T> T createInstance(final String className, final Class<T> requiredClass, Object... args) {
+        return createInstance(className, (Class<T>) null, requiredClass, args);
     }
 
-    public static <T> T createInstance(final Class<?> cls, final Class<T> requiredClass) {
-        return createInstance(cls, (Class<T>) null, requiredClass);
+    public static <T> T createInstance(final Class<?> cls, final Class<T> requiredClass, Object... args) {
+        return createInstance(cls, (Class<T>) null, requiredClass, args);
     }
 
-    public static <T> T createInstance(final String className, final String defaultTypeName, final Class<T> requiredType) {
+    public static <T> T createInstance(
+            final String className,
+            final String defaultTypeName,
+            final Class<T> requiredType,
+            Object... args) {
         Class<? extends T> defaultType = null;
         if (defaultTypeName != null) {
             try {
@@ -57,10 +64,14 @@ public final class InstanceUtil {
                 throw new InstanceCreationClassException(String.format("Default type '%s' found, but is missing a dependent class: %s", defaultTypeName, e.getMessage()), e);
             }
         }
-        return createInstance(className, defaultType, requiredType);
+        return createInstance(className, defaultType, requiredType, args);
     }
 
-    public static <T> T createInstance(final Class<?> cls, final String defaultTypeName, final Class<T> requiredType) {
+    public static <T> T createInstance(
+            final Class<?> cls,
+            final String defaultTypeName,
+            final Class<T> requiredType,
+            Object... args) {
         Class<? extends T> defaultType = null;
         if (defaultTypeName != null) {
             defaultType = loadClass(defaultTypeName, requiredType);
@@ -75,18 +86,21 @@ public final class InstanceUtil {
                 throw new InstanceCreationClassException(String.format("Default type '%s' found, but is missing a dependent class: %s", defaultTypeName, e.getMessage()), e);
             }
         }
-        return createInstance(cls, defaultType, requiredType);
+        return createInstance(cls, defaultType, requiredType, args);
     }
 
-    public static <T> T createInstance(final String className, final Class<? extends T> defaultType, final Class<T> requiredType) {
+    public static <T> T createInstance(
+            final String className,
+            final Class<? extends T> defaultType,
+            final Class<T> requiredType,
+            Object... args) {
         Assert.assertNotNull("Class to instantiate must be specified", className);
-        Class<?> cls = null;
         try {
-            cls = Thread.currentThread().getContextClassLoader().loadClass(className);
+            final Class<?> cls = Thread.currentThread().getContextClassLoader().loadClass(className);
             if (cls == null) {
                 throw new InstanceCreationClassException(String.format("Failed to load class '%s'", className));
             }
-            return createInstance(cls, defaultType, requiredType);
+            return createInstance(cls, defaultType, requiredType, args);
         } catch (final ClassNotFoundException e) {
             if (className.indexOf('.') == -1) {
                 throw new UnavailableClassException(String.format("The component '%s' cannot be found", className));
@@ -97,21 +111,38 @@ public final class InstanceUtil {
         }
     }
 
-    public static <T> T createInstance(final Class<?> cls, final Class<? extends T> defaultType, final Class<T> requiredType) {
+    public static <T> T createInstance(
+            final Class<?> cls,
+            final Class<? extends T> defaultType,
+            final Class<T> requiredType,
+            Object... args) {
         Assert.assertNotNull("Class to instantiate must be specified", cls);
         try {
             if (requiredType == null || requiredType.isAssignableFrom(cls)) {
                 final Class<T> tClass = ObjectExtensions.asT(cls);
-                return tClass.newInstance();
+
+                if(args == null || args.length == 0) {
+                    return tClass.newInstance();
+                } else {
+                    Class<?>[] paramTypes = new Class[args.length];
+                    for (int i = 0; i < args.length; i++) {
+                        final Object arg = args[i];
+                        paramTypes[i] = arg.getClass();
+                    }
+                    final Constructor<T> constructor = tClass.getConstructor(paramTypes);
+                    return constructor.newInstance(args);
+                }
             } else {
                 throw new InstanceCreationClassException(String.format("Class '%s' is not of type '%s'", cls.getName(), requiredType));
             }
         } catch (final NoClassDefFoundError e) {
             throw new InstanceCreationClassException(String.format("Class '%s'found , but is missing a dependent class: %s", cls, e.getMessage()), e);
-        } catch (final InstantiationException e) {
+        } catch (final InstantiationException | InvocationTargetException e) {
             throw new InstanceCreationException(String.format("Could not instantiate an object of class '%s'; %s", cls.getName(), e.getMessage()));
         } catch (final IllegalAccessException e) {
             throw new InstanceCreationException(String.format("Could not access the class '%s'; %s", cls.getName(), e.getMessage()));
+        } catch (NoSuchMethodException e) {
+            throw new InstanceCreationException(String.format("Could not find constructor in the class '%s'; %s", cls.getName(), e.getMessage()));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/jmx/JmxBeanServer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/jmx/JmxBeanServer.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/jmx/JmxBeanServer.java
new file mode 100644
index 0000000..86a1e9d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/jmx/JmxBeanServer.java
@@ -0,0 +1,67 @@
+/*
+ *  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.commons.jmx;
+
+import java.lang.management.ManagementFactory;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JmxBeanServer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(JmxBeanServer.class);
+
+    private static JmxBeanServer instance;
+    private final MBeanServer server;
+
+    private JmxBeanServer() {
+        server = ManagementFactory.getPlatformMBeanServer();
+        instance = this;
+    }
+
+    public static JmxBeanServer getInstance() {
+        if (instance == null) {
+            LOG.info("JMX bean server created");
+            instance = new JmxBeanServer();
+        }
+        return instance;
+    }
+
+    public void register(final String name, final Object object) {
+        try {
+            final ObjectName objectName = new ObjectName("Isis:name=" + name);
+            server.registerMBean(object, objectName);
+            LOG.info(name + " JMX mbean registered: " + object);
+        } catch (final MalformedObjectNameException | NullPointerException | MBeanRegistrationException | NotCompliantMBeanException e) {
+            throw new RuntimeException(e);
+        } catch (final InstanceAlreadyExistsException e) {
+            LOG.info(name + " JMX mbean already registered: " + object);
+        }
+
+    }
+}
+
+// Copyright (c) Naked Objects Group Ltd.


[3/4] isis git commit: ISIS-1406: lots more refactoring around IsisConfiguration and IsisConfigurationBuilder.

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceChainOfResponsibility.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceChainOfResponsibility.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceChainOfResponsibility.java
index 152cb80..14cd7ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceChainOfResponsibility.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceChainOfResponsibility.java
@@ -40,6 +40,9 @@ public class ResourceStreamSourceChainOfResponsibility extends ResourceStreamSou
     }
 
     public void addResourceStreamSource(final ResourceStreamSource rss) {
+        if(rss == null) {
+            return;
+        }
         this.resourceStreamSources.add(rss);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
index f9811bd..98a63bf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
@@ -24,9 +24,12 @@ import java.util.List;
 import com.google.common.collect.ImmutableList;
 
 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.FeatureType;
+import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
@@ -80,13 +83,15 @@ public abstract class FacetFactoryAbstract implements FacetFactory, Specificatio
         return servicesInjector.lookupService(AuthenticationSessionProvider.class);
     }
 
-
-
     protected DeploymentCategory getDeploymentCategory() {
         return servicesInjector.lookupService(DeploymentCategoryProvider.class).getDeploymentCategory();
     }
 
-
+    protected IsisConfiguration getConfiguration() {
+        final ConfigurationServiceInternal configurationServiceInternal = servicesInjector
+                .lookupService(ConfigurationServiceInternal.class);
+        return (IsisConfigurationDefault)configurationServiceInternal;
+    }
 
     protected ServicesInjector servicesInjector;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
index 879d3eb..ed5580e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
@@ -65,21 +65,7 @@ public abstract class PropertyOrCollectionIdentifyingFacetFactoryAbstract
         this.adapterManager = adapterManager;
     }
 
-    // //////////////////////////////////////
-
-    private IsisConfiguration configuration;
-
-    protected IsisConfiguration getConfiguration() {
-        return configuration;
-    }
 
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
 
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index d53a500..6f322da 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -88,7 +88,6 @@ import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFace
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
-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.specloader.collectiontyperegistry.CollectionTypeRegistry;
@@ -115,7 +114,6 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
     private final MetaModelValidatorForDeprecatedAnnotation prototypeValidator = new MetaModelValidatorForDeprecatedAnnotation(Prototype.class);
 
 
-    private IsisConfiguration configuration;
     private AdapterManager adapterManager;
     private TransactionStateProvider transactionStateProvider;
 
@@ -202,7 +200,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
                     actionDomainEventFacet.getEventType(),
                     ActionDomainEvent.Noop.class,
                     ActionDomainEvent.Default.class,
-                    "isis.reflector.facet.actionAnnotation.domainEvent.postForDefault", this.configuration)) {
+                    "isis.reflector.facet.actionAnnotation.domainEvent.postForDefault", getConfiguration())) {
                 FacetUtil.addFacet(actionDomainEventFacet);
             }
 
@@ -216,7 +214,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
                 actionInvocationFacet = actionInteractionValidator.flagIfPresent(
                         new ActionInvocationFacetForPostsActionInvokedEventAnnotation(
                                 actionInvokedEventType, actionMethod, typeSpec, returnSpec, holder,
-                                getDeploymentCategory(), configuration, servicesInjector,
+                                getDeploymentCategory(), getConfiguration(), servicesInjector,
                                 getAuthenticationSessionProvider(), getAdapterManager(),
                                 transactionStateProvider
                         ), processMethodContext);
@@ -226,7 +224,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
                 actionInvocationFacet = actionInteractionValidator.flagIfPresent(
                         new ActionInvocationFacetForDomainEventFromActionInteractionAnnotation(
                                 actionDomainEventType, actionMethod, typeSpec, returnSpec, holder,
-                                getDeploymentCategory(), configuration, servicesInjector,
+                                getDeploymentCategory(), getConfiguration(), servicesInjector,
                                 getAuthenticationSessionProvider(), getAdapterManager(),
                                 transactionStateProvider
                         ), processMethodContext);
@@ -235,7 +233,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
             if (action != null) {
                 actionInvocationFacet = new ActionInvocationFacetForDomainEventFromActionAnnotation(
                         actionDomainEventType, actionMethod, typeSpec, returnSpec, holder,
-                        getDeploymentCategory(), configuration, servicesInjector,
+                        getDeploymentCategory(), getConfiguration(), servicesInjector,
                         getAuthenticationSessionProvider(),
                         getAdapterManager(), transactionStateProvider
                 );
@@ -244,7 +242,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
             {
                 actionInvocationFacet = new ActionInvocationFacetForDomainEventFromDefault(
                         actionDomainEventType, actionMethod, typeSpec, returnSpec, holder,
-                        getDeploymentCategory(), configuration, servicesInjector, getAuthenticationSessionProvider(),
+                        getDeploymentCategory(), getConfiguration(), servicesInjector, getAuthenticationSessionProvider(),
                         getAdapterManager(), transactionStateProvider
                 );
             }
@@ -390,7 +388,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // else check for @Action(command=...)
         if(commandFacet == null) {
-            commandFacet = CommandFacetForActionAnnotation.create(action, configuration, holder);
+            commandFacet = CommandFacetForActionAnnotation.create(action, getConfiguration(), holder);
         }
 
         FacetUtil.addFacet(commandFacet);
@@ -421,7 +419,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // else check for @Action(publishing=...)
         if(facet == null) {
-            facet = PublishedActionFacetForActionAnnotation.create(action, configuration, holder);
+            facet = PublishedActionFacetForActionAnnotation.create(action, getConfiguration(), holder);
         }
 
         FacetUtil.addFacet(facet);
@@ -547,10 +545,8 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
+        final IsisConfiguration configuration = getConfiguration();
 
-        this.configuration = configuration;
         actionSemanticsValidator.setConfiguration(configuration);
         actionInteractionValidator.setConfiguration(configuration);
         postsActionInvokedEventValidator.setConfiguration(configuration);

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/contributing/paged/PagedFacetOnActionFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/contributing/paged/PagedFacetOnActionFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/contributing/paged/PagedFacetOnActionFactory.java
index 4967c7d..96a3d7d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/contributing/paged/PagedFacetOnActionFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/contributing/paged/PagedFacetOnActionFactory.java
@@ -30,7 +30,6 @@ import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
@@ -46,7 +45,6 @@ public class PagedFacetOnActionFactory extends FacetFactoryAbstract
 
     private final MetaModelValidatorForDeprecatedAnnotation validator = new MetaModelValidatorForDeprecatedAnnotation(Paged.class);
 
-    private IsisConfiguration configuration;
 
     public PagedFacetOnActionFactory() {
         super(FeatureType.ACTIONS_ONLY);
@@ -89,16 +87,10 @@ public class PagedFacetOnActionFactory extends FacetFactoryAbstract
 
     // //////////////////////////////////////
 
-    public IsisConfiguration getConfiguration() {
-        return configuration;
-    }
-
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
+        final IsisConfiguration configuration = getConfiguration();
         validator.setConfiguration(configuration);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
index da5f805..ab31a47 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
@@ -72,7 +72,6 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemove
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
@@ -91,7 +90,6 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
 
     private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
 
-    private IsisConfiguration configuration;
 
     public CollectionAnnotationFacetFactory() {
         super(FeatureType.COLLECTIONS_AND_ACTIONS);
@@ -174,7 +172,7 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
                 collectionDomainEventFacet.getEventType(),
                 CollectionDomainEvent.Noop.class,
                 CollectionDomainEvent.Default.class,
-                "isis.reflector.facet.collectionAnnotation.domainEvent.postForDefault", this.configuration)) {
+                "isis.reflector.facet.collectionAnnotation.domainEvent.postForDefault", getConfiguration())) {
             FacetUtil.addFacet(collectionDomainEventFacet);
         }
 
@@ -386,7 +384,8 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector.lookupService(ConfigurationServiceInternal.class);
+        final IsisConfiguration configuration = getConfiguration();
+
         postsCollectionAddedToEventValidator.setConfiguration(configuration);
         postsCollectionRemovedFromEventValidator.setConfiguration(configuration);
         collectionInteractionValidator.setConfiguration(configuration);

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/PagedFacetOnCollectionFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/PagedFacetOnCollectionFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/PagedFacetOnCollectionFactory.java
index d3e220f..56d9467 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/PagedFacetOnCollectionFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/PagedFacetOnCollectionFactory.java
@@ -30,7 +30,6 @@ import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
@@ -44,7 +43,6 @@ public class PagedFacetOnCollectionFactory extends FacetFactoryAbstract
 
     private final MetaModelValidatorForDeprecatedAnnotation validator = new MetaModelValidatorForDeprecatedAnnotation(Paged.class);
 
-    private IsisConfiguration configuration;
 
     public PagedFacetOnCollectionFactory() {
         super(FeatureType.COLLECTIONS_ONLY);
@@ -86,17 +84,13 @@ public class PagedFacetOnCollectionFactory extends FacetFactoryAbstract
 
     // //////////////////////////////////////
 
-    public IsisConfiguration getConfiguration() {
-        return configuration;
-    }
 
 
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
+        final IsisConfiguration configuration = getConfiguration();
+
         validator.setConfiguration(configuration);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/fallback/FallbackFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/fallback/FallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/fallback/FallbackFacetFactory.java
index 4b967b9..dde4d3c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/fallback/FallbackFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/fallback/FallbackFacetFactory.java
@@ -26,7 +26,6 @@ import java.util.Map;
 import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.annotation.LabelPosition;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -35,8 +34,6 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 /**
  * Central point for providing some kind of default for any {@link Facet}s
@@ -48,7 +45,6 @@ public class FallbackFacetFactory extends FacetFactoryAbstract {
     public final static int PAGE_SIZE_STANDALONE_DEFAULT = 25;
     public final static int PAGE_SIZE_PARENTED_DEFAULT = 12;
 
-    private IsisConfiguration configuration;
 
     @SuppressWarnings("unused")
     private final static Map<Class<?>, Integer> TYPICAL_LENGTHS_BY_CLASS = new HashMap<Class<?>, Integer>() {
@@ -175,17 +171,5 @@ public class FallbackFacetFactory extends FacetFactoryAbstract {
     }
 
 
-    public IsisConfiguration getConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
-
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
index 2738067..95baea3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
@@ -29,7 +29,6 @@ import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 
 import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -37,8 +36,6 @@ import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 
@@ -123,7 +120,7 @@ public class CssClassFacetOnActionFromConfiguredRegexFactory extends FacetFactor
     private Map<Pattern, String> getCssClassByPattern() {
         if (cssClassByPattern == null) {
             // build lazily
-            final String cssClassPatterns = configuration.getString("isis.reflector.facet.cssClass.patterns");
+            final String cssClassPatterns = getConfiguration().getString("isis.reflector.facet.cssClass.patterns");
             this.cssClassByPattern = buildCssClassByPattern(cssClassPatterns);
         }
         return cssClassByPattern;
@@ -155,19 +152,6 @@ public class CssClassFacetOnActionFromConfiguredRegexFactory extends FacetFactor
     //endregion
 
 
-    //region > injected
-    private IsisConfiguration configuration;
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
-
-
-    //endregion
 
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
index 300c7d7..9cbc9f6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
@@ -31,7 +31,6 @@ import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
@@ -92,15 +91,11 @@ public class CssClassFacetOnMemberFactory extends FacetFactoryAbstract implement
 
 
     //region > injected
-    private IsisConfiguration configuration;
-
 
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
+        final IsisConfiguration configuration = getConfiguration();
         validator.setConfiguration(configuration);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
index 50c1ddd..049987f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
@@ -40,7 +40,6 @@ import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
@@ -133,7 +132,7 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
     private Map<Pattern, String> getFaIconByPattern() {
         if (faIconByPattern == null) {
             // build lazily
-            final String cssClassFaPatterns = configuration.getString("isis.reflector.facet.cssClassFa.patterns");
+            final String cssClassFaPatterns = getConfiguration().getString("isis.reflector.facet.cssClassFa.patterns");
             this.faIconByPattern = buildFaIconByPattern(cssClassFaPatterns);
         }
         return faIconByPattern;
@@ -172,14 +171,11 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
         metaModelValidator.add(validator);
     }
 
-    private IsisConfiguration configuration;
 
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
+        final IsisConfiguration configuration = getConfiguration();
         validator.setConfiguration(configuration);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
index 49d86cc..93add31 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
@@ -30,15 +30,12 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForValidationFailures;
 
 
 public class ViewModelSemanticCheckingFacetFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner {
 
-    private IsisConfiguration configuration;
 
     public ViewModelSemanticCheckingFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
@@ -50,7 +47,7 @@ public class ViewModelSemanticCheckingFacetFactory extends FacetFactoryAbstract
     public void process(final ProcessClassContext processClassContext) {
 
         // disable by default
-        final boolean enable = configuration.getBoolean(
+        final boolean enable = getConfiguration().getBoolean(
                                     "isis.reflector.facets.ViewModelSemanticCheckingFacetFactory.enable", false);
         if(!enable) {
             return;
@@ -179,13 +176,4 @@ public class ViewModelSemanticCheckingFacetFactory extends FacetFactoryAbstract
     }
 
 
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
-
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java
index 778388c..ac79324 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.metamodel.facets.object.defaults.annotcfg;
 import com.google.common.base.Strings;
 
 import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -30,12 +29,9 @@ import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetAbstract;
 import org.apache.isis.core.metamodel.facets.object.defaults.DefaultsProviderUtil;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 public class DefaultedFacetAnnotationElseConfigurationFactory extends FacetFactoryAbstract {
 
-    private IsisConfiguration configuration;
 
     public DefaultedFacetAnnotationElseConfigurationFactory() {
         super(FeatureType.OBJECTS_ONLY);
@@ -51,14 +47,14 @@ public class DefaultedFacetAnnotationElseConfigurationFactory extends FacetFacto
 
         // create from annotation, if present
         if (annotation != null) {
-            final DefaultedFacetAbstract facet = new DefaultedFacetAnnotation(cls, getIsisConfiguration(), holder, servicesInjector);
+            final DefaultedFacetAbstract facet = new DefaultedFacetAnnotation(cls, getConfiguration(), holder, servicesInjector);
             if (facet.isValid()) {
                 return facet;
             }
         }
 
         // otherwise, try to create from configuration, if present
-        final String providerName = DefaultsProviderUtil.defaultsProviderNameFromConfiguration(cls, getIsisConfiguration());
+        final String providerName = DefaultsProviderUtil.defaultsProviderNameFromConfiguration(cls, getConfiguration());
         if (!Strings.isNullOrEmpty(providerName)) {
             final DefaultedFacetFromConfiguration facet = new DefaultedFacetFromConfiguration(providerName, holder, servicesInjector);
             if (facet.isValid()) {
@@ -69,23 +65,5 @@ public class DefaultedFacetAnnotationElseConfigurationFactory extends FacetFacto
         return null;
     }
 
-    // ////////////////////////////////////////////////////////////////////
-    // Injected
-    // ////////////////////////////////////////////////////////////////////
-
-    public IsisConfiguration getIsisConfiguration() {
-        return configuration;
-    }
-
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
-
-
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index ec01a19..3295986 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -81,7 +81,6 @@ import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
 import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAware;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
@@ -109,7 +108,6 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
     private final MetaModelValidatorForDeprecatedAnnotation objectTypeValidator = new MetaModelValidatorForDeprecatedAnnotation(ObjectType.class);
 
 
-    private IsisConfiguration configuration;
     private AdapterManager adapterManager;
     private PersistenceSessionService persistenceSessionService;
 
@@ -157,7 +155,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
 
         // else check for @DomainObject(auditing=....)
         if(auditableFacet == null) {
-            auditableFacet = AuditableFacetForDomainObjectAnnotation.create(domainObject, configuration, holder);
+            auditableFacet = AuditableFacetForDomainObjectAnnotation.create(domainObject, getConfiguration(), holder);
         }
 
         // then add
@@ -190,7 +188,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
         // else check from @DomainObject(publishing=...)
         if(publishedObjectFacet == null) {
             publishedObjectFacet=
-                    PublishedObjectFacetForDomainObjectAnnotation.create(domainObject, configuration, facetHolder);
+                    PublishedObjectFacetForDomainObjectAnnotation.create(domainObject, getConfiguration(), facetHolder);
         }
 
         // then add
@@ -258,7 +256,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
 
         // else check from @DomainObject(editing=...)
         if(facet == null) {
-            facet = ImmutableFacetForDomainObjectAnnotation.create(domainObject, configuration, facetHolder);
+            facet = ImmutableFacetForDomainObjectAnnotation.create(domainObject, getConfiguration(), facetHolder);
         }
 
         // then add
@@ -339,7 +337,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
                 ObjectCreatedEvent.Noop.class,
                 ObjectCreatedEvent.Default.class,
                 "isis.reflector.facet.domainObjectAnnotation.createdLifecycleEvent.postForDefault",
-                this.configuration)) {
+                getConfiguration())) {
             FacetUtil.addFacet(facet);
         }
     }
@@ -356,7 +354,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
                 ObjectLoadedEvent.Noop.class,
                 ObjectLoadedEvent.Default.class,
                 "isis.reflector.facet.domainObjectAnnotation.loadedLifecycleEvent.postForDefault",
-                this.configuration)) {
+                getConfiguration())) {
             FacetUtil.addFacet(facet);
         }
     }
@@ -373,7 +371,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
                 ObjectPersistingEvent.Noop.class,
                 ObjectPersistingEvent.Default.class,
                 "isis.reflector.facet.domainObjectAnnotation.persistingLifecycleEvent.postForDefault",
-                this.configuration)) {
+                getConfiguration())) {
             FacetUtil.addFacet(facet);
         }
     }
@@ -390,7 +388,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
                 ObjectPersistedEvent.Noop.class,
                 ObjectPersistedEvent.Default.class,
                 "isis.reflector.facet.domainObjectAnnotation.persistedLifecycleEvent.postForDefault",
-                this.configuration)) {
+                getConfiguration())) {
             FacetUtil.addFacet(facet);
         }
     }
@@ -407,7 +405,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
                 ObjectRemovingEvent.Noop.class,
                 ObjectRemovingEvent.Default.class,
                 "isis.reflector.facet.domainObjectAnnotation.removingLifecycleEvent.postForDefault",
-                this.configuration)) {
+                getConfiguration())) {
             FacetUtil.addFacet(facet);
         }
     }
@@ -424,7 +422,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
                 ObjectUpdatedEvent.Noop.class,
                 ObjectUpdatedEvent.Default.class,
                 "isis.reflector.facet.domainObjectAnnotation.updatedLifecycleEvent.postForDefault",
-                this.configuration)) {
+                getConfiguration())) {
             FacetUtil.addFacet(facet);
         }
     }
@@ -441,7 +439,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
                 ObjectUpdatingEvent.Noop.class,
                 ObjectUpdatingEvent.Default.class,
                 "isis.reflector.facet.domainObjectAnnotation.updatingLifecycleEvent.postForDefault",
-                this.configuration)) {
+                getConfiguration())) {
             FacetUtil.addFacet(facet);
         }
     }
@@ -496,9 +494,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
+        IsisConfiguration configuration = getConfiguration();
 
         publishedObjectValidator.setConfiguration(configuration);
         auditedValidator.setConfiguration(configuration);

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
index 308a3d7..bbeac06 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
@@ -18,14 +18,11 @@ package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
 
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.ViewModelLayout;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 public class DomainObjectLayoutFacetFactory extends FacetFactoryAbstract {
 
@@ -45,13 +42,13 @@ public class DomainObjectLayoutFacetFactory extends FacetFactoryAbstract {
 
         FacetUtil.addFacet(
                 TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.create(
-                        domainObjectLayout, servicesInjector, configuration, facetHolder));
+                        domainObjectLayout, servicesInjector, getConfiguration(), facetHolder));
         FacetUtil.addFacet(
                 IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.create(
-                        domainObjectLayout, servicesInjector, configuration, facetHolder));
+                        domainObjectLayout, servicesInjector, getConfiguration(), facetHolder));
         FacetUtil.addFacet(
                 CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.create(
-                        domainObjectLayout, servicesInjector, configuration, facetHolder));
+                        domainObjectLayout, servicesInjector, getConfiguration(), facetHolder));
 
         FacetUtil.addFacet(
                 CssClassFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
@@ -92,16 +89,6 @@ public class DomainObjectLayoutFacetFactory extends FacetFactoryAbstract {
     }
 
 
-    private IsisConfiguration configuration;
-
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
 
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotationElseConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotationElseConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotationElseConfigurationFactory.java
index a05a4ef..3bed123 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotationElseConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotationElseConfigurationFactory.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.metamodel.facets.object.encodeable.annotcfg;
 import com.google.common.base.Strings;
 
 import org.apache.isis.applib.annotation.Encodable;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -32,13 +31,9 @@ import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncoderDecoderUtil;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 public class EncodableFacetAnnotationElseConfigurationFactory extends FacetFactoryAbstract implements AdapterManagerAware {
 
-    private IsisConfiguration configuration;
-
     private AdapterManager adapterManager;
 
     public EncodableFacetAnnotationElseConfigurationFactory() {
@@ -58,14 +53,14 @@ public class EncodableFacetAnnotationElseConfigurationFactory extends FacetFacto
         // create from annotation, if present
         final Encodable annotation = Annotations.getAnnotation(cls, Encodable.class);
         if (annotation != null) {
-            final EncodableFacetAnnotation facet = new EncodableFacetAnnotation(cls, getIsisConfiguration(), holder, adapterManager, servicesInjector);
+            final EncodableFacetAnnotation facet = new EncodableFacetAnnotation(cls, getConfiguration(), holder, adapterManager, servicesInjector);
             if (facet.isValid()) {
                 return facet;
             }
         }
 
         // otherwise, try to create from configuration, if present
-        final String encoderDecoderName = EncoderDecoderUtil.encoderDecoderNameFromConfiguration(cls, getIsisConfiguration());
+        final String encoderDecoderName = EncoderDecoderUtil.encoderDecoderNameFromConfiguration(cls, getConfiguration());
         if (!Strings.isNullOrEmpty(encoderDecoderName)) {
             final EncodableFacetFromConfiguration facet = new EncodableFacetFromConfiguration(encoderDecoderName, holder, adapterManager, servicesInjector);
             if (facet.isValid()) {
@@ -81,17 +76,6 @@ public class EncodableFacetAnnotationElseConfigurationFactory extends FacetFacto
     // Injected
     // ////////////////////////////////////////////////////////////////////
 
-    public IsisConfiguration getIsisConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
 
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
index 4e7b96e..697a1e1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.metamodel.facets.object.parseable.annotcfg;
 import com.google.common.base.Strings;
 
 import org.apache.isis.applib.annotation.Parseable;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -32,12 +31,9 @@ import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetAbstract;
 import org.apache.isis.core.metamodel.facets.object.parseable.ParserUtil;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 public class ParseableFacetAnnotationElseConfigurationFactory extends FacetFactoryAbstract implements AdapterManagerAware {
 
-    private IsisConfiguration configuration;
 
     private AdapterManager adapterManager;
 
@@ -55,7 +51,7 @@ public class ParseableFacetAnnotationElseConfigurationFactory extends FacetFacto
 
         // create from annotation, if present
         if (annotation != null) {
-            final ParseableFacetAnnotation facet = new ParseableFacetAnnotation(cls, getIsisConfiguration(), holder,
+            final ParseableFacetAnnotation facet = new ParseableFacetAnnotation(cls, getConfiguration(), holder,
                     adapterManager, servicesInjector);
             if (facet.isValid()) {
                 return facet;
@@ -63,7 +59,7 @@ public class ParseableFacetAnnotationElseConfigurationFactory extends FacetFacto
         }
 
         // otherwise, try to create from configuration, if present
-        final String parserName = ParserUtil.parserNameFromConfiguration(cls, getIsisConfiguration());
+        final String parserName = ParserUtil.parserNameFromConfiguration(cls, getConfiguration());
         if (!Strings.isNullOrEmpty(parserName)) {
             final ParseableFacetFromConfiguration facet = new ParseableFacetFromConfiguration(parserName, holder,
                     servicesInjector, adapterManager);
@@ -75,23 +71,6 @@ public class ParseableFacetAnnotationElseConfigurationFactory extends FacetFacto
         return null;
     }
 
-    // ////////////////////////////////////////////////////////////////////
-    // Dependencies (injected via setters since *Aware)
-    // ////////////////////////////////////////////////////////////////////
-
-
-    public IsisConfiguration getIsisConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
-
 
     @Override
     public void setAdapterManager(final AdapterManager adapterManager) {

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
index 9a549c0..d6c5646 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
@@ -24,7 +24,6 @@ import com.google.common.base.Strings;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.annotation.Value;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -42,8 +41,6 @@ import org.apache.isis.core.metamodel.facets.object.value.EqualByContentFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderContext;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderUtil;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 /**
  * Processes the {@link Value} annotation.
@@ -73,7 +70,6 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
  */
 public class ValueFacetAnnotationOrConfigurationFactory extends FacetFactoryAbstract implements AdapterManagerAware {
 
-    private IsisConfiguration configuration;
     private AdapterManager adapterManager;
 
     public ValueFacetAnnotationOrConfigurationFactory() {
@@ -93,16 +89,16 @@ public class ValueFacetAnnotationOrConfigurationFactory extends FacetFactoryAbst
         // create from annotation, if present
         final Value annotation = Annotations.getAnnotation(cls, Value.class);
         if (annotation != null) {
-            final ValueFacetAnnotation facet = new ValueFacetAnnotation(cls, holder, getIsisConfiguration(), createValueSemanticsProviderContext());
+            final ValueFacetAnnotation facet = new ValueFacetAnnotation(cls, holder, getConfiguration(), createValueSemanticsProviderContext());
             if (facet.isValid()) {
                 return facet;
             }
         }
 
         // otherwise, try to create from configuration, if present
-        final String semanticsProviderName = ValueSemanticsProviderUtil.semanticsProviderNameFromConfiguration(cls, configuration);
+        final String semanticsProviderName = ValueSemanticsProviderUtil.semanticsProviderNameFromConfiguration(cls, getConfiguration());
         if (!Strings.isNullOrEmpty(semanticsProviderName)) {
-            final ValueFacetFromConfiguration facet = new ValueFacetFromConfiguration(semanticsProviderName, holder, getIsisConfiguration(), createValueSemanticsProviderContext());
+            final ValueFacetFromConfiguration facet = new ValueFacetFromConfiguration(semanticsProviderName, holder, getConfiguration(), createValueSemanticsProviderContext());
             if (facet.isValid()) {
                 return facet;
             }
@@ -120,20 +116,6 @@ public class ValueFacetAnnotationOrConfigurationFactory extends FacetFactoryAbst
     // Injected
     // ////////////////////////////////////////////////////////////////////
 
-    public IsisConfiguration getIsisConfiguration() {
-        return configuration;
-    }
-
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
-
-
 
     public AdapterManager getAdapterManager() {
         return adapterManager;

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
index fe130f3..f4ed69a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
@@ -31,7 +31,6 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 
 public abstract class ValueFacetUsingSemanticsProviderFactory<T> extends FacetFactoryAbstract implements AdapterManagerAware, ServicesInjectorAware {
 
-    private IsisConfiguration configuration;
     private AdapterManager adapterManager;
 
     /**
@@ -53,9 +52,6 @@ public abstract class ValueFacetUsingSemanticsProviderFactory<T> extends FacetFa
     // ////////////////////////////////////////////////////
 
 
-    public IsisConfiguration getConfiguration() {
-        return configuration;
-    }
 
     public ValueSemanticsProviderContext getContext() {
         if (context == null) {
@@ -64,16 +60,6 @@ public abstract class ValueFacetUsingSemanticsProviderFactory<T> extends FacetFa
         return context;
     }
 
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = (IsisConfiguration) servicesInjector
-                .lookupService(ConfigurationServiceInternal.class);
-        this.configuration = configuration;
-    }
-
-
     @Override
     public void setAdapterManager(final AdapterManager adapterManager) {
         this.adapterManager = adapterManager;

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index 531f1ae..6f0282a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -104,8 +104,6 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
     private final MetaModelValidatorForDeprecatedAnnotation mustSatisfyValidator = new MetaModelValidatorForDeprecatedAnnotation(MustSatisfy.class);
     private final MetaModelValidatorForDeprecatedAnnotation notPersistedValidator = new MetaModelValidatorForDeprecatedAnnotation(NotPersisted.class);
 
-    private IsisConfiguration configuration;
-
     public PropertyAnnotationFacetFactory() {
         super(FeatureType.PROPERTIES_AND_ACTIONS);
     }
@@ -179,7 +177,7 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
                 PropertyDomainEvent.Noop.class,
                 PropertyDomainEvent.Default.class,
                 "isis.reflector.facet.propertyAnnotation.domainEvent.postForDefault",
-                this.configuration)) {
+                getConfiguration())) {
             FacetUtil.addFacet(propertyDomainEventFacet);
         }
 
@@ -302,7 +300,7 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
         }
 
         // check for @Property(command=...)
-        final CommandFacet commandFacet = CommandFacetForPropertyAnnotation.create(property, configuration, holder);
+        final CommandFacet commandFacet = CommandFacetForPropertyAnnotation.create(property, getConfiguration(), holder);
 
         FacetUtil.addFacet(commandFacet);
     }
@@ -325,7 +323,7 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
 
         // check for @Property(publishing=...)
         final PublishedPropertyFacet facet = PublishedPropertyFacetForPropertyAnnotation
-                .create(property, configuration, holder);
+                .create(property, getConfiguration(), holder);
 
         FacetUtil.addFacet(facet);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ConfigurationServiceInternal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ConfigurationServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ConfigurationServiceInternal.java
index b5a3dc2..206b7f3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ConfigurationServiceInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ConfigurationServiceInternal.java
@@ -22,8 +22,6 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
 
 public interface ConfigurationServiceInternal {
 
-    void injectInto(final Object candidate);
-
     /**
      * Provided by {@link RuntimeContextAbstract} itself, cloned properties from
      * {@link IsisConfiguration}.

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
index c70a066..2dbd2f0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
@@ -151,7 +151,6 @@ public class FacetProcessor implements RuntimeContextAware {
      * processing.
      */
     public void injectDependenciesInto(final FacetFactory factory) {
-        getIsisConfiguration().injectInto(factory);
 
         // cascades all the subcomponents also
         getRuntimeContext().injectInto(factory);

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java
index b62e6f9..6dc4281 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java
@@ -21,21 +21,23 @@ package org.apache.isis.core.runtime.authentication.standard;
 
 import java.util.List;
 
-import org.apache.isis.core.commons.config.InstallerAbstract;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.components.InstallerAbstract;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
 
 public abstract class AuthenticationManagerStandardInstallerAbstract extends InstallerAbstract implements AuthenticationManagerInstaller {
 
-    public AuthenticationManagerStandardInstallerAbstract(final String name) {
-        super(AuthenticationManagerInstaller.TYPE, name);
+    public AuthenticationManagerStandardInstallerAbstract(
+            final String name,
+            final IsisConfigurationDefault isisConfiguration) {
+        super(AuthenticationManagerInstaller.TYPE, name, isisConfiguration);
     }
 
     @Override
     public final AuthenticationManager createAuthenticationManager() {
         final AuthenticationManagerStandard authenticationManager = createAuthenticationManagerStandard();
-        for (final Authenticator authenticator : createAuthenticators(getConfiguration())) {
+        for (final Authenticator authenticator : createAuthenticators()) {
             authenticationManager.addAuthenticator(authenticator);
         }
         return authenticationManager;
@@ -50,7 +52,7 @@ public abstract class AuthenticationManagerStandardInstallerAbstract extends Ins
      * 
      * @return
      */
-    protected abstract List<Authenticator> createAuthenticators(final IsisConfiguration configuration);
+    protected abstract List<Authenticator> createAuthenticators();
 
     @Override
     public List<Class<?>> getTypes() {

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java
index 47e90f9..020a588 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java
@@ -21,31 +21,33 @@ package org.apache.isis.core.runtime.authorization.standard;
 
 import java.util.List;
 
-import org.apache.isis.core.commons.config.InstallerAbstract;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.components.InstallerAbstract;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
 import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
 
-public abstract class AuthorizationManagerStandardInstallerAbstract extends InstallerAbstract implements AuthorizationManagerInstaller {
+public abstract class AuthorizationManagerStandardInstallerAbstract
+        extends InstallerAbstract
+        implements AuthorizationManagerInstaller {
 
-    public AuthorizationManagerStandardInstallerAbstract(final String name) {
-        super(AuthorizationManagerInstaller.TYPE, name);
+    public AuthorizationManagerStandardInstallerAbstract(
+            final String name,
+            final IsisConfigurationDefault isisConfiguration) {
+        super(AuthorizationManagerInstaller.TYPE, name, isisConfiguration);
     }
 
     @Override
     public AuthorizationManager createAuthorizationManager() {
         final AuthorizationManagerStandard authorizationManager = new AuthorizationManagerStandard(getConfiguration());
-        final Authorizor authorizor = createAuthorizor(getConfiguration());
+        final Authorizor authorizor = createAuthorizor();
         authorizationManager.setAuthorizor(authorizor);
         return authorizationManager;
     }
 
     /**
      * Hook method
-     * 
-     * @return
      */
-    protected abstract Authorizor createAuthorizor(final IsisConfiguration configuration);
+    protected abstract Authorizor createAuthorizor();
 
     @Override
     public List<Class<?>> getTypes() {

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java
index f39cae5..1419063 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java
@@ -22,11 +22,14 @@ package org.apache.isis.core.runtime.optionhandler;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 
-public interface OptionHandler extends IsisConfigurationBuilderPrimer {
+public interface OptionHandler  {
 
-    public void addOption(Options options);
+    void addOption(Options options);
+
+    boolean handle(CommandLine commandLine, BootPrinter bootPrinter, Options options);
+
+    void prime(IsisConfigurationBuilder isisConfigurationBuilder);
 
-    public boolean handle(CommandLine commandLine, BootPrinter bootPrinter, Options options);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
new file mode 100644
index 0000000..4a8c9e4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
@@ -0,0 +1,28 @@
+/*
+ *  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 com.google.common.base.Optional;
+
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+
+public interface OptionValidator {
+    Optional<String> validate(final DeploymentCategory deploymentCategory);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/webapp/config/IsisConfigurationBuilderForWebapp.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/webapp/config/IsisConfigurationBuilderForWebapp.java b/core/metamodel/src/main/java/org/apache/isis/core/webapp/config/IsisConfigurationBuilderForWebapp.java
deleted file mode 100644
index 772e5b8..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/webapp/config/IsisConfigurationBuilderForWebapp.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.webapp.config;
-
-import javax.servlet.ServletContext;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderFileSystem;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderResourceStreams;
-
-/**
- * Convenience implementation of {@link IsisConfigurationBuilder} that loads
- * configuration resource using the {@link ResourceStreamSourceForWebInf}.
- */
-public class IsisConfigurationBuilderForWebapp extends IsisConfigurationBuilderResourceStreams {
-
-    @SuppressWarnings("unused")
-    private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderFileSystem.class);
-
-    public IsisConfigurationBuilderForWebapp(final ServletContext servletContext) {
-        super(new ResourceStreamSourceForWebInf(servletContext));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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 dfa0598..a6018de 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,5 +19,10 @@
 
 package org.apache.isis.progmodels.dflt;
 
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+
 public class JavaReflectorInstaller extends JavaReflectorInstallerNoDecorators {
+    public JavaReflectorInstaller(final IsisConfigurationDefault isisConfiguration) {
+        super(isisConfiguration);
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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
index 3380e2c..b50ba23 100644
--- 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
@@ -28,8 +28,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.InstallerAbstract;
+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;
@@ -44,26 +45,27 @@ 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;
 
-    // /////////////////////////////////////////////////////
-    // Constructor
-    // /////////////////////////////////////////////////////
+    //endregion
+
+    //region > constructor
 
-    public JavaReflectorInstallerNoDecorators() {
-        this("java");
+    public JavaReflectorInstallerNoDecorators(final IsisConfigurationDefault isisConfiguration) {
+        this("java", isisConfiguration);
     }
 
-    public JavaReflectorInstallerNoDecorators(final String name) {
-        super(ObjectReflectorInstaller.TYPE, name);
+    public JavaReflectorInstallerNoDecorators(final String name, final IsisConfigurationDefault isisConfiguration) {
+        super(ObjectReflectorInstaller.TYPE, name, isisConfiguration);
         
     }
+    //endregion
 
-    // /////////////////////////////////////////////////////
-    // createReflector, doCreateReflector
-    // /////////////////////////////////////////////////////
+    //region > createReflector, doCreateReflector
 
     @Override
     public SpecificationLoaderSpi createReflector(
@@ -80,6 +82,9 @@ public class JavaReflectorInstallerNoDecorators extends InstallerAbstract implem
                 servicesInjector);
     }
 
+    //endregion
+
+    //region > createProgrammingModel
 
     /**
      * Hook method to allow subclasses to specify a different implementations
@@ -116,6 +121,10 @@ public class JavaReflectorInstallerNoDecorators extends InstallerAbstract implem
         excludeFacetFactories(configuration, programmingModel);
     }
 
+    //endregion
+
+    //region > includeFacetFactories, excludeFacetFactories
+
     /**
      * Factored out of {@link #createProgrammingModel(IsisConfiguration)}
      * so that subclasses that choose to override can still support
@@ -134,7 +143,9 @@ public class JavaReflectorInstallerNoDecorators extends InstallerAbstract implem
         ProgrammingModel.Util.excludeFacetFactories(configuration, programmingModel);
     }
 
+    //endregion
 
+    //region > createMetaModelValidator
 
     /**
      * Hook method to allow subclasses to specify a different implementation of
@@ -150,6 +161,10 @@ public class JavaReflectorInstallerNoDecorators extends InstallerAbstract implem
         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);
@@ -162,15 +177,15 @@ public class JavaReflectorInstallerNoDecorators extends InstallerAbstract implem
         return layoutMetadataReaders;
     }
 
+    //endregion
 
-
-
-    // /////////////////////////////////////////////////////
-    // Guice
-    // /////////////////////////////////////////////////////
+    //region > getTypes
 
     @Override
     public List<Class<?>> getTypes() {
         return listOf(SpecificationLoaderSpi.class);
     }
+
+    //endregion
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java
deleted file mode 100644
index 009b1a5..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java
+++ /dev/null
@@ -1,76 +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.commons.config;
-
-import junit.framework.TestCase;
-
-import org.apache.isis.core.commons.exceptions.IsisException;
-
-public class ConfigurationBuilderFileSystemTest extends TestCase {
-    IsisConfigurationBuilderFileSystem loader;
-
-    @Override
-    protected void setUp() throws Exception {
-        loader = new IsisConfigurationBuilderFileSystem("src/test/config");
-        loader.addDefaultConfigurationResources();
-    }
-
-    public void testDefaultConfiguration() {
-        final IsisConfiguration configuration = loader.getConfiguration();
-        assertEquals("one", configuration.getString("properties.example"));
-    }
-
-    public void testDefaultConfigurationTrailingWhitespace() {
-        final IsisConfiguration configuration = loader.getConfiguration();
-        assertEquals("in-memory", configuration.getString("properties.trailingWhitespace"));
-    }
-
-    public void testAddConfiguration() {
-        loader.addConfigurationResource("another.properties", NotFoundPolicy.FAIL_FAST);
-        final IsisConfiguration configuration = loader.getConfiguration();
-        assertEquals("added", configuration.getString("additional.example"));
-    }
-
-    public void testAddedConfigurationIsIgnoredWhenEarlierPropertyExists() {
-        loader.addConfigurationResource("another.properties", NotFoundPolicy.FAIL_FAST);
-        final IsisConfiguration configuration = loader.getConfiguration();
-        assertEquals("one", configuration.getString("properties.example"));
-    }
-
-    public void testAddedConfigurationFailsWhenFileNotFound() {
-        try {
-            loader.addConfigurationResource("unfound.properties", NotFoundPolicy.FAIL_FAST);
-            loader.getConfiguration();
-            fail();
-        } catch (final IsisException expected) {
-        }
-    }
-
-    public void testAddedConfigurationIgnoreUnfoundFile() {
-        loader.addConfigurationResource("unfound.properties", NotFoundPolicy.CONTINUE);
-        loader.getConfiguration();
-    }
-
-    public void testAddProperty() throws Exception {
-        loader.add("added.property", "added by code");
-        final IsisConfiguration configuration = loader.getConfiguration();
-        assertEquals("added by code", configuration.getString("added.property"));
-    }
-}


[2/4] isis git commit: ISIS-1406: lots more refactoring around IsisConfiguration and IsisConfigurationBuilder.

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest.java
deleted file mode 100644
index cadaaed..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest.java
+++ /dev/null
@@ -1,47 +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.commons.config;
-
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-import org.junit.Test;
-
-public class ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest {
-
-    @Test
-    public void toStringWhenNull() throws Exception {
-        final IsisConfigurationBuilderResourceStreams.ConfigurationResourceAndPolicy configurationResourceAndPolicy = new IsisConfigurationBuilderResourceStreams.ConfigurationResourceAndPolicy(null, null);
-        assertThat(configurationResourceAndPolicy.toString(), is("null{null}"));
-    }
-
-    @Test
-    public void toStringWhenConfigResourceNotNull() throws Exception {
-        final IsisConfigurationBuilderResourceStreams.ConfigurationResourceAndPolicy configurationResourceAndPolicy = new IsisConfigurationBuilderResourceStreams.ConfigurationResourceAndPolicy("foo.properties", null);
-        assertThat(configurationResourceAndPolicy.toString(), is("foo.properties{null}"));
-    }
-
-    @Test
-    public void toStringWhenAllSpecified() throws Exception {
-        final IsisConfigurationBuilderResourceStreams.ConfigurationResourceAndPolicy configurationResourceAndPolicy = new IsisConfigurationBuilderResourceStreams.ConfigurationResourceAndPolicy("foo.properties", NotFoundPolicy.CONTINUE);
-        assertThat(configurationResourceAndPolicy.toString(), is("foo.properties{CONTINUE}"));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderTwoDirectoriesTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderTwoDirectoriesTest.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderTwoDirectoriesTest.java
deleted file mode 100644
index fe76e66..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderTwoDirectoriesTest.java
+++ /dev/null
@@ -1,37 +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.commons.config;
-
-import junit.framework.TestCase;
-
-public class ConfigurationBuilderTwoDirectoriesTest extends TestCase {
-    IsisConfigurationBuilderFileSystem builder;
-
-    @Override
-    protected void setUp() throws Exception {
-        builder = new IsisConfigurationBuilderFileSystem("src/test/config", "src/test");
-    }
-
-    public void testAddConfigurationInDifferentDirectory() throws Exception {
-        builder.addConfigurationResource("three.properties", NotFoundPolicy.FAIL_FAST);
-        final IsisConfiguration configuration = builder.getConfiguration();
-        assertEquals("version 3", configuration.getString("different.property"));
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest.java
new file mode 100644
index 0000000..f0b7ee9
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest.java
@@ -0,0 +1,49 @@
+/*
+ *  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.commons.configbuilder;
+
+import org.junit.Test;
+
+import org.apache.isis.core.commons.config.NotFoundPolicy;
+
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+public class ConfigurationBuilderResourceStreamsConfigResourceAndPolicyTest {
+
+    @Test
+    public void toStringWhenNull() throws Exception {
+        final ConfigurationResourceAndPolicy configurationResourceAndPolicy = new ConfigurationResourceAndPolicy(null, null);
+        assertThat(configurationResourceAndPolicy.toString(), is("null{null}"));
+    }
+
+    @Test
+    public void toStringWhenConfigResourceNotNull() throws Exception {
+        final ConfigurationResourceAndPolicy configurationResourceAndPolicy = new ConfigurationResourceAndPolicy("foo.properties", null);
+        assertThat(configurationResourceAndPolicy.toString(), is("foo.properties{null}"));
+    }
+
+    @Test
+    public void toStringWhenAllSpecified() throws Exception {
+        final ConfigurationResourceAndPolicy configurationResourceAndPolicy = new ConfigurationResourceAndPolicy("foo.properties", NotFoundPolicy.CONTINUE);
+        assertThat(configurationResourceAndPolicy.toString(), is("foo.properties{CONTINUE}"));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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
index 429941a..ccc1d7c 100644
--- 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
@@ -78,9 +78,6 @@ public abstract class ObjectReflectorDefaultTestAbstract {
 
         context.checking(new Expectations() {
             {
-                allowing(mockConfiguration).injectInto(with(anything()));
-                will(InjectIntoJMockAction.injectInto());
-                
                 ignoring(mockConfiguration);
             }
         });

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/AuthenticationManagerStandardInstallerAbstractForDfltRuntime.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/AuthenticationManagerStandardInstallerAbstractForDfltRuntime.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/AuthenticationManagerStandardInstallerAbstractForDfltRuntime.java
index 6948431..7c899c6 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/AuthenticationManagerStandardInstallerAbstractForDfltRuntime.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/AuthenticationManagerStandardInstallerAbstractForDfltRuntime.java
@@ -19,13 +19,16 @@
 
 package org.apache.isis.core.runtime.authentication;
 
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.runtime.authentication.standard.AuthenticationManagerStandard;
 import org.apache.isis.core.runtime.authentication.standard.AuthenticationManagerStandardInstallerAbstract;
 
 public abstract class AuthenticationManagerStandardInstallerAbstractForDfltRuntime extends AuthenticationManagerStandardInstallerAbstract {
 
-    public AuthenticationManagerStandardInstallerAbstractForDfltRuntime(final String name) {
-        super(name);
+    public AuthenticationManagerStandardInstallerAbstractForDfltRuntime(
+            final String name,
+            final IsisConfigurationDefault isisConfiguration) {
+        super(name, isisConfiguration);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerAbstract.java
index d8729bb..455171c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerAbstract.java
@@ -23,7 +23,8 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.isis.applib.fixtures.LogonFixture;
-import org.apache.isis.core.commons.config.InstallerAbstract;
+import org.apache.isis.core.commons.components.InstallerAbstract;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 
 public abstract class FixturesInstallerAbstract extends InstallerAbstract implements FixturesInstaller {
 
@@ -31,8 +32,8 @@ public abstract class FixturesInstallerAbstract extends InstallerAbstract implem
 
     private LogonFixture logonFixture;
 
-    public FixturesInstallerAbstract(final String name) {
-        super(FixturesInstaller.TYPE, name);
+    public FixturesInstallerAbstract(final String name, final IsisConfigurationDefault isisConfiguration) {
+        super(FixturesInstaller.TYPE, name, isisConfiguration);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
index 6fbca9f..1e3cbde 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
@@ -23,6 +23,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.runtime.fixtures.domainservice.ObjectLoaderFixture;
@@ -41,8 +42,8 @@ public class FixturesInstallerFromConfiguration extends FixturesInstallerAbstrac
 
     private static final String EXPLORATION_OBJECTS = ConfigurationConstants.ROOT + "exploration-objects";
 
-    public FixturesInstallerFromConfiguration() {
-        super("configuration");
+    public FixturesInstallerFromConfiguration(final IsisConfigurationDefault isisConfiguration) {
+        super("configuration", isisConfiguration);
     }
 
     @Override
@@ -65,9 +66,7 @@ public class FixturesInstallerFromConfiguration extends FixturesInstallerAbstrac
             if (!fixtureLoaded) {
                 LOG.debug("No fixtures loaded from configuration");
             }
-        } catch (final IllegalArgumentException e) {
-            throw new IsisException(e);
-        } catch (final SecurityException e) {
+        } catch (final IllegalArgumentException | SecurityException e) {
             throw new IsisException(e);
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerNoop.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerNoop.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerNoop.java
deleted file mode 100644
index ec108db..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerNoop.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.runtime.fixtures;
-
-import org.apache.isis.applib.fixtures.LogonFixture;
-import org.apache.isis.core.commons.components.Noop;
-
-public class FixturesInstallerNoop extends FixturesInstallerAbstract implements Noop {
-
-    public FixturesInstallerNoop() {
-        super("noop");
-    }
-
-    @Override
-    public void installFixtures() {
-    }
-
-    @Override
-    public LogonFixture getLogonFixture() {
-        return null;
-    }
-
-    @Override
-    protected void addFixturesTo(final FixturesInstallerDelegate delegate) {
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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 93c01c6..eba4cf5 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
@@ -34,10 +34,8 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.components.Installer;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderAware;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.factory.InstanceCreationClassException;
 import org.apache.isis.core.commons.factory.InstanceCreationException;
@@ -59,10 +57,6 @@ import org.apache.isis.core.runtime.system.SystemConstants;
 import org.apache.isis.core.runtime.systemdependencyinjector.SystemDependencyInjector;
 import org.apache.isis.core.runtime.systemdependencyinjector.SystemDependencyInjectorAware;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-
 /**
  * The installers correspond more-or-less to the configurable top-level
  * components of {@link IsisSystem}.
@@ -110,7 +104,7 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
                     continue;
                 }
                 try {
-                    final Installer object = (Installer) InstanceUtil.createInstance(className);
+                    final Installer object = (Installer) InstanceUtil.createInstance(className, isisConfiguration);
                     LOG.debug("created component installer: " + object.getName() + " - " + className);
                     installerList.add(object);
                 } catch (final UnavailableClassException e) {

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java
index 0cec1f8..1dc5921 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java
@@ -20,8 +20,6 @@
 package org.apache.isis.core.runtime.installerregistry.installerapi;
 
 import org.apache.isis.core.commons.components.Installer;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderAware;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -30,13 +28,12 @@ import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory
 /**
  * Installs a {@link PersistenceSession} during system start up.
  */
-public interface PersistenceMechanismInstaller extends Installer, IsisConfigurationBuilderAware {
+public interface PersistenceMechanismInstaller extends Installer {
 
     static String TYPE = "persistor";
 
     PersistenceSessionFactory createPersistenceSessionFactory(
             final DeploymentType deploymentType,
-            final IsisConfigurationDefault configuration,
             final ServicesInjectorSpi servicesInjector);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisBootstrapper.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisBootstrapper.java
deleted file mode 100644
index b7a48b6..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisBootstrapper.java
+++ /dev/null
@@ -1,29 +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;
-
-import com.google.inject.Injector;
-
-public interface IsisBootstrapper {
-    public void bootstrap(Injector injector);
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
deleted file mode 100644
index b9d3364..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
+++ /dev/null
@@ -1,276 +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;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.base.Optional;
-import com.google.common.collect.Lists;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-import org.apache.commons.cli.BasicParser;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderDefault;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
-import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
-import org.apache.isis.core.runtime.optionhandler.BootPrinter;
-import org.apache.isis.core.runtime.optionhandler.OptionHandler;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerAdditionalProperty;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerAppManifest;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerConfiguration;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerDeploymentType;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixture;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixtureFromEnvironmentVariable;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerHelp;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerSystemProperties;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerVersion;
-import org.apache.isis.core.runtime.runner.opts.OptionValidator;
-import org.apache.isis.core.runtime.system.DeploymentType;
-
-public class IsisRunner {
-
-    private static final Logger LOG = LoggerFactory.getLogger(IsisRunner.class);
-
-    private final IsisLoggingConfigurer loggingConfigurer = new IsisLoggingConfigurer();
-
-    private final String[] args;
-    private final OptionHandlerDeploymentType optionHandlerDeploymentType;
-
-    private final List<OptionHandler> optionHandlers = Lists.newArrayList();
-    private final List<OptionValidator> validators = Lists.newArrayList();
-
-    private IsisConfigurationBuilder isisConfigurationBuilder;
-    private InstallerLookup installerLookup;
-
-    private Injector globalInjector;
-
-    // ///////////////////////////////////////////////////////////////////////////////////////
-    // Construction and adjustments
-    // ///////////////////////////////////////////////////////////////////////////////////////
-
-    public IsisRunner(final String[] args, final OptionHandlerDeploymentType optionHandlerDeploymentType) {
-        this.args = args;
-        this.optionHandlerDeploymentType = optionHandlerDeploymentType;
-
-        // setup logging immediately
-        loggingConfigurer.configureLogging(determineConfigDirectory(), args);
-
-        addStandardOptionHandlersAndValidators();
-    }
-
-    // REVIEW is this something that IsisConfigBuilder should know about?
-    private String determineConfigDirectory() {
-        if (new File(ConfigurationConstants.WEBINF_FULL_DIRECTORY).exists()) {
-            return ConfigurationConstants.WEBINF_FULL_DIRECTORY;
-        } else {
-            return ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY;
-        }
-    }
-
-    /**
-     * Adds additional option handlers; may also require additional
-     * {@link OptionValidator validator}s to be
-     * {@link #addValidator(OptionValidator) add}ed.
-     * <p>
-     * An adjustment (as per GOOS book).
-     */
-    public final boolean addOptionHandler(final OptionHandler optionHandler) {
-        return optionHandlers.add(optionHandler);
-    }
-
-    /**
-     * Adds additional validators; typically goes hand-in-hand will calls to
-     * {@link #addOptionHandler(OptionHandler)}.
-     * <p>
-     * An adjustment (as per GOOS book).
-     */
-    public void addValidator(final OptionValidator validator) {
-        validators.add(validator);
-    }
-
-    /**
-     * The default implementation is a {@link IsisConfigurationBuilderDefault},
-     * which looks to the <tt>config/</tt> directory, the
-     * <tt>src/main/webapp/WEB-INF</tt> directory, and then finally to the
-     * classpath. However, this could be a security concern in a production
-     * environment; a user could edit the <tt>isis.properties</tt> config files
-     * to disable security, for example.
-     * <p>
-     * This method therefore allows this system to be configured using a
-     * different {@link IsisConfigurationBuilder}. For example, a
-     * security-conscious subclass could return a
-     * {@link IsisConfigurationBuilder} that only reads from the classpath. This
-     * would allow the application to be deployed as a single sealed JAR that
-     * could not be tampered with.
-     * <p>
-     * An adjustment (as per GOOS book).
-     */
-    public void setConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
-        this.isisConfigurationBuilder = isisConfigurationBuilder;
-        this.installerLookup = new InstallerLookup(isisConfigurationBuilder.getConfiguration());
-
-    }
-
-    // ///////////////////////////////////////////////////////////////////////////////////////
-    // parse and validate
-    // ///////////////////////////////////////////////////////////////////////////////////////
-
-    public final boolean parseAndValidate() {
-
-        // add options (ie cmd line flags)
-        final Options options = createOptions();
-
-        // parse & validate options from the cmd line
-        final BootPrinter printer = new BootPrinter(getClass());
-        return parseOptions(options, printer) && validateOptions(options, printer);
-    }
-
-    private Options createOptions() {
-        final Options options = new Options();
-        for (final OptionHandler optionHandler : optionHandlers) {
-            optionHandler.addOption(options);
-        }
-        return options;
-    }
-
-    private boolean parseOptions(final Options options, final BootPrinter printer) {
-        final CommandLineParser parser = new BasicParser();
-        try {
-            final CommandLine commandLine = parser.parse(options, args);
-            for (final OptionHandler optionHandler : optionHandlers) {
-                if (!optionHandler.handle(commandLine, printer, options)) {
-                    return false;
-                }
-            }
-        } catch (final ParseException e) {
-            printer.printErrorMessage(e.getMessage());
-            printer.printHelp(options);
-            return false;
-        }
-        return true;
-    }
-
-    private boolean validateOptions(final Options options, final BootPrinter printer) {
-        final DeploymentType deploymentType = optionHandlerDeploymentType.getDeploymentType();
-
-        for (final OptionValidator validator : validators) {
-            final Optional<String> errorMessage = validator.validate(deploymentType);
-            if (errorMessage.isPresent()) {
-                printer.printErrorAndHelp(options, errorMessage.get());
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public IsisConfigurationBuilder getStartupConfiguration() {
-        return isisConfigurationBuilder;
-    }
-
-    public void primeConfigurationWithCommandLineOptions() {
-        for (final IsisConfigurationBuilderPrimer isisConfigurationBuilderPrimer : optionHandlers) {
-            LOG.debug("priming configurations for " + isisConfigurationBuilderPrimer);
-            isisConfigurationBuilderPrimer.primeConfigurationBuilder(isisConfigurationBuilder);
-        }
-    }
-
-    public void loadInitialProperties() {
-        isisConfigurationBuilder.addDefaultConfigurationResources();
-    }
-
-
-    // ///////////////////////////////////////////////////////////////////////////////////////
-    // Bootstrapping
-    // ///////////////////////////////////////////////////////////////////////////////////////
-
-    // TODO remove and use is desktop runner
-
-    public final void bootstrap(final IsisBootstrapper bootstrapper) {
-
-        final DeploymentType deploymentType = optionHandlerDeploymentType.getDeploymentType();
-
-        IsisConfigurationDefault isisConfiguration = isisConfigurationBuilder.getConfiguration();
-
-        this.globalInjector = createGuiceInjector(deploymentType, isisConfiguration);
-
-        bootstrapper.bootstrap(globalInjector);
-    }
-
-    private Injector createGuiceInjector(
-            final DeploymentType deploymentType,
-            final IsisConfigurationDefault isisConfiguration) {
-        final IsisInjectModule isisModule =
-                new IsisInjectModule(deploymentType, isisConfiguration);
-        return Guice.createInjector(isisModule);
-    }
-
-    // ///////////////////////////////////////////////////////////////////////////////////////
-    // Handlers & Validators
-    // ///////////////////////////////////////////////////////////////////////////////////////
-
-    public final List<OptionHandler> getOptionHandlers() {
-        return Collections.unmodifiableList(optionHandlers);
-    }
-
-    private void addStandardOptionHandlersAndValidators() {
-        addOptionHandler(optionHandlerDeploymentType);
-        addOptionHandler(new OptionHandlerConfiguration());
-
-        // intention is to delete this: better to use isis.reflector.facets.include and isis.reflector.facets.exclude properties
-        // addOptionHandler(new OptionHandlerReflector(installerLookup));
-
-        addOptionHandler(new OptionHandlerAppManifest());
-        addOptionHandler(new OptionHandlerFixture());
-
-        // no-op
-        //addOptionHandler(new OptionHandlerNoSplash());
-
-        addOptionHandler(new OptionHandlerAdditionalProperty());
-        addOptionHandler(new OptionHandlerFixtureFromEnvironmentVariable());
-        addOptionHandler(new OptionHandlerSystemProperties());
-
-        // no-op
-        // addOptionHandler(new OptionHandlerDebug());
-
-        // no-op
-        // addOptionHandler(new OptionHandlerDiagnostics());
-        // no-op
-        // addOptionHandler(new OptionHandlerQuiet());
-        // no-op
-        // addOptionHandler(new OptionHandlerVerbose());
-
-        addOptionHandler(new OptionHandlerHelp());
-        addOptionHandler(new OptionHandlerVersion());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAdditionalProperty.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAdditionalProperty.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAdditionalProperty.java
index 9ecc038..7310746 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAdditionalProperty.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAdditionalProperty.java
@@ -28,7 +28,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.runner.Constants;
@@ -52,7 +52,7 @@ public class OptionHandlerAdditionalProperty extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         addConfigurationProperties(isisConfigurationBuilder, additionalProperties);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAppManifest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAppManifest.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAppManifest.java
index f6e937f..03ad1ba 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAppManifest.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerAppManifest.java
@@ -26,7 +26,7 @@ import org.apache.commons.cli.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.runner.Constants;
@@ -34,8 +34,6 @@ import org.apache.isis.core.runtime.system.SystemConstants;
 
 import static org.apache.isis.core.runtime.runner.Constants.APP_MANIFEST_LONG_OPT;
 import static org.apache.isis.core.runtime.runner.Constants.APP_MANIFEST_OPT;
-import static org.apache.isis.core.runtime.runner.Constants.FIXTURE_LONG_OPT;
-import static org.apache.isis.core.runtime.runner.Constants.FIXTURE_OPT;
 
 public class OptionHandlerAppManifest extends OptionHandlerAbstract {
 
@@ -64,7 +62,7 @@ public class OptionHandlerAppManifest extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         if (appManifestClassName == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerConfiguration.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerConfiguration.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerConfiguration.java
index d52bc7e..f267adb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerConfiguration.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerConfiguration.java
@@ -27,7 +27,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.config.NotFoundPolicy;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
@@ -51,7 +51,7 @@ public class OptionHandlerConfiguration extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         if (configurationResource == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDebug.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDebug.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDebug.java
index bda880c..5f3874e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDebug.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDebug.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.runtime.runner.opts;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 
@@ -49,7 +49,7 @@ public class OptionHandlerDebug extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         // TODO need to prime or otherwise set logging.
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDeploymentType.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDeploymentType.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDeploymentType.java
index 307a0fb..6a29977 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDeploymentType.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDeploymentType.java
@@ -19,22 +19,22 @@
 
 package org.apache.isis.core.runtime.runner.opts;
 
-import static org.apache.isis.core.runtime.runner.Constants.TYPE_LONG_OPT;
-import static org.apache.isis.core.runtime.runner.Constants.TYPE_OPT;
-
 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.config.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.config.NotFoundPolicy;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 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.DeploymentType;
 import org.apache.isis.core.runtime.system.SystemConstants;
 
+import static org.apache.isis.core.runtime.runner.Constants.TYPE_LONG_OPT;
+import static org.apache.isis.core.runtime.runner.Constants.TYPE_OPT;
+
 public abstract class OptionHandlerDeploymentType extends OptionHandlerAbstract {
 
     private final DeploymentType defaultDeploymentType;
@@ -79,7 +79,7 @@ public abstract class OptionHandlerDeploymentType extends OptionHandlerAbstract
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         final String type = deploymentType.nameLowerCase();
         isisConfigurationBuilder.addConfigurationResource(type + ".properties", NotFoundPolicy.CONTINUE);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDiagnostics.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDiagnostics.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDiagnostics.java
index 87ee3a2..479cba4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDiagnostics.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDiagnostics.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.runtime.runner.opts;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.runner.Constants;
@@ -54,7 +54,7 @@ public class OptionHandlerDiagnostics extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         // TODO need to do what, exactly?
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureAbstract.java
index 4c3831f..1fa1b6b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureAbstract.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.runtime.runner.opts;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.system.SystemConstants;
 
@@ -36,7 +36,7 @@ public abstract class OptionHandlerFixtureAbstract extends OptionHandlerAbstract
     protected String fixtureClassName;
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         if (fixtureClassName == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java
index ff1413d..b05406e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java
@@ -24,10 +24,8 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
-import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
-import org.apache.isis.core.runtime.system.SystemConstants;
 
 public class OptionHandlerFixtureFromEnvironmentVariable extends OptionHandlerFixtureAbstract {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerHelp.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerHelp.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerHelp.java
index fbb7e26..839d331 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerHelp.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerHelp.java
@@ -25,7 +25,7 @@ import static org.apache.isis.core.runtime.runner.Constants.HELP_OPT;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.runner.Constants;
@@ -52,7 +52,7 @@ public class OptionHandlerHelp extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         // nothing to do
 
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerInitParameters.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerInitParameters.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerInitParameters.java
index 6996cc0..8f0c031 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerInitParameters.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerInitParameters.java
@@ -27,7 +27,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 
@@ -55,7 +55,7 @@ public class OptionHandlerInitParameters extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         Map<String,String> additionalProperties = asMap(servletContext);
         LOG.info("priming configuration builder: " + additionalProperties.size() + " properties to prime");
         addConfigurationProperties(isisConfigurationBuilder, additionalProperties);

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerNoSplash.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerNoSplash.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerNoSplash.java
index 9ae4849..b46823b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerNoSplash.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerNoSplash.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.runtime.runner.opts;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.system.SystemConstants;
@@ -54,7 +54,7 @@ public class OptionHandlerNoSplash extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         if (noSplash) {
             isisConfigurationBuilder.add(SystemConstants.NOSPLASH_KEY, "true");
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerPassword.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerPassword.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerPassword.java
index d7d7fbe..10a43a2 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerPassword.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerPassword.java
@@ -27,7 +27,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.runner.Constants;
@@ -55,7 +55,7 @@ public class OptionHandlerPassword extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         isisConfigurationBuilder.add(SystemConstants.PASSWORD_KEY, password);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerQuiet.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerQuiet.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerQuiet.java
index 1c71102..0327090 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerQuiet.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerQuiet.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.runtime.runner.opts;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 
@@ -49,7 +49,7 @@ public class OptionHandlerQuiet extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         // TODO need to do what, exactly???
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/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 80066fd..684874b 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
@@ -24,7 +24,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.metamodel.specloader.ObjectReflectorInstaller;
 import org.apache.isis.core.runtime.installerregistry.InstallerRepository;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
@@ -64,7 +64,7 @@ public class OptionHandlerReflector extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         isisConfigurationBuilder.add(SystemConstants.REFLECTOR_KEY, reflector);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java
index 6513a6f..7478d2f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java
@@ -26,7 +26,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 
@@ -60,7 +60,7 @@ public class OptionHandlerSystemProperties extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         LOG.debug("priming configuration builder: " + additionalProperties.size() + " properties to prime");
         addConfigurationProperties(isisConfigurationBuilder, additionalProperties);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerUser.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerUser.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerUser.java
index 2c4d2aa..a6ccdcb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerUser.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerUser.java
@@ -27,7 +27,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.runner.Constants;
@@ -56,7 +56,7 @@ public class OptionHandlerUser extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         isisConfigurationBuilder.add(SystemConstants.USER_KEY, userName);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVerbose.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVerbose.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVerbose.java
index c2c5da1..57f2791 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVerbose.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVerbose.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.runtime.runner.opts;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 
@@ -49,7 +49,7 @@ public class OptionHandlerVerbose extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         // TODO need to do what, exactly???
 
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVersion.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVersion.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVersion.java
index e6b1b00..3cd6bc6 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVersion.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVersion.java
@@ -24,7 +24,7 @@ import static org.apache.isis.core.runtime.runner.Constants.VERSION_OPT;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.runtime.optionhandler.BootPrinter;
 import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
 import org.apache.isis.core.runtime.runner.Constants;
@@ -50,7 +50,7 @@ public class OptionHandlerVersion extends OptionHandlerAbstract {
     }
 
     @Override
-    public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
         // nothing to do
 
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
deleted file mode 100644
index dc2a049..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
+++ /dev/null
@@ -1,28 +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 com.google.common.base.Optional;
-
-import org.apache.isis.core.runtime.system.DeploymentType;
-
-public interface OptionValidator {
-    public Optional<String> validate(final DeploymentType deploymentType);
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidatorUserAndPasswordCombo.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidatorUserAndPasswordCombo.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidatorUserAndPasswordCombo.java
deleted file mode 100644
index be810df..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidatorUserAndPasswordCombo.java
+++ /dev/null
@@ -1,48 +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 com.google.common.base.Optional;
-
-import org.apache.isis.core.runtime.system.DeploymentType;
-
-public final class OptionValidatorUserAndPasswordCombo implements OptionValidator {
-
-    private final OptionHandlerUser optionHandlerUser;
-    private final OptionHandlerPassword optionHandlerPassword;
-
-    public OptionValidatorUserAndPasswordCombo(final OptionHandlerUser optionHandlerUser, final OptionHandlerPassword optionHandlerPassword) {
-        this.optionHandlerPassword = optionHandlerPassword;
-        this.optionHandlerUser = optionHandlerUser;
-    }
-
-    @Override
-    public Optional<String> validate(final DeploymentType deploymentType) {
-        final String user = optionHandlerUser.getUserName();
-        final String password = optionHandlerPassword.getPassword();
-        final boolean ok = (password == null && user == null) || (password != null && user != null);
-        return setIf(!ok, "A user name must be specified with a password");
-    }
-    
-    private static Optional<String> setIf(final boolean fail, final String failMsg) {
-        return fail? Optional.of(failMsg): Optional.<String>absent();
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstaller.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstaller.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstaller.java
index 8e72ba1..0ca08bb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstaller.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstaller.java
@@ -32,9 +32,7 @@ public interface ServicesInstaller extends Installer {
      * distinguish from the '--services' flag meaning a particular set of
      * services to use (whereas this flag means how to locate them).
      */
-    static String TYPE = "services-installer";
+    String TYPE = "services-installer";
 
     List<Object> getServices();
-
-    void setIgnoreFailures(boolean ignoreFailures);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerAbstract.java
index 5a6b102..ec9a92b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerAbstract.java
@@ -19,13 +19,15 @@
 
 package org.apache.isis.core.runtime.services;
 
-import org.apache.isis.core.commons.config.InstallerAbstract;
+import org.apache.isis.core.commons.components.InstallerAbstract;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 
 public abstract class ServicesInstallerAbstract extends InstallerAbstract implements ServicesInstaller {
 
-    public ServicesInstallerAbstract(final String name) {
-        super(ServicesInstaller.TYPE, name);
+    public ServicesInstallerAbstract(
+            final String name,
+            final IsisConfigurationDefault isisConfiguration) {
+        super(ServicesInstaller.TYPE, name, isisConfiguration);
     }
 
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
index 5b7ebb2..2fe04ef 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
@@ -45,6 +45,7 @@ import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.util.DeweyOrderComparator;
 
 import static com.google.common.base.Predicates.and;
@@ -52,6 +53,8 @@ import static com.google.common.base.Predicates.not;
 
 public class ServicesInstallerFromAnnotation extends ServicesInstallerAbstract {
 
+    //region > constants
+
     private static final Logger LOG = LoggerFactory.getLogger(ServicesInstallerFromAnnotation.class);
 
     public static final String NAME = "annotation";
@@ -70,19 +73,25 @@ public class ServicesInstallerFromAnnotation extends ServicesInstallerAbstract {
      * </p>
      */
     public final static String PACKAGE_PREFIX_STANDARD = Joiner.on(",").join(AppManifest.Registry.FRAMEWORK_PROVIDED_SERVICES);
+    //endregion
+
+    //region > constructor, fields
 
     private final ServiceInstantiator serviceInstantiator;
 
-    public ServicesInstallerFromAnnotation() {
-        this(new ServiceInstantiator());
+    public ServicesInstallerFromAnnotation(final IsisConfigurationDefault isisConfiguration) {
+        this(new ServiceInstantiator(), isisConfiguration);
     }
 
-    public ServicesInstallerFromAnnotation(final ServiceInstantiator serviceInstantiator) {
-        super(NAME);
+    public ServicesInstallerFromAnnotation(
+            final ServiceInstantiator serviceInstantiator,
+            final IsisConfigurationDefault isisConfiguration) {
+        super(NAME, isisConfiguration);
         this.serviceInstantiator = serviceInstantiator;
     }
+    //endregion
 
-
+    //region > packagePrefixes
     private String packagePrefixes;
 
     /**
@@ -95,12 +104,9 @@ public class ServicesInstallerFromAnnotation extends ServicesInstallerAbstract {
     public void withPackagePrefixes(final String... packagePrefixes) {
         this.packagePrefixes = Joiner.on(",").join(packagePrefixes);
     }
+    //endregion
 
-    @Override
-    public void setIgnoreFailures(final boolean ignoreFailures) {
-        // no-op
-    }
-
+    //region > init, shutdown
 
     public void init() {
         initIfRequired();
@@ -138,7 +144,9 @@ public class ServicesInstallerFromAnnotation extends ServicesInstallerAbstract {
     public void shutdown() {
     }
 
-    // //////////////////////////////////////
+    //endregion
+
+    //region > helpers
 
     private Predicate<Class<?>> instantiatable() {
         return and(not(nullClass()), not(abstractClass()));
@@ -173,26 +181,28 @@ public class ServicesInstallerFromAnnotation extends ServicesInstallerAbstract {
         };
     }
 
+    //endregion
 
-    // //////////////////////////////////////
+    //region > getServices (API)
 
-    private List<Object> serviceList;
+    private List<Object> services;
 
     @Override
     public List<Object> getServices() {
         initIfRequired();
 
-        if(this.serviceList == null) {
+        if(this.services == null) {
 
             final SortedMap<String, SortedSet<String>> positionedServices = Maps.newTreeMap(new DeweyOrderComparator());
             appendServices(positionedServices);
 
-            this.serviceList = ServicesInstallerUtils.instantiateServicesFrom(positionedServices, serviceInstantiator);
+            this.services = ServicesInstallerUtils.instantiateServicesFrom(positionedServices, serviceInstantiator);
         }
-        return serviceList;
+        return services;
     }
+    //endregion
 
-    // //////////////////////////////////////
+    //region > appendServices
 
     public void appendServices(final SortedMap<String, SortedSet<String>> positionedServices) {
         initIfRequired();
@@ -220,6 +230,10 @@ public class ServicesInstallerFromAnnotation extends ServicesInstallerAbstract {
         }
     }
 
+    //endregion
+
+    //region > helpers: orderOf, nameOf, asList
+
     private static String orderOf(final Class<?> cls) {
         final DomainServiceLayout domainServiceLayout = cls.getAnnotation(DomainServiceLayout.class);
         String order = domainServiceLayout != null ? domainServiceLayout.menuOrder(): null;
@@ -239,17 +253,32 @@ public class ServicesInstallerFromAnnotation extends ServicesInstallerAbstract {
         return name;
     }
 
-    protected List<String> asList(final String csv) {
+    private static List<String> asList(final String csv) {
         return Lists.newArrayList(Iterables.transform(Splitter.on(",").split(csv), trim()));
     }
+    //endregion
+
+    //region > domain events
+    public static abstract class PropertyDomainEvent<T>
+            extends org.apache.isis.applib.services.eventbus.PropertyDomainEvent<ServicesInstallerFromAnnotation, T> {
+    }
 
+    public static abstract class CollectionDomainEvent<T>
+            extends org.apache.isis.applib.services.eventbus.CollectionDomainEvent<ServicesInstallerFromAnnotation, T> {
+    }
+
+    public static abstract class ActionDomainEvent
+            extends org.apache.isis.applib.services.eventbus.ActionDomainEvent<ServicesInstallerFromAnnotation> {
+    }
+    //endregion
 
-    // //////////////////////////////////////
+    //region > getTypes (API)
 
     @Override
     public List<Class<?>> getTypes() {
         return listOf(List.class); // ie List<Object.class>, of services
     }
 
+    //endregion
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
index 0b75593..5fb1b17 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
@@ -34,6 +34,7 @@ import org.slf4j.LoggerFactory;
 
 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.metamodel.util.DeweyOrderComparator;
 import org.apache.isis.core.runtime.fixturedomainservice.ObjectFixtureService;
 import org.apache.isis.core.runtime.system.DeploymentType;
@@ -69,23 +70,20 @@ public class ServicesInstallerFromConfiguration extends ServicesInstallerAbstrac
 
     private final ServiceInstantiator serviceInstantiator;
 
-    public ServicesInstallerFromConfiguration() {
-        this(new ServiceInstantiator());
+    public ServicesInstallerFromConfiguration(final IsisConfigurationDefault isisConfiguration) {
+        this(new ServiceInstantiator(), isisConfiguration);
     }
 
-    ServicesInstallerFromConfiguration(final ServiceInstantiator serviceInstantiator) {
-        super(NAME);
+    ServicesInstallerFromConfiguration(
+            final ServiceInstantiator serviceInstantiator,
+            final IsisConfigurationDefault isisConfiguration) {
+        super(NAME, isisConfiguration);
         this.serviceInstantiator = serviceInstantiator;
     }
 
     // //////////////////////////////////////
 
 
-    @Override
-    public void setIgnoreFailures(boolean ignoreFailures) {
-        // no-op
-    }
-
     public void init() {
         initIfRequired();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfigurationAndAnnotation.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfigurationAndAnnotation.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfigurationAndAnnotation.java
index 20c5869..1a63838 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfigurationAndAnnotation.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfigurationAndAnnotation.java
@@ -28,8 +28,7 @@ import com.google.common.collect.Maps;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.util.DeweyOrderComparator;
 
 public class ServicesInstallerFromConfigurationAndAnnotation extends ServicesInstallerAbstract  {
@@ -43,33 +42,21 @@ public class ServicesInstallerFromConfigurationAndAnnotation extends ServicesIns
     private final ServicesInstallerFromAnnotation servicesInstallerFromAnnotation;
 
 
-    public ServicesInstallerFromConfigurationAndAnnotation() {
-        this(new ServiceInstantiator());
+    public ServicesInstallerFromConfigurationAndAnnotation(final IsisConfigurationDefault isisConfiguration) {
+        this(new ServiceInstantiator(), isisConfiguration);
     }
 
-    public ServicesInstallerFromConfigurationAndAnnotation(final ServiceInstantiator serviceInstantiator) {
-        super(NAME);
+    public ServicesInstallerFromConfigurationAndAnnotation(
+            final ServiceInstantiator serviceInstantiator,
+            final IsisConfigurationDefault isisConfiguration) {
+        super(NAME, isisConfiguration);
 
         this.serviceInstantiator = serviceInstantiator;
-        servicesInstallerFromConfiguration = new ServicesInstallerFromConfiguration(serviceInstantiator);
-        servicesInstallerFromAnnotation = new ServicesInstallerFromAnnotation(serviceInstantiator);
+        servicesInstallerFromConfiguration = new ServicesInstallerFromConfiguration(serviceInstantiator,
+                isisConfiguration);
+        servicesInstallerFromAnnotation = new ServicesInstallerFromAnnotation(serviceInstantiator, isisConfiguration);
     }
 
-    public void setIgnoreFailures(boolean ignoreFailures) {
-        this.serviceInstantiator.setIgnoreFailures(ignoreFailures);
-    }
-
-    @Override
-    public void setConfigurationBuilder(IsisConfigurationBuilder isisConfigurationBuilder) {
-        servicesInstallerFromConfiguration.setConfigurationBuilder(isisConfigurationBuilder);
-        servicesInstallerFromAnnotation.setConfigurationBuilder(isisConfigurationBuilder);
-    }
-
-    @Override
-    public void setConfiguration(IsisConfiguration configuration) {
-        servicesInstallerFromConfiguration.setConfiguration(configuration);
-        servicesInstallerFromAnnotation.setConfiguration(configuration);
-    }
 
     public void init() {
         servicesInstallerFromConfiguration.init();

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFactory.java
index 8d482c6..9b79dac 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFactory.java
@@ -22,8 +22,6 @@ package org.apache.isis.core.runtime.system;
 import java.util.List;
 import java.util.Map;
 
-import javax.annotation.Nullable;
-
 import com.google.inject.Inject;
 
 import org.apache.isis.applib.AppManifest;
@@ -78,7 +76,6 @@ public class IsisSystemFactory implements ApplicationScopedComponent {
     public static final AppManifest APP_MANIFEST_NOOP = NOOP;
 
 
-
     private final InstallerLookup installerLookup;
 
     @Inject

http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index a86e9fc..1dc25ca 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -89,7 +89,6 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleE
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
 import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerServiceAware;
 import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
@@ -155,11 +154,11 @@ public class PersistenceSession implements
         AdapterManager,
         MessageBrokerService,
         PersistenceSessionService,
-        ConfigurationServiceInternal,
         IsisLifecycleListener2.PersistenceSessionLifecycleManagement,
         IsisTransactionManager.PersistenceSessionTransactionManagement,
         PersistenceQueryProcessorAbstract.PersistenceSessionQueryProcessorManagement {
 
+    //region > constants
     private static final Logger LOG = LoggerFactory.getLogger(PersistenceSession.class);
 
     /**
@@ -174,7 +173,7 @@ public class PersistenceSession implements
      * Append regular <a href="http://www.datanucleus.org/products/accessplatform/persistence_properties.html">datanucleus properties</a> to this key
      */
     public static final String DATANUCLEUS_PROPERTIES_ROOT = ROOT_KEY + "impl.";
-
+    //endregion
 
     //region > constructor, fields, finalize()
 
@@ -258,6 +257,7 @@ public class PersistenceSession implements
 
     //endregion
 
+
     //region > open
 
     /**
@@ -1237,14 +1237,6 @@ public class PersistenceSession implements
     //endregion
 
 
-
-    @Override
-    public String toString() {
-        return new ToString(this).toString();
-    }
-
-    //endregion
-
     //region > dependencies (from constructor)
 
     protected SpecificationLoaderSpi getSpecificationLoader() {
@@ -1264,7 +1256,7 @@ public class PersistenceSession implements
 
     //endregion
 
-    //region > sub components
+    //region > transactionManager
 
 
     /**
@@ -2331,24 +2323,18 @@ public class PersistenceSession implements
     }
 
 
-
     //endregion
 
-    //region > ConfigurationService delegate
+    //region > toString
 
     @Override
-    public String getProperty(final String name) {
-        return configuration.getProperty(name);
+    public String toString() {
+        return new ToString(this).toString();
     }
 
-    @Override
-    public List<String> getPropertyNames() {
-        return configuration.getPropertyNames();
-    }
 
     //endregion
 
-
 }