You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/08/12 00:10:17 UTC

[1/2] isis git commit: ISIS-848: documentation for AppManifest. Also...

Repository: isis
Updated Branches:
  refs/heads/master cd84e55a6 -> 9b706707d


http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/webapp/src/main/java/domainapp/webapp/DomainApplication.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/java/domainapp/webapp/DomainApplication.java b/example/application/simpleapp/webapp/src/main/java/domainapp/webapp/DomainApplication.java
new file mode 100644
index 0000000..c4fd650
--- /dev/null
+++ b/example/application/simpleapp/webapp/src/main/java/domainapp/webapp/DomainApplication.java
@@ -0,0 +1,102 @@
+/*
+ *  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 java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.List;
+
+import com.google.common.base.Joiner;
+import com.google.common.io.Resources;
+import com.google.inject.AbstractModule;
+import com.google.inject.Module;
+import com.google.inject.name.Names;
+import com.google.inject.util.Modules;
+import com.google.inject.util.Providers;
+
+import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
+
+import de.agilecoders.wicket.core.Bootstrap;
+import de.agilecoders.wicket.core.settings.IBootstrapSettings;
+import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchTheme;
+import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchThemeProvider;
+
+/**
+ * As specified in <tt>web.xml</tt>.
+ * 
+ * <p>
+ * See:
+ * <pre>
+ * &lt;filter>
+ *   &lt;filter-name>wicket&lt;/filter-name>
+ *    &lt;filter-class>org.apache.wicket.protocol.http.WicketFilter&lt;/filter-class>
+ *    &lt;init-param>
+ *      &lt;param-name>applicationClassName&lt;/param-name>
+ *      &lt;param-value>domainapp.webapp.DomainApplication&lt;/param-value>
+ *    &lt;/init-param>
+ * &lt;/filter>
+ * </pre>
+ * 
+ */
+public class DomainApplication extends IsisWicketApplication {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    protected void init() {
+        super.init();
+
+        IBootstrapSettings settings = Bootstrap.getSettings();
+        settings.setThemeProvider(new BootswatchThemeProvider(BootswatchTheme.Flatly));
+    }
+
+    @Override
+    protected Module newIsisWicketModule() {
+        final Module isisDefaults = super.newIsisWicketModule();
+        
+        final Module overrides = new AbstractModule() {
+            @Override
+            protected void configure() {
+                bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("Simple App");
+                bind(String.class).annotatedWith(Names.named("applicationCss")).toInstance("css/application.css");
+                bind(String.class).annotatedWith(Names.named("applicationJs")).toInstance("scripts/application.js");
+                bind(String.class).annotatedWith(Names.named("welcomeMessage")).toInstance(readLines(getClass(), "welcome.html"));
+                bind(String.class).annotatedWith(Names.named("aboutMessage")).toInstance("Simple App");
+                bind(InputStream.class).annotatedWith(Names.named("metaInfManifest")).toProvider(
+                        Providers.of(getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF")));
+                // if uncommented, then overrides isis.appManifest in config file.
+                // bind(AppManifest.class).toInstance(new DomainAppAppManifest());
+            }
+        };
+
+        return Modules.override(isisDefaults).with(overrides);
+    }
+
+    private static String readLines(final Class<?> contextClass, final String resourceName) {
+        try {
+            List<String> readLines = Resources.readLines(Resources.getResource(contextClass, resourceName), Charset.defaultCharset());
+            final String aboutText = Joiner.on("\n").join(readLines);
+            return aboutText;
+        } catch (IOException e) {
+            return "This is a simple app";
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleApplication.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleApplication.java b/example/application/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleApplication.java
deleted file mode 100644
index 35a8984..0000000
--- a/example/application/simpleapp/webapp/src/main/java/domainapp/webapp/SimpleApplication.java
+++ /dev/null
@@ -1,105 +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 java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.List;
-
-import com.google.common.base.Joiner;
-import com.google.common.io.Resources;
-import com.google.inject.AbstractModule;
-import com.google.inject.Module;
-import com.google.inject.name.Names;
-import com.google.inject.util.Modules;
-import com.google.inject.util.Providers;
-
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
-
-import de.agilecoders.wicket.core.Bootstrap;
-import de.agilecoders.wicket.core.settings.IBootstrapSettings;
-import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchTheme;
-import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchThemeProvider;
-import domainapp.home.SimpleAppManifest;
-
-/**
- * As specified in <tt>web.xml</tt>.
- * 
- * <p>
- * See:
- * <pre>
- * &lt;filter>
- *   &lt;filter-name>wicket&lt;/filter-name>
- *    &lt;filter-class>org.apache.wicket.protocol.http.WicketFilter&lt;/filter-class>
- *    &lt;init-param>
- *      &lt;param-name>applicationClassName&lt;/param-name>
- *      &lt;param-value>webapp.SimpleApplication&lt;/param-value>
- *    &lt;/init-param>
- * &lt;/filter>
- * </pre>
- * 
- */
-public class SimpleApplication extends IsisWicketApplication {
-
-    private static final long serialVersionUID = 1L;
-
-
-    @Override
-    protected void init() {
-        super.init();
-
-        IBootstrapSettings settings = Bootstrap.getSettings();
-        settings.setThemeProvider(new BootswatchThemeProvider(BootswatchTheme.Flatly));
-    }
-
-    @Override
-    protected Module newIsisWicketModule() {
-        final Module isisDefaults = super.newIsisWicketModule();
-        
-        final Module overrides = new AbstractModule() {
-            @Override
-            protected void configure() {
-                bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("Simple App");
-                bind(String.class).annotatedWith(Names.named("applicationCss")).toInstance("css/application.css");
-                bind(String.class).annotatedWith(Names.named("applicationJs")).toInstance("scripts/application.js");
-                bind(String.class).annotatedWith(Names.named("welcomeMessage")).toInstance(readLines(getClass(), "welcome.html"));
-                bind(String.class).annotatedWith(Names.named("aboutMessage")).toInstance("Simple App");
-                bind(InputStream.class).annotatedWith(Names.named("metaInfManifest")).toProvider(
-                        Providers.of(getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF")));
-                // if uncommented, then overrides isis.appManifest in config file.
-                // bind(AppManifest.class).toInstance(new SimpleAppManifest());
-            }
-        };
-
-        return Modules.override(isisDefaults).with(overrides);
-    }
-
-    private static String readLines(final Class<?> contextClass, final String resourceName) {
-        try {
-            List<String> readLines = Resources.readLines(Resources.getResource(contextClass, resourceName), Charset.defaultCharset());
-            final String aboutText = Joiner.on("\n").join(readLines);
-            return aboutText;
-        } catch (IOException e) {
-            return "This is a simple app";
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 1ce1f41..effbe98 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -30,9 +30,9 @@
 # IsisWicketApplication#newIsisWicketModule()
 #
 
-isis.appManifest=domainapp.home.SimpleAppManifest
-#isis.appManifest=domainapp.home.SimpleAppManifestBypassSecurity
-#isis.appManifest=domainapp.home.SimpleAppManifestNoFixtures
+isis.appManifest=domainapp.app.DomainAppAppManifest
+#isis.appManifest=domainapp.app.DomainAppAppManifestBypassSecurity
+#isis.appManifest=domainapp.app.DomainAppManifestWithFixtures
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml
index 4de67d5..1ef1f47 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml
@@ -178,7 +178,7 @@
         <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
         <init-param>
             <param-name>applicationClassName</param-name>
-            <param-value>domainapp.webapp.SimpleApplication</param-value>
+            <param-value>domainapp.webapp.DomainApplication</param-value>
         </init-param>
     </filter>
     <filter-mapping>

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifest.java
new file mode 100644
index 0000000..c591a3e
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifest.java
@@ -0,0 +1,100 @@
+#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.app;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+
+import domainapp.dom.DomainAppDomainModule;
+import domainapp.fixture.DomainAppFixtureModule;
+
+/**
+ * Bootstrap the application.
+ */
+public class DomainAppAppManifest implements AppManifest {
+
+    /**
+     * Load all services and entities found in (the packages and subpackages within) these modules
+     */
+    @Override
+    public List<Class<?>> getModules() {
+        return Arrays.asList(
+                DomainAppDomainModule.class,  // domain (entities and repositories)
+                DomainAppFixtureModule.class, // fixtures
+                DomainAppAppModule.class      // home page service etc
+        );
+    }
+
+    /**
+     * No additional services.
+     */
+    @Override
+    public List<Class<?>> getAdditionalServices() {
+        return Collections.emptyList();
+    }
+
+    /**
+     * Use shiro for authentication.
+     *
+     * <p>
+     *     NB: this is ignored for integration tests, which always use "bypass".
+     * </p>
+     */
+    @Override
+    public String getAuthenticationMechanism() {
+        return "shiro";
+    }
+
+    /**
+     * Use shiro for authorization.
+     *
+     * <p>
+     *     NB: this is ignored for integration tests, which always use "bypass".
+     * </p>
+     */
+    @Override
+    public String getAuthorizationMechanism() {
+        return "shiro";
+    }
+
+    /**
+     * No fixtures.
+     */
+    @Override
+    public List<Class<? extends FixtureScript>> getFixtures() {
+        return Collections.emptyList();
+    }
+
+    /**
+     * No overrides.
+     */
+    @Override
+    public Map<String, String> getConfigurationProperties() {
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifestBypassSecurity.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifestBypassSecurity.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifestBypassSecurity.java
new file mode 100644
index 0000000..284a027
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifestBypassSecurity.java
@@ -0,0 +1,38 @@
+#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.app;
+
+/**
+ * Bypasses security, meaning any user/password combination can be used to login.
+ */
+public class DomainAppAppManifestBypassSecurity extends DomainAppAppManifest {
+
+    @Override
+    public String getAuthenticationMechanism() {
+        return "bypass";
+    }
+
+    @Override
+    public String getAuthorizationMechanism() {
+        return "bypass";
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifestWithFixtures.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifestWithFixtures.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifestWithFixtures.java
new file mode 100644
index 0000000..1b336b6
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppManifestWithFixtures.java
@@ -0,0 +1,58 @@
+#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.app;
+
+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.fixture.scenarios.RecreateSimpleObjects;
+
+/**
+ * Run the app but without setting up any fixtures.
+ */
+public class DomainAppAppManifestWithFixtures extends DomainAppAppManifest {
+
+    /**
+     * Fixtures to be installed.
+     */
+    @Override
+    public List<Class<? extends FixtureScript>> getFixtures() {
+        return Lists.newArrayList(RecreateSimpleObjects.class);
+    }
+
+    /**
+     * 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;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppModule.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppModule.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppModule.java
new file mode 100644
index 0000000..b6b9a65
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/DomainAppAppModule.java
@@ -0,0 +1,26 @@
+#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.app;
+
+public final class DomainAppAppModule {
+    private DomainAppAppModule(){}
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageService.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageService.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageService.java
new file mode 100644
index 0000000..ecc88e0
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageService.java
@@ -0,0 +1,54 @@
+#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.app.services.homepage;
+
+import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.HomePage;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+@DomainService(
+        nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY // trick to suppress the actions from the top-level menu
+)
+public class HomePageService {
+
+    //region > homePage (action)
+
+    @Action(
+            semantics = SemanticsOf.SAFE
+    )
+    @HomePage
+    public HomePageViewModel homePage() {
+        return container.injectServicesInto(new HomePageViewModel());
+    }
+
+    //endregion
+
+    //region > injected services
+
+    @javax.inject.Inject
+    DomainObjectContainer container;
+
+    //endregion
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.java
new file mode 100644
index 0000000..86593d3
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.java
@@ -0,0 +1,53 @@
+#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.app.services.homepage;
+
+import java.util.List;
+
+import org.apache.isis.applib.annotation.ViewModel;
+
+import domainapp.dom.simple.SimpleObject;
+import domainapp.dom.simple.SimpleObjects;
+
+@ViewModel
+public class HomePageViewModel {
+
+    //region > title
+    public String title() {
+        return getObjects().size() + " objects";
+    }
+    //endregion
+
+    //region > object (collection)
+    @org.apache.isis.applib.annotation.HomePage
+    public List<SimpleObject> getObjects() {
+        return simpleObjects.listAll();
+    }
+    //endregion
+
+    //region > injected services
+
+    @javax.inject.Inject
+    SimpleObjects simpleObjects;
+
+    //endregion
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.layout.json
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.layout.json b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.layout.json
new file mode 100644
index 0000000..34f78e0
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.layout.json
@@ -0,0 +1,43 @@
+/**
+ *  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.
+ */
+{
+    "columns": [
+        {
+            "span": 0,
+            "memberGroups": {}
+        },
+        {
+            "span": 0,
+            "memberGroups": {}
+        },
+        {
+            "span": 0,
+            "memberGroups": {}
+        },
+        {
+            "span": 12,
+            "collections": {
+                "objects": {
+                    "collectionLayout": {
+                        "render": "EAGERLY"
+                    }
+                }
+            }
+        }
+    ],
+    "actions": {}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.png
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.png b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.png
new file mode 100644
index 0000000..cb03785
Binary files /dev/null and b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifest.java
deleted file mode 100644
index 213e84e..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-#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.home;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-import domainapp.dom.DomainAppDomainModule;
-import domainapp.fixture.DomainAppFixtureModule;
-import domainapp.fixture.scenarios.RecreateSimpleObjects;
-
-/**
- * Bootstrap the application.
- */
-public class SimpleAppManifest implements AppManifest {
-
-    /**
-     * Load all services and entities found in (the packages and subpackages within) these modules
-     */
-    @Override
-    public List<Class<?>> getModules() {
-        return Arrays.asList(
-                DomainAppDomainModule.class,  // domain (entities and repositories)
-                DomainAppFixtureModule.class, // fixtures
-                SimpleAppManifest.class       // home page service
-        );
-    }
-
-    /**
-     * No additional services.
-     */
-    @Override
-    public List<Class<?>> getAdditionalServices() {
-        return Collections.emptyList();
-    }
-
-    /**
-     * Use shiro for authentication.
-     *
-     * <p>
-     *     NB: this is ignored for integration tests, which always use "bypass".
-     * </p>
-     */
-    @Override
-    public String getAuthenticationMechanism() {
-        return "shiro";
-    }
-
-    /**
-     * Use shiro for authorization.
-     *
-     * <p>
-     *     NB: this is ignored for integration tests, which always use "bypass".
-     * </p>
-     */
-    @Override
-    public String getAuthorizationMechanism() {
-        return "shiro";
-    }
-
-    /**
-     * Run these fixtures.
-     */
-    @Override
-    public List<Class<? extends FixtureScript>> getFixtures() {
-        return Lists.newArrayList(RecreateSimpleObjects.class);
-    }
-
-    /**
-     * No additional overrides
-     */
-    @Override
-    public Map<String, String> getConfigurationProperties() {
-        return null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifestBypassSecurity.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifestBypassSecurity.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifestBypassSecurity.java
deleted file mode 100644
index a643738..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifestBypassSecurity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-#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.home;
-
-/**
- * Bypasses security, meaning any user/password combination can be used to login.
- */
-public class SimpleAppManifestBypassSecurity extends SimpleAppManifest {
-
-    @Override
-    public String getAuthenticationMechanism() {
-        return "bypass";
-    }
-
-    @Override
-    public String getAuthorizationMechanism() {
-        return "bypass";
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
deleted file mode 100644
index f8c8bee..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
+++ /dev/null
@@ -1,39 +0,0 @@
-#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.home;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-/**
- * Run the app but without setting up any fixtures.
- */
-public class SimpleAppManifestNoFixtures extends SimpleAppManifest {
-
-    @Override
-    public List<Class<? extends FixtureScript>> getFixtures() {
-        return Collections.emptyList();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageService.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageService.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageService.java
deleted file mode 100644
index 6c20fdc..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageService.java
+++ /dev/null
@@ -1,54 +0,0 @@
-#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.home.services.homepage;
-
-import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.HomePage;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.SemanticsOf;
-
-@DomainService(
-        nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY // trick to suppress the actions from the top-level menu
-)
-public class HomePageService {
-
-    //region > homePage (action)
-
-    @Action(
-            semantics = SemanticsOf.SAFE
-    )
-    @HomePage
-    public HomePageViewModel homePage() {
-        return container.injectServicesInto(new HomePageViewModel());
-    }
-
-    //endregion
-
-    //region > injected services
-
-    @javax.inject.Inject
-    DomainObjectContainer container;
-
-    //endregion
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java
deleted file mode 100644
index e13de70..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java
+++ /dev/null
@@ -1,53 +0,0 @@
-#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.home.services.homepage;
-
-import java.util.List;
-
-import org.apache.isis.applib.annotation.ViewModel;
-
-import domainapp.dom.simple.SimpleObject;
-import domainapp.dom.simple.SimpleObjects;
-
-@ViewModel
-public class HomePageViewModel {
-
-    //region > title
-    public String title() {
-        return getObjects().size() + " objects";
-    }
-    //endregion
-
-    //region > object (collection)
-    @org.apache.isis.applib.annotation.HomePage
-    public List<SimpleObject> getObjects() {
-        return simpleObjects.listAll();
-    }
-    //endregion
-
-    //region > injected services
-
-    @javax.inject.Inject
-    SimpleObjects simpleObjects;
-
-    //endregion
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json
deleted file mode 100644
index 34f78e0..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json
+++ /dev/null
@@ -1,43 +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.
- */
-{
-    "columns": [
-        {
-            "span": 0,
-            "memberGroups": {}
-        },
-        {
-            "span": 0,
-            "memberGroups": {}
-        },
-        {
-            "span": 0,
-            "memberGroups": {}
-        },
-        {
-            "span": 12,
-            "collections": {
-                "objects": {
-                    "collectionLayout": {
-                        "render": "EAGERLY"
-                    }
-                }
-            }
-        }
-    ],
-    "actions": {}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png b/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png
deleted file mode 100644
index cb03785..0000000
Binary files a/example/archetype/simpleapp/src/main/resources/archetype-resources/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/bootstrap/DomainAppSystemInitializer.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/bootstrap/DomainAppSystemInitializer.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/bootstrap/DomainAppSystemInitializer.java
new file mode 100644
index 0000000..7b305f4
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/bootstrap/DomainAppSystemInitializer.java
@@ -0,0 +1,44 @@
+#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.integtests.bootstrap;
+
+import org.apache.isis.core.integtestsupport.IsisSystemForTest;
+import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests;
+
+import domainapp.app.DomainAppAppManifest;
+
+public class DomainAppSystemInitializer {
+
+    public static void initIsft() {
+        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
+        if(isft == null) {
+            isft = new IsisSystemForTest.Builder()
+                    .withLoggingAt(org.apache.log4j.Level.INFO)
+                    .with(new DomainAppAppManifest())
+                    .with(new IsisConfigurationForJdoIntegTests())
+                    .build()
+                    .setUpSystem();
+            IsisSystemForTest.set(isft);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java
deleted file mode 100644
index 6108930..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java
+++ /dev/null
@@ -1,44 +0,0 @@
-#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.integtests.bootstrap;
-
-import org.apache.isis.core.integtestsupport.IsisSystemForTest;
-import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests;
-
-import domainapp.home.SimpleAppManifest;
-
-public class SimpleAppSystemInitializer {
-
-    public static void initIsft() {
-        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
-        if(isft == null) {
-            isft = new IsisSystemForTest.Builder()
-                    .withLoggingAt(org.apache.log4j.Level.INFO)
-                    .with(new SimpleAppManifest())
-                    .with(new IsisConfigurationForJdoIntegTests())
-                    .build()
-                    .setUpSystem();
-            IsisSystemForTest.set(isft);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java
index aeeadd8..8dfaf75 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java
@@ -24,14 +24,14 @@ import org.apache.isis.core.specsupport.specs.CukeGlueAbstract;
 
 import cucumber.api.java.After;
 import cucumber.api.java.Before;
-import domainapp.integtests.bootstrap.SimpleAppSystemInitializer;
+import domainapp.integtests.bootstrap.DomainAppSystemInitializer;
 
 public class BootstrappingGlue extends CukeGlueAbstract {
 
     @Before(value={"@integration"}, order=100)
     public void beforeScenarioIntegrationScope() {
         org.apache.log4j.PropertyConfigurator.configure("logging.properties");
-        SimpleAppSystemInitializer.initIsft();
+        DomainAppSystemInitializer.initIsft();
         
         before(ScenarioExecutionScope.INTEGRATION);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/DomainAppIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/DomainAppIntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/DomainAppIntegTest.java
new file mode 100644
index 0000000..d860711
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/DomainAppIntegTest.java
@@ -0,0 +1,42 @@
+#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.integtests.tests;
+
+import org.junit.BeforeClass;
+
+import org.apache.isis.core.integtestsupport.IntegrationTestAbstract;
+import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForIntegration;
+
+import domainapp.integtests.bootstrap.DomainAppSystemInitializer;
+
+public abstract class DomainAppIntegTest extends IntegrationTestAbstract {
+
+    @BeforeClass
+    public static void initClass() {
+        org.apache.log4j.PropertyConfigurator.configure("logging.properties");
+        DomainAppSystemInitializer.initIsft();
+
+        // instantiating will install onto ThreadLocal
+        new ScenarioExecutionForIntegration();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/SimpleAppIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/SimpleAppIntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/SimpleAppIntegTest.java
deleted file mode 100644
index ee8651b..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/SimpleAppIntegTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-#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.integtests.tests;
-
-import org.junit.BeforeClass;
-
-import org.apache.isis.core.integtestsupport.IntegrationTestAbstract;
-import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForIntegration;
-
-import domainapp.integtests.bootstrap.SimpleAppSystemInitializer;
-
-public abstract class SimpleAppIntegTest extends IntegrationTestAbstract {
-
-    @BeforeClass
-    public static void initClass() {
-        org.apache.log4j.PropertyConfigurator.configure("logging.properties");
-        SimpleAppSystemInitializer.initIsft();
-
-        // instantiating will install onto ThreadLocal
-        new ScenarioExecutionForIntegration();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
index 4b23b37..441c732 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
@@ -33,10 +33,10 @@ import org.apache.isis.applib.services.wrapper.InvalidException;
 
 import domainapp.dom.simple.SimpleObject;
 import domainapp.fixture.scenarios.RecreateSimpleObjects;
-import domainapp.integtests.tests.SimpleAppIntegTest;
+import domainapp.integtests.tests.DomainAppIntegTest;
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class SimpleObjectIntegTest extends SimpleAppIntegTest {
+public class SimpleObjectIntegTest extends DomainAppIntegTest {
 
     @Inject
     FixtureScripts fixtureScripts;

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
index ea4199a..787629f 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
@@ -40,10 +40,10 @@ import domainapp.dom.simple.SimpleObject;
 import domainapp.dom.simple.SimpleObjects;
 import domainapp.fixture.dom.simple.SimpleObjectsTearDown;
 import domainapp.fixture.scenarios.RecreateSimpleObjects;
-import domainapp.integtests.tests.SimpleAppIntegTest;
+import domainapp.integtests.tests.DomainAppIntegTest;
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class SimpleObjectsIntegTest extends SimpleAppIntegTest {
+public class SimpleObjectsIntegTest extends DomainAppIntegTest {
 
     @Inject
     FixtureScripts fixtureScripts;

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/domainapp/webapp/DomainApplication.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/domainapp/webapp/DomainApplication.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/domainapp/webapp/DomainApplication.java
new file mode 100644
index 0000000..cd19361
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/domainapp/webapp/DomainApplication.java
@@ -0,0 +1,105 @@
+#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.webapp;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.List;
+
+import com.google.common.base.Joiner;
+import com.google.common.io.Resources;
+import com.google.inject.AbstractModule;
+import com.google.inject.Module;
+import com.google.inject.name.Names;
+import com.google.inject.util.Modules;
+import com.google.inject.util.Providers;
+
+import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
+
+import de.agilecoders.wicket.core.Bootstrap;
+import de.agilecoders.wicket.core.settings.IBootstrapSettings;
+import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchTheme;
+import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchThemeProvider;
+
+/**
+ * As specified in <tt>web.xml</tt>.
+ * 
+ * <p>
+ * See:
+ * <pre>
+ * &lt;filter>
+ *   &lt;filter-name>wicket&lt;/filter-name>
+ *    &lt;filter-class>org.apache.wicket.protocol.http.WicketFilter&lt;/filter-class>
+ *    &lt;init-param>
+ *      &lt;param-name>applicationClassName&lt;/param-name>
+ *      &lt;param-value>domainapp.webapp.DomainApplication&lt;/param-value>
+ *    &lt;/init-param>
+ * &lt;/filter>
+ * </pre>
+ * 
+ */
+public class DomainApplication extends IsisWicketApplication {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    protected void init() {
+        super.init();
+
+        IBootstrapSettings settings = Bootstrap.getSettings();
+        settings.setThemeProvider(new BootswatchThemeProvider(BootswatchTheme.Flatly));
+    }
+
+    @Override
+    protected Module newIsisWicketModule() {
+        final Module isisDefaults = super.newIsisWicketModule();
+        
+        final Module overrides = new AbstractModule() {
+            @Override
+            protected void configure() {
+                bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("Simple App");
+                bind(String.class).annotatedWith(Names.named("applicationCss")).toInstance("css/application.css");
+                bind(String.class).annotatedWith(Names.named("applicationJs")).toInstance("scripts/application.js");
+                bind(String.class).annotatedWith(Names.named("welcomeMessage")).toInstance(readLines(getClass(), "welcome.html"));
+                bind(String.class).annotatedWith(Names.named("aboutMessage")).toInstance("Simple App");
+                bind(InputStream.class).annotatedWith(Names.named("metaInfManifest")).toProvider(
+                        Providers.of(getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF")));
+                // if uncommented, then overrides isis.appManifest in config file.
+                // bind(AppManifest.class).toInstance(new DomainAppAppManifest());
+            }
+        };
+
+        return Modules.override(isisDefaults).with(overrides);
+    }
+
+    private static String readLines(final Class<?> contextClass, final String resourceName) {
+        try {
+            List<String> readLines = Resources.readLines(Resources.getResource(contextClass, resourceName), Charset.defaultCharset());
+            final String aboutText = Joiner.on("${symbol_escape}n").join(readLines);
+            return aboutText;
+        } catch (IOException e) {
+            return "This is a simple app";
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/domainapp/webapp/SimpleApplication.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/domainapp/webapp/SimpleApplication.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/domainapp/webapp/SimpleApplication.java
deleted file mode 100644
index a8b088d..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/domainapp/webapp/SimpleApplication.java
+++ /dev/null
@@ -1,108 +0,0 @@
-#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.webapp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.List;
-
-import com.google.common.base.Joiner;
-import com.google.common.io.Resources;
-import com.google.inject.AbstractModule;
-import com.google.inject.Module;
-import com.google.inject.name.Names;
-import com.google.inject.util.Modules;
-import com.google.inject.util.Providers;
-
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
-
-import de.agilecoders.wicket.core.Bootstrap;
-import de.agilecoders.wicket.core.settings.IBootstrapSettings;
-import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchTheme;
-import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchThemeProvider;
-import domainapp.home.SimpleAppManifest;
-
-/**
- * As specified in <tt>web.xml</tt>.
- * 
- * <p>
- * See:
- * <pre>
- * &lt;filter>
- *   &lt;filter-name>wicket&lt;/filter-name>
- *    &lt;filter-class>org.apache.wicket.protocol.http.WicketFilter&lt;/filter-class>
- *    &lt;init-param>
- *      &lt;param-name>applicationClassName&lt;/param-name>
- *      &lt;param-value>webapp.SimpleApplication&lt;/param-value>
- *    &lt;/init-param>
- * &lt;/filter>
- * </pre>
- * 
- */
-public class SimpleApplication extends IsisWicketApplication {
-
-    private static final long serialVersionUID = 1L;
-
-
-    @Override
-    protected void init() {
-        super.init();
-
-        IBootstrapSettings settings = Bootstrap.getSettings();
-        settings.setThemeProvider(new BootswatchThemeProvider(BootswatchTheme.Flatly));
-    }
-
-    @Override
-    protected Module newIsisWicketModule() {
-        final Module isisDefaults = super.newIsisWicketModule();
-        
-        final Module overrides = new AbstractModule() {
-            @Override
-            protected void configure() {
-                bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("Simple App");
-                bind(String.class).annotatedWith(Names.named("applicationCss")).toInstance("css/application.css");
-                bind(String.class).annotatedWith(Names.named("applicationJs")).toInstance("scripts/application.js");
-                bind(String.class).annotatedWith(Names.named("welcomeMessage")).toInstance(readLines(getClass(), "welcome.html"));
-                bind(String.class).annotatedWith(Names.named("aboutMessage")).toInstance("Simple App");
-                bind(InputStream.class).annotatedWith(Names.named("metaInfManifest")).toProvider(
-                        Providers.of(getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF")));
-                // if uncommented, then overrides isis.appManifest in config file.
-                // bind(AppManifest.class).toInstance(new SimpleAppManifest());
-            }
-        };
-
-        return Modules.override(isisDefaults).with(overrides);
-    }
-
-    private static String readLines(final Class<?> contextClass, final String resourceName) {
-        try {
-            List<String> readLines = Resources.readLines(Resources.getResource(contextClass, resourceName), Charset.defaultCharset());
-            final String aboutText = Joiner.on("${symbol_escape}n").join(readLines);
-            return aboutText;
-        } catch (IOException e) {
-            return "This is a simple app";
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
index bc384f2..8b70f1a 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -33,9 +33,9 @@ ${symbol_pound} alternatively, can provide the AppManifest programmatically by o
 ${symbol_pound} IsisWicketApplication${symbol_pound}newIsisWicketModule()
 ${symbol_pound}
 
-isis.appManifest=domainapp.home.SimpleAppManifest
-${symbol_pound}isis.appManifest=domainapp.home.SimpleAppManifestBypassSecurity
-${symbol_pound}isis.appManifest=domainapp.home.SimpleAppManifestNoFixtures
+isis.appManifest=domainapp.app.DomainAppAppManifest
+${symbol_pound}isis.appManifest=domainapp.app.DomainAppAppManifestBypassSecurity
+${symbol_pound}isis.appManifest=domainapp.app.DomainAppManifestWithFixtures
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/web.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/web.xml
index 905f9dd..28d1a8f 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/web.xml
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/web.xml
@@ -181,7 +181,7 @@
         <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
         <init-param>
             <param-name>applicationClassName</param-name>
-            <param-value>domainapp.webapp.SimpleApplication</param-value>
+            <param-value>domainapp.webapp.DomainApplication</param-value>
         </init-param>
     </filter>
     <filter-mapping>

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties b/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
index 85a9264..91afb8b 100644
--- a/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
+++ b/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
@@ -1,4 +1,4 @@
-#Fri Aug 07 11:07:40 BST 2015
+#Tue Aug 11 23:02:09 BST 2015
 package=it.pkg
 version=0.1-SNAPSHOT
 groupId=archetype.it


[2/2] isis git commit: ISIS-848: documentation for AppManifest. Also...

Posted by da...@apache.org.
ISIS-848: documentation for AppManifest.  Also...

... renamed some of the packages classes within the simpleapp (SimpleAppXxx -> DomainAppXxx) so that there is less to rename when used as an archetype.
.... recreated the archetype


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

Branch: refs/heads/master
Commit: 9b706707d3608e7b942194d2ff680169e9780445
Parents: cd84e55
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Aug 11 23:09:52 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Aug 11 23:09:52 2015 +0100

----------------------------------------------------------------------
 .../_migration-notes_1.8.0-to-1.9.0.adoc        |   1 +
 ...o-1.9.0_bootstrapping-using-AppManifest.adoc | 255 +++++++++++++++++
 .../src/main/asciidoc/guides/_rg_classes.adoc   |   6 +-
 .../_rg_classes_AppManifest-bootstrapping.adoc  | 282 +++++++++++++++++++
 .../main/asciidoc/guides/_rg_classes_super.adoc |   4 +-
 ...esting_integ-test-support_bootstrapping.adoc | 121 ++++----
 .../org/apache/isis/applib/AppManifest.java     |  18 +-
 .../domainapp/app/DomainAppAppManifest.java     |  97 +++++++
 .../app/DomainAppAppManifestBypassSecurity.java |  35 +++
 .../app/DomainAppAppManifestWithFixtures.java   |  55 ++++
 .../java/domainapp/app/DomainAppAppModule.java  |  23 ++
 .../app/services/homepage/HomePageService.java  |  51 ++++
 .../services/homepage/HomePageViewModel.java    |  50 ++++
 .../homepage/HomePageViewModel.layout.json      |  43 +++
 .../app/services/homepage/HomePageViewModel.png | Bin 0 -> 456 bytes
 .../java/domainapp/home/SimpleAppManifest.java  | 100 -------
 .../home/SimpleAppManifestBypassSecurity.java   |  35 ---
 .../home/SimpleAppManifestNoFixtures.java       |  36 ---
 .../home/services/homepage/HomePageService.java |  51 ----
 .../services/homepage/HomePageViewModel.java    |  50 ----
 .../homepage/HomePageViewModel.layout.json      |  43 ---
 .../services/homepage/HomePageViewModel.png     | Bin 456 -> 0 bytes
 .../bootstrap/DomainAppSystemInitializer.java   |  41 +++
 .../bootstrap/SimpleAppSystemInitializer.java   |  41 ---
 .../integtests/specglue/BootstrappingGlue.java  |   4 +-
 .../integtests/tests/DomainAppIntegTest.java    |  39 +++
 .../integtests/tests/SimpleAppIntegTest.java    |  39 ---
 .../modules/simple/SimpleObjectIntegTest.java   |   4 +-
 .../modules/simple/SimpleObjectsIntegTest.java  |   4 +-
 .../domainapp/webapp/DomainApplication.java     | 102 +++++++
 .../domainapp/webapp/SimpleApplication.java     | 105 -------
 .../src/main/webapp/WEB-INF/isis.properties     |   6 +-
 .../webapp/src/main/webapp/WEB-INF/web.xml      |   2 +-
 .../domainapp/app/DomainAppAppManifest.java     | 100 +++++++
 .../app/DomainAppAppManifestBypassSecurity.java |  38 +++
 .../app/DomainAppAppManifestWithFixtures.java   |  58 ++++
 .../java/domainapp/app/DomainAppAppModule.java  |  26 ++
 .../app/services/homepage/HomePageService.java  |  54 ++++
 .../services/homepage/HomePageViewModel.java    |  53 ++++
 .../homepage/HomePageViewModel.layout.json      |  43 +++
 .../app/services/homepage/HomePageViewModel.png | Bin 0 -> 456 bytes
 .../java/domainapp/home/SimpleAppManifest.java  | 103 -------
 .../home/SimpleAppManifestBypassSecurity.java   |  38 ---
 .../home/SimpleAppManifestNoFixtures.java       |  39 ---
 .../home/services/homepage/HomePageService.java |  54 ----
 .../services/homepage/HomePageViewModel.java    |  53 ----
 .../homepage/HomePageViewModel.layout.json      |  43 ---
 .../services/homepage/HomePageViewModel.png     | Bin 456 -> 0 bytes
 .../bootstrap/DomainAppSystemInitializer.java   |  44 +++
 .../bootstrap/SimpleAppSystemInitializer.java   |  44 ---
 .../integtests/specglue/BootstrappingGlue.java  |   4 +-
 .../integtests/tests/DomainAppIntegTest.java    |  42 +++
 .../integtests/tests/SimpleAppIntegTest.java    |  42 ---
 .../modules/simple/SimpleObjectIntegTest.java   |   4 +-
 .../modules/simple/SimpleObjectsIntegTest.java  |   4 +-
 .../domainapp/webapp/DomainApplication.java     | 105 +++++++
 .../domainapp/webapp/SimpleApplication.java     | 108 -------
 .../src/main/webapp/WEB-INF/isis.properties     |   6 +-
 .../webapp/src/main/webapp/WEB-INF/web.xml      |   2 +-
 .../projects/basic/archetype.properties         |   2 +-
 60 files changed, 1741 insertions(+), 1111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0.adoc b/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0.adoc
index f7b103e..f40e335 100644
--- a/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0.adoc
@@ -18,6 +18,7 @@ include::_migration-notes_1.8.0-to-1.9.0_upgrading-to-java8.adoc[leveloffset=+1]
 include::_migration-notes_1.8.0-to-1.9.0_exception-recognizer.adoc[leveloffset=+1]
 include::_migration-notes_1.8.0-to-1.9.0_fixture-scripts-specification-provider.adoc[leveloffset=+1]
 include::_migration-notes_1.8.0-to-1.9.0_war-packaging.adoc[leveloffset=+1]
+include::_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc[leveloffset=+1]
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc b/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc
new file mode 100644
index 0000000..40ed6ad
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc
@@ -0,0 +1,255 @@
+[[_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest]]
+= Bootstrapping using `AppManifest`
+:Notice: 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.
+:_basedir: ../
+:_imagesdir: images/
+
+
+
+Apache Isis 1.9.0 provides a simplified programmatic way of bootstrapping the application, that also unifies bootstrapping for integration tests.
+
+For now this new bootstrapping mechanism is optional (you don't have to change your code), but it may become mandatory in future releases.  The xref:ug.adoc#_ug_getting-started_simpleapp-archetype[SimpleApp archetype] has been updated to use this new mechanism.
+
+The instructions below assume that your application is structured as per the simpleapp archetype.  Adjust accordingly.
+
+
+
+== `myapp-dom` Module
+
+In your `myapp-dom` module (containing definitions of your persistent entities and domain services), create an empty class to represent the module.  This should be at the root package for the domain, eg:
+
+[source,java]
+----
+package myapp.dom;
+public final class MyAppDomainModule {
+    private MyAppDomainModule(){}
+}
+----
+
+Since there is no requirement to actually instantiate this class (it merely provides the location of the `myapp.dom` package), we give it a private constructor.
+
+If you have any other modules where you have either domain services or entities, similarly create an empty "module" class.
+
+
+
+== `myapp-fixture` Module
+
+Similarly, in your `myapp-fixture` module (containing fixture scripts used for testing and demos), do likewise:
+
+[source,java]
+----
+package myapp.fixture;
+public class MyAppFixtureModule {
+    private MyAppFixtureModule(){}
+}
+----
+
+
+
+
+== `myapp-app` Maven Module
+
+Create a new `myapp-app` Maven module:
+
+* in its `pom.xml`, reference `myapp-fixture` +
++
+[source,xml]
+----
+<dependency>
+    <groupId>${project.groupId}</groupId>
+    <artifactId>myapp-fixture</artifactId>
+</dependency>
+----
++
+[NOTE]
+====
+Since `myapp-fixture` will reference `myapp-dom` there's no need for a direct reference to `myapp-dom`
+====
+
+* also add in dependencies to the core framework: +
++
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.isis.core</groupId>
+    <artifactId>isis-core-wrapper</artifactId>
+</dependency>
+<dependency>
+    <groupId>org.apache.isis.core</groupId>
+    <artifactId>isis-core-runtime</artifactId>
+</dependency>
+----
+
+* if your application uses any of the (non-ASF) link:http://isisaddons.org[Isis Addons] modules, then add dependencies to these modules in the `pom.xml`.  You should be able to copy-and-paste the dependencies from the `pom.xml` of your `myapp-webapp` module.
+
+Create a module class for the `myapp` module also:
+
+[source,java]
+----
+package myapp.app;
+public final class MyAppAppModule {
+    private MyAppAppModule() {}
+}
+----
+
+Next, create an `AppManifest` implementation, eg: +
+
+[source,java]
+----
+package myapp.app;
+public class MyAppAppManifest implements AppManifest {
+    @Override
+    public List<Class<?>> getModules() {                             // <1>
+        return Arrays.asList(
+                MyAppDomainModule.class
+                MyAppFixtureModule.class,
+                MyAppAppModule.class
+        );
+    }
+    @Override
+    public List<Class<?>> getAdditionalServices() { return null; }  // <2>
+    @Override
+    public String getAuthenticationMechanism() { return null; }
+    @Override
+    public String getAuthorizationMechanism() { return null; }
+    @Override
+    public List<Class<? extends FixtureScript>> getFixtures() { return null; }
+    @Override
+    public Map<String, String> getConfigurationProperties() { return null; }
+}
+----
+<1> the module classes, whose packages specify the existence of domain services and/or persistent entities.  If your app uses (non-ASF) link:http://isisaddons.org[Isis Addons] modules, then include the module classes for these addons in `getModules()`.   For example, the (non-ASF) http://github.com/isisaddons/isis-module-security[Isis addons' security] module provides the `org.isisaddons.module.security.SecurityModule` class.
+<2> any additional services, as per `isis.services` configuration property.
+
+
+[TIP]
+====
+For details of the usages of the other methods in this interface, see the xref:guides/rg.adoc#_rg_classes_AppManifest-bootstrapping[reference guide] documentation.
+====
+
+
+If in your `myapp-dom` module you have application-level services and view models (services that depend on persistent domain entities but not the other way around), then we recommend that you move this code to the new `myapp-app` module.  This makes the layering clearer, and avoids circular dependencies between  application-layer vs domain-layer logic.
+
+
+
+
+== Update parent
+
+in the parent `pom.xml`, declare and reference the new `myapp-app` module:
+
+[source,xml]
+----
+<dependencyManagement>
+    <dependencies>
+        ...
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>myapp-app</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        ...
+    </dependencies>
+</dependencyManagement>
+
+<modules>
+    <module>app</module>
+    ...
+</modules>
+
+----
+
+
+
+== Update `myapp-integtests`
+
+In its `pom.xml`:
+
+In its `pom.xml`:
+
+* add a dependency on `myapp-app`
+* remove dependency on `myapp-fixture` (and on `myapp-dom`, if present)
+* remove dependencies on `isis-core-wrapper` and `isis-core-runtime` (since now obtained transitively from `myapp-app`)
+
+Also update (simplify) `MyAppSystemInitializer` to use the new `AppManifest`, eg:
+
+[source,java]
+----
+public class MyAppSystemInitializer {
+    public static void initIsft() {
+        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
+        if(isft == null) {
+            isft = new IsisSystemForTest.Builder()
+                    .withLoggingAt(org.apache.log4j.Level.INFO)
+                    .with(new DomainAppAppManifest())                   // <1>
+                    .with(new IsisConfigurationForJdoIntegTests())      // <2>
+                    .build()
+                    .setUpSystem();
+            IsisSystemForTest.set(isft);
+        }
+    }
+}
+----
+<1> bootstrapping using the new `AppManifest` implementation
+<2> if your bootstrapping previously explicitly overrode certain configuration properties, this can instead be moved to the `getConfigurationProperties()` method of your `AppManifest` implementation.
+
+
+
+
+== Update `myapp-webapp`
+
+In its `pom.xml`:
+
+* add a dependency on `myapp-app`
+* remove dependency on `myapp-fixture` (and on `myapp-dom`, if present)
+* remove dependencies on `isis-core-wrapper` and `isis-core-runtime` (since now obtained transitively from `myapp-app`)
+
+* (if you didn't previously), move any dependencies to addons or other services referenced in the `AppManifest` to the `pom.xml` of the new `myapp-app` module.
+
+
+Remove configuration properties that are no longer needed:
+
+* in `isis.properties`:
+
+** remove `isis.services-installer`
+** remove `isis.services.ServicesInstallerFromAnnotation.packagePrefix`
+** remove `isis.services`
+
+* in `persistor_datanucleus.properties`
+
+** remove `isis.persistor.datanucleus.RegisterEntities.packagePrefix`
+
+
+Finally, specify the `AppManifest` to use to bootstrap the app.  You have a choice here:
+
+* either update `isis.properties`, using the `isis.appManifest` key to specify the `AppManifest` implementation, eg: +
++
+[source,ini]
+----
+isis.appManifest=domainapp.app.DomainAppAppManifest
+----
+
+* alternatively, specify the `AppManifest` by overriding the `IsisWicketApplication#newWicketModule()`, eg: +
++
+[source,java]
+----
+@Override
+protected Module newIsisWicketModule() {
+    final Module isisDefaults = super.newIsisWicketModule();
+    ...
+    final Module overrides = new AbstractModule() {
+        @Override
+        protected void configure() {
+            ...
+            bind(AppManifest.class).toInstance(new DomainAppAppManifest());
+        }
+    };
+
+    return Modules.override(isisDefaults).with(overrides);
+}
+----
+
+If the second (programmatic) approach is used, this overrides the first approach (using `isis.properties`).
+
+
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc
index 7a93058..4662bcc 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc
@@ -1,12 +1,14 @@
 [[_rg_classes]]
-= Classes
+= Classes and Interfaces
 :Notice: 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.
 :_basedir: ../
 :_imagesdir: images/
 
-NOTE: TODO
 
+This chapter describes the usage of various classes and interfaces that are not otherwise associated with xref:rg.adoc#_rg_services-api[domain] xref:rg.adoc#_rg_services-spi[services], xref:rg.adoc#_rg_object-layout[object layout] or xref:rg.adoc#_rg_runtime[configuration].
 
+
+include::_rg_classes_AppManifest-bootstrapping.adoc[leveloffset=+1]
 include::_rg_classes_super.adoc[leveloffset=+1]
 include::_rg_classes_value-types.adoc[leveloffset=+1]
 include::_rg_classes_utility.adoc[leveloffset=+1]

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc
new file mode 100644
index 0000000..72380e1
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_AppManifest-bootstrapping.adoc
@@ -0,0 +1,282 @@
+[[_rg_classes_AppManifest-bootstrapping]]
+= `AppManifest` (bootstrapping)
+:Notice: 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.
+:_basedir: ../
+:_imagesdir: images/
+
+
+This section describes how to implement the `AppManifest` interface to bootstrap both an Apache Isis web application, and also its integration tests.
+
+
+
+== API
+
+
+The `AppManifest` interface allows the constituent parts of an application to be defined programmatically, most specifically the packages that contain domain services and/or persistent entities.  Its API is defined as:
+
+[source,java]
+----
+public interface AppManifest {
+    public List<Class<?>> getModules();                         // <1>
+    public List<Class<?>> getAdditionalServices();              // <2>
+    public String getAuthenticationMechanism();                 // <3>
+    public String getAuthorizationMechanism();                  // <4>
+    public List<Class<? extends FixtureScript>> getFixtures();  // <5>
+    public Map<String,String> getConfigurationProperties();     // <6>
+}
+----
+<1> Must return a non-null 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.
+<2> If non-`null`, overrides the value of `isis.services` configuration property to specify a list of additional classes to be instantiated as domain services (over and above the domain services defined via `getModules()` method.
+<3> If non-`null`, overrides the value of `isis.authentication` configuration property to specify the authentication mechanism.
+<4> If non-`null`, overrides the value of `isis.authorization` configuration property to specify the authorization mechanism.
+<5> If non-`null`, overrides the value of `isis.fixtures` configuration property to specify a fixture script to be installed.
+<6> Overrides for any other configuration properties.
+
+The following sections describe each of these methods in a little more detail.
+
+
+
+
+=== `getModules()`
+
+The most significant method (the only one which must return a non-`null` value) is the `getModules()` method.  Each module is identified by a class; the framework simply uses that class' package as the root to search for domain services (annotated with xref:rg.adoc#_rg_annotations_manpage-DomainService[`@DomainService`]) and entities (annotated with xref:rg.adoc#_rg_annotations_manpage-PersistenceCapable[`@PersistenceCapable`]).  Generally there is one such module class per Maven module.
+
+A module class for a domain module might for example be defined as:
+
+[source,java]
+----
+package com.mycompany.myapp.dom;
+public final class MyAppDomainModule {
+    private MyAppDomainModule() {}
+}
+----
+
+This tells the framework that the package and subpackages under `com.mycompany.myapp.dom` should be searched for domain services and entities.
+
+As is perhaps apparent, the `getModules()` method replaces and overrides both the `isis.services.ServicesInstallerFromAnnotation.packagePrefix` key (usually found in the `isis.properties`  file) and also the`isis.persistor.datanucleus.RegisterEntities.packagePrefix` key (usually found in the `persistor_datanucleus.properties` file).  The value of the `isis.services-installer` configuration property is also ignored.
+
+For example, the (non-ASF) http://github.com/isisaddons/isis-app-todoapp[Isis addons' todoapp] defines the following:
+
+[source,java]
+----
+@Override
+public List<Class<?>> getModules() {
+    return Arrays.asList(
+            ToDoAppDomainModule.class,
+            ToDoAppFixtureModule.class,
+            ToDoAppAppModule.class,
+            org.isisaddons.module.audit.AuditModule.class,
+            org.isisaddons.module.command.CommandModule.class,
+            org.isisaddons.module.devutils.DevUtilsModule.class,
+            org.isisaddons.module.docx.DocxModule.class,
+            org.isisaddons.module.publishing.PublishingModule.class,
+            org.isisaddons.module.sessionlogger.SessionLoggerModule.class,
+            org.isisaddons.module.settings.SettingsModule.class
+    );
+}
+----
+
+As can be seen, the various (non-ASF) link:http://isisaddons.org[Isis Addons] modules also each provide a module class that can be easily referenced.
+
+
+=== `getAdditionalServices()`
+
+We normally we recommend that services are defined exclusively through `getModules()`, and that this method should therefore return an empty list.  However, there are certain use cases where the a service must be explicitly specified either because the service required does not (for whatever reason) have a xref:rg.adoc#_rg_annotations_manpage-DomainService[`@DomainService`] annotation.
+
+For example, the (non-ASF) http://github.com/isisaddons/isis-module-security[Isis addons' security] module (v1.9.0) allows the policy to evaluate conflicting permissions to be specified by explicitly registering either the `PermissionsEvaluationServiceAllowBeatsVeto` domain service or the `PermissionsEvaluationServiceVetoBeatsAllow` domain service:
+
+[source,java]
+----
+@Override
+public List<Class<?>> getAdditionalServices() {
+    return Arrays.asList(
+            org.isisaddons.module.security.dom.permission.PermissionsEvaluationServiceVetoBeatsAllow.class
+    );
+}
+----
+
+If this method returns a non-`null` value, then it overrides the value of `isis.services` configuration property.
+
+
+
+
+=== `getAuthenticationMechanism()`
+
+If non-`null`, this method specifies the authentication mechanism to use.  The valid values are currently `"shiro"`  or `"bypass"`.  If null is returned then the value of the `isis.authentication` configuration property (in `isis.properties` file) is used instead.
+
+See the xref:ug.adoc#_ug_security[user guide] for further details on configuring shiro or bypass security.
+
+[NOTE]
+====
+This property is ignored for integration tests (which always uses the `"bypass"` mechanism).
+====
+
+
+
+=== `getAuthorizationMechanism()`
+
+If non-`null`, this method specifies the authorization mechanism to use.  The valid values are currently `"shiro"`  or `"bypass"`.  If null is returned then the value of the `isis.authorization` configuration property (in `isis.properties` file) is used instead.
+
+See the xref:ug.adoc#_ug_security[user guide] for further details on configuring shiro or bypass security.
+
+[NOTE]
+====
+This property is ignored for integration tests (which always uses the `"bypass"` mechanism).
+====
+
+
+
+
+=== `getFixtures()`
+
+If non-`null`, this method specifies the fixture script(s) to be run on startup.  This is particularly useful when developing or demoing while using an in-memory database.
+
+For example:
+
+[source,java]
+----
+@Override
+public List<Class<? extends FixtureScript>> getFixtures() {
+    return Lists.newArrayList(todoapp.fixture.demo.DemoFixture.class);
+}
+----
+
+
+
+Note that in order for fixtures to be installed it is also necessary to set the `isis.persistor.datanucleus.install-fixtures` key to `true`.  This can most easily be done using the `getConfigurationProperties()` method, discussed below.
+
+
+
+=== `getConfigurationProperties()`
+
+This method allow arbitrary other configuration properties to be overridden.  One common use case is in conjunction with the `getFixtures()` method, discussed above:
+
+[source,java]
+----
+@Override
+public Map<String, String> getConfigurationProperties() {
+    Map<String, String> props = Maps.newHashMap();
+    props.put("isis.persistor.datanucleus.install-fixtures", "true");
+    return props;
+}
+----
+
+
+
+
+
+
+
+== Bootstrapping
+
+One of the primary goals of the `AppManifest` is to unify the bootstrapping of both integration tests and the webapp.  This requires that the integration tests and webapp can both reference the implementation.
+
+We strongly recommend using a `myapp-app` Maven module to hold the implementation of the `AppManifest`.  This Maven module can then also hold dependencies which are common to both integration tests and the webapp, specifically the `org.apache.isis.core:isis-core-runtime` and the `org.apache.isis.core:isis-core-wrapper` modules.
+
+We also strongly recommend that any application-layer domain services and view models (code that references persistent domain entities but that is not referenced back) is moved to this `myapp-app` module.  This will allow the architectural layering of the overall application to be enforced by Maven.
+
+What then remains is to update the bootstrapping code itself.
+
+
+=== Integration Tests
+
+Bootstrapping integration tests is still performed using the `IsisSystemForTest.Builder`, but very often the bootstrapping code can be substantially simplified (compared to not using an `AppManifest`, that is).
+
+For example, this is the bootstrapping code for the xref:ug.adoc#_ug_getting-started_simpleapp-archetype[SimpleApp archetype] looks something like:
+
+[source,java]
+----
+public class DomainAppSystemInitializer {
+    public static void initIsft() {
+        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
+        if(isft == null) {
+            isft = new IsisSystemForTest.Builder()
+                    .withLoggingAt(org.apache.log4j.Level.INFO)
+                    .with(new MyAppAppManifest())
+                    .with(new IsisConfigurationForJdoIntegTests())
+                    .build()
+                    .setUpSystem();
+            IsisSystemForTest.set(isft);
+        }
+    }
+}
+----
+
+
+
+
+=== Webapps
+
+To bootstrap an Apache Isis webapp (using the xref:ug.adoc#_ug_wicket-viewer[Wicket viewer]), there are two choices:
+
+* either specify the `AppManifest` by overriding the `IsisWicketApplication#newWicketModule()`, eg: +
++
+[source,java]
+----
+@Override
+protected Module newIsisWicketModule() {
+    final Module isisDefaults = super.newIsisWicketModule();
+    ...
+    final Module overrides = new AbstractModule() {
+        @Override
+        protected void configure() {
+            ...
+            bind(AppManifest.class).toInstance(new MyAppAppManifest());
+        }
+    };
+    return Modules.override(isisDefaults).with(overrides);
+}
+----
+
+* alternatively update `isis.properties`, using the `isis.appManifest` key to specify the `AppManifest` implementation, eg: +
++
+[source,ini]
+----
+isis.appManifest=domainapp.app.MyAppAppManifest
+----
+
+The first (programmatic) approach takes precedence over the second approach (configuration properties).
+
+[TIP]
+====
+If you use the `org.apache.isis.WebServer` class to launch your application from the xref:ug.adoc#_ug_deployment_cmd-line[command line], then should be aware that arbitrary configuration properties can be specified as system properties.  In particular, therefore, you can override the `isis.appManifest` configuration property:
+
+[source,ini]
+----
+java -Disis.appManifest=com.mycompany.myapp.MyAppAppManifestWithFixtures \
+     org.apache.isis.WebServer
+----
+
+====
+
+
+
+
+
+
+
+
+
+
+== Subsidiary Goals
+
+There are a number of subsidiary goals of the `AppManifest` class (though as of v1.9.0 these have not yet implemented):
+
+* 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
+
+* Speed up bootstrapping by only scanning for classes annotated by `@DomainService` and `@PersistenceCapable` once.
+
+* Provide a programmatic way to contribute elements of `web.xml`.
+
+* Provide a programmatic way to configure Shiro security.
+
+* 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 ``AppManifest``s to be switched on and off dynamically (eg if Java9 is compatible with OSGi, being one of the design goals).
+
+
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc
index 0b7c494..422c6e6 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc
@@ -4,10 +4,8 @@
 :_basedir: ../
 :_imagesdir: images/
 
-NOTE: TODO
 
-
-The table below summarizes all the convenience superclasses defined by Apache Isis.
+This section catalogues the various convenience superclasses defined by Apache Isis.  These are listed in the table below.
 
 .Convenience Superclasses
 [cols="2,4a,1,1", options="header"]

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/adocs/documentation/src/main/asciidoc/guides/_ug_testing_integ-test-support_bootstrapping.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_ug_testing_integ-test-support_bootstrapping.adoc b/adocs/documentation/src/main/asciidoc/guides/_ug_testing_integ-test-support_bootstrapping.adoc
index da5ca77..5b2d489 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_ug_testing_integ-test-support_bootstrapping.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_ug_testing_integ-test-support_bootstrapping.adoc
@@ -9,38 +9,74 @@ Integration tests instantiate an Apache Isis "runtime" (as a singleton) within a
 
 Nevertheless, we do need to bootstrap the runtime for the very first test.
 
-Since the integration tests don't depend on the `webapp` module, it's necessary to repeat all the (relevant) all the configuration in `isis.properties` and related files.  That said, in practice the relevant information isn't all that much.
-
-[NOTE]
-====
-We hope to simplify the way this works in future versions of Apache Isis.
-====
+As of 1.9.0 the bootstrapping of integration tests and webapps has been simplified through the xref:rg.adoc#_rg_classes_AppManifest-bootstrapping[`AppManifest`] class.  Since this isn't mandatory, for now we present both techniques.
 
 The example code in this section is taken from the app generated by the xref:ug.adoc#_ug_getting-started_simpleapp-archetype[SimpleApp archetype].
 
 
 
 
-== Builder
+== System Initializer
+
+The bootstrapping itself is performed by a "system initializer" class.  This is responsible for instantiating the Apache Isis runtime, and binding it to a thread-local.
 
-The bootstrapping itself is mostly performed by a subclass of the `IsisSystemForTest.Builder` class:
+=== 1.9.0 (`AppManifest`)
+
+As of 1.9.0, the code (using `AppManifest`) is:
 
 [source,java]
 ----
-private static class SimpleAppSystemBuilder extends IsisSystemForTest.Builder {      // <1>
+public class DomainAppSystemInitializer {
+    public static void initIsft() {
+        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
+        if(isft == null) {
+            isft = new IsisSystemForTest.Builder()
+                    .withLoggingAt(org.apache.log4j.Level.INFO)
+                    .with(new DomainAppAppManifest())
+                    .with(new IsisConfigurationForJdoIntegTests())
+                    .build()
+                    .setUpSystem();
+            IsisSystemForTest.set(isft);
+        }
+    }
+}
+----
+
+where `DomainAppAppManifest` in turn is defined as:
 
-    public SimpleAppSystemBuilder() {
+[source,java]
+----
+public class DomainAppAppManifest implements AppManifest {
+    @Override
+    public List<Class<?>> getModules() {
+        return Arrays.asList(
+                domainapp.dom.DomainAppDomainModule.class,
+                domainapp.fixture.DomainAppFixtureModule.class,
+                domainapp.app.DomainAppAppModule.class
+        );
+    }
+    ...
+}
+----
+
+Further details on bootstrapping with the `AppManifest` can be found in the xref:rg.adoc#_rg_classes_AppManifest-bootstrapping[reference guide].
+
+=== 1.8.0 and earlier
+
+Prior to 1.9.0, the services and entities had to be specified in two separate locations.  The suggested way to do this was to introduce a subclass of the `IsisSystemForTest.Builder` class:
+
+[source,java]
+----
+private static class DomainAppSystemBuilder extends IsisSystemForTest.Builder {      // <1>
+    public DomainAppSystemBuilder() {
         withLoggingAt(org.apache.log4j.Level.INFO);
         with(testConfiguration());
         with(new DataNucleusPersistenceMechanismInstaller());                        // <2>
-
         withServicesIn( "domainapp" );                                               // <3>
     }
-
     private static IsisConfiguration testConfiguration() {
         final IsisConfigurationForJdoIntegTests testConfiguration =
             new IsisConfigurationForJdoIntegTests();                                 // <4>
-
         testConfiguration.addRegisterEntitiesPackagePrefix("domainapp.dom.modules"); // <5>
         return testConfiguration;
     }
@@ -50,9 +86,30 @@ private static class SimpleAppSystemBuilder extends IsisSystemForTest.Builder {
 <2> equivalent to `isis.persistor=datanucleus` in `isis.properties`
 <3> specify the `isis.services` key in `isis.properties` (where "domainapp" is the base package for all classes within the app)
 <4> `IsisConfigurationForJdoIntegTests` has pre-canned configuration for using an in-memory HSQLDB and other standard settings; more on this below.
-<5> equivalent to `isis.persistor.datanucleus.RegisterEntities.packagePrefix` key (typically in `persistor_datanucleus.properties`
+<5> equivalent to `isis.persistor.datanucleus.RegisterEntities.packagePrefix` key (typically in `persistor_datanucleus.properties`)
 
 
+This builder could then be used within the system initializer:
+
+[source,java]
+----
+public class DomainAppSystemInitializer {
+    public static void initIsft() {
+        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
+        if(isft == null) {
+            isft = new DomainAppSystemBuilder()    // <1>
+                            .build()
+                            .setUpSystem();
+            IsisSystemForTest.set(isft);           // <2>
+        }
+    }
+    private static class DomainAppSystemBuilder
+        extends IsisSystemForTest.Builder { ... }
+}
+----
+<1> instantiates and initializes the Apache Isis runtime (the `IsisSystemForTest` class)
+<2> binds the runtime to a thread-local.
+
 
 
 === IsisConfigurationForJdoIntegTests
@@ -137,36 +194,6 @@ To remove a little bit of boilerplate, the `IsisConfigurationForJdoIntegTests` c
 
 
 
-
-== System Initializer
-
-The builder is defined and used within a class we call the system initializer that is responsible for instantiating the Apache Isis runtime, and binding it to a thread-local.  This is performed within a static `initIsft()` method.
-
-Here's the code:
-
-[source,java]
-----
-public class SimpleAppSystemInitializer {
-    public static void initIsft() {
-        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
-        if(isft == null) {
-            isft = new SimpleAppSystemBuilder()    // <1>
-                            .build()
-                            .setUpSystem();
-            IsisSystemForTest.set(isft);           // <2>
-        }
-    }
-    private static class SimpleAppSystemBuilder
-        extends IsisSystemForTest.Builder { ... }
-
-}
-----
-<1> instantiates and initializes the Apache Isis runtime (the `IsisSystemForTest` class)
-<2> binds the runtime to a thread-local.
-
-
-
-
 == Abstract Class
 
 We recommend defining a base class for all your other classes to integration classes to inherit from.  The main responsibility of this class is tocall the system initializer, described earlier.  We only need the initialization to be performed once, so this call is performed in a `@BeforeClass` hook.
@@ -175,11 +202,11 @@ The code below shows the general form:
 
 [source,java]
 ----
-public abstract class SimpleAppIntegTest {
+public abstract class DomainAppIntegTest {
     @BeforeClass
     public static void initClass() {
         org.apache.log4j.PropertyConfigurator.configure("logging.properties");   // <1>
-        SimpleAppSystemInitializer.initIsft();                                   // <2>
+        DomainAppSystemInitializer.initIsft();                                   // <2>
         new ScenarioExecutionForIntegration();                                   // <3>
     }
 }
@@ -196,7 +223,7 @@ In fact, we recommend that your base class inherit from Apache Isis' `Integratio
 
 [source,java]
 ----
-public abstract class SimpleAppIntegTest extends IntegrationTestAbstract {
+public abstract class DomainAppIntegTest extends IntegrationTestAbstract {
     ...
 }
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
index 1f39e01..906fb6d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
@@ -99,18 +99,8 @@ public interface AppManifest {
      *     <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).
-     * </p>
-     *
-     * <p>
-     *     If a manifest has been provided then the value of <tt>isis.services-installer</tt> configuration property
-     *     will be ignored and the <tt>isis.services.ServicesInstallerFromAnnotation.packagePrefix</tt>
-     *     configuration property will be ignored.
-     * </p>
-     *
-     * <p>
-     *     Note: the class implementing this interface will typically include itself in the list of classes, so that any
-     *     "global" services (for example an application home page) are also picked up.
+     *     <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();
@@ -121,8 +111,8 @@ public interface AppManifest {
      * services defined via {@link #getModules()}.
      *
      * <p>
-     *     Normally we recommend services are defined exclusively through {@link #getModules()}, and that this metho
-     *     should return an empty list.  However, this method exists to support those use cases where either the
+     *     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>

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifest.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifest.java b/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifest.java
new file mode 100644
index 0000000..1fab620
--- /dev/null
+++ b/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifest.java
@@ -0,0 +1,97 @@
+/*
+ *  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.app;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+
+import domainapp.dom.DomainAppDomainModule;
+import domainapp.fixture.DomainAppFixtureModule;
+
+/**
+ * Bootstrap the application.
+ */
+public class DomainAppAppManifest implements AppManifest {
+
+    /**
+     * Load all services and entities found in (the packages and subpackages within) these modules
+     */
+    @Override
+    public List<Class<?>> getModules() {
+        return Arrays.asList(
+                DomainAppDomainModule.class,  // domain (entities and repositories)
+                DomainAppFixtureModule.class, // fixtures
+                DomainAppAppModule.class      // home page service etc
+        );
+    }
+
+    /**
+     * No additional services.
+     */
+    @Override
+    public List<Class<?>> getAdditionalServices() {
+        return Collections.emptyList();
+    }
+
+    /**
+     * Use shiro for authentication.
+     *
+     * <p>
+     *     NB: this is ignored for integration tests, which always use "bypass".
+     * </p>
+     */
+    @Override
+    public String getAuthenticationMechanism() {
+        return "shiro";
+    }
+
+    /**
+     * Use shiro for authorization.
+     *
+     * <p>
+     *     NB: this is ignored for integration tests, which always use "bypass".
+     * </p>
+     */
+    @Override
+    public String getAuthorizationMechanism() {
+        return "shiro";
+    }
+
+    /**
+     * No fixtures.
+     */
+    @Override
+    public List<Class<? extends FixtureScript>> getFixtures() {
+        return Collections.emptyList();
+    }
+
+    /**
+     * No overrides.
+     */
+    @Override
+    public Map<String, String> getConfigurationProperties() {
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifestBypassSecurity.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifestBypassSecurity.java b/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifestBypassSecurity.java
new file mode 100644
index 0000000..6cc8e0b
--- /dev/null
+++ b/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifestBypassSecurity.java
@@ -0,0 +1,35 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package domainapp.app;
+
+/**
+ * Bypasses security, meaning any user/password combination can be used to login.
+ */
+public class DomainAppAppManifestBypassSecurity extends DomainAppAppManifest {
+
+    @Override
+    public String getAuthenticationMechanism() {
+        return "bypass";
+    }
+
+    @Override
+    public String getAuthorizationMechanism() {
+        return "bypass";
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifestWithFixtures.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifestWithFixtures.java b/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifestWithFixtures.java
new file mode 100644
index 0000000..172268c
--- /dev/null
+++ b/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppManifestWithFixtures.java
@@ -0,0 +1,55 @@
+/*
+ *  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.app;
+
+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.fixture.scenarios.RecreateSimpleObjects;
+
+/**
+ * Run the app but without setting up any fixtures.
+ */
+public class DomainAppAppManifestWithFixtures extends DomainAppAppManifest {
+
+    /**
+     * Fixtures to be installed.
+     */
+    @Override
+    public List<Class<? extends FixtureScript>> getFixtures() {
+        return Lists.newArrayList(RecreateSimpleObjects.class);
+    }
+
+    /**
+     * 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;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppModule.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppModule.java b/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppModule.java
new file mode 100644
index 0000000..7a4059c
--- /dev/null
+++ b/example/application/simpleapp/app/src/main/java/domainapp/app/DomainAppAppModule.java
@@ -0,0 +1,23 @@
+/*
+ *  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.app;
+
+public final class DomainAppAppModule {
+    private DomainAppAppModule(){}
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageService.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageService.java b/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageService.java
new file mode 100644
index 0000000..58f97f1
--- /dev/null
+++ b/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageService.java
@@ -0,0 +1,51 @@
+/*
+ *  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.app.services.homepage;
+
+import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.HomePage;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+@DomainService(
+        nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY // trick to suppress the actions from the top-level menu
+)
+public class HomePageService {
+
+    //region > homePage (action)
+
+    @Action(
+            semantics = SemanticsOf.SAFE
+    )
+    @HomePage
+    public HomePageViewModel homePage() {
+        return container.injectServicesInto(new HomePageViewModel());
+    }
+
+    //endregion
+
+    //region > injected services
+
+    @javax.inject.Inject
+    DomainObjectContainer container;
+
+    //endregion
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.java b/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.java
new file mode 100644
index 0000000..1959289
--- /dev/null
+++ b/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.java
@@ -0,0 +1,50 @@
+/*
+ *  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.app.services.homepage;
+
+import java.util.List;
+
+import org.apache.isis.applib.annotation.ViewModel;
+
+import domainapp.dom.simple.SimpleObject;
+import domainapp.dom.simple.SimpleObjects;
+
+@ViewModel
+public class HomePageViewModel {
+
+    //region > title
+    public String title() {
+        return getObjects().size() + " objects";
+    }
+    //endregion
+
+    //region > object (collection)
+    @org.apache.isis.applib.annotation.HomePage
+    public List<SimpleObject> getObjects() {
+        return simpleObjects.listAll();
+    }
+    //endregion
+
+    //region > injected services
+
+    @javax.inject.Inject
+    SimpleObjects simpleObjects;
+
+    //endregion
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.layout.json
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.layout.json b/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.layout.json
new file mode 100644
index 0000000..34f78e0
--- /dev/null
+++ b/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.layout.json
@@ -0,0 +1,43 @@
+/**
+ *  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.
+ */
+{
+    "columns": [
+        {
+            "span": 0,
+            "memberGroups": {}
+        },
+        {
+            "span": 0,
+            "memberGroups": {}
+        },
+        {
+            "span": 0,
+            "memberGroups": {}
+        },
+        {
+            "span": 12,
+            "collections": {
+                "objects": {
+                    "collectionLayout": {
+                        "render": "EAGERLY"
+                    }
+                }
+            }
+        }
+    ],
+    "actions": {}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.png
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.png b/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.png
new file mode 100644
index 0000000..cb03785
Binary files /dev/null and b/example/application/simpleapp/app/src/main/java/domainapp/app/services/homepage/HomePageViewModel.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifest.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifest.java b/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifest.java
deleted file mode 100644
index 357ab39..0000000
--- a/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifest.java
+++ /dev/null
@@ -1,100 +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.home;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-import domainapp.dom.DomainAppDomainModule;
-import domainapp.fixture.DomainAppFixtureModule;
-import domainapp.fixture.scenarios.RecreateSimpleObjects;
-
-/**
- * Bootstrap the application.
- */
-public class SimpleAppManifest implements AppManifest {
-
-    /**
-     * Load all services and entities found in (the packages and subpackages within) these modules
-     */
-    @Override
-    public List<Class<?>> getModules() {
-        return Arrays.asList(
-                DomainAppDomainModule.class,  // domain (entities and repositories)
-                DomainAppFixtureModule.class, // fixtures
-                SimpleAppManifest.class       // home page service
-        );
-    }
-
-    /**
-     * No additional services.
-     */
-    @Override
-    public List<Class<?>> getAdditionalServices() {
-        return Collections.emptyList();
-    }
-
-    /**
-     * Use shiro for authentication.
-     *
-     * <p>
-     *     NB: this is ignored for integration tests, which always use "bypass".
-     * </p>
-     */
-    @Override
-    public String getAuthenticationMechanism() {
-        return "shiro";
-    }
-
-    /**
-     * Use shiro for authorization.
-     *
-     * <p>
-     *     NB: this is ignored for integration tests, which always use "bypass".
-     * </p>
-     */
-    @Override
-    public String getAuthorizationMechanism() {
-        return "shiro";
-    }
-
-    /**
-     * Run these fixtures.
-     */
-    @Override
-    public List<Class<? extends FixtureScript>> getFixtures() {
-        return Lists.newArrayList(RecreateSimpleObjects.class);
-    }
-
-    /**
-     * No additional overrides
-     */
-    @Override
-    public Map<String, String> getConfigurationProperties() {
-        return null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifestBypassSecurity.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifestBypassSecurity.java b/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifestBypassSecurity.java
deleted file mode 100644
index 9373739..0000000
--- a/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifestBypassSecurity.java
+++ /dev/null
@@ -1,35 +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.home;
-
-/**
- * Bypasses security, meaning any user/password combination can be used to login.
- */
-public class SimpleAppManifestBypassSecurity extends SimpleAppManifest {
-
-    @Override
-    public String getAuthenticationMechanism() {
-        return "bypass";
-    }
-
-    @Override
-    public String getAuthorizationMechanism() {
-        return "bypass";
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java b/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
deleted file mode 100644
index b13c15d..0000000
--- a/example/application/simpleapp/app/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
+++ /dev/null
@@ -1,36 +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.home;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-/**
- * Run the app but without setting up any fixtures.
- */
-public class SimpleAppManifestNoFixtures extends SimpleAppManifest {
-
-    @Override
-    public List<Class<? extends FixtureScript>> getFixtures() {
-        return Collections.emptyList();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageService.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageService.java b/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageService.java
deleted file mode 100644
index 17a9c79..0000000
--- a/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageService.java
+++ /dev/null
@@ -1,51 +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.home.services.homepage;
-
-import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.HomePage;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.SemanticsOf;
-
-@DomainService(
-        nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY // trick to suppress the actions from the top-level menu
-)
-public class HomePageService {
-
-    //region > homePage (action)
-
-    @Action(
-            semantics = SemanticsOf.SAFE
-    )
-    @HomePage
-    public HomePageViewModel homePage() {
-        return container.injectServicesInto(new HomePageViewModel());
-    }
-
-    //endregion
-
-    //region > injected services
-
-    @javax.inject.Inject
-    DomainObjectContainer container;
-
-    //endregion
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java b/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java
deleted file mode 100644
index d20c432..0000000
--- a/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java
+++ /dev/null
@@ -1,50 +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.home.services.homepage;
-
-import java.util.List;
-
-import org.apache.isis.applib.annotation.ViewModel;
-
-import domainapp.dom.simple.SimpleObject;
-import domainapp.dom.simple.SimpleObjects;
-
-@ViewModel
-public class HomePageViewModel {
-
-    //region > title
-    public String title() {
-        return getObjects().size() + " objects";
-    }
-    //endregion
-
-    //region > object (collection)
-    @org.apache.isis.applib.annotation.HomePage
-    public List<SimpleObject> getObjects() {
-        return simpleObjects.listAll();
-    }
-    //endregion
-
-    //region > injected services
-
-    @javax.inject.Inject
-    SimpleObjects simpleObjects;
-
-    //endregion
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json b/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json
deleted file mode 100644
index 34f78e0..0000000
--- a/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json
+++ /dev/null
@@ -1,43 +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.
- */
-{
-    "columns": [
-        {
-            "span": 0,
-            "memberGroups": {}
-        },
-        {
-            "span": 0,
-            "memberGroups": {}
-        },
-        {
-            "span": 0,
-            "memberGroups": {}
-        },
-        {
-            "span": 12,
-            "collections": {
-                "objects": {
-                    "collectionLayout": {
-                        "render": "EAGERLY"
-                    }
-                }
-            }
-        }
-    ],
-    "actions": {}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png b/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png
deleted file mode 100644
index cb03785..0000000
Binary files a/example/application/simpleapp/app/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/bootstrap/DomainAppSystemInitializer.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/bootstrap/DomainAppSystemInitializer.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/bootstrap/DomainAppSystemInitializer.java
new file mode 100644
index 0000000..0918431
--- /dev/null
+++ b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/bootstrap/DomainAppSystemInitializer.java
@@ -0,0 +1,41 @@
+/*
+ *  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.integtests.bootstrap;
+
+import org.apache.isis.core.integtestsupport.IsisSystemForTest;
+import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests;
+
+import domainapp.app.DomainAppAppManifest;
+
+public class DomainAppSystemInitializer {
+
+    public static void initIsft() {
+        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
+        if(isft == null) {
+            isft = new IsisSystemForTest.Builder()
+                    .withLoggingAt(org.apache.log4j.Level.INFO)
+                    .with(new DomainAppAppManifest())
+                    .with(new IsisConfigurationForJdoIntegTests())
+                    .build()
+                    .setUpSystem();
+            IsisSystemForTest.set(isft);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java
deleted file mode 100644
index 135a71a..0000000
--- a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java
+++ /dev/null
@@ -1,41 +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.integtests.bootstrap;
-
-import org.apache.isis.core.integtestsupport.IsisSystemForTest;
-import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests;
-
-import domainapp.home.SimpleAppManifest;
-
-public class SimpleAppSystemInitializer {
-
-    public static void initIsft() {
-        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
-        if(isft == null) {
-            isft = new IsisSystemForTest.Builder()
-                    .withLoggingAt(org.apache.log4j.Level.INFO)
-                    .with(new SimpleAppManifest())
-                    .with(new IsisConfigurationForJdoIntegTests())
-                    .build()
-                    .setUpSystem();
-            IsisSystemForTest.set(isft);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java
index b175d47..49eb95a 100644
--- a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java
+++ b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/specglue/BootstrappingGlue.java
@@ -21,14 +21,14 @@ import org.apache.isis.core.specsupport.specs.CukeGlueAbstract;
 
 import cucumber.api.java.After;
 import cucumber.api.java.Before;
-import domainapp.integtests.bootstrap.SimpleAppSystemInitializer;
+import domainapp.integtests.bootstrap.DomainAppSystemInitializer;
 
 public class BootstrappingGlue extends CukeGlueAbstract {
 
     @Before(value={"@integration"}, order=100)
     public void beforeScenarioIntegrationScope() {
         org.apache.log4j.PropertyConfigurator.configure("logging.properties");
-        SimpleAppSystemInitializer.initIsft();
+        DomainAppSystemInitializer.initIsft();
         
         before(ScenarioExecutionScope.INTEGRATION);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/DomainAppIntegTest.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/DomainAppIntegTest.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/DomainAppIntegTest.java
new file mode 100644
index 0000000..95fd156
--- /dev/null
+++ b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/DomainAppIntegTest.java
@@ -0,0 +1,39 @@
+/*
+ *  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.integtests.tests;
+
+import org.junit.BeforeClass;
+
+import org.apache.isis.core.integtestsupport.IntegrationTestAbstract;
+import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForIntegration;
+
+import domainapp.integtests.bootstrap.DomainAppSystemInitializer;
+
+public abstract class DomainAppIntegTest extends IntegrationTestAbstract {
+
+    @BeforeClass
+    public static void initClass() {
+        org.apache.log4j.PropertyConfigurator.configure("logging.properties");
+        DomainAppSystemInitializer.initIsft();
+
+        // instantiating will install onto ThreadLocal
+        new ScenarioExecutionForIntegration();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/SimpleAppIntegTest.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/SimpleAppIntegTest.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/SimpleAppIntegTest.java
deleted file mode 100644
index 3ceef4e..0000000
--- a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/SimpleAppIntegTest.java
+++ /dev/null
@@ -1,39 +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.integtests.tests;
-
-import org.junit.BeforeClass;
-
-import org.apache.isis.core.integtestsupport.IntegrationTestAbstract;
-import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForIntegration;
-
-import domainapp.integtests.bootstrap.SimpleAppSystemInitializer;
-
-public abstract class SimpleAppIntegTest extends IntegrationTestAbstract {
-
-    @BeforeClass
-    public static void initClass() {
-        org.apache.log4j.PropertyConfigurator.configure("logging.properties");
-        SimpleAppSystemInitializer.initIsft();
-
-        // instantiating will install onto ThreadLocal
-        new ScenarioExecutionForIntegration();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
index 5abc8cd..a935ec6 100644
--- a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
+++ b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
@@ -30,10 +30,10 @@ import org.apache.isis.applib.services.wrapper.InvalidException;
 
 import domainapp.dom.simple.SimpleObject;
 import domainapp.fixture.scenarios.RecreateSimpleObjects;
-import domainapp.integtests.tests.SimpleAppIntegTest;
+import domainapp.integtests.tests.DomainAppIntegTest;
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class SimpleObjectIntegTest extends SimpleAppIntegTest {
+public class SimpleObjectIntegTest extends DomainAppIntegTest {
 
     @Inject
     FixtureScripts fixtureScripts;

http://git-wip-us.apache.org/repos/asf/isis/blob/9b706707/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
index 2ada1fe..7266845 100644
--- a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
+++ b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
@@ -37,10 +37,10 @@ import domainapp.dom.simple.SimpleObject;
 import domainapp.dom.simple.SimpleObjects;
 import domainapp.fixture.dom.simple.SimpleObjectsTearDown;
 import domainapp.fixture.scenarios.RecreateSimpleObjects;
-import domainapp.integtests.tests.SimpleAppIntegTest;
+import domainapp.integtests.tests.DomainAppIntegTest;
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class SimpleObjectsIntegTest extends SimpleAppIntegTest {
+public class SimpleObjectsIntegTest extends DomainAppIntegTest {
 
     @Inject
     FixtureScripts fixtureScripts;