You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/03/13 08:54:50 UTC

[isis] branch 2033-IoC updated: ISIS-2033: new module 'runtime-services' to consolidate concrete service

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch 2033-IoC
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/2033-IoC by this push:
     new 54da829  ISIS-2033: new module 'runtime-services' to consolidate concrete service
54da829 is described below

commit 54da829872900986aa3b182ac402e0b666f8fa72
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Mar 12 17:58:59 2019 +0100

    ISIS-2033: new module 'runtime-services' to consolidate concrete service
    
    these services are to be managed by an IoC container
    
    also moving eventbus implementations to 'jso-common'
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
 .../java/org/apache/isis/applib/AppManifest.java   |   1 +
 core/detached-tests/pom.xml                        |   7 ++
 core/mavendeps/webapp/pom.xml                      |   6 +
 core/plugins/eventbus-axon/pom.xml                 |  14 +++
 .../plugins/eventbus/EventBusPluginForAxon.java    |   2 +-
 .../QueryResultsCacheUsingAxonTest.java            |   4 +-
 .../EventBusServiceBaseUsingAxonSimpleTest.java}   |  53 +++++----
 core/plugins/eventbus-guava/pom.xml                |  16 +++
 .../plugins/eventbus/EventBusPluginForGuava.java   |   2 +-
 .../QueryResultsCacheUsingGuavaTest.java           |   4 +-
 .../EventBusServiceBaseUsingGuavaTest.java}        |  31 ++---
 .../jdo/persistence/PersistenceSessionBase.java    |   2 +-
 .../eventbus/EventBusImplementationAbstract.java   |   2 +-
 .../services/eventbus/EventBusServiceBase.java}    |   8 +-
 .../services/metrics/MetricsServiceDefault.java    |   4 +-
 .../eventbus/EventBusServiceBaseTest.java}         |  46 ++++----
 .../service/eventbus/EventBusServiceJdo.java       |   4 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |  24 ++--
 .../service/eventbus/EventBusServiceJdo.java       |   4 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |  24 ++--
 core/pom.xml                                       |   1 +
 core/runtime-services/pom.xml                      | 131 +++++++++++++++++++++
 .../runtime/services/InitialisationException.java  |   0
 .../runtime/services/RequestScopedService.java     |   0
 .../runtime/services/RuntimeServicesModule.java    |   5 +
 .../core/runtime/services/ServiceException.java    |   0
 .../core/runtime/services/ServiceInstantiator.java |   0
 .../AuthenticationSessionProviderDefault.java      |   0
 .../background/BackgroundCommandExecution.java     |   0
 .../background/BackgroundServiceDefault.java       |   0
 .../background/CommandExecutionAbstract.java       |   0
 .../background/CommandExecutorServiceDefault.java  |   0
 .../background/CommandInvocationHandler.java       |   0
 .../background/ForkingInvocationHandler.java       |   0
 .../bookmarks/BookmarkServiceInternalDefault.java  |   0
 .../command/CommandDtoServiceInternalDefault.java  |   0
 .../services/command/CommandServiceDefault.java    |   0
 .../services/email/EmailServiceDefault.java        |   0
 .../core/runtime/services/error/EmailTicket.java   |   0
 .../core/runtime/services/error/SimpleTicket.java  |   0
 .../factory/FactoryServiceInternalDefault.java     |   0
 .../homepage/HomePageProviderServiceDefault.java   |   0
 .../isis/core/runtime/services/i18n/po/Block.java  |   0
 .../runtime/services/i18n/po/ContextAndMsgId.java  |   0
 .../core/runtime/services/i18n/po/PoAbstract.java  |   0
 .../core/runtime/services/i18n/po/PoDisabled.java  |   0
 .../core/runtime/services/i18n/po/PoReader.java    |   0
 .../core/runtime/services/i18n/po/PoWriter.java    |   0
 .../services/i18n/po/TranslationServicePo.java     |   0
 .../services/i18n/po/TranslationServicePoMenu.java |   0
 .../isis/core/runtime/services/i18n/po/Util.java   |   0
 .../ixn/InteractionDtoServiceInternalDefault.java  |   0
 .../menubars/MenuBarsLoaderServiceDefault.java     |   0
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    |   0
 .../menubars/bootstrap3/ServiceAndAction.java      |   0
 .../services/message/MessageServiceDefault.java    |   0
 .../ObjectAdapterServiceDefault.java               |   0
 .../services/publish/PublishedObjectsDefault.java  |   0
 .../publish/PublishingServiceInternalDefault.java  |   2 +-
 .../RepositoryServiceInternalDefault.java          |   0
 .../sessmgmt/SessionManagementServiceDefault.java  |   0
 .../runtime/services/sudo/SudoServiceDefault.java  |   0
 .../userprof/UserProfileServiceDefault.java        |   0
 .../userreg/EmailNotificationServiceDefault.java   |   0
 .../userreg/EmailVerificationTemplate.html         |   0
 .../services/userreg/PasswordResetTemplate.html    |   0
 .../services/xactn/TransactionServiceDefault.java  |   0
 .../services/xmlsnapshot/XmlSnapshotBuilder.java   |   0
 .../xmlsnapshot/XmlSnapshotServiceDefault.java     |   0
 .../changes/PreAndPostValues_shouldAudit_Test.java |   1 +
 .../email/EmailServiceDefaultTest_actually.java    |   0
 .../email/EmailServiceDefaultTest_notEmpty.java    |   0
 .../runtime/services/i18n/po/PoReaderTest.java     |   0
 .../services/i18n/po/PoWriterTest_escape.java      |   0
 .../RepositoryServiceDefaultTest_allMatches.java   |   0
 .../transaction}/AdapterAndProperty.java           |   2 +-
 .../transaction}/AuditingServiceInternal.java      |   5 +-
 .../ChangedObjectsServiceInternal.java             |   2 +-
 .../system/transaction/IsisTransaction.java        |   6 +-
 .../transaction}/PreAndPostValues.java             |   2 +-
 .../runtime/services/ServiceInstantiatorTest.java  |  28 -----
 example/application/simpleapp/application/pom.xml  |   3 +-
 .../application/simpleapp/module-simple/pom.xml    |   3 +-
 83 files changed, 297 insertions(+), 152 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
index 38a4376..a8419b4 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
@@ -175,6 +175,7 @@ public interface AppManifest {
                 "org.apache.isis.core.wrapper.WrapperFactoryDefault",
                 "org.apache.isis.core.metamodel.MetamodelModule",
                 "org.apache.isis.core.runtime.RuntimeModule",
+                "org.apache.isis.core.runtime.services.RuntimeServicesModule",
                 "org.apache.isis.jdo.JdoModule",
                 "org.apache.isis.viewer.restfulobjects.rendering.RendererContext"
                 
diff --git a/core/detached-tests/pom.xml b/core/detached-tests/pom.xml
index 7f08757..01ad0c4 100644
--- a/core/detached-tests/pom.xml
+++ b/core/detached-tests/pom.xml
@@ -54,6 +54,13 @@
 			<scope>test</scope>
 		</dependency>
         
+		<dependency>
+			<groupId>org.apache.isis.core</groupId>
+			<artifactId>isis-core-runtime-services</artifactId>
+			<version>${revision}</version>
+			<scope>test</scope>
+		</dependency>
+        
         <dependency>
 			<groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-runtime-extensions</artifactId>
diff --git a/core/mavendeps/webapp/pom.xml b/core/mavendeps/webapp/pom.xml
index 84e6309..44870d7 100644
--- a/core/mavendeps/webapp/pom.xml
+++ b/core/mavendeps/webapp/pom.xml
@@ -48,6 +48,12 @@
             </activation>
         
             <dependencies>
+		        <!-- TODO [2033] version should be managed -->
+				<dependency>
+		            <groupId>org.apache.isis.core</groupId>
+		            <artifactId>isis-core-runtime-services</artifactId>
+		            <version>2.0.0-M3-SNAPSHOT</version> 
+		        </dependency>
             	<dependency>
                     <groupId>org.apache.isis.core</groupId>
                     <artifactId>isis-core-runtime-extensions</artifactId>
diff --git a/core/plugins/eventbus-axon/pom.xml b/core/plugins/eventbus-axon/pom.xml
index 46d2470..2562bde 100644
--- a/core/plugins/eventbus-axon/pom.xml
+++ b/core/plugins/eventbus-axon/pom.xml
@@ -68,6 +68,12 @@
 			<scope>compile</scope>
 		</dependency>
 
+		<dependency>
+			<groupId>org.apache.isis.core</groupId>
+			<artifactId>isis-core-plugins-jdo-common</artifactId>
+			<scope>compile</scope>
+		</dependency>
+
 		<!-- TESTS -->
 		
 		<dependency>
@@ -86,6 +92,14 @@
 		
 		<dependency>
 			<groupId>org.apache.isis.core</groupId>
+			<artifactId>isis-core-plugins-jdo-common</artifactId>
+			<version>${revision}</version>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-unittestsupport</artifactId>
 			<scope>test</scope>
 		</dependency>
diff --git a/core/plugins/eventbus-axon/src/main/java/org/apache/isis/core/plugins/eventbus/EventBusPluginForAxon.java b/core/plugins/eventbus-axon/src/main/java/org/apache/isis/core/plugins/eventbus/EventBusPluginForAxon.java
index 99d3b65..9e9d7c8 100644
--- a/core/plugins/eventbus-axon/src/main/java/org/apache/isis/core/plugins/eventbus/EventBusPluginForAxon.java
+++ b/core/plugins/eventbus-axon/src/main/java/org/apache/isis/core/plugins/eventbus/EventBusPluginForAxon.java
@@ -33,7 +33,7 @@ import org.axonframework.eventhandling.SimpleEventBus;
 
 import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.core.runtime.services.eventbus.EventBusImplementationAbstract;
+import org.apache.isis.jdo.services.eventbus.EventBusImplementationAbstract;
 
 
 /**
diff --git a/core/plugins/eventbus-axon/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheUsingAxonTest.java b/core/plugins/eventbus-axon/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheUsingAxonTest.java
index 00ba9c4..5cd35bc 100644
--- a/core/plugins/eventbus-axon/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheUsingAxonTest.java
+++ b/core/plugins/eventbus-axon/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheUsingAxonTest.java
@@ -24,7 +24,7 @@ import java.util.concurrent.Callable;
 import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
 import org.apache.isis.applib.services.fixturespec.FixtureScriptsDefault;
 import org.apache.isis.core.plugins.eventbus.EventBusPluginForAxon;
-import org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault;
+import org.apache.isis.jdo.services.eventbus.EventBusServiceBase;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -39,7 +39,7 @@ public class QueryResultsCacheUsingAxonTest {
         queryResultsCache = new QueryResultsCacheInternal();
         control = new QueryResultsCacheControlInternal() {
         	{
-        		eventBusService = new EventBusServiceDefault() {
+        		eventBusService = new EventBusServiceBase() {
         			{
         				allowLateRegistration = true;
         				eventBusImplementation = eventBusImplementationAxon 
diff --git a/core/plugins/eventbus-axon/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultUsingAxonSimpleTest.java b/core/plugins/eventbus-axon/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseUsingAxonSimpleTest.java
similarity index 85%
rename from core/plugins/eventbus-axon/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultUsingAxonSimpleTest.java
rename to core/plugins/eventbus-axon/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseUsingAxonSimpleTest.java
index cce336e..80c2b82 100644
--- a/core/plugins/eventbus-axon/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultUsingAxonSimpleTest.java
+++ b/core/plugins/eventbus-axon/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseUsingAxonSimpleTest.java
@@ -14,33 +14,34 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.isis.core.runtime.services.eventbus;
+package org.apache.isis.jdo.services.eventbus;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.nullValue;
+import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 
-import org.jboss.weld.junit5.EnableWeld;
-import org.jboss.weld.junit5.WeldInitiator;
-import org.jboss.weld.junit5.WeldSetup;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.BeansForTesting;
 import org.apache.isis.core.metamodel.services.ServiceInjectorDefault;
 import org.apache.isis.core.metamodel.services.registry.ServiceRegistryDefault;
+import org.apache.isis.jdo.services.eventbus.EventBusServiceBase;
+import org.apache.isis.jdo.services.eventbus.EventBusServiceBaseTest;
+import org.jboss.weld.junit5.EnableWeld;
+import org.jboss.weld.junit5.WeldInitiator;
+import org.jboss.weld.junit5.WeldSetup;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-class EventBusServiceDefaultUsingAxonSimpleTest {
+class EventBusServiceBaseUsingAxonSimpleTest {
     
     @ApplicationScoped @DomainService
-    static class EventBusServiceForTest extends EventBusServiceDefault {
+    static class EventBusServiceForTest extends EventBusServiceBase {
         
     }
 
@@ -62,13 +63,13 @@ class EventBusServiceDefaultUsingAxonSimpleTest {
     }
     
     @EnableWeld
-    static class Post extends EventBusServiceDefaultTest {
+    static class Post extends EventBusServiceBaseTest {
         
         @WeldSetup
         public WeldInitiator weld = weld();
         
         @Inject protected ServiceInjector injector;
-        @Inject protected EventBusServiceDefault eventBusService;
+        @Inject protected EventBusServiceBase eventBusService;
     	
     	private final static String EVENTBUS_IMPL_NAME = "axon";
     	
@@ -119,8 +120,8 @@ class EventBusServiceDefaultUsingAxonSimpleTest {
         @Test
         public void allow_late_registration_means_can_register_after_post() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, true);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, true);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             
             assertThat(eventBusService.isAllowLateRegistration(), is(true));
@@ -138,8 +139,8 @@ class EventBusServiceDefaultUsingAxonSimpleTest {
         @Test
         public void disallow_late_registration_means_cannot_register_after_post() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
@@ -156,8 +157,8 @@ class EventBusServiceDefaultUsingAxonSimpleTest {
         @Test
         public void disallow_late_registration_means_can_register_before_post() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
@@ -176,8 +177,8 @@ class EventBusServiceDefaultUsingAxonSimpleTest {
         @Test
         public void multiple_subscribers_receive_same_event_if_same_type() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
             assertThat(eventBusService.getImplementation(), is(EVENTBUS_IMPL_NAME));
@@ -208,8 +209,8 @@ class EventBusServiceDefaultUsingAxonSimpleTest {
         @Test
         public void multiple_subscribers_eventlistener() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
             assertThat(eventBusService.getImplementation(), is(EVENTBUS_IMPL_NAME));
diff --git a/core/plugins/eventbus-guava/pom.xml b/core/plugins/eventbus-guava/pom.xml
index 9fd7ef5..2de5c20 100644
--- a/core/plugins/eventbus-guava/pom.xml
+++ b/core/plugins/eventbus-guava/pom.xml
@@ -66,6 +66,12 @@
 		
 		<dependency>
 			<groupId>org.apache.isis.core</groupId>
+			<artifactId>isis-core-plugins-jdo-common</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-config</artifactId>
 			<type>test-jar</type>
 			<scope>test</scope>
@@ -90,6 +96,14 @@
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
+		
+		<dependency>
+			<groupId>org.apache.isis.core</groupId>
+			<artifactId>isis-core-plugins-jdo-common</artifactId>
+			<version>${revision}</version>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
 
 		<dependency>
 			<groupId>javax.jdo</groupId>
@@ -98,6 +112,8 @@
 			<scope>test</scope>
 		</dependency>
 
+		
+
 	</dependencies>
 
 	<profiles>
diff --git a/core/plugins/eventbus-guava/src/main/java/org/apache/isis/core/plugins/eventbus/EventBusPluginForGuava.java b/core/plugins/eventbus-guava/src/main/java/org/apache/isis/core/plugins/eventbus/EventBusPluginForGuava.java
index 46111ed..96f9a98 100644
--- a/core/plugins/eventbus-guava/src/main/java/org/apache/isis/core/plugins/eventbus/EventBusPluginForGuava.java
+++ b/core/plugins/eventbus-guava/src/main/java/org/apache/isis/core/plugins/eventbus/EventBusPluginForGuava.java
@@ -21,7 +21,7 @@ import java.util.function.Consumer;
 
 import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 import org.apache.isis.core.plugins.eventbus.EventBusPlugin;
-import org.apache.isis.core.runtime.services.eventbus.EventBusImplementationAbstract;
+import org.apache.isis.jdo.services.eventbus.EventBusImplementationAbstract;
 
 import com.google.common.eventbus.SubscriberExceptionContext;
 import com.google.common.eventbus.SubscriberExceptionHandler;
diff --git a/core/plugins/eventbus-guava/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheUsingGuavaTest.java b/core/plugins/eventbus-guava/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheUsingGuavaTest.java
index 084477b..5fe918c 100644
--- a/core/plugins/eventbus-guava/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheUsingGuavaTest.java
+++ b/core/plugins/eventbus-guava/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheUsingGuavaTest.java
@@ -24,7 +24,7 @@ import java.util.concurrent.Callable;
 import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
 import org.apache.isis.applib.services.fixturespec.FixtureScriptsDefault;
 import org.apache.isis.core.plugins.eventbus.EventBusPluginForGuava;
-import org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault;
+import org.apache.isis.jdo.services.eventbus.EventBusServiceBase;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -39,7 +39,7 @@ public class QueryResultsCacheUsingGuavaTest {
         queryResultsCache = new QueryResultsCacheInternal();
         control = new QueryResultsCacheControlInternal() {
         	{
-        		eventBusService = new EventBusServiceDefault() {
+        		eventBusService = new EventBusServiceBase() {
         			{
         				allowLateRegistration = true;
         				eventBusImplementation = eventBusImplementationGuava 
diff --git a/core/plugins/eventbus-guava/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultUsingGuavaTest.java b/core/plugins/eventbus-guava/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseUsingGuavaTest.java
similarity index 85%
rename from core/plugins/eventbus-guava/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultUsingGuavaTest.java
rename to core/plugins/eventbus-guava/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseUsingGuavaTest.java
index 363ebef..0eed250 100644
--- a/core/plugins/eventbus-guava/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultUsingGuavaTest.java
+++ b/core/plugins/eventbus-guava/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseUsingGuavaTest.java
@@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.isis.core.runtime.services.eventbus;
+package org.apache.isis.jdo.services.eventbus;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
@@ -33,16 +33,17 @@ import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.BeansForTesting;
 import org.apache.isis.core.metamodel.services.ServiceInjectorDefault;
 import org.apache.isis.core.metamodel.services.registry.ServiceRegistryDefault;
+import org.apache.isis.jdo.services.eventbus.EventBusServiceBase;
 
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.nullValue;
 import static org.junit.Assert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
-class EventBusServiceDefaultUsingGuavaTest {
+class EventBusServiceBaseUsingGuavaTest {
 
     @ApplicationScoped @DomainService
-    static class EventBusServiceForTest extends EventBusServiceDefault {
+    static class EventBusServiceForTest extends EventBusServiceBase {
         
     }
 
@@ -64,13 +65,13 @@ class EventBusServiceDefaultUsingGuavaTest {
     }
     
     @EnableWeld
-    static class Post extends EventBusServiceDefaultTest {
+    static class Post extends EventBusServiceBaseTest {
     	
         @WeldSetup
         public WeldInitiator weld = weld();
         
         @Inject protected ServiceInjector injector;
-        @Inject protected EventBusServiceDefault eventBusService;
+        @Inject protected EventBusServiceBase eventBusService;
         
     	private final static String EVENTBUS_IMPL_NAME = "guava";
     	
@@ -121,8 +122,8 @@ class EventBusServiceDefaultUsingGuavaTest {
         @Test
         public void allow_late_registration_means_can_register_after_post() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, true);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, true);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             
             assertThat(eventBusService.isAllowLateRegistration(), is(true));
@@ -140,8 +141,8 @@ class EventBusServiceDefaultUsingGuavaTest {
         @Test
         public void disallow_late_registration_means_cannot_register_after_post() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
@@ -157,8 +158,8 @@ class EventBusServiceDefaultUsingGuavaTest {
         @Test
         public void disallow_late_registration_means_can_register_before_post() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
@@ -177,8 +178,8 @@ class EventBusServiceDefaultUsingGuavaTest {
         @Test
         public void multiple_subscribers_receive_same_event_if_same_type() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
@@ -210,8 +211,8 @@ class EventBusServiceDefaultUsingGuavaTest {
         @Test
         public void multiple_subscribers_eventlistener() throws Exception {
             // given
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, EVENTBUS_IMPL_NAME);
             eventBusService.init();
             
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
diff --git a/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/persistence/PersistenceSessionBase.java b/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/persistence/PersistenceSessionBase.java
index 9ce809f..6ed1974 100644
--- a/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/persistence/PersistenceSessionBase.java
+++ b/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/persistence/PersistenceSessionBase.java
@@ -44,9 +44,9 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.plugins.ioc.RequestContextService;
 import org.apache.isis.core.runtime.persistence.FixturesInstalledStateHolder;
-import org.apache.isis.core.runtime.services.changes.ChangedObjectsServiceInternal;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.transaction.ChangedObjectsServiceInternal;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.core.security.authentication.AuthenticationSession;
 import org.apache.isis.jdo.datanucleus.persistence.queries.PersistenceQueryProcessor;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusImplementationAbstract.java b/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/eventbus/EventBusImplementationAbstract.java
similarity index 98%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusImplementationAbstract.java
rename to core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/eventbus/EventBusImplementationAbstract.java
index 43a70e7..9adb15d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusImplementationAbstract.java
+++ b/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/eventbus/EventBusImplementationAbstract.java
@@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.isis.core.runtime.services.eventbus;
+package org.apache.isis.jdo.services.eventbus;
 
 import java.util.Optional;
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java b/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBase.java
similarity index 96%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
rename to core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBase.java
index beca2d8..3f88234 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
+++ b/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBase.java
@@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.isis.core.runtime.services.eventbus;
+package org.apache.isis.jdo.services.eventbus;
 
 import static org.apache.isis.config.internal._Config.getConfiguration;
 
@@ -31,12 +31,11 @@ import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.plugins.eventbus.EventBusPlugin;
-import org.apache.isis.core.runtime.services.RequestScopedService;
 
 /**
  * Holds common runtime logic for EventBusService implementations.
  */
-public abstract class EventBusServiceDefault extends EventBusService {
+public abstract class EventBusServiceBase extends EventBusService {
 
     public static final String KEY_ALLOW_LATE_REGISTRATION = "isis.services.eventbus.allowLateRegistration";
     public static final String KEY_EVENT_BUS_IMPLEMENTATION = "isis.services.eventbus.implementation";
@@ -154,6 +153,7 @@ public abstract class EventBusServiceDefault extends EventBusService {
     }
 
 
-    @Inject ServiceInjector servicesInjector;
+    @Inject
+	protected ServiceInjector servicesInjector;
 
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/metrics/MetricsServiceDefault.java b/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/metrics/MetricsServiceDefault.java
similarity index 94%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/metrics/MetricsServiceDefault.java
rename to core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/metrics/MetricsServiceDefault.java
index 75bd3a4..ab7480b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/metrics/MetricsServiceDefault.java
+++ b/core/plugins/jdo-common/src/main/java/org/apache/isis/jdo/services/metrics/MetricsServiceDefault.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtime.services.metrics;
+package org.apache.isis.jdo.services.metrics;
 
 import java.util.concurrent.atomic.LongAdder;
 
@@ -28,7 +28,7 @@ import javax.jdo.listener.LoadLifecycleListener;
 
 import org.apache.isis.applib.services.WithTransactionScope;
 import org.apache.isis.applib.services.metrics.MetricsService;
-import org.apache.isis.core.runtime.services.changes.ChangedObjectsServiceInternal;
+import org.apache.isis.core.runtime.system.transaction.ChangedObjectsServiceInternal;
 
 @RequestScoped
 public class MetricsServiceDefault implements MetricsService, 
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultTest.java b/core/plugins/jdo-common/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseTest.java
similarity index 77%
rename from core/runtime/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultTest.java
rename to core/plugins/jdo-common/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseTest.java
index 2ecdfc1..d06ef5a 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefaultTest.java
+++ b/core/plugins/jdo-common/src/test/java/org/apache/isis/jdo/services/eventbus/EventBusServiceBaseTest.java
@@ -14,23 +14,23 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.isis.core.runtime.services.eventbus;
+package org.apache.isis.jdo.services.eventbus;
 
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.isIn;
+import static org.junit.Assert.assertThat;
 
 import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.services.ServiceInjectorDefault;
 import org.apache.isis.core.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.jdo.services.eventbus.EventBusServiceBase;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.isIn;
-import static org.junit.Assert.assertThat;
-
-public class EventBusServiceDefaultTest {
+public class EventBusServiceBaseTest {
 
-    protected EventBusServiceDefault eventBusService;
+    protected EventBusServiceBase eventBusService;
 
     @BeforeEach
     public void setUp() throws Exception {
@@ -38,14 +38,14 @@ public class EventBusServiceDefaultTest {
         _Config.clear(); 
         IsisSystemEnvironment.setUnitTesting(true);
         
-        eventBusService = new EventBusServiceDefault() {
+        eventBusService = new EventBusServiceBase() {
         	{
         		servicesInjector = new ServiceInjectorDefault();
         	}
         };
     }
 
-    public static class Init extends EventBusServiceDefaultTest {
+    public static class Init extends EventBusServiceBaseTest {
 
         @Test
         public void emptyMap() throws Exception {
@@ -56,77 +56,77 @@ public class EventBusServiceDefaultTest {
 
         @Test
         public void allowLateRegistration_setToFalse() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, false);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, false);
             eventBusService.init();
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
         }
 
         @Test
         public void allowLateRegistration_setToTrue() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, true);
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, true);
             eventBusService.init();
             assertThat(eventBusService.isAllowLateRegistration(), is(true));
         }
 
         @Test
         public void allowLateRegistration_setToTrueMixedCase() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, "TrUe");
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, "TrUe");
             eventBusService.init();
             assertThat(eventBusService.isAllowLateRegistration(), is(true));
         }
 
         @Test
         public void allowLateRegistration_setToEmptyString() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, "");
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, "");
             eventBusService.init();
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
         }
 
         @Test @Disabled("why would we allow this?")
         public void allowLateRegistration_setToGarbage() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_ALLOW_LATE_REGISTRATION, "SDF$%FDVDFG");
+            _Config.put(EventBusServiceBase.KEY_ALLOW_LATE_REGISTRATION, "SDF$%FDVDFG");
             eventBusService.init();
             assertThat(eventBusService.isAllowLateRegistration(), is(false));
         }
 
         @Test
         public void implementation_setToGuava() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, "guava");
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, "guava");
             eventBusService.init();
             assertThat(eventBusService.getImplementation(), is("guava"));
         }
 
         @Test
         public void implementation_setToGuavaMixedCaseRequiringTrimming() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, "  GuAvA ");
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, "  GuAvA ");
             eventBusService.init();
             assertThat(eventBusService.getImplementation(), is("guava"));
         }
 
         @Test
         public void implementation_setToAxon() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, "axon");
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, "axon");
             eventBusService.init();
             assertThat(eventBusService.getImplementation(), is("axon"));
         }
 
         @Test
         public void implementation_setToAxonMixedCaseRequiringTrimming() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, " AxOn   ");
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, " AxOn   ");
             eventBusService.init();
             assertThat(eventBusService.getImplementation(), is("axon"));
         }
 
         @Test
         public void implementation_setToEmptyString() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, "");
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, "");
             eventBusService.init();
             assertThat(eventBusService.getImplementation(), isIn(new String[] {"auto", "plugin"}));
         }
 
         @Test
         public void implementation_setToAnythingElse() throws Exception {
-            _Config.put(EventBusServiceDefault.KEY_EVENT_BUS_IMPLEMENTATION, 
+            _Config.put(EventBusServiceBase.KEY_EVENT_BUS_IMPLEMENTATION, 
                     "com.mycompany.my.event.bus.Implementation");
             eventBusService.init();
             assertThat(eventBusService.getImplementation(), is("com.mycompany.my.event.bus.Implementation"));
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
index c2fce71..16192ec 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
@@ -20,7 +20,7 @@ import javax.inject.Singleton;
 import javax.enterprise.context.ApplicationScoped;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault;
+import org.apache.isis.jdo.services.eventbus.EventBusServiceBase;
 import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis;
 import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis.Hint;
 
@@ -41,7 +41,7 @@ import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis.Hint;
  * that it is automatically registered and available for use; no further configuration is required.
  */
 @Singleton
-public class EventBusServiceJdo extends EventBusServiceDefault {
+public class EventBusServiceJdo extends EventBusServiceBase {
 
     /**
      * skip if called in any way by way of the {@link JDOStateManagerForIsis5}.
diff --git a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index bdf272b..31b94b0 100644
--- a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -19,18 +19,15 @@
 
 package org.apache.isis.core.wrapper;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
 import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
 import org.apache.isis.applib.services.inject.ServiceInjector;
@@ -63,7 +60,6 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationDefault;
 import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-import org.apache.isis.core.runtime.services.command.CommandDtoServiceInternalDefault;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.security.authentication.standard.SimpleSession;
@@ -73,10 +69,12 @@ import org.apache.isis.progmodel.wrapper.dom.employees.Employee;
 import org.apache.isis.progmodel.wrapper.dom.employees.EmployeeRepository;
 import org.apache.isis.progmodel.wrapper.dom.employees.EmployeeRepositoryImpl;
 import org.apache.isis.schema.cmd.v1.CommandDto;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
 
 public class WrapperFactoryDefaultTest_wrappedObject {
 
@@ -189,7 +187,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
                 will(returnValue(mockCommand));
 
                 allowing(mockServicesInjector).lookupServiceElseFail(CommandDtoServiceInternal.class);
-                will(returnValue(new CommandDtoServiceInternalDefault()));
+                will(returnValue(mockCommandDtoServiceInternal));
 
                 allowing(mockServicesInjector).lookupServiceElseFail(AuthenticationSessionProvider.class);
                 will(returnValue(mockAuthenticationSessionProvider));
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
index a9d9d9d..cb980bd 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
@@ -20,7 +20,7 @@ import javax.inject.Singleton;
 import javax.enterprise.context.ApplicationScoped;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault;
+import org.apache.isis.jdo.services.eventbus.EventBusServiceBase;
 import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis;
 import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis.Hint;
 
@@ -41,7 +41,7 @@ import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis.Hint;
  * that it is automatically registered and available for use; no further configuration is required.
  */
 @Singleton
-public class EventBusServiceJdo extends EventBusServiceDefault {
+public class EventBusServiceJdo extends EventBusServiceBase {
 
     /**
      * skip if called in any way by way of the {@link JDOStateManagerForIsis}.
diff --git a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index ea34892..dd47afc 100644
--- a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -19,18 +19,15 @@
 
 package org.apache.isis.core.wrapper;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
 import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
 import org.apache.isis.applib.services.inject.ServiceInjector;
@@ -63,7 +60,6 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationDefault;
 import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-import org.apache.isis.core.runtime.services.command.CommandDtoServiceInternalDefault;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.security.authentication.standard.SimpleSession;
@@ -73,10 +69,12 @@ import org.apache.isis.progmodel.wrapper.dom.employees.Employee;
 import org.apache.isis.progmodel.wrapper.dom.employees.EmployeeRepository;
 import org.apache.isis.progmodel.wrapper.dom.employees.EmployeeRepositoryImpl;
 import org.apache.isis.schema.cmd.v1.CommandDto;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
 
 public class WrapperFactoryDefaultTest_wrappedObject {
 
@@ -189,7 +187,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
                 will(returnValue(mockCommand));
 
                 allowing(mockServicesInjector).lookupServiceElseFail(CommandDtoServiceInternal.class);
-                will(returnValue(new CommandDtoServiceInternalDefault()));
+                will(returnValue(mockCommandDtoServiceInternal));
 
                 allowing(mockServicesInjector).lookupServiceElseFail(AuthenticationSessionProvider.class);
                 will(returnValue(mockAuthenticationSessionProvider));
diff --git a/core/pom.xml b/core/pom.xml
index 50acd2c..f9df9eb 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -2575,6 +2575,7 @@ ${license.additional-notes}
         <module>runtime</module>
         <module>runtime-mod-1</module>
         <module>runtime-extensions</module>
+        <module>runtime-services</module>
         <module>webserver</module>
 
         <module>security</module>
diff --git a/core/runtime-services/pom.xml b/core/runtime-services/pom.xml
new file mode 100644
index 0000000..471d8a9
--- /dev/null
+++ b/core/runtime-services/pom.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.isis.core</groupId>
+        <artifactId>isis</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>isis-core-runtime-services</artifactId>
+    <name>Apache Isis Runtime Services</name>
+    <description>Introduced to keep the 'runtime' package concise. Viewers don't have dependencies on this module.</description>
+
+    <properties>
+        <jar-plugin.automaticModuleName>org.apache.isis.core.runtime-services</jar-plugin.automaticModuleName>
+        <git-plugin.propertiesDir>org/apache/isis/core/runtime-services</git-plugin.propertiesDir>
+    </properties>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <filtering>false</filtering>
+                <includes>
+                    <include>**</include>
+                </includes>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>isis-version.properties</include>
+                </includes>
+                <filtering>true</filtering>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>false</filtering>
+            </resource>
+        </resources>
+    </build>
+
+    <dependencies>
+	
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-unittestsupport</artifactId>
+            <scope>test</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-runtime</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-runtime</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+
+    <profiles>
+        <profile>
+            <id>flatten</id>
+            <activation>
+                <property>
+                    <name>!skip.flatten</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>flatten-maven-plugin</artifactId>
+                        <version>1.0.0</version>
+                        <executions>
+                            <execution>
+                                <id>flatten</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>flatten</goal>
+                                </goals>
+                                <configuration>
+                                    <flattenMode>defaults</flattenMode>
+                                    <updatePomFile>true</updatePomFile>
+                                    <pomElements>
+                                        <name>resolve</name>
+                                        <description>resolve</description>
+                                        <dependencies>resolve</dependencies>
+                                    </pomElements>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>flatten.clean</id>
+                                <phase>clean</phase>
+                                <goals>
+                                    <goal>clean</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/InitialisationException.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/InitialisationException.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/InitialisationException.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/InitialisationException.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/RequestScopedService.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/RequestScopedService.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/RequestScopedService.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/RequestScopedService.java
diff --git a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/RuntimeServicesModule.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/RuntimeServicesModule.java
new file mode 100644
index 0000000..267eed4
--- /dev/null
+++ b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/RuntimeServicesModule.java
@@ -0,0 +1,5 @@
+package org.apache.isis.core.runtime.services;
+
+public final class RuntimeServicesModule {
+
+}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceException.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/ServiceException.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceException.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/ServiceException.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/authsess/AuthenticationSessionProviderDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/authsess/AuthenticationSessionProviderDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/authsess/AuthenticationSessionProviderDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/authsess/AuthenticationSessionProviderDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutionAbstract.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutionAbstract.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutionAbstract.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutionAbstract.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutorServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutorServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutorServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutorServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/CommandInvocationHandler.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/CommandInvocationHandler.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/CommandInvocationHandler.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/CommandInvocationHandler.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/ForkingInvocationHandler.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/ForkingInvocationHandler.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/ForkingInvocationHandler.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/background/ForkingInvocationHandler.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/bookmarks/BookmarkServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/bookmarks/BookmarkServiceInternalDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/bookmarks/BookmarkServiceInternalDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/bookmarks/BookmarkServiceInternalDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/command/CommandServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/command/CommandServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/email/EmailServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/email/EmailServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/email/EmailServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/email/EmailServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/error/EmailTicket.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/error/EmailTicket.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/error/EmailTicket.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/error/EmailTicket.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/error/SimpleTicket.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/error/SimpleTicket.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/error/SimpleTicket.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/error/SimpleTicket.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/factory/FactoryServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/factory/FactoryServiceInternalDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/factory/FactoryServiceInternalDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/factory/FactoryServiceInternalDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/homepage/HomePageProviderServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/homepage/HomePageProviderServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/homepage/HomePageProviderServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/homepage/HomePageProviderServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/Block.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/Block.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/Block.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/Block.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/ContextAndMsgId.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/ContextAndMsgId.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/ContextAndMsgId.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/ContextAndMsgId.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoAbstract.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoAbstract.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoAbstract.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoAbstract.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoDisabled.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoDisabled.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoDisabled.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoDisabled.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoWriter.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoWriter.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoWriter.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoWriter.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePoMenu.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/Util.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/Util.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/Util.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/Util.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/menubars/MenuBarsLoaderServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/menubars/bootstrap3/ServiceAndAction.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/menubars/bootstrap3/ServiceAndAction.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/menubars/bootstrap3/ServiceAndAction.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/menubars/bootstrap3/ServiceAndAction.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/message/MessageServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/message/MessageServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/message/MessageServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/message/MessageServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/ObjectAdapterServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/persistsession/ObjectAdapterServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/ObjectAdapterServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/persistsession/ObjectAdapterServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishedObjectsDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishedObjectsDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishedObjectsDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishedObjectsDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
similarity index 98%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
index 17db18e..91aabd1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
@@ -45,7 +45,7 @@ import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
 import org.apache.isis.core.metamodel.services.publishing.PublishingServiceInternal;
-import org.apache.isis.core.runtime.services.changes.ChangedObjectsServiceInternal;
+import org.apache.isis.core.runtime.system.transaction.ChangedObjectsServiceInternal;
 
 /**
  * Wrapper around {@link PublisherService}.  Is a no-op if there is no injected service.
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/repository/RepositoryServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/repository/RepositoryServiceInternalDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/repository/RepositoryServiceInternalDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/repository/RepositoryServiceInternalDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/sessmgmt/SessionManagementServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/sessmgmt/SessionManagementServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/sessmgmt/SessionManagementServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/sessmgmt/SessionManagementServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/sudo/SudoServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/sudo/SudoServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/sudo/SudoServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/sudo/SudoServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/userprof/UserProfileServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/userprof/UserProfileServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/userprof/UserProfileServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/userprof/UserProfileServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/userreg/EmailNotificationServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/userreg/EmailNotificationServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/userreg/EmailNotificationServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/userreg/EmailNotificationServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/userreg/EmailVerificationTemplate.html b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/userreg/EmailVerificationTemplate.html
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/userreg/EmailVerificationTemplate.html
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/userreg/EmailVerificationTemplate.html
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/userreg/PasswordResetTemplate.html b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/userreg/PasswordResetTemplate.html
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/userreg/PasswordResetTemplate.html
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/userreg/PasswordResetTemplate.html
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/xactn/TransactionServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/xactn/TransactionServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/xactn/TransactionServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/xactn/TransactionServiceDefault.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/xmlsnapshot/XmlSnapshotBuilder.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/xmlsnapshot/XmlSnapshotBuilder.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/xmlsnapshot/XmlSnapshotBuilder.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/xmlsnapshot/XmlSnapshotBuilder.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/xmlsnapshot/XmlSnapshotServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/xmlsnapshot/XmlSnapshotServiceDefault.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/xmlsnapshot/XmlSnapshotServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/xmlsnapshot/XmlSnapshotServiceDefault.java
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java b/core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java
similarity index 96%
rename from core/runtime/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java
rename to core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java
index 767e418..8e1f414 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java
+++ b/core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.runtime.services.changes;
 import org.junit.Test;
 
 import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
+import org.apache.isis.core.runtime.system.transaction.PreAndPostValues;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/email/EmailServiceDefaultTest_actually.java b/core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/email/EmailServiceDefaultTest_actually.java
similarity index 100%
rename from core/runtime/src/test/java/org/apache/isis/core/runtime/services/email/EmailServiceDefaultTest_actually.java
rename to core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/email/EmailServiceDefaultTest_actually.java
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/email/EmailServiceDefaultTest_notEmpty.java b/core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/email/EmailServiceDefaultTest_notEmpty.java
similarity index 100%
rename from core/runtime/src/test/java/org/apache/isis/core/runtime/services/email/EmailServiceDefaultTest_notEmpty.java
rename to core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/email/EmailServiceDefaultTest_notEmpty.java
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/i18n/po/PoReaderTest.java b/core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/i18n/po/PoReaderTest.java
similarity index 100%
rename from core/runtime/src/test/java/org/apache/isis/core/runtime/services/i18n/po/PoReaderTest.java
rename to core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/i18n/po/PoReaderTest.java
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/i18n/po/PoWriterTest_escape.java b/core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/i18n/po/PoWriterTest_escape.java
similarity index 100%
rename from core/runtime/src/test/java/org/apache/isis/core/runtime/services/i18n/po/PoWriterTest_escape.java
rename to core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/i18n/po/PoWriterTest_escape.java
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/repository/RepositoryServiceDefaultTest_allMatches.java b/core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/repository/RepositoryServiceDefaultTest_allMatches.java
similarity index 100%
rename from core/runtime/src/test/java/org/apache/isis/core/runtime/services/repository/RepositoryServiceDefaultTest_allMatches.java
rename to core/runtime-services/src/test/java/org/apache/isis/core/runtime/services/repository/RepositoryServiceDefaultTest_allMatches.java
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/AdapterAndProperty.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/AdapterAndProperty.java
similarity index 98%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/AdapterAndProperty.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/AdapterAndProperty.java
index 44d4608..41e7415 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/AdapterAndProperty.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/AdapterAndProperty.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtime.services.changes;
+package org.apache.isis.core.runtime.system.transaction;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/auditing/AuditingServiceInternal.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/AuditingServiceInternal.java
similarity index 94%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/auditing/AuditingServiceInternal.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/AuditingServiceInternal.java
index 2dea5d1..a208ab3 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/auditing/AuditingServiceInternal.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/AuditingServiceInternal.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtime.services.auditing;
+package org.apache.isis.core.runtime.system.transaction;
 
 import java.util.Map;
 import java.util.Set;
@@ -38,9 +38,6 @@ import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
 import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
-import org.apache.isis.core.runtime.services.changes.AdapterAndProperty;
-import org.apache.isis.core.runtime.services.changes.ChangedObjectsServiceInternal;
-import org.apache.isis.core.runtime.services.changes.PreAndPostValues;
 
 /**
  * Wrapper around {@link org.apache.isis.applib.services.audit.AuditerService}.
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/ChangedObjectsServiceInternal.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/ChangedObjectsServiceInternal.java
similarity index 99%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/ChangedObjectsServiceInternal.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/ChangedObjectsServiceInternal.java
index 80a3b10..8aa19ee 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/ChangedObjectsServiceInternal.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/ChangedObjectsServiceInternal.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtime.services.changes;
+package org.apache.isis.core.runtime.system.transaction;
 
 import java.util.Collections;
 import java.util.Map;
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 1031396..b635eaa 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
@@ -25,9 +25,6 @@ import java.util.concurrent.CountDownLatch;
 
 import javax.enterprise.inject.Instance;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.WithTransactionScope;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
@@ -42,7 +39,8 @@ import org.apache.isis.core.metamodel.services.publishing.PublishingServiceInter
 import org.apache.isis.core.runtime.persistence.transaction.CreateObjectCommand;
 import org.apache.isis.core.runtime.persistence.transaction.DestroyObjectCommand;
 import org.apache.isis.core.runtime.persistence.transaction.PersistenceCommand;
-import org.apache.isis.core.runtime.services.auditing.AuditingServiceInternal;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import lombok.val;
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/PreAndPostValues.java
similarity index 98%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/PreAndPostValues.java
index 2583de8..b4b98a5 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/PreAndPostValues.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtime.services.changes;
+package org.apache.isis.core.runtime.system.transaction;
 
 import java.util.Map;
 import java.util.Objects;
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
deleted file mode 100644
index 4d5819d..0000000
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.runtime.services;
-
-import org.junit.Ignore;
-import org.junit.Test;
-
-public class ServiceInstantiatorTest {
-
-    @Test @Ignore("all tests moved to core/detached-tests")
-    public void info() {
-        
-    }
-}
diff --git a/example/application/simpleapp/application/pom.xml b/example/application/simpleapp/application/pom.xml
index 0ee27b6..9343d31 100644
--- a/example/application/simpleapp/application/pom.xml
+++ b/example/application/simpleapp/application/pom.xml
@@ -107,8 +107,7 @@
             <groupId>${project.groupId}</groupId>
             <artifactId>simpleapp-module-spring</artifactId>
         </dependency>
-
-
+        
         <!-- TESTS -->
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git a/example/application/simpleapp/module-simple/pom.xml b/example/application/simpleapp/module-simple/pom.xml
index 018248c..55f1b4f 100644
--- a/example/application/simpleapp/module-simple/pom.xml
+++ b/example/application/simpleapp/module-simple/pom.xml
@@ -145,12 +145,11 @@
             <artifactId>isis-core-plugins-jdo-datanucleus-5</artifactId>
         </dependency>
         
-
     	<dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-plugins-jaxrs-resteasy-4</artifactId>
         </dependency>
-
+        
         <!-- TESTS -->
 
         <dependency>