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

[23/30] isis git commit: ISIS-1409: internal components of RuntimeContext subclasses are now internal domain services; RuntimeContext hierarchy collapsed into a single class.

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/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
deleted file mode 100644
index 36aba77..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.runtimecontext.noruntime;
-
-import java.util.List;
-
-import org.apache.isis.applib.profiles.Localization;
-import org.apache.isis.applib.query.Query;
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.bookmark.BookmarkService2;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-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.services.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.transactions.TransactionState;
-import org.apache.isis.core.metamodel.transactions.TransactionStateProvider;
-import org.apache.isis.core.metamodel.transactions.TransactionStateProviderAbstract;
-
-public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
-
-    private final PersistenceSessionServiceAbstract persistenceSessionService;
-    private final LocalizationProviderAbstract localizationProvider;
-    private final MessageBrokerServiceAbstract messageBrokerService;
-
-    public RuntimeContextNoRuntime(
-            final ServicesInjector servicesInjector,
-            final SpecificationLoader specificationLoader) {
-        this(new IsisConfigurationDefault(null), servicesInjector, specificationLoader);
-    }
-
-    public RuntimeContextNoRuntime(
-            final IsisConfigurationDefault isisConfiguration,
-            final ServicesInjector servicesInjector,
-            final SpecificationLoader specificationLoader) {
-        super(servicesInjector, specificationLoader);
-        persistenceSessionService = new PersistenceSessionServiceAbstract() {
-
-            @Override
-            public void injectInto(final Object candidate) {
-                if (AdapterManagerAware.class.isAssignableFrom(candidate.getClass())) {
-                    final AdapterManagerAware cast = AdapterManagerAware.class.cast(candidate);
-                    cast.setAdapterManager(this);
-                }
-            }
-
-            @Override
-            public ObjectAdapter getAdapterFor(final Object pojo) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, final OneToManyAssociation collection) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public ObjectAdapter mapRecreatedPojo(Oid oid, Object recreatedPojo) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public void removeAdapter(ObjectAdapter adapter) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public ObjectAdapter adapterFor(final Object domainObject) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public ObjectAdapter getAdapterFor(Oid oid) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public ObjectAdapter createTransientInstance(final ObjectSpecification spec) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public ObjectAdapter createViewModelInstance(ObjectSpecification spec, String memento) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public Object lookup(
-                    final Bookmark bookmark,
-                    final BookmarkService2.FieldResetPolicy fieldResetPolicy) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public Bookmark bookmarkFor(Object domainObject) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public Bookmark bookmarkFor(Class<?> cls, String identifier) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-
-            @Override
-            public void resolve(final Object parent, final Object field) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public void resolve(final Object parent) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public void beginTran() {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public boolean flush() {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public void commit() {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public void remove(final ObjectAdapter adapter) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public void makePersistent(final ObjectAdapter adapter) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public <T> ObjectAdapter firstMatchingQuery(final Query<T> query) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public <T> List<ObjectAdapter> allMatchingQuery(final Query<T> query) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-        };
-        localizationProvider = new LocalizationProviderAbstract() {
-
-            private final Localization defaultLocalization = new LocalizationDefault();
-
-            @Override
-            public Localization getLocalization() {
-                return defaultLocalization;
-            }
-        };
-        messageBrokerService = new MessageBrokerServiceAbstract() {
-
-            @Override
-            public void informUser(final String message) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public void warnUser(final String message) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
-            public void raiseError(final String message) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-
-        };
-    }
-
-    // ///////////////////////////////////////////
-    // Components
-    // ///////////////////////////////////////////
-
-
-    @Override
-    public TransactionStateProvider getTransactionStateProvider() {
-        return new TransactionStateProviderAbstract() {
-            @Override
-            public TransactionState getTransactionState() {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-        };
-    }
-
-
-    @Override
-    public PersistenceSessionService getPersistenceSessionService() {
-        return persistenceSessionService;
-    }
-
-    @Override
-    public MessageBrokerService getMessageBrokerService() {
-        return messageBrokerService;
-    }
-
-    @Override
-    public LocalizationProvider getLocalizationProvider() {
-        return localizationProvider;
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
index 7ae5213..5584c57 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
@@ -25,8 +25,8 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder;
 import org.apache.isis.applib.services.bookmark.BookmarkService2;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAware;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceAware;
 import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
 
 /**
@@ -43,7 +43,7 @@ import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
 public class BookmarkServiceDefault implements BookmarkService2,
         PersistenceSessionServiceAware {
 
-    private PersistenceSessionService persistenceSessionService;
+    private PersistenceSessionServiceInternal persistenceSessionServiceInternal;
 
     // //////////////////////////////////////
 
@@ -73,7 +73,7 @@ public class BookmarkServiceDefault implements BookmarkService2,
             return null;
         }
         try {
-            return persistenceSessionService.lookup(bookmark, fieldResetPolicy);
+            return persistenceSessionServiceInternal.lookup(bookmark, fieldResetPolicy);
         } catch(ObjectNotFoundException ex) {
             return null;
         }
@@ -112,7 +112,7 @@ public class BookmarkServiceDefault implements BookmarkService2,
         if(domainObject == null) {
             return null;
         }
-        return persistenceSessionService.bookmarkFor(unwrapped(domainObject));
+        return persistenceSessionServiceInternal.bookmarkFor(unwrapped(domainObject));
     }
 
     private Object unwrapped(Object domainObject) {
@@ -124,7 +124,7 @@ public class BookmarkServiceDefault implements BookmarkService2,
     @Programmatic
     @Override
     public Bookmark bookmarkFor(Class<?> cls, String identifier) {
-        return persistenceSessionService.bookmarkFor(cls, identifier);
+        return persistenceSessionServiceInternal.bookmarkFor(cls, identifier);
     }
 
     // //////////////////////////////////////
@@ -133,8 +133,8 @@ public class BookmarkServiceDefault implements BookmarkService2,
 
 
     @Override
-    public void setPersistenceSessionService(final PersistenceSessionService persistenceSessionService) {
-        this.persistenceSessionService = persistenceSessionService;
+    public void setPersistenceSessionService(final PersistenceSessionServiceInternal persistenceSessionServiceInternal) {
+        this.persistenceSessionServiceInternal = persistenceSessionServiceInternal;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
index adb18a1..424bd78 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
@@ -60,8 +60,8 @@ import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAware;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceAware;
 import org.apache.isis.core.metamodel.services.container.query.QueryFindByPattern;
 import org.apache.isis.core.metamodel.services.container.query.QueryFindByTitle;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -649,7 +649,7 @@ public class DomainObjectContainerDefault
 
     //region > framework dependencies
 
-    private PersistenceSessionService persistenceSessionService;
+    private PersistenceSessionServiceInternal persistenceSessionServiceInternal;
     private AdapterManager adapterManager;
 
 
@@ -664,14 +664,14 @@ public class DomainObjectContainerDefault
         this.adapterManager = adapterManager;
     }
 
-    protected PersistenceSessionService getPersistenceSessionService() {
-        return persistenceSessionService;
+    protected PersistenceSessionServiceInternal getPersistenceSessionService() {
+        return persistenceSessionServiceInternal;
     }
 
     @Programmatic
     @Override
-    public void setPersistenceSessionService(final PersistenceSessionService persistenceSessionService) {
-        this.persistenceSessionService = persistenceSessionService;
+    public void setPersistenceSessionService(final PersistenceSessionServiceInternal persistenceSessionServiceInternal) {
+        this.persistenceSessionServiceInternal = persistenceSessionServiceInternal;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/factory/FactoryServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/factory/FactoryServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/factory/FactoryServiceDefault.java
index a72d43e..ae64445 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/factory/FactoryServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/factory/FactoryServiceDefault.java
@@ -32,8 +32,8 @@ import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAware;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceAware;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
@@ -56,7 +56,7 @@ public class FactoryServiceDefault implements FactoryService, PersistenceSession
      * Factored out as a potential hook method for subclasses.
      */
     protected ObjectAdapter doCreateTransientInstance(final ObjectSpecification spec) {
-        return persistenceSessionService.createTransientInstance(spec);
+        return persistenceSessionServiceInternal.createTransientInstance(spec);
     }
 
 
@@ -96,11 +96,11 @@ public class FactoryServiceDefault implements FactoryService, PersistenceSession
     @Inject
     ServiceRegistry serviceRegistry;
 
-    private PersistenceSessionService persistenceSessionService;
+    private PersistenceSessionServiceInternal persistenceSessionServiceInternal;
     @Override
-    public void setPersistenceSessionService(final PersistenceSessionService persistenceSessionService) {
+    public void setPersistenceSessionService(final PersistenceSessionServiceInternal persistenceSessionServiceInternal) {
 
-        this.persistenceSessionService = persistenceSessionService;
+        this.persistenceSessionServiceInternal = persistenceSessionServiceInternal;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationDefault.java
new file mode 100644
index 0000000..018103b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationDefault.java
@@ -0,0 +1,38 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.services.l10n;
+
+import java.util.Locale;
+import java.util.TimeZone;
+
+import org.apache.isis.applib.profiles.Localization;
+
+public final class LocalizationDefault implements Localization {
+
+    @Override
+    public Locale getLocale() {
+        return Locale.getDefault();
+    }
+
+    @Override
+    public TimeZone getTimeZone() {
+        return TimeZone.getDefault();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderAware.java
new file mode 100644
index 0000000..1282f1f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderAware.java
@@ -0,0 +1,26 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.services.l10n;
+
+public interface LocalizationProviderAware {
+
+    void setLocalizationProvider(LocalizationProviderInternal localizationProviderInternal);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternal.java
new file mode 100644
index 0000000..d841bd5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternal.java
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.services.l10n;
+
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.profiles.Localization;
+
+public interface LocalizationProviderInternal {
+
+    @Programmatic
+    void injectInto(final Object candidate);
+
+    @Programmatic
+    Localization getLocalization();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternalAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternalAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternalAbstract.java
new file mode 100644
index 0000000..470e13f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternalAbstract.java
@@ -0,0 +1,29 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.services.l10n;
+
+public abstract class LocalizationProviderInternalAbstract implements LocalizationProviderInternal {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (LocalizationProviderAware.class.isAssignableFrom(candidate.getClass())) {
+            final LocalizationProviderAware cast = LocalizationProviderAware.class.cast(candidate);
+            cast.setLocalizationProvider(this);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternalNoop.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternalNoop.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternalNoop.java
new file mode 100644
index 0000000..bc5b0a4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/l10n/LocalizationProviderInternalNoop.java
@@ -0,0 +1,16 @@
+package org.apache.isis.core.metamodel.services.l10n;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.profiles.Localization;
+
+@DomainService(nature = NatureOfService.DOMAIN)
+public class LocalizationProviderInternalNoop extends LocalizationProviderInternalAbstract {
+
+    private final Localization defaultLocalization = new LocalizationDefault();
+
+    @Override
+    public Localization getLocalization() {
+        return defaultLocalization;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/message/MessageServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/message/MessageServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/message/MessageServiceDefault.java
index a96c88a..7b14c3d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/message/MessageServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/message/MessageServiceDefault.java
@@ -25,8 +25,8 @@ import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
-import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerServiceAware;
+import org.apache.isis.core.metamodel.services.msgbroker.MessageBrokerServiceInternal;
+import org.apache.isis.core.metamodel.services.msgbroker.MessageBrokerServiceAware;
 
 @DomainService(
         nature = NatureOfService.DOMAIN
@@ -36,7 +36,7 @@ public class MessageServiceDefault implements MessageService, MessageBrokerServi
     @Programmatic
     @Override
     public void informUser(final String message) {
-        messageBrokerService.informUser(message);
+        messageBrokerServiceInternal.informUser(message);
     }
 
     @Override
@@ -47,7 +47,7 @@ public class MessageServiceDefault implements MessageService, MessageBrokerServi
     @Programmatic
     @Override
     public void warnUser(final String message) {
-        messageBrokerService.warnUser(message);
+        messageBrokerServiceInternal.warnUser(message);
     }
 
     @Override
@@ -58,13 +58,13 @@ public class MessageServiceDefault implements MessageService, MessageBrokerServi
     @Programmatic
     @Override
     public void raiseError(final String message) {
-        messageBrokerService.raiseError(message);
+        messageBrokerServiceInternal.raiseError(message);
     }
 
     @Override
     public String raiseError(final TranslatableString message, final Class<?> contextClass, final String contextMethod) {
         final String translatedMessage = message.translate(translationService, context(contextClass, contextMethod));
-        messageBrokerService.raiseError(translatedMessage);
+        messageBrokerServiceInternal.raiseError(translatedMessage);
         return translatedMessage;
     }
 
@@ -74,11 +74,11 @@ public class MessageServiceDefault implements MessageService, MessageBrokerServi
 
 
 
-    private MessageBrokerService messageBrokerService;
+    private MessageBrokerServiceInternal messageBrokerServiceInternal;
 
     @Override
-    public void setMessageBrokerService(final MessageBrokerService messageBrokerService) {
-        this.messageBrokerService = messageBrokerService;
+    public void setMessageBrokerService(final MessageBrokerServiceInternal messageBrokerServiceInternal) {
+        this.messageBrokerServiceInternal = messageBrokerServiceInternal;
     }
 
     @javax.inject.Inject

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceAware.java
new file mode 100644
index 0000000..2443150
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceAware.java
@@ -0,0 +1,26 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.services.msgbroker;
+
+public interface MessageBrokerServiceAware {
+
+    public void setMessageBrokerService(final MessageBrokerServiceInternal messageBrokerServiceInternal);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternal.java
new file mode 100644
index 0000000..c7d2751
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternal.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.metamodel.services.msgbroker;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+public interface MessageBrokerServiceInternal {
+
+    @Programmatic
+    void injectInto(final Object candidate);
+
+    /**
+     * Provided by <tt>MessageBroker</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    void informUser(String message);
+
+    /**
+     * Provided by <tt>MessageBroker</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    void warnUser(String message);
+
+    /**
+     * Provided by <tt>MessageBroker</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    void raiseError(String message);
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternalAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternalAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternalAbstract.java
new file mode 100644
index 0000000..1f81bfa
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternalAbstract.java
@@ -0,0 +1,29 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.services.msgbroker;
+
+public abstract class MessageBrokerServiceInternalAbstract implements MessageBrokerServiceInternal {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (MessageBrokerServiceAware.class.isAssignableFrom(candidate.getClass())) {
+            final MessageBrokerServiceAware cast = MessageBrokerServiceAware.class.cast(candidate);
+            cast.setMessageBrokerService(this);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternalNoop.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternalNoop.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternalNoop.java
new file mode 100644
index 0000000..093e0f3
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/msgbroker/MessageBrokerServiceInternalNoop.java
@@ -0,0 +1,24 @@
+package org.apache.isis.core.metamodel.services.msgbroker;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+
+@DomainService(nature = NatureOfService.DOMAIN)
+public class MessageBrokerServiceInternalNoop extends MessageBrokerServiceInternalAbstract {
+
+    @Override
+    public void informUser(final String message) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void warnUser(final String message) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void raiseError(final String message) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceAware.java
new file mode 100644
index 0000000..29d939a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceAware.java
@@ -0,0 +1,29 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.services.persistsession;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+public interface PersistenceSessionServiceAware {
+
+    @Programmatic
+    public void setPersistenceSessionService(final PersistenceSessionServiceInternal persistenceSessionServiceInternal);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternal.java
new file mode 100644
index 0000000..a00d2ee
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternal.java
@@ -0,0 +1,160 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.services.persistsession;
+
+import java.util.List;
+
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.query.Query;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public interface PersistenceSessionServiceInternal extends AdapterManager {
+
+    @Programmatic
+    void injectInto(final Object candidate);
+
+    //region > instantiate
+
+    /**
+     * Provided by the <tt>PersistenceSession</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    ObjectAdapter createTransientInstance(ObjectSpecification spec);
+
+    @Programmatic
+    ObjectAdapter createViewModelInstance(ObjectSpecification spec, String memento);
+
+    //endregion
+
+    //region > retrieve
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    void resolve(Object parent);
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    void resolve(Object parent, Object field);
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>BookmarkServicesDefault</tt>.
+     * @return
+     */
+    @Programmatic
+    Object lookup(Bookmark bookmark, final BookmarkService2.FieldResetPolicy fieldResetPolicy);
+
+    @Programmatic
+    Bookmark bookmarkFor(Object domainObject);
+
+    @Programmatic
+    Bookmark bookmarkFor(Class<?> cls, String identifier);
+
+    //endregion
+
+    //region > beginTran, flush, commit
+
+    @Programmatic
+    void beginTran();
+
+    /**
+     * Provided by <tt>TransactionManager</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    boolean flush();
+
+    /**
+     * Provided by <tt>TransactionManager</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    void commit();
+
+
+    //endregion
+
+    //region > makePersistent, remove
+
+    /**
+     * Provided by the <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt> and also by
+     * <tt>DomainObjectInvocationHandler#handleSaveMethod()</tt>.
+     */
+    @Programmatic
+    void makePersistent(ObjectAdapter adapter);
+
+    /**
+     * Provided by <tt>UpdateNotifier</tt> and <tt>PersistenceSession</tt> when
+     * used by framework.
+     * 
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    void remove(ObjectAdapter adapter);
+
+    //endregion
+
+    //region > allMatchingQuery, firstMatchingQuery
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt> and also by the choices
+     * facets.
+     */
+    @Programmatic
+    <T> List<ObjectAdapter> allMatchingQuery(Query<T> query);
+
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     *
+     * <p>
+     * Called by <tt>DomainObjectContainerDefault</tt>.
+     */
+    @Programmatic
+    <T> ObjectAdapter firstMatchingQuery(Query<T> query);
+
+    //endregion
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternalAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternalAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternalAbstract.java
new file mode 100644
index 0000000..60714af
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternalAbstract.java
@@ -0,0 +1,35 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.services.persistsession;
+
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
+
+public abstract class PersistenceSessionServiceInternalAbstract implements PersistenceSessionServiceInternal {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (AdapterManagerAware.class.isAssignableFrom(candidate.getClass())) {
+            final AdapterManagerAware cast = AdapterManagerAware.class.cast(candidate);
+            cast.setAdapterManager(this);
+        }
+        if (PersistenceSessionServiceAware.class.isAssignableFrom(candidate.getClass())) {
+            final PersistenceSessionServiceAware cast = PersistenceSessionServiceAware.class.cast(candidate);
+            cast.setPersistenceSessionService(this);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternalNoop.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternalNoop.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternalNoop.java
new file mode 100644
index 0000000..63792ba
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/persistsession/PersistenceSessionServiceInternalNoop.java
@@ -0,0 +1,132 @@
+package org.apache.isis.core.metamodel.services.persistsession;
+
+import java.util.List;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.query.Query;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+@DomainService(nature = NatureOfService.DOMAIN)
+public class PersistenceSessionServiceInternalNoop extends PersistenceSessionServiceInternalAbstract {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (AdapterManagerAware.class.isAssignableFrom(candidate.getClass())) {
+            final AdapterManagerAware cast = AdapterManagerAware.class.cast(candidate);
+            cast.setAdapterManager(this);
+        }
+    }
+
+    @Override
+    public ObjectAdapter getAdapterFor(final Object pojo) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public ObjectAdapter adapterFor(
+            final Object pojo,
+            final ObjectAdapter ownerAdapter,
+            final OneToManyAssociation collection) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public ObjectAdapter mapRecreatedPojo(Oid oid, Object recreatedPojo) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void removeAdapter(ObjectAdapter adapter) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public ObjectAdapter adapterFor(final Object domainObject) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public ObjectAdapter getAdapterFor(Oid oid) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public ObjectAdapter createTransientInstance(final ObjectSpecification spec) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public ObjectAdapter createViewModelInstance(ObjectSpecification spec, String memento) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public Object lookup(
+            final Bookmark bookmark,
+            final BookmarkService2.FieldResetPolicy fieldResetPolicy) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public Bookmark bookmarkFor(Object domainObject) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public Bookmark bookmarkFor(Class<?> cls, String identifier) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void resolve(final Object parent, final Object field) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void resolve(final Object parent) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void beginTran() {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public boolean flush() {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void commit() {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void remove(final ObjectAdapter adapter) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public void makePersistent(final ObjectAdapter adapter) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public <T> ObjectAdapter firstMatchingQuery(final Query<T> query) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+    @Override
+    public <T> List<ObjectAdapter> allMatchingQuery(final Query<T> query) {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefault.java
index 5d9ed76..966bdef 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefault.java
@@ -41,8 +41,8 @@ import org.apache.isis.applib.services.xactn.TransactionService;
 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.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAware;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceAware;
 
 @DomainService(
         nature = NatureOfService.DOMAIN
@@ -98,7 +98,7 @@ public class RepositoryServiceDefault
         if (isPersistent(object)) {
             throw new PersistFailedException("Object already persistent; OID=" + adapter.getOid());
         }
-        persistenceSessionService.makePersistent(adapter);
+        persistenceSessionServiceInternal.makePersistent(adapter);
     }
     
     @Programmatic
@@ -126,7 +126,7 @@ public class RepositoryServiceDefault
             throw new RepositoryException("Object not persistent: " + adapter);
         }
 
-        persistenceSessionService.remove(adapter);
+        persistenceSessionServiceInternal.remove(adapter);
     }
     
     @Override
@@ -174,7 +174,7 @@ public class RepositoryServiceDefault
     }
 
     <T> List<T> submitQuery(final Query<T> query) {
-        final List<ObjectAdapter> allMatching = persistenceSessionService.allMatchingQuery(query);
+        final List<ObjectAdapter> allMatching = persistenceSessionServiceInternal.allMatchingQuery(query);
         return ObjectAdapter.Util.unwrapT(allMatching);
     }
 
@@ -227,7 +227,7 @@ public class RepositoryServiceDefault
         if(autoFlush) {
             transactionService.flushTransaction();
         }
-        final ObjectAdapter firstMatching = persistenceSessionService.firstMatchingQuery(query);
+        final ObjectAdapter firstMatching = persistenceSessionServiceInternal.firstMatchingQuery(query);
         return (T) ObjectAdapter.Util.unwrap(firstMatching);
     }
 
@@ -254,11 +254,11 @@ public class RepositoryServiceDefault
     @javax.inject.Inject
     TransactionService transactionService;
 
-    private PersistenceSessionService persistenceSessionService;
+    private PersistenceSessionServiceInternal persistenceSessionServiceInternal;
     @Override
-    public void setPersistenceSessionService(final PersistenceSessionService persistenceSessionService) {
+    public void setPersistenceSessionService(final PersistenceSessionServiceInternal persistenceSessionServiceInternal) {
 
-        this.persistenceSessionService = persistenceSessionService;
+        this.persistenceSessionServiceInternal = persistenceSessionServiceInternal;
     }
 
     private AdapterManager adapterManager;

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
index ce456d8..bb61ca1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
@@ -27,8 +27,8 @@ import org.apache.isis.applib.services.wrapper.WrapperFactory;
 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.runtimecontext.LocalizationProvider;
-import org.apache.isis.core.metamodel.runtimecontext.LocalizationProviderAware;
+import org.apache.isis.core.metamodel.services.l10n.LocalizationProviderInternal;
+import org.apache.isis.core.metamodel.services.l10n.LocalizationProviderAware;
 
 @DomainService(
         nature = NatureOfService.DOMAIN
@@ -42,7 +42,7 @@ public class TitleServiceDefault
         final ObjectAdapter objectAdapter = adapterManager.adapterFor(unwrapped(domainObject));
         final boolean destroyed = objectAdapter.isDestroyed();
         if(!destroyed) {
-            return objectAdapter.getSpecification().getTitle(objectAdapter, localizationProvider.getLocalization());
+            return objectAdapter.getSpecification().getTitle(objectAdapter, localizationProviderInternal.getLocalization());
         } else {
             return "[DELETED]";
         }
@@ -78,10 +78,10 @@ public class TitleServiceDefault
         this.adapterManager = adapterManager;
     }
 
-    private LocalizationProvider localizationProvider;
+    private LocalizationProviderInternal localizationProviderInternal;
     @Override
-    public void setLocalizationProvider(final LocalizationProvider localizationProvider) {
-        this.localizationProvider = localizationProvider;
+    public void setLocalizationProvider(final LocalizationProviderInternal localizationProviderInternal) {
+        this.localizationProviderInternal = localizationProviderInternal;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternal.java
new file mode 100644
index 0000000..a3f88d6
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternal.java
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.services.transtate;
+
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.transactions.TransactionState;
+
+public interface TransactionStateProviderInternal {
+
+    @Programmatic
+    void injectInto(final Object candidate);
+
+    @Programmatic TransactionState getTransactionState();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternalAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternalAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternalAbstract.java
new file mode 100644
index 0000000..bd95173
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternalAbstract.java
@@ -0,0 +1,31 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.metamodel.services.transtate;
+
+import org.apache.isis.core.metamodel.transactions.TransactionStateProviderAware;
+
+public abstract class TransactionStateProviderInternalAbstract implements TransactionStateProviderInternal {
+
+    @Override
+    public void injectInto(final Object candidate) {
+        if (TransactionStateProviderAware.class.isAssignableFrom(candidate.getClass())) {
+            final TransactionStateProviderAware cast = TransactionStateProviderAware.class.cast(candidate);
+            cast.setTransactionStateProvider(this);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternalNoop.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternalNoop.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternalNoop.java
new file mode 100644
index 0000000..dd09e5e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/transtate/TransactionStateProviderInternalNoop.java
@@ -0,0 +1,13 @@
+package org.apache.isis.core.metamodel.services.transtate;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.core.metamodel.transactions.TransactionState;
+
+@DomainService(nature = NatureOfService.DOMAIN)
+public class TransactionStateProviderInternalNoop extends TransactionStateProviderInternalAbstract {
+    @Override
+    public TransactionState getTransactionState() {
+        throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/xactn/TransactionServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/xactn/TransactionServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/xactn/TransactionServiceDefault.java
index 1a6f878..92be34f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/xactn/TransactionServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/xactn/TransactionServiceDefault.java
@@ -22,8 +22,8 @@ package org.apache.isis.core.metamodel.services.xactn;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAware;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceAware;
 
 @DomainService(
         nature = NatureOfService.DOMAIN
@@ -33,19 +33,19 @@ public class TransactionServiceDefault implements TransactionService, Persistenc
 
     @Override
     public void flushTransaction() {
-        persistenceSessionService.flush();
+        persistenceSessionServiceInternal.flush();
     }
 
     @Override
     public void nextTransaction() {
-        persistenceSessionService.commit();
-        persistenceSessionService.beginTran();
+        persistenceSessionServiceInternal.commit();
+        persistenceSessionServiceInternal.beginTran();
     }
 
-    private PersistenceSessionService persistenceSessionService;
+    private PersistenceSessionServiceInternal persistenceSessionServiceInternal;
     @Override
-    public void setPersistenceSessionService(final PersistenceSessionService persistenceSessionService) {
+    public void setPersistenceSessionService(final PersistenceSessionServiceInternal persistenceSessionServiceInternal) {
 
-        this.persistenceSessionService = persistenceSessionService;
+        this.persistenceSessionServiceInternal = persistenceSessionServiceInternal;
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java
index 178cf50..79e8e4f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberDependencies.java
@@ -16,7 +16,7 @@
  */
 package org.apache.isis.core.metamodel.spec.feature;
 
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
@@ -24,17 +24,17 @@ public class ObjectMemberDependencies {
 
     private final SpecificationLoader specificationLoader;
     private final ServicesInjector servicesInjector;
-    private final PersistenceSessionService persistenceSessionService;
+    private final PersistenceSessionServiceInternal persistenceSessionServiceInternal;
 
     public ObjectMemberDependencies(
             final SpecificationLoader specificationLoader,
             final ServicesInjector servicesInjector,
-            final PersistenceSessionService persistenceSessionService) {
+            final PersistenceSessionServiceInternal persistenceSessionServiceInternal) {
 
         this.specificationLoader = specificationLoader;
 
         this.servicesInjector = servicesInjector;
-        this.persistenceSessionService = persistenceSessionService;
+        this.persistenceSessionServiceInternal = persistenceSessionServiceInternal;
     }
 
     public SpecificationLoader getSpecificationLoader() {
@@ -45,7 +45,7 @@ public class ObjectMemberDependencies {
         return servicesInjector;
     }
     
-    public PersistenceSessionService getPersistenceSessionService() {
-        return persistenceSessionService;
+    public PersistenceSessionServiceInternal getPersistenceSessionService() {
+        return persistenceSessionServiceInternal;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index a92cf0a..683f041 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -38,7 +38,6 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.lang.ClassUtil;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
@@ -46,11 +45,9 @@ import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFac
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
-import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.ServicesInjectorAware;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -90,19 +87,6 @@ import static org.hamcrest.Matchers.notNullValue;
  * </p>
  *
  * <p>
- * In addition, the {@link RuntimeContext} can optionally be injected, but will
- * default to {@link RuntimeContextNoRuntime} if not provided prior to
- * {@link SpecificationLoader#init(RuntimeContext) initialization}. The purpose of {@link RuntimeContext} is to
- * allow the metamodel to be used standalone, for example in a Maven plugin. The
- * {@link RuntimeContextNoRuntime} implementation will through an exception for
- * any methods (such as finding an {@link ObjectAdapter adapter}) because there
- * is no runtime session. In the case of the metamodel being used by the
- * framework (that is, when there <i>is</i> a runtime), then the framework
- * injects an implementation of {@link RuntimeContext} that acts like a bridge
- * to its <tt>IsisContext</tt>.
- * </p>
- *
- * <p>
  * Implementing class is added to {@link ServicesInjector} as an (internal) domain service; all public methods
  * must be annotated using {@link Programmatic}.
  * </p>
@@ -162,14 +146,6 @@ public class SpecificationLoader implements ApplicationScopedComponent {
 
     //region > init
 
-    /**
-     * Can optionally be injected, but will default (to
-     * {@link RuntimeContextNoRuntime}) otherwise.
-     *
-     * <p>
-     * Should be injected when used by framework, but will default to a no-op implementation if the metamodel is
-     * being used standalone (eg for a code-generator).
-     */
     private RuntimeContext runtimeContext;
 
     private boolean initialized = false;
@@ -189,7 +165,7 @@ public class SpecificationLoader implements ApplicationScopedComponent {
 
         // default subcomponents
         if (runtimeContext == null) {
-            this.runtimeContext = new RuntimeContextNoRuntime(servicesInjector, this);
+            this.runtimeContext = new RuntimeContext(servicesInjector);
         }
 
         // wire subcomponents into each other
@@ -448,13 +424,13 @@ public class SpecificationLoader implements ApplicationScopedComponent {
     private ObjectSpecification createSpecification(final Class<?> cls) {
 
         final ServicesInjector servicesInjector = getRuntimeContext().getServicesInjector();
-        final PersistenceSessionService persistenceSessionService = getRuntimeContext().getPersistenceSessionService();
+        final PersistenceSessionServiceInternal persistenceSessionServiceInternal = getRuntimeContext().getPersistenceSessionService();
 
         final ObjectSpecificationDependencies specContext =
                 new ObjectSpecificationDependencies(deploymentCategory, servicesInjector, this, facetProcessor);
 
         final ObjectMemberDependencies objectMemberDependencies =
-                new ObjectMemberDependencies(this, servicesInjector, persistenceSessionService);
+                new ObjectMemberDependencies(this, servicesInjector, persistenceSessionServiceInternal);
 
         // ... and create the specs
         if (FreeStandingList.class.isAssignableFrom(cls)) {
@@ -577,20 +553,4 @@ public class SpecificationLoader implements ApplicationScopedComponent {
     //endregion
 
 
-
-    /**
-     * Injects self into candidate if required, and instructs its subcomponents
-     * to do so also.
-     */
-    @Programmatic
-    public void injectInto(final Object candidate) {
-        final Class<?> candidateClass = candidate.getClass();
-        if (ServicesInjectorAware.class.isAssignableFrom(candidateClass)) {
-            final ServicesInjectorAware cast = ServicesInjectorAware.class.cast(candidate);
-            cast.setServicesInjector(this.servicesInjector);
-        }
-    }
-
-
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/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 2dbd2f0..4556ffb 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
@@ -467,11 +467,6 @@ public class FacetProcessor implements RuntimeContextAware {
 
     //region > dependencies
 
-    private IsisConfiguration getIsisConfiguration() {
-        return configuration;
-    }
-
-
     private RuntimeContext getRuntimeContext() {
         return runtimeContext;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 0dd0d1a..10c2c65 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -54,7 +54,7 @@ import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefau
 import org.apache.isis.core.metamodel.interactions.ActionArgValidityContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.spec.DomainModelException;
 import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -515,7 +515,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
         return parentAction.getPersistenceSessionService();
     }
 
-    protected PersistenceSessionService getObjectPersistor() {
+    protected PersistenceSessionServiceInternal getObjectPersistor() {
         return parentAction.getPersistenceSessionService();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index bb77b40..ef87934 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -54,7 +54,7 @@ import org.apache.isis.core.metamodel.interactions.InteractionContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.command.CommandDtoServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -79,7 +79,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     private final FeatureType featureType;
     private final SpecificationLoader specificationLookup;
     private final ServicesInjector servicesInjector;
-    private final PersistenceSessionService persistenceSessionService;
+    private final PersistenceSessionServiceInternal persistenceSessionServiceInternal;
     //endregion
 
     protected ObjectMemberAbstract(
@@ -96,7 +96,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
 
         this.specificationLookup = objectMemberDependencies.getSpecificationLoader();
         this.servicesInjector = objectMemberDependencies.getServicesInjector();
-        this.persistenceSessionService = objectMemberDependencies.getPersistenceSessionService();
+        this.persistenceSessionServiceInternal = objectMemberDependencies.getPersistenceSessionService();
     }
 
     //region > Identifiers
@@ -384,8 +384,8 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
         return servicesInjector;
     }
 
-    public PersistenceSessionService getPersistenceSessionService() {
-        return persistenceSessionService;
+    public PersistenceSessionServiceInternal getPersistenceSessionService() {
+        return persistenceSessionServiceInternal;
     }
 
     public CollectionTypeRegistry getCollectionTypeRegistry() {

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java
deleted file mode 100644
index 18a2ed5..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.transactions;
-
-public interface TransactionStateProvider {
-
-    void injectInto(final Object candidate);
-
-    public TransactionState getTransactionState();
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAbstract.java
deleted file mode 100644
index 2ba5a9c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAbstract.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.transactions;
-
-public abstract class TransactionStateProviderAbstract implements
-        TransactionStateProvider {
-
-    @Override
-    public void injectInto(final Object candidate) {
-        if (TransactionStateProviderAware.class.isAssignableFrom(candidate.getClass())) {
-            final TransactionStateProviderAware cast = TransactionStateProviderAware.class.cast(candidate);
-            cast.setTransactionStateProvider(this);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/a2a9f519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAware.java
index 2cb551f..61580d7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAware.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProviderAware.java
@@ -20,10 +20,11 @@
 package org.apache.isis.core.metamodel.transactions;
 
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.services.transtate.TransactionStateProviderInternal;
 
 public interface TransactionStateProviderAware {
 
     @Programmatic
-    public void setTransactionStateProvider(TransactionStateProvider transactionStateProvider);
+    public void setTransactionStateProvider(TransactionStateProviderInternal transactionStateProviderInternal);
 
 }