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/06 19:01:52 UTC

[3/3] isis git commit: ISIS-848: renaming GlobSpec to AppManifest.

ISIS-848: renaming GlobSpec to AppManifest.

nb: incomplete at this point, need to handle AppManifest#getServices() ... pushing to back up work.


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

Branch: refs/heads/ISIS-848
Commit: b134bdad6a3ccd27dd6bb7f35abe2b485473a1c9
Parents: 3491249
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Aug 6 18:01:40 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Aug 6 18:01:40 2015 +0100

----------------------------------------------------------------------
 ..._ug_getting-started_simpleapp-archetype.adoc |   5 +
 .../org/apache/isis/applib/AppManifest.java     | 161 +++++++++++++++++++
 .../java/org/apache/isis/applib/GlobSpec.java   | 143 ----------------
 .../IsisComponentProviderDefault.java           |  16 +-
 .../integtestsupport/IsisSystemForTest.java     |  24 +--
 .../core/runtime/system/SystemConstants.java    |   3 +-
 .../IsisComponentProviderAbstract.java          |  20 +--
 .../IsisComponentProviderUsingInstallers.java   |  18 +--
 example/application/simpleapp/fixture/pom.xml   |   7 +
 .../fixture/DomainAppFixtureModule.java         |  24 +++
 ...nAppFixtureScriptsSpecificationProvider.java |  44 +++++
 .../fixture/DomainAppFixturesProvider.java      |  44 -----
 example/application/simpleapp/glob/pom.xml      |  77 ---------
 .../java/domainapp/glob/DomainAppGlobSpec.java  |  91 -----------
 .../domainapp/glob/DomainAppGlobSpecBypass.java |  35 ----
 .../glob/DomainAppGlobSpecNoFixtures.java       |  36 -----
 .../glob/app/homepage/HomePageService.java      |  51 ------
 .../glob/app/homepage/HomePageViewModel.java    |  50 ------
 .../app/homepage/HomePageViewModel.layout.json  |  43 -----
 .../glob/app/homepage/HomePageViewModel.png     | Bin 456 -> 0 bytes
 example/application/simpleapp/home/pom.xml      |  68 ++++++++
 .../java/domainapp/home/SimpleAppManifest.java  | 100 ++++++++++++
 .../domainapp/home/SimpleAppManifestBypass.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 0 -> 456 bytes
 .../application/simpleapp/integtests/pom.xml    |  11 +-
 .../bootstrap/SimpleAppSystemInitializer.java   |   4 +-
 example/application/simpleapp/pom.xml           |   4 +-
 example/application/simpleapp/webapp/pom.xml    |  12 +-
 .../src/main/webapp/WEB-INF/isis.properties     |   6 +-
 33 files changed, 674 insertions(+), 638 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/adocs/documentation/src/main/asciidoc/guides/_ug_getting-started_simpleapp-archetype.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_ug_getting-started_simpleapp-archetype.adoc b/adocs/documentation/src/main/asciidoc/guides/_ug_getting-started_simpleapp-archetype.adoc
index 00378ee..8b050e3 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_ug_getting-started_simpleapp-archetype.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_ug_getting-started_simpleapp-archetype.adoc
@@ -288,6 +288,11 @@ As noted above, the generated app is a very simple application consisting of a s
 |`myapp-fixture`
 |Domain object fixtures used for initializing the system when being demo'ed or for unit testing.
 
+|`myapp-home`
+|(1.9.0) The "home" module, containing the (optional) app manifest and any application-level services. +
+
+The app manifest partially replaces the
+
 |`myapp-integtests`
 |End-to-end xref:ug.adoc#_ug_testing_integ-test-support[integration tests] that exercise from the UI through to the database
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/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
new file mode 100644
index 0000000..1f39e01
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
@@ -0,0 +1,161 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.applib;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+
+/**
+ * Programmatic specification of the constituent parts of an application, most specifically the modules that contain
+ * domain services and possibly entities.
+ *
+ * <p>
+ * The modules are specified as classes; the framework uses the packages of these classes as the locations on the
+ * classpath to search for domain services (annotated with {@link org.apache.isis.applib.annotation.DomainService})
+ * and entities (annotated with {@link PersistenceCapable}).
+ * </p>
+ *
+ * <p>
+ * The interface also allows certain other aspects of the runtime to be specified:
+ * <ul>
+ *     <li>which authentication and/or authorization mechanism to be used (useful to disable security when developing/demoing)</li>
+ *     <li>which fixtures to run by default</li>
+ *     <li>overriding of arbitrary other configuration properties</li>
+ *     <li>which modules to load (useful when developing, to reduce startup times; just load the modules required)</li>
+ * </ul>
+ * </p>
+ *
+ * <p>
+ * To use, implement this interface and then define as the <tt>isis.appManifest</tt> key within the
+ * <tt>isis.properties</tt> configuration file, or specify programmatically when running integration tests.
+ * </p>
+ *
+ * <p>
+ * By convention the class implementing this interface reside in a <tt>xxx-home</tt> Maven module.  This
+ * can be referenced by both the <tt>xxx-integtests</tt> (Maven) module and the <tt>xxx-webapp</tt> (Maven) module,
+ * allowing configuration to be centralized.
+ * </p>
+ *
+ * <p>
+ * There are a number of subsidiary goals (not yet implemented):
+ * <ul>
+ *    <li>
+ *        <p>Allow different integration tests to run with different manifests.  Normally the running application is
+ *           shared (on a thread-local) between integration tests.  What the framework could do is to be intelligent
+ *           enough to keep track of the manifest in use for each integration test and tear down
+ *           the shared state if the "next" test uses a different manifest</p>
+ *    </li>
+ *    <li>
+ *        Speed up bootstrapping by only scanning for classes annotated by
+ *        {@link org.apache.isis.applib.annotation.DomainService} and {@link javax.jdo.annotations.PersistenceCapable}
+ *        once.
+ *    </li>
+ *    <li>
+ *        Provide a programmatic way to contribute elements of `web.xml`.
+ *    </li>
+ *    <li>
+ *        Provide a programmatic way to configure Shiro security.
+ *    </li>
+ *    <li>
+ *        <p>Anticipate the module changes forthcoming in Java 9.  Eventually we see that the AppManifest class acting
+ *        as an "aggregator", with the list of modules will become Java 9 modules each advertising the types that they
+ *        export.  It might even be possible for AppManifests to be switched on and off dynamically (eg if Java9 is
+ *        compatible with OSGi, being one of the design goals).</p>
+ *    </li>
+ * </ul>
+ * </p>
+ */
+public interface AppManifest {
+
+    /**
+     * A list of classes, each of which representing the root of one of the modules containing services and possibly
+     * entities, which together makes up the running application.
+     *
+     * <p>
+     *     The package of each such class is used as the basis for searching for domain services and registered
+     *     entities.  As such it replaces and overrides both the
+     *     <tt>isis.services.ServicesInstallerFromAnnotation.packagePrefix</tt> key (usually found in the
+     *     <tt>isis.properties</tt> file) and the
+     *     <tt>isis.persistor.datanucleus.RegisterEntities.packagePrefix</tt> key (usually found in the
+     *     <tt>persistor_datanucleus.properties</tt> file).
+     * </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.
+     * </p>
+     */
+    public List<Class<?>> getModules();
+
+    /**
+     * If non-null, overrides the value of <tt>isis.services</tt> configuration property to specify a list of
+     * additional classes to be instantiated as domain services (over and above the {@link DomainService}-annotated
+     * services defined via {@link #getModules()}.
+     *
+     * <p>
+     *     Normally we recommend services are defined exclusively through {@link #getModules()}, and that this metho
+     *     should return an empty list.  However, this method exists to support those use cases where either the
+     *     service required does not have a {@link DomainService} annotation, or where it does have the annotation
+     *     but its containing module cannot (for whatever reason) be listed under {@link #getModules()}.
+     * </p>
+     */
+    public List<Class<?>> getAdditionalServices();
+
+    /**
+     * If non-null, overrides the value of <tt>isis.authentication</tt> configuration property to specify the
+     * authentication mechanism.
+     *
+     * <p>
+     *     Ignored for integration tests (which always uses the 'bypass' mechanism).
+     * </p>
+     */
+    public String getAuthenticationMechanism();
+
+    /**
+     * If non-null, overrides the value of <tt>isis.authorization</tt> configuration property.
+     *
+     * <p>
+     *     Ignored for integration tests (which always uses the 'bypass' mechanism).
+     * </p>
+     */
+    public String getAuthorizationMechanism();
+
+    /**
+     * If non-null, overrides the value of <tt>isis.fixtures</tt> configuration property.
+     */
+    public List<Class<? extends FixtureScript>> getFixtures();
+
+    /**
+     * Overrides for any other configuration properties.
+     */
+    public Map<String,String> getConfigurationProperties();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/core/applib/src/main/java/org/apache/isis/applib/GlobSpec.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/GlobSpec.java b/core/applib/src/main/java/org/apache/isis/applib/GlobSpec.java
deleted file mode 100644
index ef245e2..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/GlobSpec.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.applib;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-/**
- * Specifies the "glob", in other words the set of modules (containing domain services and possibly entities), that
- * together make up the running application.
- *
- * <p>
- * To use, implement this interface and then define as the <tt>isis.globspec</tt> key within the
- * <tt>isis.properties</tt> configuration file, or programmatically.
- * </p>
- *
- * <p>
- * The intention is to centralize, so far as possible, the configuration that previously has been duplicated between
- * the <tt>xxx-integtests</tt> (Maven) module and the <tt>xxx-webapp</tt> integtests.
- * </p>
- *
- * <p>
- * There are a number of subsidiary goals:
- * <ul>
- *     <li>
- *         <p>
- *             by having multiple classes implementing this interface, it allows separate "profiles" of the application
- *             to be run.
- *         </p>
- *         <p>For example, a developer could define a globspec that</p>
- *         <ul>
- *             <li>uses the <tt>bypass</tt> security rather than the full-blown Shiro security</li>
- *             <li>excludes some or all addon modules, eg auditing and security</li>
- *             <li>for a large app whose domain has been broken out into multiple <tt>dom-xxx</tt> (Maven) modules, to
- *                 run subsets of the application</li>
- *         </ul>
- *         <p>This applies to both running the main app and also the integration tests.</p>
- *    </li>
- *    <li>
- *        <p>Allow different integration tests to run with different globspecs.  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 globspec used for each integration test and tear down
- *           the shared state if the "next" test uses a different globspec</p>
- *    </li>
- *    <li>
- *        Speed up bootstrapping by only scanning for classes annotated by
- *        {@link org.apache.isis.applib.annotation.DomainService} and {@link javax.jdo.annotations.PersistenceCapable}
- *        once.
- *    </li>
- *    <li>
- *        Provide a programmatic way to contribute elements of `web.xml`.  This is not yet implemented.
- *    </li>
- *    <li>
- *        Provide a programmatic way to configure Shiro security.  This is not yet implemented.
- *    </li>
- *    <li>
- *        <p>Anticipate the module changes forthcoming in Java 9.  Eventually we see that the globspec class will
- *        become an application manifest, while the list of modules will become Java 9 modules each advertising the
- *        types that they export.</p>
- *    </li>
- * </ul>
- * </p>
- * <p>
- *     <b>Note:</b> at this time the integration tests do not keep track of different globspecs; rather the
- *     globspec used for the first test is used for all subsequent tests.
- * </p>
- */
-public interface GlobSpec {
-
-    /**
-     * A list of classes, each of which representing the root of one of the modules containing services and possibly
-     * entities, which together makes up the running application.
-     *
-     * <p>
-     *     The package of each such class is used as the basis for searching for domain services and registered
-     *     entities.  As such it replaces and overrides both the
-     *     <tt>isis.services.ServicesInstallerFromAnnotation.packagePrefix</tt> key (usually found in the
-     *     <tt>isis.properties</tt> file) and the
-     *     <tt>isis.persistor.datanucleus.RegisterEntities.packagePrefix</tt> key (usually found in the
-     *     <tt>persistor_datanucleus.properties</tt> file).
-     * </p>
-     *
-     * <p>
-     *     If a globspec has been provided then the value of <tt>isis.services-installer</tt> configuration property
-     *     will be ignored and the <tt>isis.services</tt> configuration property will also 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.
-     * </p>
-     */
-    public List<Class<?>> getModules();
-
-    /**
-     * If non-null, overrides the value of <tt>isis.authentication</tt> configuration property to specify the
-     * authentication mechanism.
-     *
-     * <p>
-     *     Ignored for integration tests (which always uses the 'bypass' mechanism).
-     * </p>
-     */
-    public String getAuthenticationMechanism();
-
-    /**
-     * If non-null, overrides the value of <tt>isis.authorization</tt> configuration property.
-     *
-     * <p>
-     *     Ignored for integration tests (which always uses the 'bypass' mechanism).
-     * </p>
-     */
-    public String getAuthorizationMechanism();
-
-    /**
-     * If non-null, overrides the value of <tt>isis.fixtures</tt> configuration property.
-     */
-    public List<Class<? extends FixtureScript>> getFixtures();
-
-    /**
-     * Overrides for any other configuration properties.
-     */
-    public Map<String,String> getConfigurationProperties();
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java
index 8fc168d..da0ec2e 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisComponentProviderDefault.java
@@ -26,7 +26,7 @@ import java.util.Set;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
-import org.apache.isis.applib.GlobSpec;
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.fixtures.InstallableFixture;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -68,32 +68,32 @@ public class IsisComponentProviderDefault extends IsisComponentProviderAbstract
 
     public IsisComponentProviderDefault(
             final DeploymentType deploymentType,
-            final GlobSpec globSpecIfAny,
+            final AppManifest appManifestIfAny,
             final List<Object> servicesOverride,
             final List<InstallableFixture> fixturesOverride,
             final IsisConfiguration configurationOverride,
             final ProgrammingModel programmingModelOverride,
             final MetaModelValidator metaModelValidatorOverride) {
-        super(deploymentType, globSpecIfAny);
+        super(deploymentType, appManifestIfAny);
 
         this.configuration = elseDefault(configurationOverride);
 
         final String fixtureClassNamesCsv;
-        if(globSpec != null) {
+        if(appManifest != null) {
 
-            specifyServicesAndRegisteredEntitiesUsing(globSpec);
+            specifyServicesAndRegisteredEntitiesUsing(appManifest);
 
             // required to prevent RegisterEntities validation from complaining
             // if it can't find any @PersistenceCapable entities in a module
             // that contains only services.
             putConfigurationProperty(
-                    "isis.globSpec", globSpecIfAny.getClass().getName()
+                    "isis.globSpec", appManifestIfAny.getClass().getName()
             );
 
-            List<Class<? extends FixtureScript>> fixtureClasses = globSpec.getFixtures();
+            List<Class<? extends FixtureScript>> fixtureClasses = appManifest.getFixtures();
             fixtureClassNamesCsv = fixtureClassNamesFrom(fixtureClasses);
 
-            overrideConfigurationUsing(globSpec);
+            overrideConfigurationUsing(appManifest);
 
             this.services = createServices(configuration);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index 673f509..6c7d6d8 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -32,7 +32,7 @@ import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
 import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.GlobSpec;
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.fixtures.FixtureClock;
 import org.apache.isis.applib.fixtures.InstallableFixture;
 import org.apache.isis.applib.services.command.Command;
@@ -153,7 +153,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
 
 
     // these fields 'xxxForComponentProvider' are used to initialize the IsisComponentProvider, but shouldn't be used thereafter.
-    private final GlobSpec globSpecForComponentProvider;
+    private final AppManifest appManifestForComponentProvider;
     private final IsisConfiguration configurationForComponentProvider;
     private final List<Object> servicesForComponentProvider;
     private final List<InstallableFixture> fixturesForComponentProvider;
@@ -181,7 +181,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
         private IsisConfigurationDefault configuration = new IsisConfigurationDefault();
         private final IsisConfigurationDefault configurationAsPerGlobSpec = new IsisConfigurationDefault();
 
-        private GlobSpec globSpecIfAny;
+        private AppManifest appManifestIfAny;
 
         private MetaModelValidator metaModelValidatorOverride;
         private ProgrammingModel programmingModelOverride;
@@ -221,13 +221,13 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
             return this;
         }
 
-        public Builder with(GlobSpec globSpec) {
-            this.globSpecIfAny = globSpec;
+        public Builder with(AppManifest appManifest) {
+            this.appManifestIfAny = appManifest;
             return this;
         }
 
         public Builder withServicesIn(String... packagePrefixes ) {
-            if(globSpecIfAny != null) {
+            if(appManifestIfAny != null) {
                 throw new IllegalStateException("A globSpec has already been provided");
             }
             if(packagePrefixes.length == 0) {
@@ -249,7 +249,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
         }
 
         public Builder withServices(Object... services) {
-            if(globSpecIfAny != null) {
+            if(appManifestIfAny != null) {
                 throw new IllegalStateException("A globSpec has already been provided");
             }
             this.services.addAll(Arrays.asList(services));
@@ -261,7 +261,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
          */
         @Deprecated
         public Builder withFixtures(InstallableFixture... fixtures) {
-            if(globSpecIfAny != null) {
+            if(appManifestIfAny != null) {
                 throw new IllegalStateException("A globSpec has already been provided");
             }
             this.fixtures.addAll(Arrays.asList(fixtures));
@@ -276,7 +276,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
         public IsisSystemForTest build() {
             final IsisSystemForTest isisSystem =
                     new IsisSystemForTest(
-                            globSpecIfAny,
+                            appManifestIfAny,
                             configuration,
                             programmingModelOverride,
                             metaModelValidatorOverride,
@@ -332,7 +332,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
     }
 
     private IsisSystemForTest(
-            final GlobSpec globSpecIfAny,
+            final AppManifest appManifestIfAny,
             final IsisConfiguration configurationOverride,
             final ProgrammingModel programmingModelOverride,
             final MetaModelValidator metaModelValidatorOverride,
@@ -340,7 +340,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
             final List<Object> servicesIfAny,
             final List<InstallableFixture> fixtures,
             final List<Listener> listeners) {
-        this.globSpecForComponentProvider = globSpecIfAny;
+        this.appManifestForComponentProvider = appManifestIfAny;
         this.configurationForComponentProvider = configurationOverride;
         this.programmingModelForComponentProvider = programmingModelOverride;
         this.metaModelValidatorForComponentProvider = metaModelValidatorOverride;
@@ -395,7 +395,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
 
             componentProvider = new IsisComponentProviderDefault(
                     DeploymentType.UNIT_TESTING,
-                    globSpecForComponentProvider,
+                    appManifestForComponentProvider,
                     servicesForComponentProvider,
                     fixturesForComponentProvider,
                     configurationForComponentProvider,

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
index ce36840..619d9cb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.runtime.system;
 
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.core.commons.config.ConfigurationConstants;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -68,7 +69,7 @@ public final class SystemConstants {
 
 
     /**
-     * Key used to lookup {@link org.apache.isis.applib.GlobSpec} (if any) from the {@link IsisConfiguration}.
+     * Key used to lookup {@link AppManifest} (if any) from the {@link IsisConfiguration}.
      */
     public static final String GLOB_SPEC_KEY = ConfigurationConstants.ROOT + "globSpec";
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
index 9db01cc..3030a94 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
@@ -28,7 +28,7 @@ import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.collect.Iterables;
 
-import org.apache.isis.applib.GlobSpec;
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
@@ -49,7 +49,7 @@ public abstract class IsisComponentProviderAbstract implements IsisComponentProv
     /**
      * may be null.
      */
-    protected final GlobSpec globSpec;
+    protected final AppManifest appManifest;
 
     /**
      * populated by subclass, in its constructor.
@@ -74,10 +74,10 @@ public abstract class IsisComponentProviderAbstract implements IsisComponentProv
 
     public IsisComponentProviderAbstract(
             final DeploymentType deploymentType,
-            final GlobSpec globSpec) {
+            final AppManifest appManifest) {
 
         this.deploymentType = deploymentType;
-        this.globSpec = globSpec;
+        this.appManifest = appManifest;
     }
 
     /**
@@ -93,15 +93,15 @@ public abstract class IsisComponentProviderAbstract implements IsisComponentProv
 
 
     //region > globSpec helpers
-    protected void specifyServicesAndRegisteredEntitiesUsing(final GlobSpec globSpec) {
-        final String packageNamesCsv = modulePackageNamesFrom(globSpec);
+    protected void specifyServicesAndRegisteredEntitiesUsing(final AppManifest appManifest) {
+        final String packageNamesCsv = modulePackageNamesFrom(appManifest);
 
         putConfigurationProperty(ServicesInstallerFromAnnotation.PACKAGE_PREFIX_KEY, packageNamesCsv);
         putConfigurationProperty(RegisterEntities.PACKAGE_PREFIX_KEY, packageNamesCsv);
     }
 
-    private String modulePackageNamesFrom(final GlobSpec globSpec) {
-        List<Class<?>> modules = globSpec.getModules();
+    private String modulePackageNamesFrom(final AppManifest appManifest) {
+        List<Class<?>> modules = appManifest.getModules();
         if (modules == null || modules.isEmpty()) {
             throw new IllegalArgumentException(
                     "If a globSpec is provided then it must return a non-empty set of modules");
@@ -129,8 +129,8 @@ public abstract class IsisComponentProviderAbstract implements IsisComponentProv
                     };
     }
 
-    protected void overrideConfigurationUsing(final GlobSpec globSpec) {
-        final Map<String, String> configurationProperties = globSpec.getConfigurationProperties();
+    protected void overrideConfigurationUsing(final AppManifest appManifest) {
+        final Map<String, String> configurationProperties = appManifest.getConfigurationProperties();
         if (configurationProperties != null) {
             for (Map.Entry<String, String> configProp : configurationProperties.entrySet()) {
                 putConfigurationProperty(configProp.getKey(), configProp.getValue());

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
index fc9ef58..80576f8 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.runtime.systemusinginstallers;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.isis.applib.GlobSpec;
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
@@ -65,25 +65,25 @@ public class IsisComponentProviderUsingInstallers extends IsisComponentProviderA
 
         this.installerLookup = installerLookup;
 
-        if(globSpec != null) {
+        if(appManifest != null) {
 
-            specifyServicesAndRegisteredEntitiesUsing(globSpec);
+            specifyServicesAndRegisteredEntitiesUsing(appManifest);
 
             // by using the annotations installer (as opposed to the configuration-and-annotations installer),
             // any services defined with the "isis.services" key will be IGNORED.
             putConfigurationProperty(SystemConstants.SERVICES_INSTALLER_KEY, ServicesInstallerFromAnnotation.NAME);
 
-            final String authenticationMechanism = globSpec.getAuthenticationMechanism();
+            final String authenticationMechanism = appManifest.getAuthenticationMechanism();
             putConfigurationProperty(SystemConstants.AUTHENTICATION_INSTALLER_KEY, authenticationMechanism);
 
-            final String authorizationMechanism = globSpec.getAuthorizationMechanism();
+            final String authorizationMechanism = appManifest.getAuthorizationMechanism();
             putConfigurationProperty(SystemConstants.AUTHORIZATION_INSTALLER_KEY, authorizationMechanism);
 
-            List<Class<? extends FixtureScript>> fixtureClasses = globSpec.getFixtures();
+            List<Class<? extends FixtureScript>> fixtureClasses = appManifest.getFixtures();
             final String fixtureClassNamesCsv = fixtureClassNamesFrom(fixtureClasses);
             putConfigurationProperty(FixturesInstallerFromConfiguration.FIXTURES, fixtureClassNamesCsv);
 
-            overrideConfigurationUsing(globSpec);
+            overrideConfigurationUsing(appManifest);
         }
 
         // loading installers causes the configuration to be appended to successively
@@ -143,9 +143,9 @@ public class IsisComponentProviderUsingInstallers extends IsisComponentProviderA
         ensureInitialized();
     }
 
-    private static GlobSpec globSpecIfAny(final InstallerLookup installerLookup) {
+    private static AppManifest globSpecIfAny(final InstallerLookup installerLookup) {
         final String globSpecIfAny = installerLookup.getConfiguration().getString(SystemConstants.GLOB_SPEC_KEY);
-        return globSpecIfAny != null? InstanceUtil.createInstance(globSpecIfAny, GlobSpec.class): null;
+        return globSpecIfAny != null? InstanceUtil.createInstance(globSpecIfAny, AppManifest.class): null;
     }
 
     protected void doPutConfigurationProperty(final String key, final String value) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/fixture/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/fixture/pom.xml b/example/application/simpleapp/fixture/pom.xml
index b1435ed..664b98e 100644
--- a/example/application/simpleapp/fixture/pom.xml
+++ b/example/application/simpleapp/fixture/pom.xml
@@ -34,6 +34,13 @@
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>simpleapp-dom</artifactId>
+            <exclusions>
+                <exclusion>
+                    <!-- so don't pick up transitive dependency to asm 4.0.0 -->
+                    <groupId>org.datanucleus</groupId>
+                    <artifactId>datanucleus-enhancer</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
     </dependencies>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixtureModule.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixtureModule.java b/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixtureModule.java
new file mode 100644
index 0000000..8a707e6
--- /dev/null
+++ b/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixtureModule.java
@@ -0,0 +1,24 @@
+/*
+ *  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.fixture;
+
+public final class DomainAppFixtureModule {
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixtureScriptsSpecificationProvider.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixtureScriptsSpecificationProvider.java b/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixtureScriptsSpecificationProvider.java
new file mode 100644
index 0000000..92f56cd
--- /dev/null
+++ b/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixtureScriptsSpecificationProvider.java
@@ -0,0 +1,44 @@
+/*
+ *  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.fixture;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.fixturescripts.FixtureScripts;
+import org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecification;
+import org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecificationProvider;
+
+import domainapp.fixture.scenarios.RecreateSimpleObjects;
+
+/**
+ * Specifies where to find fixtures, and other settings.
+ */
+@DomainService(nature = NatureOfService.DOMAIN)
+public class DomainAppFixtureScriptsSpecificationProvider implements FixtureScriptsSpecificationProvider {
+    @Override
+    public FixtureScriptsSpecification getSpecification() {
+        return FixtureScriptsSpecification
+                .builder(DomainAppFixtureScriptsSpecificationProvider.class)
+                .with(FixtureScripts.MultipleExecutionStrategy.EXECUTE)
+                .withRunScriptDefault(RecreateSimpleObjects.class)
+                .withRunScriptDropDown(FixtureScriptsSpecification.DropDownPolicy.CHOICES)
+                .withRecreate(RecreateSimpleObjects.class)
+                .build();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixturesProvider.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixturesProvider.java b/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixturesProvider.java
deleted file mode 100644
index ab6b6b4..0000000
--- a/example/application/simpleapp/fixture/src/main/java/domainapp/fixture/DomainAppFixturesProvider.java
+++ /dev/null
@@ -1,44 +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.fixture;
-
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecification;
-import org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecificationProvider;
-
-import domainapp.fixture.scenarios.RecreateSimpleObjects;
-
-/**
- * Specifies where to find fixtures, and other settings.
- */
-@DomainService(nature = NatureOfService.DOMAIN)
-public class DomainAppFixturesProvider implements FixtureScriptsSpecificationProvider {
-    @Override
-    public FixtureScriptsSpecification getSpecification() {
-        return FixtureScriptsSpecification
-                .builder(DomainAppFixturesProvider.class)
-                .with(FixtureScripts.MultipleExecutionStrategy.EXECUTE)
-                .withRunScriptDefault(RecreateSimpleObjects.class)
-                .withRunScriptDropDown(FixtureScriptsSpecification.DropDownPolicy.CHOICES)
-                .withRecreate(RecreateSimpleObjects.class)
-                .build();
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/glob/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/glob/pom.xml b/example/application/simpleapp/glob/pom.xml
deleted file mode 100644
index 0281d43..0000000
--- a/example/application/simpleapp/glob/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.isis.example.application</groupId>
-        <artifactId>simpleapp</artifactId>
-        <version>1.9.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>simpleapp-glob</artifactId>
-    <name>Simple App Glob</name>
-
-    <build>
-        <resources>
-            <resource>
-                <filtering>false</filtering>
-                <directory>src/main/resources</directory>
-            </resource>
-            <resource>
-                <filtering>false</filtering>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </resource>
-        </resources>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>simpleapp-dom</artifactId>
-            <exclusions>
-                <exclusion>
-                    <!-- so don't pick up transitive dependency to asm 4.0.0 -->
-                    <groupId>org.datanucleus</groupId>
-                    <artifactId>datanucleus-enhancer</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>simpleapp-fixture</artifactId>
-            <exclusions>
-                <exclusion>
-                    <!-- so don't pick up transitive dependency to asm 4.0.0 -->
-                    <groupId>org.datanucleus</groupId>
-                    <artifactId>datanucleus-enhancer</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-    </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpec.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpec.java b/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpec.java
deleted file mode 100644
index 14a6896..0000000
--- a/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpec.java
+++ /dev/null
@@ -1,91 +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.glob;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.GlobSpec;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-import domainapp.dom.DomainAppDomainModule;
-import domainapp.fixture.DomainAppFixturesProvider;
-import domainapp.fixture.scenarios.RecreateSimpleObjects;
-
-/**
- * Bootstrap the application.
- */
-public class DomainAppGlobSpec implements GlobSpec {
-
-    /**
-     * Load all services and entities found in (the packages and subpackages within) these modules
-     */
-    @Override
-    public List<Class<?>> getModules() {
-        return Arrays.asList(
-                DomainAppDomainModule.class, // entities and repositories
-                DomainAppFixturesProvider.class, // fixture configuration
-                DomainAppGlobSpec.class      // home page service
-        );
-    }
-
-    /**
-     * 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/b134bdad/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpecBypass.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpecBypass.java b/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpecBypass.java
deleted file mode 100644
index 9e3fe00..0000000
--- a/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpecBypass.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.glob;
-
-/**
- * Bypasses security, meaning any user/password combination can be used to login.
- */
-public class DomainAppGlobSpecBypass extends DomainAppGlobSpec {
-
-    @Override
-    public String getAuthenticationMechanism() {
-        return "bypass";
-    }
-
-    @Override
-    public String getAuthorizationMechanism() {
-        return "bypass";
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpecNoFixtures.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpecNoFixtures.java b/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpecNoFixtures.java
deleted file mode 100644
index 24f221a..0000000
--- a/example/application/simpleapp/glob/src/main/java/domainapp/glob/DomainAppGlobSpecNoFixtures.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.glob;
-
-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 DomainAppGlobSpecNoFixtures extends DomainAppGlobSpec {
-
-    @Override
-    public List<Class<? extends FixtureScript>> getFixtures() {
-        return Collections.emptyList();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageService.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageService.java b/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageService.java
deleted file mode 100644
index 3870c27..0000000
--- a/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/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.glob.app.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/b134bdad/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.java b/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.java
deleted file mode 100644
index c7c584c..0000000
--- a/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/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.glob.app.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/b134bdad/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.layout.json
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.layout.json b/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.layout.json
deleted file mode 100644
index 34f78e0..0000000
--- a/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/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/b134bdad/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.png
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.png b/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.png
deleted file mode 100644
index cb03785..0000000
Binary files a/example/application/simpleapp/glob/src/main/java/domainapp/glob/app/homepage/HomePageViewModel.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/home/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/home/pom.xml b/example/application/simpleapp/home/pom.xml
new file mode 100644
index 0000000..f9bf5a2
--- /dev/null
+++ b/example/application/simpleapp/home/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+         http://www.apache.org/licenses/LICENSE-2.0
+         
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.isis.example.application</groupId>
+        <artifactId>simpleapp</artifactId>
+        <version>1.9.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>simpleapp-home</artifactId>
+    <name>Simple App Home</name>
+
+    <build>
+        <resources>
+            <resource>
+                <filtering>false</filtering>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <filtering>false</filtering>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**</include>
+                </includes>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </resource>
+        </resources>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>simpleapp-fixture</artifactId>
+        </dependency>
+
+        <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>
+
+    </dependencies>
+
+</project>

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

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/home/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/home/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java b/example/application/simpleapp/home/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
new file mode 100644
index 0000000..b13c15d
--- /dev/null
+++ b/example/application/simpleapp/home/src/main/java/domainapp/home/SimpleAppManifestNoFixtures.java
@@ -0,0 +1,36 @@
+/*
+ *  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/b134bdad/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageService.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageService.java b/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageService.java
new file mode 100644
index 0000000..17a9c79
--- /dev/null
+++ b/example/application/simpleapp/home/src/main/java/domainapp/home/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.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/b134bdad/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java b/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.java
new file mode 100644
index 0000000..d20c432
--- /dev/null
+++ b/example/application/simpleapp/home/src/main/java/domainapp/home/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.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/b134bdad/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json b/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.layout.json
new file mode 100644
index 0000000..34f78e0
--- /dev/null
+++ b/example/application/simpleapp/home/src/main/java/domainapp/home/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/b134bdad/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png b/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png
new file mode 100644
index 0000000..cb03785
Binary files /dev/null and b/example/application/simpleapp/home/src/main/java/domainapp/home/services/homepage/HomePageViewModel.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/integtests/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/pom.xml b/example/application/simpleapp/integtests/pom.xml
index d40db1d..dade0b3 100644
--- a/example/application/simpleapp/integtests/pom.xml
+++ b/example/application/simpleapp/integtests/pom.xml
@@ -85,7 +85,7 @@
 
         <dependency>
             <groupId>${project.groupId}</groupId>
-            <artifactId>simpleapp-glob</artifactId>
+            <artifactId>simpleapp-home</artifactId>
         </dependency>
 
         <dependency>
@@ -108,15 +108,6 @@
         </dependency>
 
         <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>
-
-        <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/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
index 85a92f7..135a71a 100644
--- 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
@@ -21,7 +21,7 @@ package domainapp.integtests.bootstrap;
 import org.apache.isis.core.integtestsupport.IsisSystemForTest;
 import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests;
 
-import domainapp.glob.DomainAppGlobSpec;
+import domainapp.home.SimpleAppManifest;
 
 public class SimpleAppSystemInitializer {
 
@@ -30,7 +30,7 @@ public class SimpleAppSystemInitializer {
         if(isft == null) {
             isft = new IsisSystemForTest.Builder()
                     .withLoggingAt(org.apache.log4j.Level.INFO)
-                    .with(new DomainAppGlobSpec())
+                    .with(new SimpleAppManifest())
                     .with(new IsisConfigurationForJdoIntegTests())
                     .build()
                     .setUpSystem();

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/pom.xml b/example/application/simpleapp/pom.xml
index 9ac4077..d62bd19 100644
--- a/example/application/simpleapp/pom.xml
+++ b/example/application/simpleapp/pom.xml
@@ -334,7 +334,7 @@
     <modules>
         <module>dom</module>
         <module>fixture</module>
-        <module>glob</module>
+        <module>home</module>
         <module>integtests</module>
         <module>webapp</module>
     </modules>
@@ -378,7 +378,7 @@
             </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
-                <artifactId>simpleapp-glob</artifactId>
+                <artifactId>simpleapp-home</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/example/application/simpleapp/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/pom.xml b/example/application/simpleapp/webapp/pom.xml
index 006583c..dcf16c9 100644
--- a/example/application/simpleapp/webapp/pom.xml
+++ b/example/application/simpleapp/webapp/pom.xml
@@ -145,7 +145,7 @@
     
         <dependency>
             <groupId>${project.groupId}</groupId>
-            <artifactId>simpleapp-glob</artifactId>
+            <artifactId>simpleapp-home</artifactId>
         </dependency>
         
         <!-- other isis components -->
@@ -162,22 +162,12 @@
             <artifactId>isis-core-security-shiro</artifactId>
         </dependency>
 
-
         <!-- isis core -->
         <dependency>
             <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-runtime</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-wrapper</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-security</artifactId>
         </dependency>
 
-
         <!-- to run using WebServer (optional) -->
         <dependency>
             <groupId>org.apache.isis.core</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/b134bdad/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 330c5b1..825ed7d 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
@@ -23,9 +23,9 @@
 #################################################################################
 
 
-isis.globSpec=domainapp.glob.DomainAppGlobSpec
-#isis.globSpec=domainapp.glob.DomainAppGlobSpecBypass
-#isis.globSpec=domainapp.glob.DomainAppGlobSpecNoFixtures
+isis.globSpec=domainapp.home.SimpleAppManifest
+#isis.globSpec=domainapp.home.SimpleAppAppManifestBypass
+#isis.globSpec=domainapp.home.SimpleAppManifestNoFixtures