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 2017/02/18 16:10:33 UTC

[10/15] isis git commit: ISIS-1561: recreating simpleapp archetype

ISIS-1561: recreating simpleapp archetype


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

Branch: refs/heads/master
Commit: 1a43d75d992a5e4dca9647931060b2c753c11319
Parents: e3817a5
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Feb 16 00:18:33 2017 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Feb 16 00:18:33 2017 +0000

----------------------------------------------------------------------
 example/archetype/simpleapp/pom.xml             |   7 +-
 .../META-INF/maven/archetype-metadata.xml       |   6 +
 .../resources/archetype-resources/README.adoc   |  16 +-
 ...nAppFixtureScriptsSpecificationProvider.java |   4 +-
 .../manifest/DomainAppAppManifest.java          |  73 +++-
 .../DomainAppAppManifestBypassSecurity.java     |  10 +-
 .../DomainAppAppManifestWithFixtures.java       |  23 +-
 ...ppAppManifestWithFixturesBypassSecurity.java |  10 +-
 .../services/dbmanager/HsqlDbManagerMenu.java   |   3 +-
 .../services/homepage/HomePageService.java      |   3 +-
 .../services/homepage/HomePageViewModel.java    |   8 +-
 .../application/manifest/isis.properties        | 398 +++++++++++++++++++
 .../modules/simple/dom/impl/SimpleObject.java   |   9 +-
 .../simple/dom/impl/SimpleObjectMenu.java       |   2 +-
 .../fixture/scenario/CreateSimpleObjects.java   |  18 +-
 .../fixture/scenario/SimpleObjectData.java      |  52 +++
 .../SimpleModuleIntegTestAbstract.java          |   4 +-
 .../tests/SimpleObject_IntegTest.java           |  10 +-
 .../main/resources/archetype-resources/pom.xml  |  16 +-
 .../archetype-resources/webapp/pom.xml          |   7 +-
 .../src/main/webapp/WEB-INF/isis.properties     | 266 +------------
 .../main/webapp/WEB-INF/persistor.properties    |  15 -
 .../WEB-INF/persistor_datanucleus.properties    |  94 -----
 .../projects/basic/archetype.properties         |   2 +-
 24 files changed, 599 insertions(+), 457 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/pom.xml b/example/archetype/simpleapp/pom.xml
index ba53779..fa30929 100644
--- a/example/archetype/simpleapp/pom.xml
+++ b/example/archetype/simpleapp/pom.xml
@@ -17,7 +17,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.apache.isis.archetype</groupId>
     <artifactId>simpleapp-archetype</artifactId>
@@ -45,12 +45,11 @@
         <connection>scm:git:git@github.com:danhaywood/java-mavenmixin-standard.git</connection>
         <developerConnection>scm:git:git@github.com:danhaywood/java-mavenmixin-standard.git</developerConnection>
         <url>git@github.com:danhaywood/java-mavenmixin-standard.git</url>
-      <tag>HEAD</tag>
-  </scm>
+    </scm>
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.13.2</version>
+        <version>1.14.0</version>
         <relativePath>../../../core/pom.xml</relativePath>
     </parent>
     <properties>

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml b/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml
index 60a0ce5..5d02ab8 100644
--- a/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ b/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -118,6 +118,12 @@
                     </includes>
                 </fileSet>
                 <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/main/resources</directory>
+                    <includes>
+                        <include>**/*.properties</include>
+                    </includes>
+                </fileSet>
+                <fileSet filtered="true" encoding="UTF-8">
                     <directory>src/test/java</directory>
                     <includes>
                         <include>**/*.java</include>

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/README.adoc
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/README.adoc b/example/archetype/simpleapp/src/main/resources/archetype-resources/README.adoc
index 0849274..5fb9fc0 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/README.adoc
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/README.adoc
@@ -177,7 +177,7 @@ mvn -DskipTests
 +
 [source,bash]
 ----
-mvn -Dskip.danhaywood-mavenmixin-isisvalidate  
+mvn -Dskip.mavenmixin-isisvalidate  
 ----
 
 
@@ -185,7 +185,7 @@ mvn -Dskip.danhaywood-mavenmixin-isisvalidate
 +
 [source,bash]
 ----
-mvn -Dskip.danhaywood-mavenmixin-cucumberreporting
+mvn -Dskip.mavenmixin-cucumberreporting
 ----
 +
 [TIP]
@@ -197,7 +197,7 @@ By default, cucumber reports are generated at `target/cucumber-html-reports/over
 +
 [source,bash]
 ----
-mvn -Dskip.danhaywood-mavenmixin-isisswagger
+mvn -Dskip.mavenmixin-isisswagger
 ----
 +
 [TIP]
@@ -209,7 +209,7 @@ By default, Swagger spec files are generated at `target/generated-resources/isis
 +
 [source,bash]
 ----
-mvn package -Dmavenmixin-docker
+mvn install -Dmavenmixin-docker
 ----
 +
 This assumes that the `${docker-plugin.imageName}` property has been defined in the `webapp` module.
@@ -217,7 +217,7 @@ Alternatively it can be specified on the command line using a system property, e
 +
 [source,bash]
 ----
-mvn package -Dmavenmixin-docker -Ddocker-plugin.imageName=mycompany/myapp
+mvn install -Dmavenmixin-docker -Ddocker-plugin.imageName=mycompany/myapp
 ----
 +
 The packaged image can be viewed using `docker images`.
@@ -226,16 +226,18 @@ The packaged image can be viewed using `docker images`.
 +
 [source,bash]
 ----
-docker run -d -p 8080:8080 mycompany/myapp
+docker container run -d -p 8080:8080 mycompany/myapp
 ----
 +
+This can then be accessed at link:http://localhost:8080[localhost:8080].
++
 See link:https://github.com/danhaywood/java-mavenmixin-docker#how-to-consume[mavenmixin-docker] for further details on how to run docker images.
 
 * To upload the application as a docker image to link:https://hub.docker.com[docker hub] (or some other docker registry): +
 +
 [source,bash]
 ----
-mvn deploy -Dmavenmixin-docker
+mvn -pl webapp deploy -Dmavenmixin-docker
 ----
 +
 This assumes that the `${docker-plugin.imageName}` property has been defined, _and_ also that docker registry credentials have been specified in `~/.m2/settings.xml`.

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
index d257dbc..68db9e9 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
@@ -32,7 +32,9 @@ import domainapp.application.fixture.scenarios.DomainAppDemo;
 /**
  * Specifies where to find fixtures, and other settings.
  */
-@DomainService(nature = NatureOfService.DOMAIN)
+@DomainService(
+        nature = NatureOfService.DOMAIN
+)
 public class DomainAppFixtureScriptsSpecificationProvider implements FixtureScriptsSpecificationProvider {
     @Override
     public FixtureScriptsSpecification getSpecification() {

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java
index c7dd2cc..6070f20 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java
@@ -21,10 +21,16 @@
  */
 package domainapp.application.manifest;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
@@ -38,16 +44,44 @@ import domainapp.modules.simple.dom.SimpleModuleDomSubmodule;
  */
 public class DomainAppAppManifest implements AppManifest {
 
+    private final List<Class<? extends FixtureScript>> fixtureScripts;
+    private final String authMechanism;
+    private final List<Class<?>> additionalModules;
+
+    public DomainAppAppManifest() {
+        this(
+                Collections.<Class<? extends FixtureScript>>emptyList(),
+                null,
+                Collections.<Class<?>>emptyList()
+        );
+    }
+
+    public DomainAppAppManifest(
+            final List<Class<? extends FixtureScript>> fixtureScripts,
+            final String authMechanism,
+            final List<Class<?>> additionalModules) {
+        this.fixtureScripts = elseEmptyIfNull(fixtureScripts);
+        this.authMechanism = authMechanism != null ? authMechanism : "shiro";
+        this.additionalModules = elseEmptyIfNull(additionalModules);
+    }
+
+    private static <T> List<T> elseEmptyIfNull(final List<T> list) {
+        return list == null ? Collections.<T>emptyList() : list;
+    }
+
     /**
      * Load all services and entities found in (the packages and subpackages within) these modules
      */
     @Override
     public List<Class<?>> getModules() {
-        return Arrays.asList(
+        List<Class<?>> modules = Lists.newArrayList();
+        modules.addAll(Arrays.asList(
                 SimpleModuleDomSubmodule.class,
                 DomainAppApplicationModuleFixtureSubmodule.class,
                 DomainAppApplicationModuleServicesSubmodule.class
-        );
+        ));
+        modules.addAll(additionalModules);
+        return modules;
     }
 
     /**
@@ -63,7 +97,7 @@ public class DomainAppAppManifest implements AppManifest {
      */
     @Override
     public String getAuthenticationMechanism() {
-        return "shiro";
+        return authMechanism;
     }
 
     /**
@@ -71,7 +105,7 @@ public class DomainAppAppManifest implements AppManifest {
      */
     @Override
     public String getAuthorizationMechanism() {
-        return "shiro";
+        return authMechanism;
     }
 
     /**
@@ -79,7 +113,7 @@ public class DomainAppAppManifest implements AppManifest {
      */
     @Override
     public List<Class<? extends FixtureScript>> getFixtures() {
-        return Collections.emptyList();
+        return fixtureScripts;
     }
 
     /**
@@ -87,7 +121,34 @@ public class DomainAppAppManifest implements AppManifest {
      */
     @Override
     public Map<String, String> getConfigurationProperties() {
-        return null;
+        final Map<String, String> props = Maps.newHashMap();
+
+        loadPropsInto(props, "isis.properties");
+
+        if(!fixtureScripts.isEmpty()) {
+            props.put("isis.persistor.datanucleus.install-fixtures", "true");
+        }
+
+        return props;
+    }
+
+    static void loadPropsInto(final Map<String, String> props, final String propertiesFile) {
+        final Properties properties = new Properties();
+        try {
+            try (final InputStream stream =
+                    DomainAppAppManifest.class.getResourceAsStream(propertiesFile)) {
+                properties.load(stream);
+                for (Object key : properties.keySet()) {
+                    final Object value = properties.get(key);
+                    if(key instanceof String && value instanceof String) {
+                        props.put((String)key, (String)value);
+                    }
+                }
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(
+                    String.format("Failed to load '%s' file ", propertiesFile), e);
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestBypassSecurity.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestBypassSecurity.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestBypassSecurity.java
index 15d5e7a..0c04b98 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestBypassSecurity.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestBypassSecurity.java
@@ -26,13 +26,7 @@ package domainapp.application.manifest;
  */
 public class DomainAppAppManifestBypassSecurity extends DomainAppAppManifest {
 
-    @Override
-    public String getAuthenticationMechanism() {
-        return "bypass";
-    }
-
-    @Override
-    public String getAuthorizationMechanism() {
-        return "bypass";
+    public DomainAppAppManifestBypassSecurity() {
+        super(null, "bypass", null);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java
index 0712ea6..4289d82 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java
@@ -21,14 +21,9 @@
  */
 package domainapp.application.manifest;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import org.apache.isis.applib.fixturescripts.FixtureScript;
 
 import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects;
 
@@ -37,22 +32,12 @@ import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects;
  */
 public class DomainAppAppManifestWithFixtures extends DomainAppAppManifest {
 
-    /**
-     * Fixtures to be installed.
-     */
-    @Override
-    public List<Class<? extends FixtureScript>> getFixtures() {
-        return Lists.newArrayList(CreateSimpleObjects.class);
+    public DomainAppAppManifestWithFixtures() {
+        this(null);
     }
 
-    /**
-     * Force fixtures to be loaded.
-     */
-    @Override
-    public Map<String, String> getConfigurationProperties() {
-        HashMap<String,String> props = Maps.newHashMap();
-        props.put("isis.persistor.datanucleus.install-fixtures","true");
-        return props;
+    public DomainAppAppManifestWithFixtures(final String authMechanism) {
+        super((List)Lists.newArrayList(CreateSimpleObjects.class), authMechanism, null);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixturesBypassSecurity.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixturesBypassSecurity.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixturesBypassSecurity.java
index c4a7c98..30805c4 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixturesBypassSecurity.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixturesBypassSecurity.java
@@ -26,13 +26,7 @@ package domainapp.application.manifest;
  */
 public class DomainAppAppManifestWithFixturesBypassSecurity extends DomainAppAppManifestWithFixtures {
 
-    @Override
-    public String getAuthenticationMechanism() {
-        return "bypass";
-    }
-
-    @Override
-    public String getAuthorizationMechanism() {
-        return "bypass";
+    public DomainAppAppManifestWithFixturesBypassSecurity() {
+        super("bypass");
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java
index 87d6f5e..9187dd9 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/dbmanager/HsqlDbManagerMenu.java
@@ -38,7 +38,8 @@ import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 @DomainService(
-        nature = NatureOfService.VIEW_MENU_ONLY
+        nature = NatureOfService.VIEW_MENU_ONLY,
+        objectType = "prototyping.HsqlDbManagerMenu"
 )
 @DomainServiceLayout(
         named = "Prototyping",

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageService.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageService.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageService.java
index 0ada068..07efddb 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageService.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageService.java
@@ -29,7 +29,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.factory.FactoryService;
 
 @DomainService(
-        nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY // trick to suppress the actions from the top-level menu
+        nature = NatureOfService.DOMAIN, // trick to suppress the actions from the top-level menu
+        objectType = "homepage.HomePageService"
 )
 public class HomePageService {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java
index eac86fe..b9d101a 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java
@@ -23,13 +23,17 @@ package domainapp.application.services.homepage;
 
 import java.util.List;
 
-import org.apache.isis.applib.annotation.ViewModel;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.dom.impl.SimpleObjectRepository;
 
-@ViewModel
+@DomainObject(
+        nature = Nature.VIEW_MODEL,
+        objectType = "homepage.HomePageViewModel"
+)
 public class HomePageViewModel {
 
     public TranslatableString title() {

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/resources/domainapp/application/manifest/isis.properties
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/resources/domainapp/application/manifest/isis.properties b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/resources/domainapp/application/manifest/isis.properties
new file mode 100644
index 0000000..5967b0d
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/resources/domainapp/application/manifest/isis.properties
@@ -0,0 +1,398 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+${symbol_pound}  Licensed to the Apache Software Foundation (ASF) under one
+${symbol_pound}  or more contributor license agreements.  See the NOTICE file
+${symbol_pound}  distributed with this work for additional information
+${symbol_pound}  regarding copyright ownership.  The ASF licenses this file
+${symbol_pound}  to you under the Apache License, Version 2.0 (the
+${symbol_pound}  "License"); you may not use this file except in compliance
+${symbol_pound}  with the License.  You may obtain a copy of the License at
+${symbol_pound}  
+${symbol_pound}         http://www.apache.org/licenses/LICENSE-2.0
+${symbol_pound}         
+${symbol_pound}  Unless required by applicable law or agreed to in writing,
+${symbol_pound}  software distributed under the License is distributed on an
+${symbol_pound}  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+${symbol_pound}  KIND, either express or implied.  See the License for the
+${symbol_pound}  specific language governing permissions and limitations
+${symbol_pound}  under the License.
+
+
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} MetaModel
+${symbol_pound}
+${symbol_pound} The metamodel typically does not require additional configuration, although
+${symbol_pound} the system components (defined above) may refine the metamodel for their needs.
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+
+
+${symbol_pound}
+${symbol_pound} Additional programming model facet factories, or remove standard facet factories.
+${symbol_pound} Comma separated list of fully qualified class names.
+${symbol_pound}
+${symbol_pound}isis.reflector.facets.include=
+${symbol_pound}isis.reflector.facets.exclude=
+
+
+${symbol_pound}
+${symbol_pound} Metamodel validation (in addition to that automatically performed by the programming model facet factories)
+${symbol_pound} Default implementation does nothing.
+${symbol_pound}
+${symbol_pound} Use a custom implementation to enforce additional constraints specific to your app/project/company.
+${symbol_pound}
+${symbol_pound}isis.reflector.validator=org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault
+
+
+
+${symbol_pound}
+${symbol_pound} Whether to allow deprecated annotations/method prefixes (otherwise raise metamodel validation errors).
+${symbol_pound} If not specified, default is to allow.
+${symbol_pound}
+isis.reflector.validator.allowDeprecated=false
+
+
+${symbol_pound}
+${symbol_pound} Whether to validate JDOQL clauses.  If not specified, default is to validate.
+${symbol_pound}
+${symbol_pound}isis.reflector.validator.jdoqlFromClause=true
+${symbol_pound}isis.reflector.validator.jdoqlVariablesClause=true
+
+
+${symbol_pound}
+${symbol_pound} Whether to only allow hideXxx() and disableXxx() methods with no params.
+${symbol_pound} If not specified, defaults to false (ie will also search for methods with parameter types matching the action).
+${symbol_pound}
+isis.reflector.validator.noParamsOnly=true
+
+
+${symbol_pound}
+${symbol_pound} Whether to require the object type to be specified explicitly for entities.
+${symbol_pound} If not specified, defaults to false
+${symbol_pound}
+isis.reflector.validator.explicitObjectType=true
+
+
+${symbol_pound}
+${symbol_pound} Whether to ignore or honour (at least some of the) deprecated annotations/method prefixes.
+${symbol_pound} If not specified, default is to honour
+${symbol_pound}
+${symbol_pound}isis.reflector.facets.ignoreDeprecated=false
+
+
+${symbol_pound}
+${symbol_pound} Whether to enforce the rule that domain services can only declare actions, not properties and collections.
+${symbol_pound} If not specified, defaults to false
+${symbol_pound}
+isis.reflector.validator.serviceActionsOnly=true
+
+
+${symbol_pound}
+${symbol_pound} Whether to use only mixins, and no contributed services.
+${symbol_pound} If not specified, defaults to false
+${symbol_pound}
+isis.reflector.validator.mixinsOnly=true
+
+
+${symbol_pound}
+${symbol_pound} Implementation to use for reading dynamic layout.
+${symbol_pound} Default implementation reads Xxx.layout.json files from classpath.
+${symbol_pound}
+${symbol_pound}isis.reflector.layoutMetadataReaders=org.apache.isis.core.metamodel.layoutmetadata.json.LayoutMetadataReaderFromJson
+
+
+${symbol_pound}
+${symbol_pound} patterns for applying CssClassFa facet (font-awesome icons), matching on action names
+${symbol_pound}
+isis.reflector.facet.cssClassFa.patterns=${symbol_escape}
+                        new.*:fa-plus,${symbol_escape}
+                        add.*:fa-plus-square,${symbol_escape}
+                        create.*:fa-plus,${symbol_escape}
+                        update.*:fa-edit,${symbol_escape}
+                        change.*:fa-edit,${symbol_escape}
+                        remove.*:fa-minus-square,${symbol_escape}
+                        move.*:fa-exchange,${symbol_escape}
+                        first.*:fa-star,${symbol_escape}
+                        find.*:fa-search,${symbol_escape}
+                        lookup.*:fa-search,${symbol_escape}
+                        clear.*:fa-remove,${symbol_escape}
+                        previous.*:fa-step-backward,${symbol_escape}
+                        next.*:fa-step-forward,${symbol_escape}
+                        list.*:fa-list, ${symbol_escape}
+                        all.*:fa-list, ${symbol_escape}
+                        download.*:fa-download, ${symbol_escape}
+                        upload.*:fa-upload, ${symbol_escape}
+                        execute.*:fa-bolt, ${symbol_escape}
+                        run.*:fa-bolt, ${symbol_escape}
+                        calculate.*:fa-calculator, ${symbol_escape}
+                        verify.*:fa-check-circle, ${symbol_escape}
+                        refresh.*:fa-refresh, ${symbol_escape}
+                        install.*:fa-wrench
+
+
+${symbol_pound}
+${symbol_pound} patterns for applying CssClass facet (CSS styles), matching on member names
+${symbol_pound}
+isis.reflector.facet.cssClass.patterns=${symbol_escape}
+                        delete.*:btn-danger
+
+
+${symbol_pound}
+${symbol_pound} whether to suppress posting of events if not specified (left as Xxx.Default); defaults to true
+${symbol_pound}
+
+${symbol_pound}isis.reflector.facet.actionAnnotation.domainEvent.postForDefault=false
+${symbol_pound}isis.reflector.facet.collectionAnnotation.domainEvent.postForDefault=false
+${symbol_pound}isis.reflector.facet.propertyAnnotation.domainEvent.postForDefault=false
+
+${symbol_pound}isis.reflector.facet.domainObjectLayoutAnnotation.cssClassUiEvent.postForDefault=false
+${symbol_pound}isis.reflector.facet.domainObjectLayoutAnnotation.iconUiEvent.postForDefault=false
+${symbol_pound}isis.reflector.facet.domainObjectLayoutAnnotation.titleUiEvent.postForDefault=false
+
+isis.reflector.facet.domainObjectAnnotation.createdLifecycleEvent.postForDefault=false
+isis.reflector.facet.domainObjectAnnotation.persistingLifecycleEvent.postForDefault=false
+isis.reflector.facet.domainObjectAnnotation.persistedLifecycleEvent.postForDefault=false
+isis.reflector.facet.domainObjectAnnotation.loadedLifecycleEvent.postForDefault=false
+isis.reflector.facet.domainObjectAnnotation.updatingLifecycleEvent.postForDefault=false
+isis.reflector.facet.domainObjectAnnotation.updatedLifecycleEvent.postForDefault=false
+isis.reflector.facet.domainObjectAnnotation.removingLifecycleEvent.postForDefault=false
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} Domain Service configuration
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+
+${symbol_pound}
+${symbol_pound} required by EmailServiceDefault
+${symbol_pound}
+${symbol_pound}isis.service.email.sender.address=some.valid@email.address
+${symbol_pound}isis.service.email.sender.password=the.password.for-isis.service.email.sender.address
+
+
+${symbol_pound}
+${symbol_pound} whether ExceptionRecognizers should also log any recognized exceptions
+${symbol_pound} (default false; enable for diagnostics/debugging)
+${symbol_pound}
+${symbol_pound}isis.services.exceprecog.logRecognizedExceptions=true
+
+
+${symbol_pound}
+${symbol_pound} disable to (automatically registered) ExceptionRecognizerCompositeForJdoObjectStore service
+${symbol_pound} almost all of this service should be registered.  Since all exception recognizer implementations
+${symbol_pound} are consulted in the event of an exception, it's not sufficient to override the implementation
+${symbol_pound} (in isis.services); instead this configuration property disables this particular implementation.
+${symbol_pound}
+${symbol_pound}isis.services.ExceptionRecognizerCompositeForJdoObjectStore.disable=true
+
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} Auditing, Commands, Publishing
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+
+${symbol_pound}
+${symbol_pound} Whether changes to objects should be audited; if not set, defaults to "none"
+${symbol_pound} - if not set or set to "none", can explicitly enable using @DomainObject(auditing=Auditing.ENABLED)
+${symbol_pound} - if set to "all", can explicitly disable using @Object(auditing=Auditing.DISABLED)
+${symbol_pound}
+${symbol_pound}isis.services.audit.objects=all|none
+
+
+${symbol_pound}
+${symbol_pound} Whether changes to objects should be published; if not set, defaults to "none"
+${symbol_pound} - if not set or set to "none", can explicitly enable using @DomainObject(publishing=Publishing.ENABLED)
+${symbol_pound} - if set to "all", can explicitly disable using @Object(publishing=Publishing.DISABLED)
+${symbol_pound}
+${symbol_pound}isis.services.publish.objects=all|none
+
+
+${symbol_pound}
+${symbol_pound} Whether all (or all non-query only) actions should be reified as commands; if not set, defaults to "none"
+${symbol_pound} - if not set or set to "none", can explicitly enable using @Action(command=CommandReification.ENABLED)
+${symbol_pound} - if set to "all", can explicitly disable using @Action(command=CommandReification.DISABLED)
+${symbol_pound}
+${symbol_pound}isis.services.command.actions=all|none|ignoreSafe
+
+
+${symbol_pound}
+${symbol_pound} Whether all (or all non-query only) action invocations should be published; if not set, defaults to "none"
+${symbol_pound} - if not set or set to "none", can explicitly enable using @Action(publishing=Publishing.ENABLED)
+${symbol_pound} - if set to "all", can explicitly disable using @Action(publishing=Publishing.DISABLED)
+${symbol_pound}
+${symbol_pound}isis.services.publish.actions=all|none|ignoreSafe
+
+
+${symbol_pound}
+${symbol_pound} Whether all property edits sshould be published; if not set, defaults to "none"
+${symbol_pound} - if not set or set to "none", can explicitly enable using @Property(publishing=Publishing.ENABLED)
+${symbol_pound} - if set to "all", can explicitly disable using @Property(publishing=Publishing.DISABLED)
+${symbol_pound}
+${symbol_pound}isis.services.publish.properties=all|none
+
+
+
+${symbol_pound}
+${symbol_pound} Whether the ApplicationFeatureRepository should eagerly initialize itself (increasing start-up times)
+${symbol_pound} or initialize itself lazily.  Default is lazy initialization.
+${symbol_pound}
+${symbol_pound}isis.services.applicationFeatures.init=lazy|eager
+
+
+${symbol_pound}
+${symbol_pound} Whether the framework supports inject...() and set...() styles of dependency injection.   By default the former
+${symbol_pound} is disabled, the latter is enabled.  Disabling these settings can reduce application start-up times.
+${symbol_pound}
+${symbol_pound}isis.services.injector.injectPrefix=false|true
+${symbol_pound}isis.services.injector.setPrefix=false|true
+isis.services.injector.setPrefix=false
+
+
+
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} Policies
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+
+${symbol_pound}
+${symbol_pound} Whether editing of object properties is allowed; if not set, defaults to "true"
+${symbol_pound} - if not set or set to "true", can explicitly disable using @DomainObject(editing=Editing.DISABLED)
+${symbol_pound} - if set to "false", can explicitly enable using @DomainObject(editing=Editing.ENABLED)
+${symbol_pound}
+isis.objects.editing=false
+
+
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} i18n
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+
+${symbol_pound}
+${symbol_pound} force read translations, even if running in prototype mode
+${symbol_pound}
+${symbol_pound}isis.services.translation.po.mode=read
+
+
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} Viewer defaults
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+
+${symbol_pound}
+${symbol_pound} Specify viewer defaults
+${symbol_pound} 
+${symbol_pound}isis.viewers.paged.standalone=30
+${symbol_pound}isis.viewers.paged.parented=10
+
+
+${symbol_pound}isis.viewers.propertyLayout.labelPosition=LEFT
+${symbol_pound}isis.viewers.parameterLayout.labelPosition=LEFT
+
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} Value facet defaults
+${symbol_pound}
+${symbol_pound} (see also viewer-specific config files, eg viewer_wicket.properties)
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+
+${symbol_pound} as used by @Title of a date
+isis.value.format.date=dd-MM-yyyy
+
+
+
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} Persistor
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
+
+
+
+${symbol_pound} generally speaking this should not be enabled
+isis.persistor.disableConcurrencyChecking=false
+
+
+${symbol_pound}
+${symbol_pound} hook to perform additional initialization when JDO class metadata is loaded
+${symbol_pound} default implementation will attempt to run 'create schema' for the specified schema.
+${symbol_pound}
+${symbol_pound} this implementation is installed by default:
+${symbol_pound}isis.persistor.datanucleus.classMetadataLoadedListener=org.apache.isis.objectstore.jdo.datanucleus.CreateSchemaObjectFromClassMetadata
+
+
+${symbol_pound} whether to persist the event data as a "clob" or as a "zipped" byte[]
+${symbol_pound} default is "zipped"
+${symbol_pound}isis.persistor.datanucleus.PublishingService.serializedForm=zipped
+
+
+
+
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}
+${symbol_pound}
+${symbol_pound} DataNucleus' configuration
+${symbol_pound}
+${symbol_pound} The 'isis.persistor.datanucleus.impl' prefix is stripped off,
+${symbol_pound} remainder is passed through to DataNucleus
+${symbol_pound}
+${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}
+
+isis.persistor.datanucleus.impl.datanucleus.schema.autoCreateAll=true
+isis.persistor.datanucleus.impl.datanucleus.schema.validateTables=true
+isis.persistor.datanucleus.impl.datanucleus.schema.validateConstraints=true
+
+
+${symbol_pound}
+${symbol_pound} Require explicit persistence (since entities are Comparable and using ObjectContracts${symbol_pound}compareTo).
+${symbol_pound} see http://www.datanucleus.org/products/accessplatform_3_0/jdo/transaction_types.html
+${symbol_pound}
+isis.persistor.datanucleus.impl.datanucleus.persistenceByReachabilityAtCommit=false
+
+
+${symbol_pound}
+${symbol_pound} How column names are identified
+${symbol_pound} (http://www.datanucleus.org/products/datanucleus/jdo/orm/datastore_identifiers.html)
+${symbol_pound}
+isis.persistor.datanucleus.impl.datanucleus.identifier.case=MixedCase
+
+${symbol_pound}
+${symbol_pound} L2 cache
+${symbol_pound} off except if explicitly marked as cacheable
+${symbol_pound} http://www.datanucleus.org/products/datanucleus/jdo/cache.html
+${symbol_pound}
+isis.persistor.datanucleus.impl.datanucleus.cache.level2.type=none
+isis.persistor.datanucleus.impl.datanucleus.cache.level2.mode=ENABLE_SELECTIVE
+
+
+
+${symbol_pound}
+${symbol_pound} uncomment to use JNDI rather than direct JDBC
+${symbol_pound}
+${symbol_pound}isis.persistor.datanucleus.impl.datanucleus.ConnectionFactoryName=java:comp/env/jdbc/quickstart
+
+${symbol_pound}
+${symbol_pound} uncomment to use JTA resource
+${symbol_pound}
+${symbol_pound}isis.persistor.datanucleus.impl.datanucleus.ConnectionFactory2Name=java:comp/env/jdbc/quickstart-nontx
+${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.TransactionType=JTA
+
+
+
+${symbol_pound}
+${symbol_pound}
+${symbol_pound} JDBC connection details
+${symbol_pound} ... are in persistor.properties
+${symbol_pound}
+${symbol_pound}

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
index 3344a4e..95da22a 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
@@ -43,8 +43,7 @@ import lombok.Setter;
 
 @javax.jdo.annotations.PersistenceCapable(
         identityType=IdentityType.DATASTORE,
-        schema = "simple",
-        table = "SimpleObject"
+        schema = "simple"
 )
 @javax.jdo.annotations.DatastoreIdentity(
         strategy=javax.jdo.annotations.IdGeneratorStrategy.IDENTITY,
@@ -60,9 +59,7 @@ import lombok.Setter;
                         + "WHERE name.indexOf(:name) >= 0 ")
 })
 @javax.jdo.annotations.Unique(name="SimpleObject_name_UNQ", members = {"name"})
-@DomainObject(
-        objectType = "simple.SimpleObject"
-)
+@DomainObject() // objectType inferred from @PersistenceCapable${symbol_pound}schema
 public class SimpleObject implements Comparable<SimpleObject> {
 
     public SimpleObject(final String name) {
@@ -70,7 +67,7 @@ public class SimpleObject implements Comparable<SimpleObject> {
     }
 
     @javax.jdo.annotations.Column(allowsNull = "false", length = 40)
-    @Property(editing = Editing.DISABLED)
+    @Property() // editing disabled by default, see isis.properties
     @Getter @Setter
     @Title(prepend = "Object: ")
     private String name;

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java
index 07d9399..9114be5 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java
@@ -36,6 +36,7 @@ import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
 
 @DomainService(
         nature = NatureOfService.VIEW_MENU_ONLY,
+        objectType = "simple.SimpleObjectMenu",
         repositoryFor = SimpleObject.class
 )
 @DomainServiceLayout(
@@ -44,7 +45,6 @@ import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
 )
 public class SimpleObjectMenu {
 
-
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(bookmarking = BookmarkPolicy.AS_ROOT)
     @MemberOrder(sequence = "1")

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java
index 1211a6d..e6ce665 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java
@@ -22,8 +22,6 @@
 
 package domainapp.modules.simple.fixture.scenario;
 
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 
 import javax.annotation.Nullable;
@@ -41,9 +39,6 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class CreateSimpleObjects extends FixtureScript {
 
-    public final List<String> NAMES = Collections.unmodifiableList(Arrays.asList(
-            "Foo", "Bar", "Baz", "Frodo", "Froyo", "Fizz", "Bip", "Bop", "Bang", "Boo"));
-
     /**
      * The number of objects to create, up to 10; optional, defaults to 3.
      */
@@ -52,7 +47,7 @@ public class CreateSimpleObjects extends FixtureScript {
     private Integer number;
 
     /**
-     * The simpleobjects created by this fixture (output).
+     * The objects created by this fixture (output).
      */
     @Getter
     private final List<SimpleObject> simpleObjects = Lists.newArrayList();
@@ -60,19 +55,20 @@ public class CreateSimpleObjects extends FixtureScript {
     @Override
     protected void execute(final ExecutionContext ec) {
 
+        int max = SimpleObjectData.values().length;
+
         // defaults
         final int number = defaultParam("number", ec, 3);
 
         // validate
-        if(number < 0 || number > NAMES.size()) {
-            throw new IllegalArgumentException(String.format("number must be in range [0,%d)", NAMES.size()));
+        if(number < 0 || number > max) {
+            throw new IllegalArgumentException(String.format("number must be in range [0,%d)", max));
         }
 
         // execute
         for (int i = 0; i < number; i++) {
-            final String name = NAMES.get(i);
-
-            final SimpleObject simpleObject = wrap(simpleObjectMenu).create(name);
+            final SimpleObjectData data = SimpleObjectData.values()[i];
+            final SimpleObject simpleObject =  data.createWith(wrap(simpleObjectMenu));
             ec.addResult(this, simpleObject);
             simpleObjects.add(simpleObject);
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
new file mode 100644
index 0000000..9aa8017
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
@@ -0,0 +1,52 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ *  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.fixture.scenario;
+
+import domainapp.modules.simple.dom.impl.SimpleObject;
+import domainapp.modules.simple.dom.impl.SimpleObjectMenu;
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum SimpleObjectData {
+
+    FOO("Foo"),
+    BAR("Bar"),
+    BAZ("Baz"),
+    FRODO("Frodo"),
+    FROYO("Froyo"),
+    FIZZ("Fizz"),
+    BIP("Bip"),
+    BOP("Bop"),
+    BANG("Bang"),
+    BOO("Boo");
+
+    private final String name;
+
+    public SimpleObject createWith(final SimpleObjectMenu menu) {
+        return menu.create(name);
+    }
+
+    public SimpleObject findWith(final SimpleObjectMenu menu) {
+        return menu.findByName(name).get(0);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
index df6dd09..97ba16e 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
@@ -56,11 +56,13 @@ public abstract class SimpleModuleIntegTestAbstract extends IntegrationTestAbstr
                             Util.withJavaxJdoRunInMemoryProperties(map);
                             Util.withDataNucleusProperties(map);
                             Util.withIsisIntegTestProperties(map);
+                            // same as in isis.properties
+                            map.put("isis.objects.editing","false");
                             return map;
                         }
 
                         @Override public List<Class<?>> getAdditionalServices() {
-                            return Lists.newArrayList(ModuleFixtureScriptsSpecificationProvider.class);
+                            return (List)Lists.newArrayList(ModuleFixtureScriptsSpecificationProvider.class);
                         }
                     })
 

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
index 57d4d99..887c5d1 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
@@ -37,7 +37,9 @@ import org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleu
 import org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleusVersionTimestamp;
 
 import domainapp.modules.simple.dom.impl.SimpleObject;
+import domainapp.modules.simple.dom.impl.SimpleObjectMenu;
 import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects;
+import domainapp.modules.simple.fixture.scenario.SimpleObjectData;
 import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown;
 import domainapp.modules.simple.integtests.SimpleModuleIntegTestAbstract;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -47,6 +49,8 @@ public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {
     @Inject
     FixtureScripts fixtureScripts;
     @Inject
+    SimpleObjectMenu simpleObjectMenu;
+    @Inject
     TransactionService transactionService;
 
     SimpleObject simpleObject;
@@ -59,7 +63,7 @@ public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {
         fixtureScripts.runFixtureScript(fs, null);
         transactionService.nextTransaction();
 
-        simpleObject = fs.getSimpleObjects().get(0);
+        simpleObject = SimpleObjectData.FOO.findWith(wrap(simpleObjectMenu));
 
         assertThat(simpleObject).isNotNull();
     }
@@ -136,7 +140,7 @@ public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {
         @Test
         public void should_be_populated() throws Exception {
             // when
-            final Long id = mixin(Persistable_datanucleusIdLong.class, simpleObject).${symbol_dollar}${symbol_dollar}();
+            final Long id = mixin(Persistable_datanucleusIdLong.class, simpleObject).exec();
 
             // then
             assertThat(id).isGreaterThanOrEqualTo(0);
@@ -148,7 +152,7 @@ public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {
         @Test
         public void should_be_populated() throws Exception {
             // when
-            final Timestamp timestamp = mixin(Persistable_datanucleusVersionTimestamp.class, simpleObject).${symbol_dollar}${symbol_dollar}();
+            final Timestamp timestamp = mixin(Persistable_datanucleusVersionTimestamp.class, simpleObject).exec();
             // then
             assertThat(timestamp).isNotNull();
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml
index a0c4a22..7271b4b 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml
@@ -32,12 +32,13 @@
     </prerequisites>
 
     <properties>
-        <isis.version>1.13.2</isis.version>
+        <isis.version>1.14.0</isis.version>
 
         <lombok.version>1.16.10</lombok.version>
         <assertj-core.version>3.6.1</assertj-core.version>
 
         <mavenmixin-cucumberreporting.version>0.0.2</mavenmixin-cucumberreporting.version>
+        <maven-cucumber-reporting.version>3.2.0</maven-cucumber-reporting.version>
         <maven-cucumber-reporting.dependency.log4j.version>2.7</maven-cucumber-reporting.dependency.log4j.version>
 
         <mavenmixin-datanucleusenhance.version>0.0.4</mavenmixin-datanucleusenhance.version>
@@ -66,7 +67,7 @@
         <maven-jxr-plugin.version>2.4</maven-jxr-plugin.version>
         <maven-source-plugin.version>2.2.1</maven-source-plugin.version>
 
-        <mavenmixin-standard.version>0.0.2</mavenmixin-standard.version>
+        <mavenmixin-standard.version>0.0.3</mavenmixin-standard.version>
         <maven-clean-plugin.version>2.5</maven-clean-plugin.version>
         <maven-project-info-reports-plugin.version>2.9</maven-project-info-reports-plugin.version>
         <maven-resources-plugin.version>2.6</maven-resources-plugin.version>
@@ -87,14 +88,18 @@
         <jdepend-maven-plugin.version>2.0-beta-2</jdepend-maven-plugin.version>
         <findbugs-maven-plugin.version>2.5</findbugs-maven-plugin.version>
 
-        <mavenmixin-docker.version>0.0.2</mavenmixin-docker.version>
+        <mavenmixin-docker.version>0.0.3</mavenmixin-docker.version>
         <maven-deploy-plugin.version>2.8.1</maven-deploy-plugin.version>
         <docker-maven-plugin.version>0.4.13</docker-maven-plugin.version>
+        <gmavenplus-plugin.version>1.5</gmavenplus-plugin.version>
 
         <mavendeps-isistesting.version>0.0.2</mavendeps-isistesting.version>
         <mavendeps-isisintellij.version>0.0.1</mavendeps-isisintellij.version>
         <mavendeps-isiswebapp.version>0.0.1</mavendeps-isiswebapp.version>
 
+        <compiler-plugin.source>1.7</compiler-plugin.source>
+        <compiler-plugin.target>1.7</compiler-plugin.target>
+
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     </properties>
@@ -242,6 +247,11 @@
                     <artifactId>docker-maven-plugin</artifactId>
                     <version>${docker-maven-plugin.version}</version>
                 </plugin>
+                <plugin>
+                    <groupId>org.codehaus.gmavenplus</groupId>
+                    <artifactId>gmavenplus-plugin</artifactId>
+                    <version>${gmavenplus-plugin.version}</version>
+                </plugin>
 
             </plugins>
         </pluginManagement>

http://git-wip-us.apache.org/repos/asf/isis/blob/1a43d75d/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml
index dd9ddaa..db8b341 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml
@@ -44,8 +44,11 @@
 
         <docker-plugin.imageName>DOCKER_REGISTRY_ACCOUNT/${project.parent.artifactId}</docker-plugin.imageName>
         <docker-plugin.resource.include>${maven-war-plugin.warName}.war</docker-plugin.resource.include>
-        <docker-plugin.serverId>docker-hub</docker-plugin.serverId>
-        <docker-plugin.registryUrl>https://index.docker.io/v1/</docker-plugin.registryUrl>
+
+        <docker-plugin.releaseServerId>docker-hub</docker-plugin.releaseServerId>
+        <docker-plugin.releaseRegistryUrl>https://index.docker.io/v1/</docker-plugin.releaseRegistryUrl>
+        <docker-plugin.snapshotServerId>docker-hub</docker-plugin.snapshotServerId>
+        <docker-plugin.snapshotRegistryUrl>https://index.docker.io/v1/</docker-plugin.snapshotRegistryUrl>
 
     </properties>