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 2015/09/15 08:03:50 UTC

[45/50] [abbrv] isis git commit: ISIS-1194: moving application-scoped components to RuntimeContextAbstract superclass; IsisTransaction simplifications

ISIS-1194: moving application-scoped components to RuntimeContextAbstract superclass; IsisTransaction simplifications

- IsisConfigurationDefault now implements ConfigurationService (and using IsisConfigurationDefault concrete class rather than interface where necessary)
- RuntimeContext implementations now require a ServiceInjector, and default the deployment category and configuration; these are set up and immutable for the runtime context
  - meaning that RuntimeContext no longer is ServiceInjectorAware.

also:
- IsisTransaction passed through the PersistenceSession (rather than obtain from IsisContext)


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

Branch: refs/heads/master
Commit: 40f1f04f35e8fb8e8fcab4559ee955924c313f31
Parents: ab78b66
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Sep 14 23:04:00 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 23:04:00 2015 +0100

----------------------------------------------------------------------
 .../IsisComponentProviderDefault.java           |   2 +-
 .../isis/tool/mavenplugin/IsisMojoAbstract.java |   6 +-
 .../config/IsisConfigurationBuilder.java        |   2 +-
 ...IsisConfigurationBuilderResourceStreams.java |   6 +-
 .../config/IsisConfigurationDefault.java        |  63 +++++++++--
 .../runtimecontext/RuntimeContextAbstract.java  |  67 ++++++------
 .../noruntime/RuntimeContextNoRuntime.java      | 104 ++++---------------
 .../specloader/ObjectReflectorDefault.java      |   2 +-
 .../ObjectReflectorDefaultTestAbstract.java     |   2 +-
 .../testspec/ObjectSpecificationStub.java       |   3 +-
 .../installerregistry/InstallerLookup.java      |   3 +-
 .../PersistenceMechanismInstaller.java          |   5 +-
 .../internal/RuntimeContextFromSession.java     |  64 ++----------
 .../isis/core/runtime/system/IsisSystem.java    |   5 +-
 .../system/persistence/PersistenceSession.java  |  33 +++---
 .../persistence/PersistenceSessionFactory.java  |  13 +--
 .../system/transaction/IsisTransaction.java     |  17 ++-
 .../transaction/IsisTransactionManager.java     |  22 ++--
 .../IsisComponentProvider.java                  |   3 +-
 .../IsisComponentProviderAbstract.java          |   6 +-
 ...ataNucleusPersistenceMechanismInstaller.java |   4 +-
 .../persistence/PersistenceSessionTest.java     |  14 +--
 22 files changed, 191 insertions(+), 255 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java
index d4d25da..1d3f5e6 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java
@@ -208,7 +208,7 @@ public class IsisComponentProviderDefault extends IsisComponentProviderAbstract
     }
 
     @Override
-    public IsisConfiguration getConfiguration() {
+    public IsisConfigurationDefault getConfiguration() {
         return configuration;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java
----------------------------------------------------------------------
diff --git a/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java b/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java
index 58da31b..0ce5991 100644
--- a/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java
+++ b/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java
@@ -35,6 +35,7 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationBuilderDefault;
 import org.apache.isis.core.metamodel.app.IsisMetaModel;
 import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.runtime.services.ServicesInstaller;
 import org.apache.isis.core.runtime.services.ServicesInstallerFromAnnotation;
 import org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation;
@@ -125,8 +126,11 @@ public abstract class IsisMojoAbstract extends AbstractMojo {
     }
 
     private static IsisMetaModel bootstrapIsis(List<Object> serviceList) {
+        final RuntimeContextNoRuntime runtimeContext =
+                new RuntimeContextNoRuntime(
+                new ServicesInjectorDefault(serviceList));
         IsisMetaModel isisMetaModel = new IsisMetaModel(
-                                            new RuntimeContextNoRuntime(),
+                runtimeContext,
                                             new ProgrammingModelFacetsJava5(),
                                             serviceList);
         isisMetaModel.init();

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/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
index 6976f4e..a196b06 100644
--- 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
@@ -38,7 +38,7 @@ public interface IsisConfigurationBuilder extends Injectable {
     /**
      * Returns a currently known {@link IsisConfiguration}.
      */
-    IsisConfiguration getConfiguration();
+    IsisConfigurationDefault getConfiguration();
 
     void addDefaultConfigurationResources();
     

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/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
index 729b89e..994fcf6 100644
--- 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
@@ -135,8 +135,8 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
      * {@link NotFoundPolicy} determines whether an exception is thrown or not.
      * 
      * <p>
-     * Must be called before {@link #getConfiguration()}; the resource is
-     * actually read on {@link #getConfiguration()}.
+     * 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) {
@@ -173,7 +173,7 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
      * Returns the current {@link IsisConfiguration configuration}.
      */
     @Override
-    public synchronized IsisConfiguration getConfiguration() {
+    public synchronized IsisConfigurationDefault getConfiguration() {
         return configuration;
      }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/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 0eaf53a..24d6451 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
@@ -23,10 +23,12 @@ import java.awt.Color;
 import java.awt.Font;
 import java.util.Enumeration;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.StringTokenizer;
 
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
 import org.slf4j.Logger;
@@ -35,12 +37,17 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.resource.ResourceStreamSource;
+import org.apache.isis.core.metamodel.runtimecontext.ConfigurationService;
 
-public class IsisConfigurationDefault implements IsisConfiguration {
+public class IsisConfigurationDefault implements IsisConfiguration, ConfigurationService {
     
     private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationDefault.class);
-    private final Properties properties = new Properties();
     private final ResourceStreamSource resourceStreamSource;
+    private final Properties properties = new Properties();
+    /**
+     * derived lazily from {@link #properties}.
+     */
+    private Properties applicationProperties;
 
     // ////////////////////////////////////////////////
     // Constructor
@@ -228,7 +235,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
      */
     @Override
     public boolean getBoolean(final String name, final boolean defaultValue) {
-        String value = getProperty(name);
+        String value = getPropertyElseNull(name);
         if (value == null) {
             return defaultValue;
         }
@@ -266,7 +273,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
      */
     @Override
     public Color getColor(final String name, final Color defaultValue) {
-        final String color = getProperty(name);
+        final String color = getPropertyElseNull(name);
 
         if (color == null) {
             return defaultValue;
@@ -314,7 +321,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
      */
     @Override
     public Font getFont(final String name, final Font defaultValue) {
-        final String font = getProperty(name);
+        final String font = getPropertyElseNull(name);
 
         if (font == null) {
             return defaultValue;
@@ -346,7 +353,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
      */
     @Override
     public int getInteger(final String name, final int defaultValue) {
-        final String value = getProperty(name);
+        final String value = getPropertyElseNull(name);
 
         if (value == null) {
             return defaultValue;
@@ -399,7 +406,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
         return isisConfigurationDefault;
     }
 
-    private String getProperty(final String name) {
+    private String getPropertyElseNull(final String name) {
         return getProperty(name, null);
     }
 
@@ -420,7 +427,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
      */
     @Override
     public String getString(final String name) {
-        return getProperty(name);
+        return getPropertyElseNull(name);
     }
 
     @Override
@@ -479,10 +486,48 @@ public class IsisConfigurationDefault implements IsisConfiguration {
     public Map<String,String> asMap() {
         final Map<String, String> map = Maps.newHashMap();
         for(String propertyName: this) {
-            final String propertyValue = this.getProperty(propertyName);
+            final String propertyValue = this.getPropertyElseNull(propertyName);
             map.put(propertyName, propertyValue);
         }
         return map;
     }
 
+
+    //region > ConfigurationService impl
+    @Override
+    public String getProperty(final String name) {
+        initAppPropertiesIfRequired();
+        return applicationProperties.getProperty(name);
+    }
+
+    private void initAppPropertiesIfRequired() {
+        if(applicationProperties == null) {
+            applicationProperties = deriveApplicationProperties();
+        }
+    }
+
+    private Properties deriveApplicationProperties() {
+        final Properties applicationProperties = new Properties();
+        final IsisConfiguration applicationConfiguration = getProperties("application");
+        for (final String key : applicationConfiguration) {
+            final String value = applicationConfiguration.getString(key);
+            final String newKey = key.substring("application.".length());
+            applicationProperties.setProperty(newKey, value);
+        }
+        return applicationProperties;
+    }
+
+
+    @Override
+    public List<String> getPropertyNames() {
+        initAppPropertiesIfRequired();
+        final List<String> list = Lists.newArrayList();
+        for (final Object key : applicationProperties.keySet()) {
+            list.add((String) key);
+        }
+        return list;
+    }
+    //endregion
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
index 147b2f0..e2b307b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
@@ -22,11 +22,11 @@ package org.apache.isis.core.metamodel.runtimecontext;
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.List;
-import java.util.Properties;
 
-import com.google.common.collect.Lists;
-
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpiDelegator;
+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.deployment.DeploymentCategoryProviderAbstract;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
@@ -34,13 +34,42 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoaderDelegator;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpiAware;
 
-public abstract class RuntimeContextAbstract implements RuntimeContext, SpecificationLoaderSpiAware, ServicesInjectorAware {
+public abstract class RuntimeContextAbstract implements RuntimeContext, SpecificationLoaderSpiAware {
 
     private final SpecificationLoaderDelegator specificationLookupDelegator = new SpecificationLoaderDelegator();
-    protected final ServicesInjectorSpiDelegator servicesInjectorDelegator = new ServicesInjectorSpiDelegator();
+    private final DeploymentCategory deploymentCategory;
+    private final IsisConfigurationDefault configuration;
+    private final ServicesInjector servicesInjector;
+
+    public RuntimeContextAbstract(
+            final DeploymentCategory deploymentCategory,
+            final IsisConfigurationDefault configuration,
+            final ServicesInjector servicesInjector) {
+        this.deploymentCategory = deploymentCategory;
+        this.configuration = configuration;
+        this.servicesInjector = servicesInjector;
+    }
+
+    @Override
+    public DeploymentCategoryProvider getDeploymentCategoryProvider() {
+        return new DeploymentCategoryProviderAbstract() {
+            @Override
+            public DeploymentCategory getDeploymentCategory() {
+                return deploymentCategory;
+            }
+        };
+    }
+
 
-    private Properties properties;
+    @Override
+    public ConfigurationService getConfigurationService() {
+        return configuration;
+    }
 
+    @Override
+    public ServicesInjector getServicesInjector() {
+        return servicesInjector;
+    }
 
     @Override
     public void init() {
@@ -157,28 +186,4 @@ public abstract class RuntimeContextAbstract implements RuntimeContext, Specific
         });
     }
 
-    protected void setProperties(final Properties properties) {
-        this.properties = properties;
-    }
-
-    public String getProperty(final String name) {
-        return properties.getProperty(name);
-    }
-
-    public List<String> getPropertyNames() {
-        final List<String> list = Lists.newArrayList();
-        for (final Object key : properties.keySet()) {
-            list.add((String) key);
-        }
-        return list;
-    }
-
-
-    //region > injected services
-    @Override
-    public void setServicesInjector(ServicesInjector servicesInjector) {
-        this.servicesInjectorDelegator.setServicesInjectorSpi((org.apache.isis.core.metamodel.services.ServicesInjectorSpi) servicesInjector);
-    }
-    //endregion
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index 4297fb0..3e3561c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -27,23 +27,19 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationService;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.LocalizationDefault;
-import org.apache.isis.core.metamodel.runtimecontext.LocalizationProvider;
-import org.apache.isis.core.metamodel.runtimecontext.LocalizationProviderAbstract;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
-import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerServiceAbstract;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProviderAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationDefault;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProvider;
+import org.apache.isis.core.metamodel.runtimecontext.LocalizationProviderAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
+import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerServiceAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
+import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAbstract;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAbstract;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -54,51 +50,22 @@ import org.apache.isis.core.metamodel.transactions.TransactionStateProviderAbstr
 
 public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
 
-    private final DeploymentCategory deploymentCategory;
-    private final ServicesInjector servicesInjector;
     private final AuthenticationSessionProviderAbstract authenticationSessionProvider;
     private final AdapterManager adapterManager;
-    private final PersistenceSessionServiceAbstract objectPersistor;
-    private final ConfigurationServiceAbstract domainObjectServices;
+    private final PersistenceSessionServiceAbstract persistenceSessionService;
     private final LocalizationProviderAbstract localizationProvider;
     private final MessageBrokerServiceAbstract messageBrokerService;
 
-    public RuntimeContextNoRuntime() {
-        this(DeploymentCategory.PRODUCTION);
+    public RuntimeContextNoRuntime(
+            final ServicesInjector servicesInjector) {
+        this(DeploymentCategory.PRODUCTION, new IsisConfigurationDefault(null), servicesInjector);
     }
-    
-    public RuntimeContextNoRuntime(DeploymentCategory deploymentCategory) {
-        this.deploymentCategory = deploymentCategory;
-        // Unlike most of the methods in this implementation, does nothing
-        // (because this will always be called, even in a no-runtime context).
-        servicesInjector = new ServicesInjector() {
-            @Override
-            public void injectServicesInto(final Object domainObject) {
-            }
 
-            @Override
-            public void injectServicesInto(List<Object> objects) {
-            }
-
-            @Override
-            public <T> T lookupService(Class<T> serviceClass) {
-                return null;
-            }
-
-            @Override
-            public void injectInto(Object candidate) {
-            }
-
-            @Override
-            public <T> List<T> lookupServices(Class<T> serviceClass) {
-                return null;
-            }
-
-            @Override
-            public List<Object> getRegisteredServices() {
-                return null;
-            }
-        };
+    public RuntimeContextNoRuntime(
+            final DeploymentCategory deploymentCategory,
+            final IsisConfigurationDefault isisConfiguration,
+            final ServicesInjector servicesInjector) {
+        super(deploymentCategory, isisConfiguration, servicesInjector);
         authenticationSessionProvider = new AuthenticationSessionProviderAbstract() {
             @Override
             public AuthenticationSession getAuthenticationSession() {
@@ -146,7 +113,7 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
             }
 
         };
-        objectPersistor = new PersistenceSessionServiceAbstract() {
+        persistenceSessionService = new PersistenceSessionServiceAbstract() {
 
             @Override
             public ObjectAdapter createTransientInstance(final ObjectSpecification spec) {
@@ -214,19 +181,6 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
             }
 
         };
-        domainObjectServices = new ConfigurationServiceAbstract() {
-
-
-            @Override
-            public List<String> getPropertyNames() {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public String getProperty(final String name) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-        };
         localizationProvider = new LocalizationProviderAbstract() {
 
             private final Localization defaultLocalization = new LocalizationDefault();
@@ -263,16 +217,6 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
 
 
     @Override
-    public DeploymentCategoryProvider getDeploymentCategoryProvider() {
-        return new DeploymentCategoryProviderAbstract() {
-            @Override
-            public DeploymentCategory getDeploymentCategory() {
-                return deploymentCategory;
-            }
-        };
-    }
-
-    @Override
     public TransactionStateProvider getTransactionStateProvider() {
         return new TransactionStateProviderAbstract() {
             @Override
@@ -295,12 +239,7 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
 
     @Override
     public PersistenceSessionService getPersistenceSessionService() {
-        return objectPersistor;
-    }
-
-    @Override
-    public ConfigurationService getConfigurationService() {
-        return domainObjectServices;
+        return persistenceSessionService;
     }
 
     @Override
@@ -309,11 +248,6 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
     }
 
     @Override
-    public ServicesInjector getServicesInjector() {
-        return servicesInjector;
-    }
-
-    @Override
     public LocalizationProvider getLocalizationProvider() {
         return localizationProvider;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 357aff3..5eed129 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -241,7 +241,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
 
         // default subcomponents
         if (runtimeContext == null) {
-            runtimeContext = new RuntimeContextNoRuntime();
+            runtimeContext = new RuntimeContextNoRuntime(servicesInjector);
         }
         injectInto(runtimeContext);
         injectInto(specificationTraverser);

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/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 e7edc32..0d6279e 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
@@ -79,7 +79,7 @@ public abstract class ObjectReflectorDefaultTestAbstract {
             }
         });
 
-        runtimeContext = new RuntimeContextNoRuntime();
+        runtimeContext = new RuntimeContextNoRuntime(new ServicesInjectorDefault(Collections.emptyList()));
         final ObjectReflectorDefault reflector = 
                 new ObjectReflectorDefault(
                         mockConfiguration,

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 3116df6..a3f061f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -42,6 +42,7 @@ import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
 import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -71,7 +72,7 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
 
     public ObjectSpecificationStub(final Class<?> type) {
         this(type.getName());
-        runtimeContext = new RuntimeContextNoRuntime();
+        runtimeContext = new RuntimeContextNoRuntime(new ServicesInjectorDefault(Collections.emptyList()));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/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 3b4e23b..66a8a3d 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
@@ -38,6 +38,7 @@ import org.apache.isis.core.commons.components.Installer;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.config.IsisConfigurationBuilderAware;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.config.NotFoundPolicy;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.ensure.Ensure;
@@ -302,7 +303,7 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
      * The {@link IsisConfiguration} could subsequently be appended to if
      * further {@link Installer}s are loaded.
      */
-    public IsisConfiguration getConfiguration() {
+    public IsisConfigurationDefault getConfiguration() {
         return isisConfigurationBuilder.getConfiguration();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/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 033013f..5733718 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,8 @@
 package org.apache.isis.core.runtime.installerregistry.installerapi;
 
 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.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
 import org.apache.isis.core.runtime.system.DeploymentType;
@@ -38,6 +38,7 @@ public interface PersistenceMechanismInstaller extends Installer, IsisConfigurat
     PersistenceSessionFactory createPersistenceSessionFactory(
             final DeploymentType deploymentType,
             final ServicesInjectorSpi servicesInjector,
-            final IsisConfiguration configuration, final RuntimeContextFromSession runtimeContext);
+            final IsisConfigurationDefault configuration,
+            final RuntimeContextFromSession runtimeContext);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index 9eba740..8ab4b82 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -20,7 +20,6 @@
 package org.apache.isis.core.runtime.persistence.internal;
 
 import java.util.List;
-import java.util.Properties;
 
 import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.profiles.Localization;
@@ -30,16 +29,12 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
 import org.apache.isis.core.commons.authentication.MessageBroker;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProviderAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationService;
-import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceAbstract;
 import org.apache.isis.core.metamodel.runtimecontext.LocalizationProviderAbstract;
 import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
 import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerServiceAbstract;
@@ -69,18 +64,17 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
     private final AdapterManager adapterManager;
     private final PersistenceSessionService persistenceSessionService;
     private final MessageBrokerService messageBrokerService;
-    private final ConfigurationService configurationService;
     private final LocalizationProviderAbstract localizationProvider;
 
     // //////////////////////////////////////////////////////////////////
     // Constructor
     // //////////////////////////////////////////////////////////////////
 
-
-    public RuntimeContextFromSession(final IsisConfiguration configuration) {
-
-        final Properties properties = applicationPropertiesFrom(configuration);
-        setProperties(properties);
+    public RuntimeContextFromSession(
+            final DeploymentCategory deploymentCategory,
+            final IsisConfigurationDefault configuration,
+            final ServicesInjector servicesInjector) {
+        super(deploymentCategory, configuration, servicesInjector);
 
         this.authenticationSessionProvider = new AuthenticationSessionProviderAbstract() {
 
@@ -93,7 +87,7 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
 
             @Override
             public ObjectAdapter getAdapterFor(Oid oid) {
-                return null;
+                return getPersistenceSession().getAdapterFor(oid);
             }
 
             @Override
@@ -201,19 +195,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
             }
 
         };
-        this.configurationService = new ConfigurationServiceAbstract() {
-
-            @Override
-            public String getProperty(final String name) {
-                return RuntimeContextFromSession.this.getProperty(name);
-            }
-
-            @Override
-            public List<String> getPropertyNames() {
-                return RuntimeContextFromSession.this.getPropertyNames();
-            }
-
-        };
         this.messageBrokerService = new MessageBrokerServiceAbstract() {
 
             @Override
@@ -242,18 +223,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
         };
     }
 
-    public static Properties applicationPropertiesFrom(final IsisConfiguration configuration) {
-        final Properties properties = new Properties();
-        final IsisConfiguration applicationConfiguration = configuration.getProperties("application");
-        for (final String key : applicationConfiguration) {
-            final String value = applicationConfiguration.getString(key);
-            final String newKey = key.substring("application.".length());
-            properties.setProperty(newKey, value);
-        }
-        return properties;
-    }
-
-
     // //////////////////////////////////////////////////////////////////
     // Components
     // //////////////////////////////////////////////////////////////////
@@ -269,11 +238,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
     }
 
     @Override
-    public ConfigurationService getConfigurationService() {
-        return configurationService;
-    }
-
-    @Override
     public LocalizationProviderAbstract getLocalizationProvider() {
         return localizationProvider;
     }
@@ -284,11 +248,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
     }
 
     @Override
-    public ServicesInjector getServicesInjector() {
-        return servicesInjectorDelegator;
-    }
-
-    @Override
     public MessageBrokerService getMessageBrokerService() {
         return messageBrokerService;
     }
@@ -297,15 +256,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
     // Dependencies (from context)
     // ///////////////////////////////////////////
 
-    @Override
-    public DeploymentCategoryProvider getDeploymentCategoryProvider() {
-        return new DeploymentCategoryProviderAbstract() {
-            @Override
-            public DeploymentCategory getDeploymentCategory() {
-                return IsisContext.getDeploymentType().getDeploymentCategory();
-            }
-        };
-    }
 
     @Override
     public TransactionStateProvider getTransactionStateProvider() {

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
index f40c58f..1d7fd00 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.services.fixturespec.FixtureScriptsDefault;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.components.Noop;
 import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.commons.lang.ListExtensions;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
@@ -152,14 +153,14 @@ public class IsisSystem implements DebugSelection, ApplicationScopedComponent {
 
     private IsisSessionFactory createSessionFactory(final DeploymentType deploymentType) throws IsisSystemException {
 
-        final IsisConfiguration configuration = isisComponentProvider.getConfiguration();
+        final IsisConfigurationDefault configuration = isisComponentProvider.getConfiguration();
         final List<Object> services = isisComponentProvider.provideServices();
 
         ServicesInjectorSpi servicesInjectorSpi = new ServicesInjectorDefault(services);
         servicesInjectorSpi.addFallbackIfRequired(FixtureScripts.class, new FixtureScriptsDefault());
         servicesInjectorSpi.validateServices();
 
-        final RuntimeContextFromSession runtimeContext = new RuntimeContextFromSession(configuration);
+        final RuntimeContextFromSession runtimeContext = new RuntimeContextFromSession(deploymentType.getDeploymentCategory(), configuration, servicesInjectorSpi);
 
         final PersistenceSessionFactory persistenceSessionFactory =
                 isisComponentProvider.providePersistenceSessionFactory(deploymentType, servicesInjectorSpi, runtimeContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/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 6c65f3d..ae281a1 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
@@ -47,6 +47,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.components.SessionScopedComponent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.commons.ensure.Assert;
@@ -105,7 +106,6 @@ import org.apache.isis.core.runtime.persistence.adaptermanager.OidAdapterHashMap
 import org.apache.isis.core.runtime.persistence.adaptermanager.PojoAdapterHashMap;
 import org.apache.isis.core.runtime.persistence.adaptermanager.RootAndCollectionAdapters;
 import org.apache.isis.core.runtime.persistence.container.DomainObjectContainerResolve;
-import org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.PersistenceCommand;
@@ -157,7 +157,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     private final PersistenceSessionFactory persistenceSessionFactory;
 
     private final PersistenceQueryFactory persistenceQueryFactory;
-    private final IsisConfiguration configuration;
+    private final IsisConfigurationDefault configuration;
     private final SpecificationLoaderSpi specificationLoader;
     private final AuthenticationSession authenticationSession;
 
@@ -189,7 +189,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      */
     public PersistenceSession(
             final PersistenceSessionFactory persistenceSessionFactory,
-            final IsisConfiguration configuration,
+            final IsisConfigurationDefault configuration,
             final SpecificationLoaderSpi specificationLoader,
             final AuthenticationSession authenticationSession) {
 
@@ -215,8 +215,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         setState(State.NOT_INITIALIZED);
 
         // to implement DomainObjectServices
-        final Properties properties = RuntimeContextFromSession.applicationPropertiesFrom(configuration);
-        setProperties(properties);
 
         if (LOG.isDebugEnabled()) {
             LOG.debug("creating " + this);
@@ -479,6 +477,13 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         return persistenceQueryProcessor.process((Q) persistenceQuery);
     }
 
+    public IsisConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public OidMarshaller getOidMarshaller() {
+        return oidMarshaller;
+    }
 
     //endregion
 
@@ -2238,29 +2243,23 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         throw new RecoverableException(message);
     }
 
-    private Properties properties;
 
-    private void setProperties(final Properties properties) {
-        this.properties = properties;
-    }
+
+    //endregion
+
+    //region > ConfigurationService delegate
 
     @Override
     public String getProperty(final String name) {
-        return properties.getProperty(name);
+        return configuration.getProperty(name);
     }
 
     @Override
     public List<String> getPropertyNames() {
-        final List<String> list = Lists.newArrayList();
-        for (final Object key : properties.keySet()) {
-            list.add((String) key);
-        }
-        return list;
+        return configuration.getPropertyNames();
     }
 
     //endregion
-
-
 }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
index bfe8c19..8f7ff1a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.fixtures.FixtureClock;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
@@ -58,12 +59,6 @@ import org.apache.isis.objectstore.jdo.metamodel.facets.prop.primarykey.JdoPrima
 import org.apache.isis.objectstore.jdo.metamodel.specloader.validator.JdoMetaModelValidator;
 import org.apache.isis.objectstore.jdo.service.RegisterEntities;
 
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-
 public class PersistenceSessionFactory implements MetaModelRefiner,
         SpecificationLoaderSpiAware, ApplicationScopedComponent, FixturesInstalledFlag {
 
@@ -72,7 +67,7 @@ public class PersistenceSessionFactory implements MetaModelRefiner,
     //region > constructor
 
     private final DeploymentType deploymentType;
-    private final IsisConfiguration configuration;
+    private final IsisConfigurationDefault configuration;
 
     private final ServicesInjectorSpi servicesInjector;
     private final RuntimeContextFromSession runtimeContext;
@@ -82,7 +77,7 @@ public class PersistenceSessionFactory implements MetaModelRefiner,
     public PersistenceSessionFactory(
             final DeploymentType deploymentType,
             final ServicesInjectorSpi servicesInjector,
-            final IsisConfiguration isisConfiguration,
+            final IsisConfigurationDefault isisConfiguration,
             final RuntimeContextFromSession runtimeContext) {
         this.deploymentType = deploymentType;
         this.configuration = isisConfiguration;
@@ -94,7 +89,7 @@ public class PersistenceSessionFactory implements MetaModelRefiner,
         return deploymentType;
     }
 
-    public IsisConfiguration getConfiguration() {
+    public IsisConfigurationDefault getConfiguration() {
         return configuration;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
index df29ed5..01b1253 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
@@ -85,16 +85,15 @@ import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFace
 import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
-import org.apache.isis.core.metamodel.transactions.TransactionState;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.transactions.TransactionState;
 import org.apache.isis.core.runtime.persistence.PersistenceConstants;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.PersistenceCommand;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.PublishingServiceWithDefaultPayloadFactories;
-import org.apache.isis.core.runtime.persistence.objectstore.transaction.TransactionalResource;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 
@@ -234,7 +233,7 @@ public class IsisTransaction implements TransactionScopedComponent {
 
     private static final Logger LOG = LoggerFactory.getLogger(IsisTransaction.class);
 
-    private final TransactionalResource objectStore;
+    private final PersistenceSession persistenceSession;
     private final List<PersistenceCommand> persistenceCommands = Lists.newArrayList();
     private final IsisTransactionManager transactionManager;
     private final MessageBroker messageBroker;
@@ -273,7 +272,7 @@ public class IsisTransaction implements TransactionScopedComponent {
     public IsisTransaction(
             final IsisTransactionManager transactionManager,
             final MessageBroker messageBroker,
-            final TransactionalResource objectStore,
+            final PersistenceSession persistenceSession,
             final ServicesInjector servicesInjector) {
         
         ensureThatArg(transactionManager, is(not(nullValue())), "transaction manager is required");
@@ -306,7 +305,7 @@ public class IsisTransaction implements TransactionScopedComponent {
         
         this.state = State.IN_PROGRESS;
 
-        this.objectStore = objectStore;
+        this.persistenceSession = persistenceSession;
         if (LOG.isDebugEnabled()) {
             LOG.debug("new transaction " + this);
         }
@@ -1408,19 +1407,19 @@ public class IsisTransaction implements TransactionScopedComponent {
 
 
     ////////////////////////////////////////////////////////////////////////
-    // Dependencies (from context)
+    // Dependencies (from constructor)
     ////////////////////////////////////////////////////////////////////////
 
     protected OidMarshaller getOidMarshaller() {
-        return IsisContext.getOidMarshaller();
+        return persistenceSession.getOidMarshaller();
     }
 
     protected IsisConfiguration getConfiguration() {
-        return IsisContext.getConfiguration();
+        return persistenceSession.getConfiguration();
     }
 
     protected PersistenceSession getPersistenceSession() {
-        return IsisContext.getPersistenceSession();
+        return persistenceSession;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
index 885a537..78e1e2d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
@@ -39,7 +39,6 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.PersistenceCommand;
-import org.apache.isis.core.runtime.persistence.objectstore.transaction.TransactionalResource;
 import org.apache.isis.core.runtime.services.RequestScopedService;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -67,8 +66,6 @@ public class IsisTransactionManager implements SessionScopedComponent {
      */
     private IsisTransaction transaction;
 
-    private final TransactionalResource transactionalResource;
-
     private final ServicesInjector servicesInjector;
 
 
@@ -80,7 +77,6 @@ public class IsisTransactionManager implements SessionScopedComponent {
             final PersistenceSession persistenceSession,
             final ServicesInjector servicesInjector) {
         this.persistenceSession = persistenceSession;
-        this.transactionalResource = persistenceSession;
         this.servicesInjector = servicesInjector;
     }
 
@@ -234,23 +230,23 @@ public class IsisTransactionManager implements SessionScopedComponent {
      */
     protected final IsisTransaction createTransaction() {
         MessageBroker messageBroker = createMessageBroker();
-        return this.transaction = createTransaction(messageBroker, transactionalResource);
+        return this.transaction = createTransaction(messageBroker, persistenceSession);
     }
 
 
     /**
      * The provided {@link org.apache.isis.core.commons.authentication.MessageBroker} is
      * obtained from the {@link #createMessageBroker()} hook method.
-     * @param transactionalResource
+     * @param persistenceSession
      *
      * @see #createMessageBroker()
      */
     private IsisTransaction createTransaction(
             final MessageBroker messageBroker,
-            final TransactionalResource transactionalResource) {
+            final PersistenceSession persistenceSession) {
         ensureThatArg(messageBroker, is(not(nullValue())));
 
-        return new IsisTransaction(this, messageBroker, transactionalResource, servicesInjector);
+        return new IsisTransaction(this, messageBroker, persistenceSession, servicesInjector);
     }
     
 
@@ -272,7 +268,7 @@ public class IsisTransactionManager implements SessionScopedComponent {
             IsisTransaction isisTransaction = createTransaction();
             transactionLevel = 0;
 
-            transactionalResource.startTransaction();
+            persistenceSession.startTransaction();
 
             startTransactionOnCommandIfConfigured(isisTransaction.getTransactionId());
         }
@@ -476,7 +472,7 @@ public class IsisTransactionManager implements SessionScopedComponent {
             
             if(abortCause == null) {
                 try {
-                    transactionalResource.endTransaction();
+                    persistenceSession.endTransaction();
                 } catch(RuntimeException ex) {
                     // just in case any new exception was raised...
                     abortCause = ex;
@@ -527,7 +523,7 @@ public class IsisTransactionManager implements SessionScopedComponent {
         if (getTransaction() != null) {
             getTransaction().markAsAborted();
             transactionLevel = 0;
-            transactionalResource.abortTransaction();
+            persistenceSession.abortTransaction();
         }
     }
 
@@ -544,7 +540,7 @@ public class IsisTransactionManager implements SessionScopedComponent {
 
     /**
      * Overridable hook, used in
-     * {@link #createTransaction(org.apache.isis.core.commons.authentication.MessageBroker, org.apache.isis.core.runtime.persistence.objectstore.transaction.TransactionalResource)}
+     * {@link #createTransaction(org.apache.isis.core.commons.authentication.MessageBroker, PersistenceSession)}
      * 
      * <p> Called when a new {@link IsisTransaction} is created.
      */
@@ -556,10 +552,12 @@ public class IsisTransactionManager implements SessionScopedComponent {
     // helpers
     // ////////////////////////////////////////////////////////////////
 
+    // unused?
     protected void ensureTransactionInProgress() {
         ensureThatState(getTransaction() != null && !getTransaction().getState().isComplete(), is(true), "No transaction in progress");
     }
 
+    // unused?
     protected void ensureTransactionNotInProgress() {
         ensureThatState(getTransaction() != null && !getTransaction().getState().isComplete(), is(false), "Transaction in progress");
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 6699119..42a1cb0 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -41,7 +42,7 @@ public interface IsisComponentProvider {
 
     DeploymentType getDeploymentType();
 
-    IsisConfiguration getConfiguration();
+    IsisConfigurationDefault getConfiguration();
 
     AuthenticationManager provideAuthenticationManager(DeploymentType deploymentType);
     AuthorizationManager provideAuthorizationManager(final DeploymentType deploymentType);

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
index 0f28adf..78ea3c3 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.runtime.systemusinginstallers;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -40,6 +39,7 @@ import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
 import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
@@ -66,7 +66,7 @@ public abstract class IsisComponentProviderAbstract implements IsisComponentProv
     /**
      * populated by subclass, in its constructor.
      */
-    protected IsisConfiguration configuration;
+    protected IsisConfigurationDefault configuration;
     /**
      * populated by subclass, in its constructor.
      */
@@ -211,7 +211,7 @@ public abstract class IsisComponentProviderAbstract implements IsisComponentProv
     }
 
     @Override
-    public IsisConfiguration getConfiguration() {
+    public IsisConfigurationDefault getConfiguration() {
         return configuration;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/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 fad3876..d32ae01 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
@@ -25,7 +25,7 @@ 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.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
@@ -69,7 +69,7 @@ public class DataNucleusPersistenceMechanismInstaller extends InstallerAbstract
     public PersistenceSessionFactory createPersistenceSessionFactory(
             final DeploymentType deploymentType,
             final ServicesInjectorSpi servicesInjector,
-            final IsisConfiguration configuration,
+            final IsisConfigurationDefault configuration,
             final RuntimeContextFromSession runtimeContext) {
 
         return new PersistenceSessionFactory(deploymentType, servicesInjector, configuration, runtimeContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/40f1f04f/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java
index 9af17f9..57e8ffa 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java
@@ -32,10 +32,11 @@ import org.junit.Test;
 import org.apache.isis.applib.services.audit.AuditingService3;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.MessageBroker;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.app.IsisMetaModel;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
@@ -94,14 +95,11 @@ public class PersistenceSessionTest {
     private RuntimeContext mockRuntimeContext;
 
     @Mock
-    private IsisConfiguration mockConfiguration;
+    private IsisConfigurationDefault mockConfiguration;
     
     @Mock
     private MessageBroker mockMessageBroker;
     
-    @Mock
-    private OidGenerator mockOidGenerator;
-
 
     private IsisMetaModel isisMetaModel;
 
@@ -138,7 +136,11 @@ public class PersistenceSessionTest {
             }
         });
 
-        final RuntimeContextFromSession runtimeContext = new RuntimeContextFromSession(mockConfiguration);
+        final RuntimeContextFromSession runtimeContext =
+                new RuntimeContextFromSession(
+                        DeploymentCategory.PRODUCTION,
+                        mockConfiguration,
+                        servicesInjector);
         final DomainObjectContainerDefault container = new DomainObjectContainerDefault();
 
         runtimeContext.injectInto(container);