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 2019/11/28 09:01:57 UTC

[isis] branch ISIS-2186 updated (413574c -> 922995d)

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

danhaywood pushed a change to branch ISIS-2186
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from 413574c  ISIS-2186: fixes compile issue after rebase
     new a65966a  ISIS-2186: forces maven-compiler-plugin versions and args for starter apps.
     new 922995d  ISIS-2186: general tidy up of integration tests

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../java/org/apache/isis/config/IsisPresets.java   |   3 +-
 .../main/resources/presets/Log4j2Test.properties}  |   3 +-
 core/pom.xml                                       |  10 +-
 .../FakeDataModuleAppManifestForTesting.java       |  48 -----
 .../FakeDataModuleIntegTestAbstract.java           |  44 ++--
 .../integtests/FakeDataModuleIntegTestModule.java  |  13 --
 .../java/org/apache/isis/applib/AppManifest.java   | 234 ---------------------
 starters/helloworld/pom.xml                        |  38 ----
 .../java/domainapp/application/HelloWorldApp.java  |  36 +++-
 .../application/HelloWorldAppManifest.java         |  59 ------
 .../main/java/domainapp/dom/HelloWorldModule.java  |   7 +-
 .../java/domainapp/dom/impl/HelloWorldObject.java  |  10 +-
 .../helloworld/src/main/resources/application.yml  |  11 +
 starters/helloworld/src/main/resources/banner.txt  |   6 +
 .../main/resources/config/application.properties   |  16 +-
 .../java/domainapp/dom/impl/lockdown/.gitignore    |   1 -
 .../dom/impl/lockdown/LockDownMavenDeps_Test.java  |  50 -----
 .../LockDownMavenDeps_Test.list.approved.txt       | 211 -------------------
 .../LockDownMavenDeps_Test.tree.approved.txt       | 210 ------------------
 starters/pom.xml                                   |  26 +++
 starters/simpleapp/application/pom.xml             |   1 +
 .../bdd/{specs => }/RunIntegBddSpecs.java          |   2 +-
 .../bdd/{specs => glue}/SimpleObjectsStepDef.java  |   8 +-
 .../integtests/ApplicationIntegTestAbstract.java}  |  53 ++---
 .../integtests/SpringIntegrationTest.java          |  47 -----
 .../integtests/mml/DomainModel_IntegTest.java      |   4 +-
 .../integtests/mml/MetaModelService_IntegTest.java |   4 +-
 .../integtests/smoke/Smoke_IntegTest.java          |   5 +-
 starters/simpleapp/module-simple/build.gradle      |  72 -------
 starters/simpleapp/module-simple/gradlew           | 164 ---------------
 starters/simpleapp/module-simple/gradlew.bat       |  90 --------
 starters/simpleapp/module-simple/layouts.gradle    |  49 -----
 starters/simpleapp/module-simple/liveReload.gradle |  56 -----
 .../{application => module-simple}/log4j2-test.xml |   0
 .../module-simple/logging-integtest.properties     | 120 -----------
 .../integtests/SimpleModuleIntegTestAbstract.java  |  33 ++-
 .../integtests/SimpleModuleManifestForTesting.java |  53 -----
 .../src/main/java/domainapp/webapp/SimpleApp.java  |  41 +++-
 .../java/domainapp/webapp/SimpleAppManifest.java   |  61 ------
 .../webapp/src/main/resources/application.yml      |   9 +-
 .../simpleapp/webapp/src/main/resources/banner.txt |   6 +
 .../main/resources/config/application.properties   |  12 ++
 42 files changed, 255 insertions(+), 1671 deletions(-)
 copy core/{metamodel/src/test/three.properties => config/src/main/resources/presets/Log4j2Test.properties} (96%)
 delete mode 100644 extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleAppManifestForTesting.java
 delete mode 100644 extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleIntegTestModule.java
 delete mode 100644 extensions/other/legacy/src/main/java/org/apache/isis/applib/AppManifest.java
 delete mode 100644 starters/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
 create mode 100644 starters/helloworld/src/main/resources/banner.txt
 delete mode 100644 starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/.gitignore
 delete mode 100644 starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.java
 delete mode 100644 starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.list.approved.txt
 delete mode 100644 starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.tree.approved.txt
 rename starters/simpleapp/application/src/test/java/domainapp/application/bdd/{specs => }/RunIntegBddSpecs.java (97%)
 rename starters/simpleapp/application/src/test/java/domainapp/application/bdd/{specs => glue}/SimpleObjectsStepDef.java (94%)
 rename starters/simpleapp/application/src/test/java/domainapp/{conf/SimpleAppManifestForTesting.java => application/integtests/ApplicationIntegTestAbstract.java} (59%)
 delete mode 100644 starters/simpleapp/application/src/test/java/domainapp/application/integtests/SpringIntegrationTest.java
 delete mode 100644 starters/simpleapp/module-simple/build.gradle
 delete mode 100644 starters/simpleapp/module-simple/gradlew
 delete mode 100644 starters/simpleapp/module-simple/gradlew.bat
 delete mode 100644 starters/simpleapp/module-simple/layouts.gradle
 delete mode 100644 starters/simpleapp/module-simple/liveReload.gradle
 copy starters/simpleapp/{application => module-simple}/log4j2-test.xml (100%)
 delete mode 100644 starters/simpleapp/module-simple/logging-integtest.properties
 delete mode 100644 starters/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleManifestForTesting.java
 delete mode 100644 starters/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleAppManifest.java
 create mode 100644 starters/simpleapp/webapp/src/main/resources/banner.txt


[isis] 01/02: ISIS-2186: forces maven-compiler-plugin versions and args for starter apps.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2186
in repository https://gitbox.apache.org/repos/asf/isis.git

commit a65966abc1448d5e6dd339e1dbb426a7292cd013
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Nov 28 06:56:21 2019 +0000

    ISIS-2186: forces maven-compiler-plugin versions and args for starter apps.
---
 core/pom.xml     | 10 ++++------
 starters/pom.xml | 26 ++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/core/pom.xml b/core/pom.xml
index bf9a27c..4861d95 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -47,11 +47,9 @@
 		<git-plugin.propertiesDir>org/apache/isis/core</git-plugin.propertiesDir>
 		<git-plugin.gitDir>${coreBaseDir}/../.git</git-plugin.gitDir>
 
-		<compileSource>8</compileSource>
-		<compileTarget>8</compileTarget>
-		<compiler-plugin.compilerArgument>-parameters</compiler-plugin.compilerArgument>
 		<maven.compiler.source>1.8</maven.compiler.source>
 		<maven.compiler.target>1.8</maven.compiler.target>
+		<maven.compiler.arg>-parameters</maven.compiler.arg>
 
 		<dependency.locations.enabled>false</dependency.locations.enabled>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -297,10 +295,10 @@
 					<configuration>
 						<showDeprecation>false</showDeprecation>
 						<showWarnings>false</showWarnings>
-						<source>${compileSource}</source>
-						<target>${compileTarget}</target>
+						<source>${maven.compiler.source}</source>
+						<target>${maven.compiler.target}</target>
 						<compilerArgs>
-					        <arg>${compiler-plugin.compilerArgument}</arg>
+					        <arg>${maven.compiler.arg}</arg>
 					    </compilerArgs>
 					</configuration>
 					<!-- goal:compile binds to phase:compile -->
diff --git a/starters/pom.xml b/starters/pom.xml
index 5544fa4..766e458 100644
--- a/starters/pom.xml
+++ b/starters/pom.xml
@@ -43,10 +43,36 @@ under the License.
 	<url>https://isis.apache.org</url>
 
 	<properties>
+
+        <maven.compiler.arg>-parameters</maven.compiler.arg>
+
 		<spring-boot.version>2.2.1.RELEASE</spring-boot.version>
 		<approvaltests.version>4.0.2</approvaltests.version>
 	</properties>
 
+	<build>
+		<pluginManagement>
+			<plugins>
+				<!-- Compile -->
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>${maven-compiler-plugin.version}</version>
+					<configuration>
+						<showDeprecation>false</showDeprecation>
+						<showWarnings>false</showWarnings>
+						<source>${maven.compiler.source}</source>
+						<target>${maven.compiler.target}</target>
+						<compilerArgs>
+							<arg>${maven.compiler.arg}</arg>
+						</compilerArgs>
+					</configuration>
+					<!-- goal:compile binds to phase:compile -->
+					<!-- goal:testCompile binds to phase:test-compile -->
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
 	<dependencyManagement>
 		<dependencies>
 			<dependency>


[isis] 02/02: ISIS-2186: general tidy up of integration tests

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2186
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 922995d91a0b20065780b9b3a0877c8beb0754c0
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Nov 28 09:01:32 2019 +0000

    ISIS-2186: general tidy up of integration tests
    
    * moves app manifests as static classes of IntegTestAbstract
      - done this for the spring boot app also
    * adds new IsisPresets for log4j2-test.xml
    * adds comments with suggested usage in starter app's application.yml and application.properties
    
    * makes HelloWorldModule into a @Configuration @ComponentScan
    * reorganises simpleapp's BDD classes
    * removes liveReload gradle stuff from simpleapp (we can use devtools eventually for this)
    
    Also:
    * removes lockdown test from helloworld
    * reinstates commented-out code from helloworld
    * adds banner.txt for helloworld and simpleapp
---
 .../java/org/apache/isis/config/IsisPresets.java   |   3 +-
 .../main/resources/presets/Log4j2Test.properties   |  18 ++
 .../FakeDataModuleAppManifestForTesting.java       |  48 -----
 .../FakeDataModuleIntegTestAbstract.java           |  44 ++--
 .../integtests/FakeDataModuleIntegTestModule.java  |  13 --
 .../java/org/apache/isis/applib/AppManifest.java   | 234 ---------------------
 starters/helloworld/pom.xml                        |  38 ----
 .../java/domainapp/application/HelloWorldApp.java  |  36 +++-
 .../application/HelloWorldAppManifest.java         |  59 ------
 .../main/java/domainapp/dom/HelloWorldModule.java  |   7 +-
 .../java/domainapp/dom/impl/HelloWorldObject.java  |  10 +-
 .../helloworld/src/main/resources/application.yml  |  11 +
 starters/helloworld/src/main/resources/banner.txt  |   6 +
 .../main/resources/config/application.properties   |  16 +-
 .../java/domainapp/dom/impl/lockdown/.gitignore    |   1 -
 .../dom/impl/lockdown/LockDownMavenDeps_Test.java  |  50 -----
 .../LockDownMavenDeps_Test.list.approved.txt       | 211 -------------------
 .../LockDownMavenDeps_Test.tree.approved.txt       | 210 ------------------
 starters/simpleapp/application/pom.xml             |   1 +
 .../bdd/{specs => }/RunIntegBddSpecs.java          |   2 +-
 .../bdd/{specs => glue}/SimpleObjectsStepDef.java  |   8 +-
 .../integtests/ApplicationIntegTestAbstract.java}  |  53 ++---
 .../integtests/SpringIntegrationTest.java          |  47 -----
 .../integtests/mml/DomainModel_IntegTest.java      |   4 +-
 .../integtests/mml/MetaModelService_IntegTest.java |   4 +-
 .../integtests/smoke/Smoke_IntegTest.java          |   5 +-
 starters/simpleapp/module-simple/build.gradle      |  72 -------
 starters/simpleapp/module-simple/gradlew           | 164 ---------------
 starters/simpleapp/module-simple/gradlew.bat       |  90 --------
 starters/simpleapp/module-simple/layouts.gradle    |  49 -----
 starters/simpleapp/module-simple/liveReload.gradle |  56 -----
 starters/simpleapp/module-simple/log4j2-test.xml   |  60 ++++++
 .../module-simple/logging-integtest.properties     | 120 -----------
 .../integtests/SimpleModuleIntegTestAbstract.java  |  33 ++-
 .../integtests/SimpleModuleManifestForTesting.java |  53 -----
 .../src/main/java/domainapp/webapp/SimpleApp.java  |  41 +++-
 .../java/domainapp/webapp/SimpleAppManifest.java   |  61 ------
 .../webapp/src/main/resources/application.yml      |   9 +-
 .../simpleapp/webapp/src/main/resources/banner.txt |   6 +
 .../main/resources/config/application.properties   |  12 ++
 40 files changed, 301 insertions(+), 1664 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/config/IsisPresets.java b/core/config/src/main/java/org/apache/isis/config/IsisPresets.java
index e592896..6612229 100644
--- a/core/config/src/main/java/org/apache/isis/config/IsisPresets.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisPresets.java
@@ -28,8 +28,9 @@ public final class IsisPresets  {
 
     public static final String NoTranslations = "classpath:/presets/NoTranslations.properties";
     
+    public static final String Log4j2Test = "classpath:/presets/Log4j2Test.properties";
     public static final String H2InMemory = "classpath:/presets/H2InMemory.properties";
-    
+
     /** randomized (unique) database name, eg. to allow for concurrent testing */
     public static final String H2InMemory_withUniqueSchema = "classpath:/presets/H2InMemory_withUniqueSchema.properties";
     
diff --git a/core/config/src/main/resources/presets/Log4j2Test.properties b/core/config/src/main/resources/presets/Log4j2Test.properties
new file mode 100644
index 0000000..df0c635
--- /dev/null
+++ b/core/config/src/main/resources/presets/Log4j2Test.properties
@@ -0,0 +1,18 @@
+#  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.
+
+logging.config=log4j2-test.xml
\ No newline at end of file
diff --git a/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleAppManifestForTesting.java b/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleAppManifestForTesting.java
deleted file mode 100644
index 02a1584..0000000
--- a/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleAppManifestForTesting.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.isisaddons.module.fakedata.integtests;
-
-
-import org.apache.isis.config.IsisPresets;
-import org.apache.isis.extensions.fixtures.IsisExtFixturesModule;
-import org.apache.isis.jdo.IsisBootDataNucleus;
-import org.apache.isis.runtime.spring.IsisBoot;
-import org.apache.isis.security.bypass.IsisBootSecurityBypass;
-import org.springframework.context.annotation.*;
-
-/**
- * Makes the integral parts of the 'simple app' web application.
- */
-@Configuration
-@PropertySources({
-        @PropertySource(IsisPresets.H2InMemory),
-        @PropertySource(IsisPresets.NoTranslations),
-        @PropertySource(IsisPresets.DataNucleusAutoCreate),
-})
-@Import({
-        IsisBoot.class,
-        IsisBootSecurityBypass.class,
-        IsisBootDataNucleus.class,
-        IsisExtFixturesModule.class,
-
-        FakeDataModuleIntegTestModule.class
-})
-public class FakeDataModuleAppManifestForTesting {
-
-}
diff --git a/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleIntegTestAbstract.java b/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleIntegTestAbstract.java
index aa16bae..4a6b22e 100644
--- a/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleIntegTestAbstract.java
+++ b/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleIntegTestAbstract.java
@@ -1,28 +1,42 @@
 package org.isisaddons.module.fakedata.integtests;
 
 
-import javax.inject.Inject;
-
-import org.apache.isis.applib.services.factory.FactoryService;
-import org.apache.isis.applib.services.metamodel.MetaModelService;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.applib.services.sessmgmt.SessionManagementService;
-import org.apache.isis.applib.services.user.UserService;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.config.IsisPresets;
+import org.apache.isis.extensions.fixtures.IsisExtFixturesModule;
 import org.apache.isis.extensions.fixtures.IsisIntegrationTestAbstractWithFixtures;
+import org.apache.isis.jdo.IsisBootDataNucleus;
+import org.apache.isis.runtime.spring.IsisBoot;
+import org.apache.isis.security.bypass.IsisBootSecurityBypass;
+import org.isisaddons.module.fakedata.fixture.FakeDataFixturesModule;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.transaction.annotation.Transactional;
 
-@SpringBootTest(
-        classes = FakeDataModuleAppManifestForTesting.class,
-        properties = {
-                "logging.config=log4j2-test.xml",
-        })
+@SpringBootTest(classes = FakeDataModuleIntegTestAbstract.AppManifest.class)
 @ContextConfiguration
 @Transactional
 public abstract class FakeDataModuleIntegTestAbstract extends IsisIntegrationTestAbstractWithFixtures {
 
+        @Configuration
+        @PropertySources({
+                @PropertySource(IsisPresets.Log4j2Test),
+                @PropertySource(IsisPresets.H2InMemory_withUniqueSchema),
+                @PropertySource(IsisPresets.NoTranslations),
+                @PropertySource(IsisPresets.DataNucleusAutoCreate),
+        })
+        @Import({
+                IsisBoot.class,
+                IsisBootSecurityBypass.class,
+                IsisBootDataNucleus.class,
+                IsisExtFixturesModule.class,
+
+                FakeDataFixturesModule.class
+        })
+        public static class AppManifest {
+        }
+
 }
diff --git a/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleIntegTestModule.java b/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleIntegTestModule.java
deleted file mode 100644
index aa5b22c..0000000
--- a/extensions/lib/fakedata/integtests/src/test/java/org/isisaddons/module/fakedata/integtests/FakeDataModuleIntegTestModule.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.isisaddons.module.fakedata.integtests;
-
-import org.isisaddons.module.fakedata.fixture.FakeDataFixturesModule;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-@Configuration
-@Import({
-        FakeDataFixturesModule.class
-})
-@ComponentScan
-public class FakeDataModuleIntegTestModule {}
diff --git a/extensions/other/legacy/src/main/java/org/apache/isis/applib/AppManifest.java b/extensions/other/legacy/src/main/java/org/apache/isis/applib/AppManifest.java
deleted file mode 100644
index f93d0c8..0000000
--- a/extensions/other/legacy/src/main/java/org/apache/isis/applib/AppManifest.java
+++ /dev/null
@@ -1,234 +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.applib;
-
-import javax.jdo.annotations.PersistenceCapable;
-
-/**
- * TODO[2112] keep or remove?
- *  
- * Programmatic specification of the constituent parts of an application, most specifically the modules that contain
- * domain services and possibly entities.
- *
- * <p>
- * The modules are specified as classes; the framework uses the packages of these classes as the locations on the
- * classpath to search for domain services (annotated with {@link org.apache.isis.applib.annotation.DomainService})
- * and entities (annotated with {@link PersistenceCapable}).
- * </p>
- *
- * <p>
- * The interface also allows certain other aspects of the runtime to be specified:
- * <ul>
- *     <li>which authentication and/or authorization mechanism to be used (useful to disable security when developing/demoing)</li>
- *     <li>which fixtures to run by default</li>
- *     <li>overriding of arbitrary other configuration properties</li>
- *     <li>which modules to load (useful when developing, to reduce startup times; just load the modules required)</li>
- * </ul>
- * </p>
- *
- * <p>
- * To use, implement this interface and then define as the <tt>isis.appManifest</tt> key within the
- * <tt>isis.properties</tt> configuration file, or specify programmatically when running integration tests.
- * </p>
- *
- * <p>
- * By convention the class implementing this interface reside in a <tt>xxx-home</tt> Maven module.  This
- * can be referenced by both the <tt>xxx-integtests</tt> (Maven) module and the <tt>xxx-webapp</tt> (Maven) module,
- * allowing configuration to be centralized.
- * </p>
- *
- * <p>
- * There are a number of subsidiary goals (not yet implemented):
- * <ul>
- *    <li>
- *        <p>Allow different integration tests to run with different manifests.  Normally the running application is
- *           shared (on a thread-local) between integration tests.  What the framework could do is to be intelligent
- *           enough to keep track of the manifest in use for each integration test and tear down
- *           the shared state if the "next" test uses a different manifest</p>
- *    </li>
- *    <li>
- *        Speed up bootstrapping by only scanning for classes annotated by
- *        {@link org.apache.isis.applib.annotation.DomainService} and {@link javax.jdo.annotations.PersistenceCapable}
- *        once.
- *    </li>
- *    <li>
- *        Provide a programmatic way to contribute elements of `web.xml`.
- *    </li>
- *    <li>
- *        Provide a programmatic way to configure Shiro security.
- *    </li>
- *    <li>
- *        <p>Anticipate the module changes forthcoming in Java 9.  Eventually we see that the AppManifest class acting
- *        as an "aggregator", with the list of modules will become Java 9 modules each advertising the types that they
- *        export.  It might even be possible for AppManifests to be switched on and off dynamically (eg if Java9 is
- *        compatible with OSGi, being one of the design goals).</p>
- *    </li>
- * </ul>
- * </p>
- */
-public interface AppManifest {
-
-//    /**
-//     * A list of classes, each of which representing the root of one of the modules containing services and possibly
-//     * entities, which together makes up the running application.
-//     *
-//     * <p>
-//     *     The package of each such class is used as the basis for searching for domain services and registered
-//     *     entities.  As such it replaces and overrides both the
-//     *     <tt>isis.services.ServicesInstallerFromAnnotation.packagePrefix</tt> key (usually found in the
-//     *     <tt>isis.properties</tt> file) and the
-//     *     <tt>isis.persistor.datanucleus.RegisterEntities.packagePrefix</tt> key (usually found in the
-//     *     <tt>persistor_datanucleus.properties</tt> file).  The value of the <tt>isis.services-installer</tt>
-//     *     configuration property is also ignored.
-//     * </p>
-//     */
-//    public List<Class<?>> getModules();
-//
-//    /**
-//     * If non-null, overrides the value of <tt>isis.services</tt> configuration property to specify a list of
-//     * additional classes to be instantiated as domain services (over and above the {@link DomainService}-annotated
-//     * services defined via {@link #getModules()}.
-//     *
-//     * <p>
-//     *     Normally we recommend services are defined exclusively through {@link #getModules()}, and that this method
-//     *     should therefore return an empty list.  However, this method exists to support those use cases where either the
-//     *     service required does not have a {@link DomainService} annotation, or where it does have the annotation
-//     *     but its containing module cannot (for whatever reason) be listed under {@link #getModules()}.
-//     * </p>
-//     */
-//    public List<Class<?>> getAdditionalServices();
-//
-//    /**
-//     * If non-null, overrides the value of <tt>isis.authentication</tt> configuration property to specify the
-//     * authentication mechanism.
-//     *
-//     * <p>
-//     *     Ignored for integration tests (which always uses the 'bypass' mechanism).
-//     * </p>
-//     */
-//    public String getAuthenticationMechanism();
-//
-//    /**
-//     * If non-null, overrides the value of <tt>isis.authorization</tt> configuration property.
-//     *
-//     * <p>
-//     *     Ignored for integration tests (which always uses the 'bypass' mechanism).
-//     * </p>
-//     */
-//    public String getAuthorizationMechanism();
-//
-//    /**
-//     * If non-null, overrides the value of <tt>isis.fixtures</tt> configuration property.
-//     */
-//    public List<Class<? extends FixtureScript>> getFixtures();
-//
-//    /**
-//     * Overrides for any other configuration properties.
-//     */
-//    public Map<String,String> getConfigurationProperties();
-
-//    /**
-//     * Holds the set of domain services, persistent entities and fixture scripts.services
-//     */
-//    public final static class Registry {
-//
-//        public static Registry current() {
-//            return _Context.computeIfAbsent(Registry.class, Registry::new);
-//        }
-//
-//        @Getter @Setter private Set<Class<?>> persistenceCapableTypes;
-//        @Getter @Setter private Set<Class<?>> mixinTypes;
-//        @Getter @Setter private Set<Class<? extends FixtureScript>> fixtureScriptTypes;
-//        @Getter @Setter private Set<Class<?>> domainServiceTypes;
-//        @Getter @Setter private Set<Class<?>> domainObjectTypes;
-//        @Getter @Setter private Set<Class<?>> viewModelTypes;
-//        @Getter @Setter private Set<Class<?>> xmlElementTypes;
-//    }
-    
-    // -- CONFIG
-
-//    public static class Presets {
-//
-//        public static final String ISIS_PERSISTOR                   = "isis.persistor.";
-//        public static final String ISIS_PERSISTOR_DATANUCLEUS       = ISIS_PERSISTOR + "datanucleus.";
-//        public static final String ISIS_PERSISTOR_DATANUCLEUS_IMPL  = ISIS_PERSISTOR_DATANUCLEUS + "impl.";
-//
-//        public static Map<String,String> withH2InMemoryProperties(final Map<String, String> map) {
-//            //map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionURL", "jdbc:h2:mem:test-" + UUID.randomUUID().toString());
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionURL", "jdbc:h2:mem:test");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionUserName", "sa");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionPassword", "");
-//            
-//            return map;
-//        }
-//
-//        public static Map<String,String> withHsqlDbInMemoryProperties(final Map<String, String> map) {
-//            //map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionURL", "jdbc:hsqldb:mem:test-" + UUID.randomUUID().toString());
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionURL", "jdbc:hsqldb:mem:test");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionDriverName", "org.hsqldb.jdbcDriver");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionUserName", "sa");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "javax.jdo.option.ConnectionPassword", "");
-//            
-//            return map;
-//        }
-//
-//        public static Map<String,String> withDataNucleusProperties(final Map<String, String> map) {
-//
-//            // Don't do validations that consume setup time.
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "datanucleus.schema.autoCreateAll", "true");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "datanucleus.schema.validateAll", "false");
-//
-//            // other properties as per WEB-INF/persistor_datanucleus.properties
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "datanucleus.persistenceByReachabilityAtCommit", "false");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "datanucleus.identifier.case", "MixedCase");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "datanucleus.cache.level2.type"  ,"none");
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS_IMPL + "datanucleus.cache.level2.mode", "ENABLE_SELECTIVE");
-//
-//            return map;
-//        }
-//
-//        public static Map<String,String> withIsisIntegTestProperties(final Map<String, String> map) {
-//
-//            // automatically install any fixtures that might have been registered
-//            map.put(ISIS_PERSISTOR_DATANUCLEUS + "install-fixtures", "true");
-//            map.put(ISIS_PERSISTOR + "enforceSafeSemantics", "false");
-//            map.put("isis.services.eventbus.allowLateRegistration", "true");
-//
-//            return map;
-//        }
-//
-//        public enum MemDb {
-//            HSQLDB{
-//                @Override public void withProperties(final Map<String, String> map) {
-//                    withHsqlDbInMemoryProperties(map);
-//                }
-//            },
-//            H2{
-//                @Override public void withProperties(final Map<String, String> map) {
-//                    withH2InMemoryProperties(map);
-//                }
-//            };
-//
-//            public abstract void withProperties(final Map<String, String> map);
-//        }
-//    }
-
-}
diff --git a/starters/helloworld/pom.xml b/starters/helloworld/pom.xml
index f59d15b..fdf33eb 100644
--- a/starters/helloworld/pom.xml
+++ b/starters/helloworld/pom.xml
@@ -101,44 +101,6 @@
 		</profile>
 
 		<profile>
-			<id>lockdown</id>
-			<activation>
-				<property>
-					<name>lockdown</name>
-				</property>
-			</activation>
-			<build>
-				<plugins>
-					<plugin>
-						<artifactId>maven-dependency-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>list</id>
-								<phase>generate-test-resources</phase>
-								<goals>
-									<goal>list</goal>
-								</goals>
-								<configuration>
-									<outputFile>${project.build.directory}/test-classes/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.list.actual.txt</outputFile>
-								</configuration>
-							</execution>
-							<execution>
-								<id>tree</id>
-								<phase>generate-test-resources</phase>
-								<goals>
-									<goal>tree</goal>
-								</goals>
-								<configuration>
-									<outputFile>${project.build.directory}/test-classes/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.tree.actual.txt</outputFile>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-
-		<profile>
 			<id>docker</id>
 			<activation>
 				<property>
diff --git a/starters/helloworld/src/main/java/domainapp/application/HelloWorldApp.java b/starters/helloworld/src/main/java/domainapp/application/HelloWorldApp.java
index c04a181..5b0d1fe 100644
--- a/starters/helloworld/src/main/java/domainapp/application/HelloWorldApp.java
+++ b/starters/helloworld/src/main/java/domainapp/application/HelloWorldApp.java
@@ -18,26 +18,44 @@
  */
 package domainapp.application;
 
+import domainapp.dom.HelloWorldModule;
+
+import org.apache.isis.config.IsisPresets;
+import org.apache.isis.jdo.IsisBootDataNucleus;
+import org.apache.isis.runtime.spring.IsisBoot;
+import org.apache.isis.security.shiro.IsisBootSecurityShiro;
+import org.apache.isis.viewer.restfulobjects.IsisBootViewerRestfulObjects;
+import org.apache.isis.viewer.wicket.viewer.IsisBootViewerWicket;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.*;
 
-/**
- * Bootstrap the application.
- */
 @SpringBootApplication
 @Import({
-    HelloWorldAppManifest.class,
+    HelloWorldApp.AppManifest.class,
 })
-@ServletComponentScan()
 public class HelloWorldApp extends SpringBootServletInitializer {
 
+    @Configuration
+    @PropertySources({
+            @PropertySource(IsisPresets.NoTranslations),
+            @PropertySource(IsisPresets.DataNucleusAutoCreate),
+    })
+    @Import({
+            IsisBoot.class,
+            IsisBootSecurityShiro.class,
+            IsisBootDataNucleus.class,
+            IsisBootViewerRestfulObjects.class,
+            IsisBootViewerWicket.class,
+            HelloWorldModule.class
+    })
+    public static class AppManifest {
+    }
+
     /**
-     * 
-     * @param args
-     * @implNote this is to support the <em>Spring Boot Maven Plugin</em>, which auto-detects an 
+     * @implNote this is to support the <em>Spring Boot Maven Plugin</em>, which auto-detects an
      * entry point by searching for classes having a {@code main(...)}
      */
     public static void main(String[] args) {
diff --git a/starters/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java b/starters/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
deleted file mode 100644
index 168fe1b..0000000
--- a/starters/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
+++ /dev/null
@@ -1,59 +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 domainapp.application;
-
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
-
-import org.apache.isis.config.IsisPresets;
-import org.apache.isis.jdo.IsisBootDataNucleus;
-import org.apache.isis.runtime.spring.IsisBoot;
-import org.apache.isis.security.shiro.IsisBootSecurityShiro;
-import org.apache.isis.viewer.restfulobjects.IsisBootViewerRestfulObjects;
-import org.apache.isis.viewer.wicket.viewer.IsisBootViewerWicket;
-
-import domainapp.dom.HelloWorldModule;
-
-/**
- * Makes the integral parts of the 'hello world' web application.
- */
-@Configuration
-@PropertySources({
-    @PropertySource(IsisPresets.H2InMemory),
-    @PropertySource(IsisPresets.NoTranslations),
-    @PropertySource(IsisPresets.DataNucleusAutoCreate),
-})
-@Import({
-    IsisBoot.class,
-    IsisBootSecurityShiro.class,
-//    IsisBootSecurityKeycloak.class,
-    IsisBootDataNucleus.class,
-    IsisBootViewerRestfulObjects.class,
-    IsisBootViewerWicket.class
-})
-@ComponentScan(
-        basePackageClasses= {
-                HelloWorldModule.class
-        })
-public class HelloWorldAppManifest {
-
-}
diff --git a/starters/helloworld/src/main/java/domainapp/dom/HelloWorldModule.java b/starters/helloworld/src/main/java/domainapp/dom/HelloWorldModule.java
index fcf95bd..1443506 100644
--- a/starters/helloworld/src/main/java/domainapp/dom/HelloWorldModule.java
+++ b/starters/helloworld/src/main/java/domainapp/dom/HelloWorldModule.java
@@ -18,6 +18,11 @@
  */
 package domainapp.dom;
 
-public final class HelloWorldModule {
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ComponentScan
+public class HelloWorldModule {
 
 }
diff --git a/starters/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java b/starters/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
index 29a6dd5..786041d 100644
--- a/starters/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
+++ b/starters/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
@@ -79,11 +79,11 @@ public class HelloWorldObject implements Comparable<HelloWorldObject> {
         this.notes = notes;
     }
 
-//    @Action(
-//            semantics = SemanticsOf.IDEMPOTENT,
-//            command = CommandReification.ENABLED, publishing = Publishing.ENABLED,
-//            associateWith = "name"
-//            )
+    @Action(
+            semantics = SemanticsOf.IDEMPOTENT,
+            command = CommandReification.ENABLED, publishing = Publishing.ENABLED,
+            associateWith = "name"
+    )
     public HelloWorldObject updateName(
             @Name final String name) {
         setName(name);
diff --git a/starters/helloworld/src/main/resources/application.yml b/starters/helloworld/src/main/resources/application.yml
index 62315ff..de91a4d 100644
--- a/starters/helloworld/src/main/resources/application.yml
+++ b/starters/helloworld/src/main/resources/application.yml
@@ -1,10 +1,18 @@
+#
+# Recommend use for static configuration that does not change between environments.
+#
+# See also config/application.properties
+#
 isis:
   reflector:
+    explicit-annotations:
+      action: true
     validator:
       allowDeprecated: false
       noParamsOnly: true
       explicitObjectType: true
       serviceActionsOnly: true
+
       mixinsOnly: true
 
     facet:
@@ -67,3 +75,6 @@ isis:
             level2:
               type: none
               mode: ENABLE_SELECTIVE
+spring:
+  banner:
+    location: banner.txt
diff --git a/starters/helloworld/src/main/resources/banner.txt b/starters/helloworld/src/main/resources/banner.txt
new file mode 100644
index 0000000..3f593d9
--- /dev/null
+++ b/starters/helloworld/src/main/resources/banner.txt
@@ -0,0 +1,6 @@
+  ,---.                           ,--.                ,--.         ,--.
+ /  O  \   ,---.   ,--,--.  ,---. |  ,---.   ,---.    |  |  ,---.  `--'  ,---.
+|  .-.  | | .-. | ' ,-.  | | .--' |  .-.  | | .-. :   |  | (  .-'  ,--. (  .-'
+|  | |  | | '-' ' \ '-'  | \ `--. |  | |  | \   --.   |  | .-'  `) |  | .-'  `)
+`--' `--' |  |-'   `--`--'  `---' `--' `--'  `----'   `--' `----'  `--' `----'
+          `--'
diff --git a/starters/helloworld/src/main/resources/config/application.properties b/starters/helloworld/src/main/resources/config/application.properties
index f39e40e..cb0aeef 100644
--- a/starters/helloworld/src/main/resources/config/application.properties
+++ b/starters/helloworld/src/main/resources/config/application.properties
@@ -1,10 +1,12 @@
-
 #
-# moved from application.properties for demo purposes only
-# renamed to kebab-case, but the old camelCase is also recognised and supported.
+# Recommend use for configuration that changes between environments.
 #
-# to test, try commenting out the @Action annotation on HelloWorld#updateName(...)
-# with this property set to either false or true.
+# To override externally, see Spring Boot docs
+# https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
 #
-
-isis.reflector.explicit-annotations.action=true
+# See also /application.yml
+#
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL = jdbc:h2:mem:test
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName = org.h2.Driver
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName = sa
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword =
diff --git a/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/.gitignore b/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/.gitignore
deleted file mode 100644
index e66bc56..0000000
--- a/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.received.txt
\ No newline at end of file
diff --git a/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.java b/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.java
deleted file mode 100644
index 3ae0318..0000000
--- a/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package domainapp.dom.impl.lockdown;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Arrays;
-
-import org.approvaltests.Approvals;
-import org.approvaltests.reporters.DiffReporter;
-import org.approvaltests.reporters.UseReporter;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.base.Charsets;
-import com.google.common.io.Resources;
-
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assume.assumeThat;
-
-public class LockDownMavenDeps_Test {
-
-    @Before
-    public void setUp() throws Exception {
-        assumeThat(System.getProperty("lockdown"), is(not(nullValue())));
-    }
-
-    @UseReporter(DiffReporter.class)
-    @Test
-    public void list() throws Exception {
-        Approvals.verify(sort(read("list")));
-    }
-
-    @UseReporter(DiffReporter.class)
-    @Test
-    public void tree() throws Exception {
-        Approvals.verify(read("tree"));
-    }
-
-    private String read(final String goal) throws IOException {
-        final URL resource = Resources.getResource(getClass(),
-                String.format("%s.%s.actual.txt", getClass().getSimpleName(), goal));
-        return Resources.toString(resource, Charsets.UTF_8);
-    }
-
-    private static String sort(final String unsorted) {
-        final String[] lines = unsorted.split("[\r\n]+");
-        Arrays.sort(lines);
-        return String.join("\n", lines);
-    }
-
-}
diff --git a/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.list.approved.txt b/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.list.approved.txt
deleted file mode 100644
index 3e25f09..0000000
--- a/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.list.approved.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-
-   args4j:args4j:jar:2.0.26:compile
-   cglib:cglib-nodep:jar:3.2.12:compile
-   cglib:cglib:jar:3.2.8:test
-   com.approvaltests:approvaltests-util:jar:4.0.2:test
-   com.approvaltests:approvaltests:jar:4.0.2:test
-   com.fasterxml.jackson.core:jackson-annotations:jar:2.10.0:compile
-   com.fasterxml.jackson.core:jackson-core:jar:2.10.0:compile
-   com.fasterxml.jackson.core:jackson-databind:jar:2.10.0:compile
-   com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.10.0:compile
-   com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.10.0:compile
-   com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.10.0:compile
-   com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.10.0:compile
-   com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.10.0:compile
-   com.fasterxml:classmate:jar:1.5.0:compile
-   com.github.openjson:openjson:jar:1.0.10:compile
-   com.google.code.findbugs:annotations:jar:2.0.1:compile
-   com.google.code.findbugs:jsr305:jar:3.0.2:compile
-   com.google.code.gson:gson:jar:2.8.6:compile
-   com.google.errorprone:error_prone_annotations:jar:2.3.2:compile
-   com.google.guava:failureaccess:jar:1.0.1:compile
-   com.google.guava:guava:jar:28.1-jre:compile
-   com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:compile
-   com.google.j2objc:j2objc-annotations:jar:1.3:compile
-   com.google.javascript:closure-compiler-externs:jar:v20190325:compile
-   com.google.javascript:closure-compiler-unshaded:jar:v20190325:compile
-   com.google.jsinterop:jsinterop-annotations:jar:1.0.0:compile
-   com.h2database:h2:jar:1.4.199:compile
-   com.jayway.jsonpath:json-path:jar:2.4.0:test
-   com.sun.mail:javax.mail:jar:1.6.0:compile
-   com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
-   commons-beanutils:commons-beanutils:jar:1.9.3:compile
-   commons-codec:commons-codec:jar:1.13:compile
-   commons-collections:commons-collections:jar:3.2.2:compile
-   commons-fileupload:commons-fileupload:jar:1.4:compile
-   commons-io:commons-io:jar:2.6:compile
-   commons-logging:commons-logging:jar:1.2:compile
-   de.agilecoders.wicket.webjars:wicket-webjars:jar:2.0.15:compile
-   de.agilecoders.wicket:jquery-selectors:jar:2.0.7:compile
-   de.agilecoders.wicket:wicket-bootstrap-core:jar:2.0.11:compile
-   de.agilecoders.wicket:wicket-bootstrap-extensions:jar:2.0.11:compile
-   de.agilecoders.wicket:wicket-bootstrap-themes:jar:2.0.11:compile
-   io.swagger:swagger-annotations:jar:1.5.21:compile
-   io.swagger:swagger-core:jar:1.5.21:compile
-   io.swagger:swagger-models:jar:1.5.21:compile
-   jakarta.activation:jakarta.activation-api:jar:1.2.1:compile
-   jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile
-   jakarta.validation:jakarta.validation-api:jar:2.0.1:compile
-   jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.2:compile
-   javax.activation:activation:jar:1.1:compile
-   javax.inject:javax.inject:jar:1:compile
-   javax.json.bind:javax.json.bind-api:jar:1.0:compile
-   javax.transaction:transaction-api:jar:1.1:compile
-   javax:javaee-api:jar:8.0:compile
-   joda-time:joda-time:jar:2.10.4:compile
-   junit:junit:jar:4.12:test
-   net.bytebuddy:byte-buddy:jar:1.10.1:compile
-   net.ftlines.wicket-source:wicket-source:jar:7.0.0:compile
-   net.jcip:jcip-annotations:jar:1.0:compile
-   net.minidev:accessors-smart:jar:1.2:test
-   net.minidev:json-smart:jar:2.3:test
-   org.apache-extras.beanshell:bsh:jar:2.0b6:test
-   org.apache.commons:commons-collections4:jar:4.3:compile
-   org.apache.commons:commons-email:jar:1.4:compile
-   org.apache.commons:commons-lang3:jar:3.9:compile
-   org.apache.httpcomponents:httpclient:jar:4.5.10:compile
-   org.apache.httpcomponents:httpcore:jar:4.4.12:compile
-   org.apache.isis.core:isis-applib:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-codegen-bytebuddy:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-commons:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-config:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-integtestsupport:jar:2.0.0-M3-SNAPSHOT:test
-   org.apache.isis.core:isis-metamodel:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-persistence-jdo-common:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-persistence-jdo-datanucleus5:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-runtime-extensions:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-runtime-services:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-runtime-web:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-runtime:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-schema:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-security-bypass:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-security-keycloak:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-security-shiro:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-security:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-unittestsupport:jar:2.0.0-M3-SNAPSHOT:test
-   org.apache.isis.core:isis-viewer-restfulobjects-applib:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-viewer-restfulobjects-jaxrsresteasy4:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-viewer-restfulobjects-rendering:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-viewer-restfulobjects-server:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-viewer-wicket-impl:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-viewer-wicket-model:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.core:isis-viewer-wicket-ui:jar:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:2.0.0-M3-SNAPSHOT:compile
-   org.apache.isis.mavendeps:isis-mavendeps-testing:pom:2.0.0-M3-SNAPSHOT:test
-   org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:2.0.0-M3-SNAPSHOT:compile
-   org.apache.logging.log4j:log4j-api:jar:2.12.1:compile
-   org.apache.logging.log4j:log4j-core:jar:2.12.1:compile
-   org.apache.logging.log4j:log4j-jul:jar:2.12.1:compile
-   org.apache.logging.log4j:log4j-slf4j-impl:jar:2.12.1:compile
-   org.apache.shiro:shiro-cache:jar:1.4.1:compile
-   org.apache.shiro:shiro-config-core:jar:1.4.1:compile
-   org.apache.shiro:shiro-config-ogdl:jar:1.4.1:compile
-   org.apache.shiro:shiro-core:jar:1.4.1:compile
-   org.apache.shiro:shiro-crypto-cipher:jar:1.4.1:compile
-   org.apache.shiro:shiro-crypto-core:jar:1.4.1:compile
-   org.apache.shiro:shiro-crypto-hash:jar:1.4.1:compile
-   org.apache.shiro:shiro-event:jar:1.4.1:compile
-   org.apache.shiro:shiro-lang:jar:1.4.1:compile
-   org.apache.shiro:shiro-web:jar:1.4.1:compile
-   org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.27:compile
-   org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.27:compile
-   org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.27:compile
-   org.apache.wicket:wicket-auth-roles:jar:8.6.1:compile
-   org.apache.wicket:wicket-core:jar:8.6.1:compile
-   org.apache.wicket:wicket-devutils:jar:8.6.1:compile
-   org.apache.wicket:wicket-extensions:jar:8.6.1:compile
-   org.apache.wicket:wicket-ioc:jar:8.6.1:compile
-   org.apache.wicket:wicket-request:jar:8.6.1:compile
-   org.apache.wicket:wicket-spring:jar:8.6.1:compile
-   org.apache.wicket:wicket-util:jar:8.6.1:compile
-   org.apache.wicket:wicket:pom:8.6.1:compile
-   org.apiguardian:apiguardian-api:jar:1.1.0:test
-   org.assertj:assertj-core:jar:3.13.2:test
-   org.checkerframework:checker-qual:jar:2.8.1:compile
-   org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
-   org.codehaus.jackson:jackson-jaxrs:jar:1.9.13:compile
-   org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
-   org.codehaus.jackson:jackson-xc:jar:1.9.13:compile
-   org.codehaus.mojo:animal-sniffer-annotations:jar:1.18:compile
-   org.danekja:jdk-serializable-functional:jar:1.8.5:compile
-   org.datanucleus:datanucleus-api-jdo:jar:5.2.2:compile
-   org.datanucleus:datanucleus-core:jar:5.2.2:compile
-   org.datanucleus:datanucleus-jdo-query:jar:5.0.9:compile
-   org.datanucleus:datanucleus-jodatime:jar:5.2.0-release:compile
-   org.datanucleus:datanucleus-rdbms:jar:5.2.1:compile
-   org.datanucleus:javax.jdo:jar:3.2.0-m12:compile
-   org.hamcrest:hamcrest-core:jar:2.1:test
-   org.hamcrest:hamcrest-library:jar:2.1:test
-   org.hamcrest:hamcrest:jar:2.1:compile
-   org.hibernate.validator:hibernate-validator:jar:6.0.17.Final:compile
-   org.hsqldb:hsqldb:jar:2.5.0:test
-   org.jboss.logging:jboss-logging:jar:3.4.1.Final:compile
-   org.jboss.resteasy:resteasy-jackson-provider:jar:4.0.0.Beta5:compile
-   org.jboss.resteasy:resteasy-jaxb-provider:jar:4.0.0.Beta5:compile
-   org.jboss.resteasy:resteasy-jaxrs-services:jar:4.0.0.Beta5:compile
-   org.jboss.resteasy:resteasy-jaxrs:jar:4.0.0.Beta5:compile
-   org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final:compile
-   org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec:jar:1.0.1.Final:compile
-   org.jboss.spec.javax.xml.bind:jboss-jaxb-api_2.3_spec:jar:1.0.0.Final:compile
-   org.jmock:jmock-imposters:jar:2.11.0:test
-   org.jmock:jmock-junit4:jar:2.11.0:test
-   org.jmock:jmock-legacy:jar:2.11.0:test
-   org.jmock:jmock-testjar:jar:2.11.0:test
-   org.jmock:jmock:jar:2.11.0:test
-   org.junit.jupiter:junit-jupiter-api:jar:5.5.2:test
-   org.junit.jupiter:junit-jupiter-engine:jar:5.5.2:test
-   org.junit.jupiter:junit-jupiter-params:jar:5.5.2:test
-   org.junit.jupiter:junit-jupiter:jar:5.5.2:test
-   org.junit.platform:junit-platform-commons:jar:1.5.2:test
-   org.junit.platform:junit-platform-engine:jar:1.5.2:test
-   org.junit.vintage:junit-vintage-engine:jar:5.5.2:test
-   org.mockito:mockito-core:jar:3.1.0:test
-   org.mockito:mockito-junit-jupiter:jar:3.1.0:test
-   org.objenesis:objenesis:jar:2.2:compile
-   org.opentest4j:opentest4j:jar:1.2.0:test
-   org.ow2.asm:asm-analysis:jar:7.1:compile
-   org.ow2.asm:asm-tree:jar:7.1:compile
-   org.ow2.asm:asm-util:jar:7.1:compile
-   org.picocontainer:picocontainer:jar:2.15:test
-   org.projectlombok:lombok:jar:1.18.10:compile
-   org.reactivestreams:reactive-streams:jar:1.0.3:compile
-   org.skyscreamer:jsonassert:jar:1.5.0:test
-   org.slf4j:jul-to-slf4j:jar:1.7.28:compile
-   org.slf4j:slf4j-api:jar:1.7.28:compile
-   org.springframework.boot:spring-boot-actuator-autoconfigure:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-actuator:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-autoconfigure:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-starter-json:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-starter-log4j2:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-starter-test:jar:2.2.0.RELEASE:test
-   org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-starter-validation:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-starter-web:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-starter:jar:2.2.0.RELEASE:compile
-   org.springframework.boot:spring-boot-test-autoconfigure:jar:2.2.0.RELEASE:test
-   org.springframework.boot:spring-boot-test:jar:2.2.0.RELEASE:test
-   org.springframework.boot:spring-boot:jar:2.2.0.RELEASE:compile
-   org.springframework:spring-aop:jar:5.2.1.RELEASE:compile
-   org.springframework:spring-beans:jar:5.2.1.RELEASE:compile
-   org.springframework:spring-context:jar:5.2.1.RELEASE:compile
-   org.springframework:spring-core:jar:5.2.1.RELEASE:compile
-   org.springframework:spring-expression:jar:5.2.1.RELEASE:compile
-   org.springframework:spring-jcl:jar:5.2.1.RELEASE:compile
-   org.springframework:spring-test:jar:5.2.1.RELEASE:test
-   org.springframework:spring-tx:jar:5.2.1.RELEASE:compile
-   org.springframework:spring-web:jar:5.2.1.RELEASE:compile
-   org.springframework:spring-webmvc:jar:5.2.1.RELEASE:compile
-   org.webjars.bower:momentjs:jar:2.24.0:compile
-   org.webjars.bower:summernote:jar:0.8.11:compile
-   org.webjars:Eonasdan-bootstrap-datetimepicker:jar:4.17.37-1:compile
-   org.webjars:animate.css:jar:3.5.2:compile
-   org.webjars:bootstrap:jar:3.4.0:compile
-   org.webjars:font-awesome:jar:4.7.0:compile
-   org.webjars:jquery-ui:jar:1.12.1:compile
-   org.webjars:jquery:jar:1.11.1:compile
-   org.webjars:modernizr:jar:2.8.3-1:compile
-   org.webjars:select2:jar:4.0.10:compile
-   org.wicketstuff:wicketstuff-select2:jar:8.6.0:compile
-   org.xmlunit:xmlunit-core:jar:2.6.3:test
-   org.yaml:snakeyaml:jar:1.25:runtime
-The following files have been resolved:
diff --git a/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.tree.approved.txt b/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.tree.approved.txt
deleted file mode 100644
index f6fac71..0000000
--- a/starters/helloworld/src/test/java/domainapp/dom/impl/lockdown/LockDownMavenDeps_Test.tree.approved.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-org.apache.isis.examples.apps:helloworld:jar:2.0.0-M3-SNAPSHOT
-+- org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:2.0.0-M3-SNAPSHOT:compile
-|  +- org.springframework.boot:spring-boot-starter-web:jar:2.2.0.RELEASE:compile
-|  |  +- org.springframework.boot:spring-boot-starter:jar:2.2.0.RELEASE:compile
-|  |  |  +- jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile
-|  |  |  \- org.yaml:snakeyaml:jar:1.25:runtime
-|  |  +- org.springframework.boot:spring-boot-starter-json:jar:2.2.0.RELEASE:compile
-|  |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.10.0:compile
-|  |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.10.0:compile
-|  |  +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.0.RELEASE:compile
-|  |  |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.27:compile
-|  |  |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.27:compile
-|  |  |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.27:compile
-|  |  +- org.springframework.boot:spring-boot-starter-validation:jar:2.2.0.RELEASE:compile
-|  |  |  +- jakarta.validation:jakarta.validation-api:jar:2.0.1:compile
-|  |  |  \- org.hibernate.validator:hibernate-validator:jar:6.0.17.Final:compile
-|  |  |     +- org.jboss.logging:jboss-logging:jar:3.4.1.Final:compile
-|  |  |     \- com.fasterxml:classmate:jar:1.5.0:compile
-|  |  +- org.springframework:spring-web:jar:5.2.1.RELEASE:compile
-|  |  \- org.springframework:spring-webmvc:jar:5.2.1.RELEASE:compile
-|  +- org.apache.isis.core:isis-applib:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  \- org.apache.isis.core:isis-commons:jar:2.0.0-M3-SNAPSHOT:compile
-|  |     +- javax:javaee-api:jar:8.0:compile
-|  |     |  \- com.sun.mail:javax.mail:jar:1.6.0:compile
-|  |     |     \- javax.activation:activation:jar:1.1:compile
-|  |     +- com.google.code.findbugs:annotations:jar:2.0.1:compile
-|  |     +- org.projectlombok:lombok:jar:1.18.10:compile
-|  |     +- org.springframework:spring-tx:jar:5.2.1.RELEASE:compile
-|  |     \- org.springframework.boot:spring-boot-starter-log4j2:jar:2.2.0.RELEASE:compile
-|  |        +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.12.1:compile
-|  |        |  \- org.apache.logging.log4j:log4j-api:jar:2.12.1:compile
-|  |        +- org.apache.logging.log4j:log4j-core:jar:2.12.1:compile
-|  |        +- org.apache.logging.log4j:log4j-jul:jar:2.12.1:compile
-|  |        \- org.slf4j:jul-to-slf4j:jar:1.7.28:compile
-|  +- org.apache.isis.core:isis-schema:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  \- joda-time:joda-time:jar:2.10.4:compile
-|  +- org.apache.isis.core:isis-codegen-bytebuddy:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  +- net.bytebuddy:byte-buddy:jar:1.10.1:compile
-|  |  \- org.objenesis:objenesis:jar:2.2:compile
-|  +- org.apache.isis.core:isis-viewer-wicket-impl:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  +- org.apache.isis.core:isis-viewer-wicket-ui:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  |  +- org.apache.isis.core:isis-viewer-wicket-model:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  |  +- org.apache.wicket:wicket-core:jar:8.6.1:compile
-|  |  |  |  +- com.github.openjson:openjson:jar:1.0.10:compile
-|  |  |  |  +- org.apache.wicket:wicket-request:jar:8.6.1:compile
-|  |  |  |  +- org.apache.wicket:wicket-util:jar:8.6.1:compile
-|  |  |  |  |  +- commons-fileupload:commons-fileupload:jar:1.4:compile
-|  |  |  |  |  \- org.apache.commons:commons-collections4:jar:4.3:compile
-|  |  |  |  \- org.danekja:jdk-serializable-functional:jar:1.8.5:compile
-|  |  |  +- org.apache.wicket:wicket-devutils:jar:8.6.1:compile
-|  |  |  +- org.apache.wicket:wicket-extensions:jar:8.6.1:compile
-|  |  |  +- org.wicketstuff:wicketstuff-select2:jar:8.6.0:compile
-|  |  |  +- org.webjars:select2:jar:4.0.10:compile
-|  |  |  |  \- org.webjars:jquery:jar:1.11.1:compile
-|  |  |  +- org.webjars:jquery-ui:jar:1.12.1:compile
-|  |  |  +- de.agilecoders.wicket.webjars:wicket-webjars:jar:2.0.15:compile
-|  |  |  +- de.agilecoders.wicket:wicket-bootstrap-extensions:jar:2.0.11:compile
-|  |  |  |  +- org.webjars:Eonasdan-bootstrap-datetimepicker:jar:4.17.37-1:compile
-|  |  |  |  +- org.webjars.bower:momentjs:jar:2.24.0:compile
-|  |  |  |  +- org.webjars:font-awesome:jar:4.7.0:compile
-|  |  |  |  +- com.google.javascript:closure-compiler-unshaded:jar:v20190325:compile
-|  |  |  |  |  +- com.google.javascript:closure-compiler-externs:jar:v20190325:compile
-|  |  |  |  |  +- args4j:args4j:jar:2.0.26:compile
-|  |  |  |  |  +- com.google.code.gson:gson:jar:2.8.6:compile
-|  |  |  |  |  \- com.google.jsinterop:jsinterop-annotations:jar:1.0.0:compile
-|  |  |  |  \- org.webjars:animate.css:jar:3.5.2:compile
-|  |  |  +- org.webjars.bower:summernote:jar:0.8.11:compile
-|  |  |  \- de.agilecoders.wicket:wicket-bootstrap-themes:jar:2.0.11:compile
-|  |  +- org.apache.wicket:wicket-spring:jar:8.6.1:compile
-|  |  |  \- org.apache.wicket:wicket-ioc:jar:8.6.1:compile
-|  |  |     +- cglib:cglib-nodep:jar:3.2.12:compile
-|  |  |     +- javax.inject:javax.inject:jar:1:compile
-|  |  |     \- org.ow2.asm:asm-util:jar:7.1:compile
-|  |  |        +- org.ow2.asm:asm-tree:jar:7.1:compile
-|  |  |        \- org.ow2.asm:asm-analysis:jar:7.1:compile
-|  |  +- org.apache.wicket:wicket-auth-roles:jar:8.6.1:compile
-|  |  +- de.agilecoders.wicket:wicket-bootstrap-core:jar:2.0.11:compile
-|  |  |  +- de.agilecoders.wicket:jquery-selectors:jar:2.0.7:compile
-|  |  |  +- org.webjars:bootstrap:jar:3.4.0:compile
-|  |  |  +- org.webjars:modernizr:jar:2.8.3-1:compile
-|  |  |  \- org.apache.commons:commons-lang3:jar:3.9:compile
-|  |  +- net.ftlines.wicket-source:wicket-source:jar:7.0.0:compile
-|  |  |  \- org.apache.wicket:wicket:pom:8.6.1:compile
-|  |  \- commons-io:commons-io:jar:2.6:compile
-|  +- org.apache.isis.core:isis-viewer-restfulobjects-server:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  +- org.apache.isis.core:isis-runtime-web:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  +- org.apache.isis.core:isis-viewer-restfulobjects-rendering:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  |  +- org.apache.isis.core:isis-metamodel:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  |  |  \- io.swagger:swagger-core:jar:1.5.21:compile
-|  |  |  |     +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.10.0:compile
-|  |  |  |     \- io.swagger:swagger-models:jar:1.5.21:compile
-|  |  |  |        \- io.swagger:swagger-annotations:jar:1.5.21:compile
-|  |  |  \- org.apache.isis.core:isis-viewer-restfulobjects-applib:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.10.0:compile
-|  |     +- jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.2:compile
-|  |     \- jakarta.activation:jakarta.activation-api:jar:1.2.1:compile
-|  +- org.apache.isis.core:isis-viewer-restfulobjects-jaxrsresteasy4:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  +- org.jboss.resteasy:resteasy-jackson-provider:jar:4.0.0.Beta5:compile
-|  |  |  +- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
-|  |  |  +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
-|  |  |  +- org.codehaus.jackson:jackson-jaxrs:jar:1.9.13:compile
-|  |  |  \- org.codehaus.jackson:jackson-xc:jar:1.9.13:compile
-|  |  +- org.jboss.resteasy:resteasy-jaxb-provider:jar:4.0.0.Beta5:compile
-|  |  |  \- org.jboss.spec.javax.xml.bind:jboss-jaxb-api_2.3_spec:jar:1.0.0.Final:compile
-|  |  +- org.jboss.resteasy:resteasy-jaxrs:jar:4.0.0.Beta5:compile
-|  |  |  +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec:jar:1.0.1.Final:compile
-|  |  |  +- org.jboss.resteasy:resteasy-jaxrs-services:jar:4.0.0.Beta5:compile
-|  |  |  +- org.reactivestreams:reactive-streams:jar:1.0.3:compile
-|  |  |  +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final:compile
-|  |  |  +- org.apache.httpcomponents:httpclient:jar:4.5.10:compile
-|  |  |  |  +- org.apache.httpcomponents:httpcore:jar:4.4.12:compile
-|  |  |  |  \- commons-codec:commons-codec:jar:1.13:compile
-|  |  |  +- net.jcip:jcip-annotations:jar:1.0:compile
-|  |  |  \- javax.json.bind:javax.json.bind-api:jar:1.0:compile
-|  |  +- commons-logging:commons-logging:jar:1.2:compile
-|  |  +- com.fasterxml.jackson.core:jackson-core:jar:2.10.0:compile
-|  |  \- com.fasterxml.jackson.core:jackson-annotations:jar:2.10.0:compile
-|  +- org.apache.isis.core:isis-security:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  \- org.apache.isis.core:isis-config:jar:2.0.0-M3-SNAPSHOT:compile
-|  +- org.apache.isis.core:isis-security-bypass:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  \- org.apache.isis.core:isis-runtime-services:jar:2.0.0-M3-SNAPSHOT:compile
-|  +- org.apache.isis.core:isis-security-shiro:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  +- org.apache.shiro:shiro-core:jar:1.4.1:compile
-|  |  |  +- org.apache.shiro:shiro-lang:jar:1.4.1:compile
-|  |  |  +- org.apache.shiro:shiro-cache:jar:1.4.1:compile
-|  |  |  +- org.apache.shiro:shiro-crypto-hash:jar:1.4.1:compile
-|  |  |  |  \- org.apache.shiro:shiro-crypto-core:jar:1.4.1:compile
-|  |  |  +- org.apache.shiro:shiro-crypto-cipher:jar:1.4.1:compile
-|  |  |  +- org.apache.shiro:shiro-config-core:jar:1.4.1:compile
-|  |  |  +- org.apache.shiro:shiro-config-ogdl:jar:1.4.1:compile
-|  |  |  |  \- commons-beanutils:commons-beanutils:jar:1.9.3:compile
-|  |  |  |     \- commons-collections:commons-collections:jar:3.2.2:compile
-|  |  |  \- org.apache.shiro:shiro-event:jar:1.4.1:compile
-|  |  \- org.apache.shiro:shiro-web:jar:1.4.1:compile
-|  +- org.apache.isis.core:isis-security-keycloak:jar:2.0.0-M3-SNAPSHOT:compile
-|  +- org.apache.isis.core:isis-persistence-jdo-datanucleus5:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  +- org.datanucleus:javax.jdo:jar:3.2.0-m12:compile
-|  |  |  \- javax.transaction:transaction-api:jar:1.1:compile
-|  |  +- org.datanucleus:datanucleus-core:jar:5.2.2:compile
-|  |  +- org.datanucleus:datanucleus-api-jdo:jar:5.2.2:compile
-|  |  +- org.datanucleus:datanucleus-jdo-query:jar:5.0.9:compile
-|  |  +- org.datanucleus:datanucleus-rdbms:jar:5.2.1:compile
-|  |  +- org.datanucleus:datanucleus-jodatime:jar:5.2.0-release:compile
-|  |  +- org.apache.isis.core:isis-runtime:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  |  \- org.apache.commons:commons-email:jar:1.4:compile
-|  |  +- org.apache.isis.core:isis-runtime-extensions:jar:2.0.0-M3-SNAPSHOT:compile
-|  |  \- org.apache.isis.core:isis-persistence-jdo-common:jar:2.0.0-M3-SNAPSHOT:compile
-|  \- com.google.guava:guava:jar:28.1-jre:compile
-|     +- com.google.guava:failureaccess:jar:1.0.1:compile
-|     +- com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:compile
-|     +- com.google.code.findbugs:jsr305:jar:3.0.2:compile
-|     +- org.checkerframework:checker-qual:jar:2.8.1:compile
-|     +- com.google.errorprone:error_prone_annotations:jar:2.3.2:compile
-|     +- com.google.j2objc:j2objc-annotations:jar:1.3:compile
-|     \- org.codehaus.mojo:animal-sniffer-annotations:jar:1.18:compile
-+- org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:2.0.0-M3-SNAPSHOT:compile
-+- com.h2database:h2:jar:1.4.199:compile
-+- org.apache.isis.mavendeps:isis-mavendeps-testing:pom:2.0.0-M3-SNAPSHOT:test
-|  +- org.apache.isis.core:isis-unittestsupport:jar:2.0.0-M3-SNAPSHOT:test
-|  |  +- org.junit.jupiter:junit-jupiter-api:jar:5.5.2:test
-|  |  |  +- org.apiguardian:apiguardian-api:jar:1.1.0:test
-|  |  |  +- org.opentest4j:opentest4j:jar:1.2.0:test
-|  |  |  \- org.junit.platform:junit-platform-commons:jar:1.5.2:test
-|  |  +- org.junit.jupiter:junit-jupiter-engine:jar:5.5.2:test
-|  |  |  \- org.junit.platform:junit-platform-engine:jar:1.5.2:test
-|  |  +- org.junit.vintage:junit-vintage-engine:jar:5.5.2:test
-|  |  |  \- junit:junit:jar:4.12:test
-|  |  +- org.mockito:mockito-core:jar:3.1.0:test
-|  |  +- org.slf4j:slf4j-api:jar:1.7.28:compile
-|  |  +- org.springframework.boot:spring-boot-starter-test:jar:2.2.0.RELEASE:test
-|  |  |  +- org.springframework.boot:spring-boot-test:jar:2.2.0.RELEASE:test
-|  |  |  +- org.springframework.boot:spring-boot-test-autoconfigure:jar:2.2.0.RELEASE:test
-|  |  |  +- com.jayway.jsonpath:json-path:jar:2.4.0:test
-|  |  |  |  \- net.minidev:json-smart:jar:2.3:test
-|  |  |  |     \- net.minidev:accessors-smart:jar:1.2:test
-|  |  |  +- org.junit.jupiter:junit-jupiter:jar:5.5.2:test
-|  |  |  |  \- org.junit.jupiter:junit-jupiter-params:jar:5.5.2:test
-|  |  |  +- org.mockito:mockito-junit-jupiter:jar:3.1.0:test
-|  |  |  +- org.hamcrest:hamcrest:jar:2.1:compile
-|  |  |  +- org.skyscreamer:jsonassert:jar:1.5.0:test
-|  |  |  |  \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
-|  |  |  \- org.xmlunit:xmlunit-core:jar:2.6.3:test
-|  |  +- org.springframework:spring-test:jar:5.2.1.RELEASE:test
-|  |  +- org.jmock:jmock:jar:2.11.0:test
-|  |  |  +- org.jmock:jmock-testjar:jar:2.11.0:test
-|  |  |  \- org.apache-extras.beanshell:bsh:jar:2.0b6:test
-|  |  \- org.jmock:jmock-junit4:jar:2.11.0:test
-|  |     +- org.jmock:jmock-legacy:jar:2.11.0:test
-|  |     |  \- cglib:cglib:jar:3.2.8:test
-|  |     \- org.jmock:jmock-imposters:jar:2.11.0:test
-|  +- org.apache.isis.core:isis-integtestsupport:jar:2.0.0-M3-SNAPSHOT:test
-|  +- org.hamcrest:hamcrest-library:jar:2.1:test
-|  |  \- org.hamcrest:hamcrest-core:jar:2.1:test
-|  +- org.assertj:assertj-core:jar:3.13.2:test
-|  +- com.approvaltests:approvaltests:jar:4.0.2:test
-|  |  \- com.approvaltests:approvaltests-util:jar:4.0.2:test
-|  +- org.picocontainer:picocontainer:jar:2.15:test
-|  \- org.hsqldb:hsqldb:jar:2.5.0:test
-\- org.springframework.boot:spring-boot-actuator-autoconfigure:jar:2.2.0.RELEASE:compile
-   +- org.springframework.boot:spring-boot-actuator:jar:2.2.0.RELEASE:compile
-   |  \- org.springframework.boot:spring-boot:jar:2.2.0.RELEASE:compile
-   +- org.springframework.boot:spring-boot-autoconfigure:jar:2.2.0.RELEASE:compile
-   +- com.fasterxml.jackson.core:jackson-databind:jar:2.10.0:compile
-   +- org.springframework:spring-core:jar:5.2.1.RELEASE:compile
-   |  \- org.springframework:spring-jcl:jar:5.2.1.RELEASE:compile
-   +- org.springframework:spring-context:jar:5.2.1.RELEASE:compile
-   |  +- org.springframework:spring-aop:jar:5.2.1.RELEASE:compile
-   |  +- org.springframework:spring-beans:jar:5.2.1.RELEASE:compile
-   |  \- org.springframework:spring-expression:jar:5.2.1.RELEASE:compile
-   \- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.10.0:compile
diff --git a/starters/simpleapp/application/pom.xml b/starters/simpleapp/application/pom.xml
index 5795d00..0cf979c 100644
--- a/starters/simpleapp/application/pom.xml
+++ b/starters/simpleapp/application/pom.xml
@@ -40,6 +40,7 @@
     <build>
         <testResources>
             <testResource>
+                <filtering>false</filtering>
                 <directory>src/test/java</directory>
             </testResource>
         </testResources>
diff --git a/starters/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java b/starters/simpleapp/application/src/test/java/domainapp/application/bdd/RunIntegBddSpecs.java
similarity index 97%
rename from starters/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java
rename to starters/simpleapp/application/src/test/java/domainapp/application/bdd/RunIntegBddSpecs.java
index e575f7d..a50b050 100644
--- a/starters/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java
+++ b/starters/simpleapp/application/src/test/java/domainapp/application/bdd/RunIntegBddSpecs.java
@@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package domainapp.application.bdd.specs;
+package domainapp.application.bdd;
 
 import io.cucumber.junit.Cucumber;
 import io.cucumber.junit.CucumberOptions;
diff --git a/starters/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectsStepDef.java b/starters/simpleapp/application/src/test/java/domainapp/application/bdd/glue/SimpleObjectsStepDef.java
similarity index 94%
rename from starters/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectsStepDef.java
rename to starters/simpleapp/application/src/test/java/domainapp/application/bdd/glue/SimpleObjectsStepDef.java
index 0d9147b..70efd86 100644
--- a/starters/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectsStepDef.java
+++ b/starters/simpleapp/application/src/test/java/domainapp/application/bdd/glue/SimpleObjectsStepDef.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package domainapp.application.bdd.specs;
+package domainapp.application.bdd.glue;
 
 import java.util.List;
 import java.util.UUID;
@@ -33,7 +33,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
 import domainapp.application.fixture.scenarios.DomainAppDemo;
-import domainapp.application.integtests.SpringIntegrationTest;
+import domainapp.application.integtests.ApplicationIntegTestAbstract;
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.dom.impl.SimpleObjects;
 import domainapp.modules.simple.fixture.SimpleObject_persona;
@@ -43,9 +43,7 @@ import io.cucumber.java.en.Given;
 import io.cucumber.java.en.When;
 import lombok.val;
 
-@Ignore("not a JUnit test")
-public class SimpleObjectsStepDef extends SpringIntegrationTest {
-
+public class SimpleObjectsStepDef extends ApplicationIntegTestAbstract {
 
     @Given("^there are.* (\\d+) simple objects$")
     public void there_are_N_simple_objects(int n) throws Throwable {
diff --git a/starters/simpleapp/application/src/test/java/domainapp/conf/SimpleAppManifestForTesting.java b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/ApplicationIntegTestAbstract.java
similarity index 59%
rename from starters/simpleapp/application/src/test/java/domainapp/conf/SimpleAppManifestForTesting.java
rename to starters/simpleapp/application/src/test/java/domainapp/application/integtests/ApplicationIntegTestAbstract.java
index ee57a1a..b059ff0 100644
--- a/starters/simpleapp/application/src/test/java/domainapp/conf/SimpleAppManifestForTesting.java
+++ b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/ApplicationIntegTestAbstract.java
@@ -16,37 +16,42 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package domainapp.conf;
+package domainapp.application.integtests;
 
-import org.apache.isis.extensions.fixtures.IsisExtFixturesModule;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
+import domainapp.application.ApplicationModule;
 
 import org.apache.isis.config.IsisPresets;
+import org.apache.isis.extensions.fixtures.IsisExtFixturesModule;
+import org.apache.isis.integtestsupport.IsisIntegrationTestAbstract;
 import org.apache.isis.jdo.IsisBootDataNucleus;
 import org.apache.isis.runtime.spring.IsisBoot;
 import org.apache.isis.security.bypass.IsisBootSecurityBypass;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
+import org.springframework.test.context.ContextConfiguration;
 
-import domainapp.application.ApplicationModule;
+@SpringBootTest(classes = ApplicationIntegTestAbstract.AppManifest.class)
+@ContextConfiguration
+public abstract class ApplicationIntegTestAbstract extends IsisIntegrationTestAbstract {
 
-/**
- * Makes the integral parts of the 'simple app' web application.
- */
-@Configuration
-@PropertySources({
-    @PropertySource(IsisPresets.H2InMemory),
-    @PropertySource(IsisPresets.NoTranslations),
-    @PropertySource(IsisPresets.DataNucleusAutoCreate),
-})
-@Import({
-    IsisBoot.class,
-    IsisBootDataNucleus.class,
-    IsisBootSecurityBypass.class,
-    IsisExtFixturesModule.class,
-    ApplicationModule.class
-})
-public class SimpleAppManifestForTesting {
+    @Configuration
+    @PropertySources({
+            @PropertySource(IsisPresets.Log4j2Test),
+            @PropertySource(IsisPresets.H2InMemory_withUniqueSchema),
+            @PropertySource(IsisPresets.NoTranslations),
+            @PropertySource(IsisPresets.DataNucleusAutoCreate),
+    })
+    @Import({
+            IsisBoot.class,
+            IsisBootDataNucleus.class,
+            IsisBootSecurityBypass.class,
+            IsisExtFixturesModule.class,
+            ApplicationModule.class
+    })
+    public static class AppManifest {
+    }
 
 }
diff --git a/starters/simpleapp/application/src/test/java/domainapp/application/integtests/SpringIntegrationTest.java b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/SpringIntegrationTest.java
deleted file mode 100644
index 8aad1bf..0000000
--- a/starters/simpleapp/application/src/test/java/domainapp/application/integtests/SpringIntegrationTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package domainapp.application.integtests;
-
-import javax.inject.Inject;
-
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ContextConfiguration;
-
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-
-import domainapp.conf.SimpleAppManifestForTesting;
-
-@SpringBootTest(
-        classes = SimpleAppManifestForTesting.class,
-        properties = {
-                "logging.config=log4j2-test.xml",
-        })
-@ContextConfiguration
-public abstract class SpringIntegrationTest {
-
-    @Inject protected WrapperFactory wrapperFactory;
-
-    /**
-     * Convenience method, simply delegates to {@link WrapperFactory#wrap(Object)}
-     */
-    protected <T> T wrap(final T obj) {
-        return wrapperFactory.wrap(obj);
-    }
-
-}
diff --git a/starters/simpleapp/application/src/test/java/domainapp/application/integtests/mml/DomainModel_IntegTest.java b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/mml/DomainModel_IntegTest.java
index de35332..04c1dfa 100644
--- a/starters/simpleapp/application/src/test/java/domainapp/application/integtests/mml/DomainModel_IntegTest.java
+++ b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/mml/DomainModel_IntegTest.java
@@ -26,9 +26,9 @@ import org.junit.jupiter.api.Test;
 import org.apache.isis.integtestsupport.validate.ValidateDomainModel;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
 
-import domainapp.application.integtests.SpringIntegrationTest;
+import domainapp.application.integtests.ApplicationIntegTestAbstract;
 
-class DomainModel_IntegTest extends SpringIntegrationTest {
+class DomainModel_IntegTest extends ApplicationIntegTestAbstract {
     
     @Inject protected SpecificationLoader specificationLoader;
 
diff --git a/starters/simpleapp/application/src/test/java/domainapp/application/integtests/mml/MetaModelService_IntegTest.java b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/mml/MetaModelService_IntegTest.java
index bf607ef..4fc7d4d 100644
--- a/starters/simpleapp/application/src/test/java/domainapp/application/integtests/mml/MetaModelService_IntegTest.java
+++ b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/mml/MetaModelService_IntegTest.java
@@ -41,9 +41,9 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.junit.Assume.assumeThat;
 
-import domainapp.application.integtests.SpringIntegrationTest;
+import domainapp.application.integtests.ApplicationIntegTestAbstract;
 
-class MetaModelService_IntegTest extends SpringIntegrationTest {
+class MetaModelService_IntegTest extends ApplicationIntegTestAbstract {
 
     @Inject MetaModelService metaModelService;
     @Inject JaxbService jaxbService;
diff --git a/starters/simpleapp/application/src/test/java/domainapp/application/integtests/smoke/Smoke_IntegTest.java b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/smoke/Smoke_IntegTest.java
index 91e8b51..559c36c 100644
--- a/starters/simpleapp/application/src/test/java/domainapp/application/integtests/smoke/Smoke_IntegTest.java
+++ b/starters/simpleapp/application/src/test/java/domainapp/application/integtests/smoke/Smoke_IntegTest.java
@@ -25,17 +25,16 @@ import javax.inject.Inject;
 import org.junit.jupiter.api.Test;
 import org.springframework.transaction.annotation.Transactional;
 
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.applib.services.xactn.TransactionService;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import domainapp.application.integtests.SpringIntegrationTest;
+import domainapp.application.integtests.ApplicationIntegTestAbstract;
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.dom.impl.SimpleObjects;
 
 @Transactional
-class Smoke_IntegTest extends SpringIntegrationTest {
+class Smoke_IntegTest extends ApplicationIntegTestAbstract {
 
     @Inject SimpleObjects menu;
     @Inject TransactionService transactionService;
diff --git a/starters/simpleapp/module-simple/build.gradle b/starters/simpleapp/module-simple/build.gradle
deleted file mode 100644
index 6bfc911..0000000
--- a/starters/simpleapp/module-simple/build.gradle
+++ /dev/null
@@ -1,72 +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.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// this gradle script compiles and enhances the dom classes.
-//
-// The script is intended to be used in conjunction with IntelliJ IDEA, to remove the necessity to run the DataNucleus
-// enhancer immediately before running the app, and therefore reduce the turn-around time.  The script is run as
-// in the background as a daemon while editing/developing; whenever a change is made to any source code, gradle will
-// automatically compile *and* enhance the code.
-//
-// To use, just type:
-//
-//      gradle -t --offline &
-//
-// It is also necessary to disable the IntelliJ's automatic building of the 'dom' project.  This is done using:
-//
-//      File > Settings > Build, Execution, Deployment > Compiler > Excludes
-//
-// and then exclude the .../dom/src/main/java directory
-//
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-defaultTasks 'compileJava', 'copyClasses'
-
-apply plugin: 'java'
-apply plugin: 'tangram.tools'
-
-sourceCompatibility = 1.8
-targetCompatibility = 1.8
-version = (new XmlParser()).parse('pom.xml').parent.version.text()
-
-buildscript {
-  repositories {
-    maven { url "http://oss.jfrog.org/artifactory/oss-snapshot-local" }
-    jcenter()
-  }
-  dependencies {
-    classpath 'tangram:gradle-plugin:1.1.2'
-  }
-}
-repositories {
-    mavenLocal()
-    maven { url "http://oss.jfrog.org/artifactory/oss-snapshot-local" }
-    jcenter()
-}
-dependencies {
-    compile group: 'org.apache.isis.core', name: 'isis-core-applib', version: '1.14.0-SNAPSHOT'
-}
-task copyClasses << {
-    copy {
-        from 'build/classes/main'
-        into 'target/classes'
-    }
-}
diff --git a/starters/simpleapp/module-simple/gradlew b/starters/simpleapp/module-simple/gradlew
deleted file mode 100644
index 27309d9..0000000
--- a/starters/simpleapp/module-simple/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
-    echo "$*"
-}
-
-die ( ) {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/starters/simpleapp/module-simple/gradlew.bat b/starters/simpleapp/module-simple/gradlew.bat
deleted file mode 100644
index 832fdb6..0000000
--- a/starters/simpleapp/module-simple/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/starters/simpleapp/module-simple/layouts.gradle b/starters/simpleapp/module-simple/layouts.gradle
deleted file mode 100644
index f5fa30d..0000000
--- a/starters/simpleapp/module-simple/layouts.gradle
+++ /dev/null
@@ -1,49 +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.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// This gradle script copies over .layout.xml files from src to target directory.
-//
-// This script is intended to be used while the app is running (in prototype mode), reducing the turn-around time
-// when updating the layout.
-//
-// The framework will automatically notice any changes to .layout.xml files, but these are read from the classpath
-// (under target/classes), not the source path.  Using IntelliJ (say) these can be copied over manually by invoking
-// Run > Reload Changed Classes, and then refreshing the browser.
-//
-// This script instead is intended to be run in the background as a daemon; whenever a change
-// is made to any .layout.xml file, gradle will automatically copy over the file to the target directory.
-//
-// The script is run using:
-//
-//      gradle -t -b layouts.gradle --offline &
-//
-// To reduce turn-around time further, also use the liveReload.gradle script (to automatically refresh the browser).
-//
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-defaultTasks 'copyLayouts'
-
-task copyLayouts(type:Copy) {
-    from 'src/main/java'
-    into 'target/classes'
-    include '**/*.layout.xml'
-}
-
diff --git a/starters/simpleapp/module-simple/liveReload.gradle b/starters/simpleapp/module-simple/liveReload.gradle
deleted file mode 100644
index adb0ab1..0000000
--- a/starters/simpleapp/module-simple/liveReload.gradle
+++ /dev/null
@@ -1,56 +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.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// This gradle script sets up livereload, configured so that any updates to the dom module's classpath will
-// trigger the browser to reload the page.  In particular, this relates to the .layout.xml files which define the
-// grid layout of domain objects.
-//
-// As a prerequisite, the app needs to configured to load the livereload.js script.  This can be done by adding the
-// following configuration property (to viewer_wicket.properties, isis.properties or the AppManifest, as you prefer):
-//
-//    isis.viewer.wicket.liveReloadUrl=http://localhost:35729/livereload.js?snipver=1
-//
-// This gradle script is run using:
-//
-//      gradle -t -b livereload.gradle --offline &
-//
-// To reduce turn-around time further, also use the layouts.gradle script (to automatically copy over the layout.xml
-// files to the classpath).
-//
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-defaultTasks 'liveReload'
-
-buildscript {
-    repositories {
-        jcenter()
-    }
-    dependencies {
-        classpath 'org.kordamp.gradle:livereload-gradle-plugin:0.2.1'
-    }
-}
-
-apply plugin: 'org.kordamp.gradle.livereload'
-
-liveReload {
-    docRoot new File('target/classes').canonicalPath
-}
-
diff --git a/starters/simpleapp/module-simple/log4j2-test.xml b/starters/simpleapp/module-simple/log4j2-test.xml
new file mode 100644
index 0000000..56e8ad6
--- /dev/null
+++ b/starters/simpleapp/module-simple/log4j2-test.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN">
+	<Properties>
+		<Property name="PID">????</Property>
+		<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
+		<Property name="LOG_LEVEL_PATTERN">%5p</Property>
+		<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
+		<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
+		<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
+	</Properties>
+	<Appenders>
+		<Console name="Console" target="SYSTEM_OUT" follow="true">
+			<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
+		</Console>
+	</Appenders>
+	<Loggers>
+		<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
+		<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
+		<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
+		<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
+		<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
+		<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
+		<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
+		<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
+		
+		<logger name="org.apache.directory" level="warn"/>
+		<logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
+		
+		<logger name="DataNucleus.Persistence" level="info"/>
+		<logger name="DataNucleus.Transaction" level="info"/>
+		<logger name="DataNucleus.Datastore.Schema" level="info"/>
+		<logger name="DataNucleus.Datastore.Native" level="info"/>
+		
+		<Root level="info">
+			<AppenderRef ref="Console" />
+		</Root>
+	</Loggers>
+</Configuration>
+
+<!-- # DataNucleus Logging Categories -->
+<!-- DataNucleus.Persistence - All messages relating to the persistence process -->
+<!-- DataNucleus.Transaction - All messages relating to transactions -->
+<!-- DataNucleus.Connection - All messages relating to Connections. -->
+<!-- DataNucleus.Query - All messages relating to queries -->
+<!-- DataNucleus.Cache - All messages relating to the DataNucleus Cache -->
+<!-- DataNucleus.MetaData - All messages relating to MetaData -->
+<!-- DataNucleus.Datastore - All general datastore messages -->
+<!-- DataNucleus.Datastore.Schema - All schema related datastore log messages -->
+<!-- DataNucleus.Datastore.Persist - All datastore persistence messages -->
+<!-- DataNucleus.Datastore.Retrieve - All datastore retrieval messages -->
+<!-- DataNucleus.Datastore.Native - Log of all 'native' statements sent to the datastore -->
+<!-- DataNucleus.General - All general operational messages -->
+<!-- DataNucleus.Lifecycle - All messages relating to object lifecycle changes -->
+<!-- DataNucleus.ValueGeneration - All messages relating to value generation -->
+<!-- DataNucleus.Enhancer - All messages from the DataNucleus Enhancer. -->
+<!-- DataNucleus.SchemaTool - All messages from DataNucleus SchemaTool -->
+<!-- DataNucleus.JDO - All messages general to JDO -->
+<!-- DataNucleus.JPA - All messages general to JPA -->
+<!-- DataNucleus.JCA - All messages relating to Connector JCA. -->
+<!-- DataNucleus.IDE - Messages from the DataNucleus IDE. -->
\ No newline at end of file
diff --git a/starters/simpleapp/module-simple/logging-integtest.properties b/starters/simpleapp/module-simple/logging-integtest.properties
deleted file mode 100644
index a3a512b..0000000
--- a/starters/simpleapp/module-simple/logging-integtest.properties
+++ /dev/null
@@ -1,120 +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.
-
-
-#
-# Isis uses log4j is used to provide system logging
-#
-log4j.rootCategory=INFO, Console
-
-# The console appender
-log4j.appender.Console=org.apache.log4j.ConsoleAppender
-log4j.appender.Console.target=System.out
-log4j.appender.Console.layout=org.apache.log4j.PatternLayout
-log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE}  [%-20c{1} %-10t %-5p]  %m%n
-
-log4j.appender.File=org.apache.log4j.RollingFileAppender
-log4j.appender.File.file=isis.log
-log4j.appender.File.append=false
-log4j.appender.File.layout=org.apache.log4j.PatternLayout
-log4j.appender.File.layout.ConversionPattern=%d [%-20c{1} %-10t %-5p]  %m%n
-
-log4j.appender.translations-po=org.apache.log4j.FileAppender
-log4j.appender.translations-po.File=./translations.pot
-log4j.appender.translations-po.Append=false
-log4j.appender.translations-po.layout=org.apache.log4j.PatternLayout
-log4j.appender.translations-po.layout.ConversionPattern=%m%n
-
-! turn on the internal log4j debugging flag so we can see what it is doing
-#log4j.debug=true
-
-
-# DataNucleus
-# the first two log the DML and DDL (if set to DEBUG)
-log4j.logger.DataNucleus.Datastore.Native=WARN, Console
-log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console
-# the remainder can probably be left to WARN
-log4j.logger.DataNucleus.Persistence=WARN, Console
-log4j.logger.DataNucleus.Transaction=WARN, Console
-log4j.logger.DataNucleus.Connection=WARN, Console
-log4j.logger.DataNucleus.Query=WARN, Console
-log4j.logger.DataNucleus.Cache=WARN, Console
-log4j.logger.DataNucleus.MetaData=WARN, Console
-log4j.logger.DataNucleus.Datastore=WARN, Console
-log4j.logger.DataNucleus.Datastore.Persist=WARN, Console
-log4j.logger.DataNucleus.Datastore.Retrieve=WARN, Console
-log4j.logger.DataNucleus.General=WARN, Console
-log4j.logger.DataNucleus.Lifecycle=WARN, Console
-log4j.logger.DataNucleus.ValueGeneration=WARN, Console
-log4j.logger.DataNucleus.Enhancer=WARN, Console
-log4j.logger.DataNucleus.SchemaTool=ERROR, Console
-log4j.logger.DataNucleus.JDO=WARN, Console
-log4j.logger.DataNucleus.JPA=ERROR, Console
-log4j.logger.DataNucleus.JCA=WARN, Console
-log4j.logger.DataNucleus.IDE=ERROR, Console
-
-log4j.additivity.DataNucleus.Datastore.Native=false
-log4j.additivity.DataNucleus.Datastore.Schema=false
-log4j.additivity.DataNucleus.Datastore.Persistence=false
-log4j.additivity.DataNucleus.Datastore.Transaction=false
-log4j.additivity.DataNucleus.Datastore.Connection=false
-log4j.additivity.DataNucleus.Datastore.Query=false
-log4j.additivity.DataNucleus.Datastore.Cache=false
-log4j.additivity.DataNucleus.Datastore.MetaData=false
-log4j.additivity.DataNucleus.Datastore.Datastore=false
-log4j.additivity.DataNucleus.Datastore.Datastore.Persist=false
-log4j.additivity.DataNucleus.Datastore.Datastore.Retrieve=false
-log4j.additivity.DataNucleus.Datastore.General=false
-log4j.additivity.DataNucleus.Datastore.Lifecycle=false
-log4j.additivity.DataNucleus.Datastore.ValueGeneration=false
-log4j.additivity.DataNucleus.Datastore.Enhancer=false
-log4j.additivity.DataNucleus.Datastore.SchemaTool=false
-log4j.additivity.DataNucleus.Datastore.JDO=false
-log4j.additivity.DataNucleus.Datastore.JPA=false
-log4j.additivity.DataNucleus.Datastore.JCA=false
-log4j.additivity.DataNucleus.Datastore.IDE=false
-
-
-
-
-# if using log4jdbc-remix as JDBC driver
-#log4j.logger.jdbc.sqlonly=DEBUG, sql, Console
-#log4j.additivity.jdbc.sqlonly=false
-#log4j.logger.jdbc.resultsettable=DEBUG, jdbc, Console
-#log4j.additivity.jdbc.resultsettable=false
-
-#log4j.logger.jdbc.audit=WARN,jdbc, Console
-#log4j.additivity.jdbc.audit=false
-#log4j.logger.jdbc.resultset=WARN,jdbc
-#log4j.additivity.jdbc.resultset=false
-#log4j.logger.jdbc.sqltiming=WARN,sqltiming
-#log4j.additivity.jdbc.sqltiming=false
-#log4j.logger.jdbc.connection=FATAL,connection
-#log4j.additivity.jdbc.connection=false
-
-
-log4j.logger.org.apache.isis.core.runtime.services.i18n.po.PoWriter=INFO,translations-po
-log4j.additivity.org.apache.isis.core.runtime.services.i18n.po.PoWriter=false
-
-log4j.logger.org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder=WARN,Console
-log4j.additivity.org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder=false
-
-log4j.logger.org.apache.isis.core.integtestsupport.IntegrationBootstrapAbstract=DEBUG,Console
-log4j.additivity.org.apache.isis.core.integtestsupport.IntegrationBootstrapAbstract=false
-
-log4j.logger.com.mchange.v2.c3p0.SQLWarnings=WARN,Console
-log4j.additivity.com.mchange.v2.c3p0.SQLWarnings=false
diff --git a/starters/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java b/starters/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
index 64aeb4c..65334a1 100644
--- a/starters/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
+++ b/starters/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
@@ -18,16 +18,39 @@
  */
 package domainapp.modules.simple.integtests;
 
+import domainapp.modules.simple.SimpleModule;
+
+import org.apache.isis.config.IsisPresets;
+import org.apache.isis.extensions.fixtures.IsisExtFixturesModule;
 import org.apache.isis.extensions.fixtures.IsisIntegrationTestAbstractWithFixtures;
+import org.apache.isis.jdo.IsisBootDataNucleus;
+import org.apache.isis.runtime.spring.IsisBoot;
+import org.apache.isis.security.bypass.IsisBootSecurityBypass;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
 
 
-@SpringBootTest(
-        classes = SimpleModuleManifestForTesting.class,
-        properties = {
-                "isis.objects.editing=false"
-        })
+@SpringBootTest(classes = SimpleModuleIntegTestAbstract.AppManifest.class)
 public abstract class SimpleModuleIntegTestAbstract extends IsisIntegrationTestAbstractWithFixtures {
 
+    @Configuration
+    @PropertySources({
+        @PropertySource(IsisPresets.H2InMemory_withUniqueSchema),
+        @PropertySource(IsisPresets.Log4j2Test),
+        @PropertySource(IsisPresets.DataNucleusAutoCreate),
+    })
+    @Import({
+        IsisBoot.class,
+        IsisBootSecurityBypass.class,
+        IsisBootDataNucleus.class,
+        IsisExtFixturesModule.class,
+        SimpleModule.class
+    })
+    public static class AppManifest {
+    }
+
 }
 
diff --git a/starters/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleManifestForTesting.java b/starters/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleManifestForTesting.java
deleted file mode 100644
index fdeaf93..0000000
--- a/starters/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleManifestForTesting.java
+++ /dev/null
@@ -1,53 +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 domainapp.modules.simple.integtests;
-
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
-
-import org.apache.isis.config.IsisPresets;
-import org.apache.isis.extensions.fixtures.IsisExtFixturesModule;
-import org.apache.isis.jdo.IsisBootDataNucleus;
-import org.apache.isis.runtime.spring.IsisBoot;
-import org.apache.isis.security.bypass.IsisBootSecurityBypass;
-
-import domainapp.modules.simple.SimpleModule;
-
-
-/**
- * Makes the integral parts of the 'module-simple' integration tests.
- */
-@Configuration
-@PropertySources({
-    @PropertySource(IsisPresets.H2InMemory),
-    @PropertySource(IsisPresets.DataNucleusAutoCreate),
-})
-@Import({
-    IsisBoot.class,
-    IsisBootSecurityBypass.class,
-    IsisBootDataNucleus.class,
-    IsisExtFixturesModule.class,
-    SimpleModule.class
-})
-public class SimpleModuleManifestForTesting {
-
-}
diff --git a/starters/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleApp.java b/starters/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleApp.java
index f58ca67..e4396e0 100644
--- a/starters/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleApp.java
+++ b/starters/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleApp.java
@@ -18,26 +18,53 @@
  */
 package domainapp.webapp;
 
+import domainapp.application.ApplicationModule;
+import domainapp.application.fixture.scenarios.DomainAppDemo;
+
+import org.apache.isis.extensions.fixtures.IsisExtFixturesModule;
+import org.apache.isis.jdo.IsisBootDataNucleus;
+import org.apache.isis.runtime.spring.IsisBoot;
+import org.apache.isis.security.shiro.IsisBootSecurityShiro;
+import org.apache.isis.viewer.restfulobjects.IsisBootViewerRestfulObjects;
+import org.apache.isis.viewer.wicket.viewer.IsisBootViewerWicket;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
 import org.apache.isis.config.IsisPresets;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
 
-/**
- * Bootstrap the application.
- */
 @SpringBootApplication
 @Import({
-    SimpleAppManifest.class,
+    SimpleApp.AppManifest.class,
 })
 public class SimpleApp extends SpringBootServletInitializer {
 
+    @Configuration
+    @PropertySources({
+            @PropertySource(IsisPresets.NoTranslations),
+            @PropertySource(IsisPresets.DataNucleusAutoCreate),
+    })
+    @Import({
+            IsisBoot.class,
+            IsisBootSecurityShiro.class,
+            IsisBootDataNucleus.class,
+            IsisBootViewerRestfulObjects.class,
+            IsisBootViewerWicket.class,
+
+            IsisExtFixturesModule.class,
+
+            ApplicationModule.class,
+            DomainAppDemo.class // register this fixture
+    })
+    public static class AppManifest {
+    }
+
     /**
-     * 
-     * @param args
-     * @implNote this is to support the <em>Spring Boot Maven Plugin</em>, which auto-detects an 
+     * @implNote this is to support the <em>Spring Boot Maven Plugin</em>, which auto-detects an
      * entry point by searching for classes having a {@code main(...)}
      */
     public static void main(String[] args) {
diff --git a/starters/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleAppManifest.java b/starters/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleAppManifest.java
deleted file mode 100644
index 5c05c68..0000000
--- a/starters/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleAppManifest.java
+++ /dev/null
@@ -1,61 +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 domainapp.webapp;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
-
-import org.apache.isis.config.IsisPresets;
-import org.apache.isis.extensions.fixtures.IsisExtFixturesModule;
-import org.apache.isis.jdo.IsisBootDataNucleus;
-import org.apache.isis.runtime.spring.IsisBoot;
-import org.apache.isis.security.shiro.IsisBootSecurityShiro;
-import org.apache.isis.viewer.restfulobjects.IsisBootViewerRestfulObjects;
-import org.apache.isis.viewer.wicket.viewer.IsisBootViewerWicket;
-
-import domainapp.application.ApplicationModule;
-import domainapp.application.fixture.scenarios.DomainAppDemo;
-
-/**
- * Makes the integral parts of the 'simple app' web application.
- */
-@Configuration
-@PropertySources({
-    @PropertySource(IsisPresets.H2InMemory),
-    @PropertySource(IsisPresets.NoTranslations),
-    @PropertySource(IsisPresets.DataNucleusAutoCreate),
-})
-@Import({
-    IsisBoot.class,
-    IsisBootSecurityShiro.class,
-    IsisBootDataNucleus.class,
-    IsisBootViewerRestfulObjects.class,
-    IsisBootViewerWicket.class,
-    IsisExtFixturesModule.class,
-
-    ApplicationModule.class,
-
-    DomainAppDemo.class // register this fixture
-})
-public class SimpleAppManifest {
-
-
-}
diff --git a/starters/simpleapp/webapp/src/main/resources/application.yml b/starters/simpleapp/webapp/src/main/resources/application.yml
index e39f4f7..b2936ed 100644
--- a/starters/simpleapp/webapp/src/main/resources/application.yml
+++ b/starters/simpleapp/webapp/src/main/resources/application.yml
@@ -1,3 +1,8 @@
+#
+# Recommend use for static configuration that does not change between environments.
+#
+# See also config/application.properties
+#
 isis:
   reflector:
     validator:
@@ -135,4 +140,6 @@ isis:
 
       standaloneCollection:
         bulkLoad: false
-
+spring:
+  banner:
+    location: banner.txt
diff --git a/starters/simpleapp/webapp/src/main/resources/banner.txt b/starters/simpleapp/webapp/src/main/resources/banner.txt
new file mode 100644
index 0000000..3f593d9
--- /dev/null
+++ b/starters/simpleapp/webapp/src/main/resources/banner.txt
@@ -0,0 +1,6 @@
+  ,---.                           ,--.                ,--.         ,--.
+ /  O  \   ,---.   ,--,--.  ,---. |  ,---.   ,---.    |  |  ,---.  `--'  ,---.
+|  .-.  | | .-. | ' ,-.  | | .--' |  .-.  | | .-. :   |  | (  .-'  ,--. (  .-'
+|  | |  | | '-' ' \ '-'  | \ `--. |  | |  | \   --.   |  | .-'  `) |  | .-'  `)
+`--' `--' |  |-'   `--`--'  `---' `--' `--'  `----'   `--' `----'  `--' `----'
+          `--'
diff --git a/starters/simpleapp/webapp/src/main/resources/config/application.properties b/starters/simpleapp/webapp/src/main/resources/config/application.properties
index e69de29..13ec292 100644
--- a/starters/simpleapp/webapp/src/main/resources/config/application.properties
+++ b/starters/simpleapp/webapp/src/main/resources/config/application.properties
@@ -0,0 +1,12 @@
+#
+# Recommend use for configuration that changes between environments.
+#
+# To override externally, see Spring Boot docs
+# https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
+#
+# See also /application.yml
+#
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL = jdbc:h2:mem:test
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName = org.h2.Driver
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName = sa
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword =
\ No newline at end of file