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

[11/46] isis-site git commit: updating content (built from adocs/documentation in isis.git repo)

http://git-wip-us.apache.org/repos/asf/isis-site/blob/db31837d/content/guides/ugfun/ugfun.html
----------------------------------------------------------------------
diff --git a/content/guides/ugfun/ugfun.html b/content/guides/ugfun/ugfun.html
index ae550d4..91e73a5 100644
--- a/content/guides/ugfun/ugfun.html
+++ b/content/guides/ugfun/ugfun.html
@@ -2090,10 +2090,22 @@ table.CodeRay td.code>pre{padding:0}
        </div> 
        <div class="sectionbody"> 
         <div class="paragraph"> 
-         <p>To get you up and running quickly, Apache Isis provides a <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a> to setup a simple application as the basis of your own apps. This is deliberately kept quite minimal so that you won’t have to spend lots of time removing generated artifacts. On the other hand, it does set up a standard multi-module maven structure with unit- and integration tests pre-configured, as well as a webapp module so that you can easily run your app. We strongly recommend that you preserve this structure as you develop your own Isis application.</p> 
+         <p>To get you up and running quickly, Apache Isis provides two archetypes:</p> 
+        </div> 
+        <div class="ulist"> 
+         <ul> 
+          <li> <p><a href="../ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">HelloWorld archetype</a> generates a one domain class application so you can quickly learn about Apache Isis by trying it out.<br></p> 
+           <div class="paragraph"> 
+            <p>For simplisty, the generated application is a single Maven module containing both the business logic classes and the bootstrapping code.</p> 
+           </div> </li> 
+          <li> <p><a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a>, a slightly more sophisticated one domain class version suitable for use as the basis of your own apps.<br></p> 
+           <div class="paragraph"> 
+            <p>This is still quite minimal so that you won’t have to spend lots of time removing generated artifacts. On the other hand, it does set up a standard multi-module maven structure with unit- and integration tests pre-configured, as well as a webapp module so that you can easily run your app. We strongly recommend that you preserve this structure as you develop your own Isis application.</p> 
+           </div> </li> 
+         </ul> 
         </div> 
         <div class="paragraph"> 
-         <p>In this chapter we also discuss the <a href="../ugfun/ugfun.html#_ugfun_getting-started_datanucleus-enhancer">DataNucleus enhancer</a>. <a href="http://www.datanucleus.org/">DataNucleus</a> is the reference implementation of the JDO (Java data objects) spec, and Apache Isis integrates with DataNucleus as its persistence layer. The enhancer performs post-processing on the bytecode of your persistent domain entities, such that they can be persisted by Apache Isis' JDO/DataNucleus objectstore.</p> 
+         <p>In this chapter we also discuss the <a href="../ugfun/ugfun.html#_ugfun_getting-started_datanucleus-enhancer">DataNucleus enhancer</a>. <a href="http://www.datanucleus.org/">DataNucleus</a> is the reference implementation of the JDO (Java Data Objects) spec, and Apache Isis integrates with DataNucleus as its persistence layer. The enhancer performs post-processing on the bytecode of your persistent domain entities, such that they can be persisted by Apache Isis' JDO/DataNucleus objectstore.</p> 
         </div> 
         <div class="admonitionblock note"> 
          <table> 
@@ -2102,56 +2114,458 @@ table.CodeRay td.code>pre{padding:0}
             <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
             <td class="content"> 
              <div class="paragraph"> 
-              <p>The <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a> automatically configures the enhancer, so there’s little you need to do at this stage. Even so we feel it’s a good idea to be aware of this critical part of Apache Isis runtime; if the enhancer does not run, then you’ll find the app fails to start with (what will seem like) quite an obscure exception message.</p> 
+              <p>The <a href="../ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">HelloWorld</a> and <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp</a> archetypes automatically configures the enhancer, so there’s little you need to do at this stage.</p> 
+             </div> 
+             <div class="paragraph"> 
+              <p>Even so we feel it’s a good idea to be aware of this critical part of Apache Isis runtime; if the enhancer does not run, then you’ll find the app fails to start with (what will seem like) quite an obscure exception message.</p> 
+             </div> </td> 
+           </tr> 
+          </tbody>
+         </table> 
+        </div> 
+        <div class="paragraph"> 
+         <p>Unresolved directive in _ugfun_getting-started.adoc - include::_ugfun_getting-started_prerequisites[leveloffset=+1] :leveloffset: +1</p> 
+        </div> 
+       </div> 
+      </div> 
+      <div class="sect1"> 
+       <h2 id="_ugfun_getting-started_helloworld-archetype">5. HelloWorld Archetype (<code>1.15.0-SNAPSHOT</code>)</h2>
+       <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+        <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_helloworld-archetype.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
+        <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+        <ul class="dropdown-menu">
+         <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_helloworld-archetype.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i>&nbsp; Edit</a></li>
+         <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_helloworld-archetype.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; History</a></li>
+         <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_helloworld-archetype.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i>&nbsp; Raw</a></li>
+         <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_helloworld-archetype.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
+        </ul>
+       </div> 
+       <div class="sectionbody"> 
+        <div class="paragraph"> 
+         <p>The quickest way to start learning about Apache Isis is to run the <code>helloworld</code> archetype. This will generate a tiny Apache Isis app, consisting of a simple one-class domain model, called <code>HelloWorldObject</code>, and a supporting <code>HelloWorldObjects</code> domain service. Both the business logic and supporting bootstrapping classes are in a single Maven module (in different Java packages).</p> 
+        </div> 
+        <div class="admonitionblock tip"> 
+         <table> 
+          <tbody>
+           <tr> 
+            <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td> 
+            <td class="content"> 
+             <div class="paragraph"> 
+              <p>We don’t recommend that you use the helloworld archetype as the basis for your own applications. Instead, use the <a href="#_ugfun_getting-started_simpleapp-archetype">simpleapp archetype</a>. This also creates a minimal application, but provides more structure and example tests, useful as you build out your own app.</p> 
              </div> </td> 
            </tr> 
           </tbody>
          </table> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_prerequisites">4.1. Prerequisites</h3> 
+         <h3 id="__ugfun_getting-started_helloworld-archetype_generating-the-app">5.1. Generating the App</h3> 
+         <div class="paragraph"> 
+          <p>Create a new directory, and <code>cd</code> into that directory.</p> 
+         </div> 
+         <div class="admonitionblock warning"> 
+          <table> 
+           <tbody>
+            <tr> 
+             <td class="icon"> <i class="fa icon-warning" title="Warning"></i> </td> 
+             <td class="content"> 
+              <div class="paragraph"> 
+               <p>This archetype was introduced in <code>1.15.0-SNAPSHOT</code>, and has not - yet - been released.</p> 
+              </div> </td> 
+            </tr> 
+           </tbody>
+          </table> 
+         </div> 
+         <div class="paragraph"> 
+          <p>To build the app from the latest stable release, then run the following command:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="bash">mvn archetype:generate  \
+    -D archetypeGroupId=org.apache.isis.archetype \
+    -D archetypeArtifactId=helloworld-archetype \
+    -D archetypeVersion=1.15.0 \
+    -D groupId=com.mycompany \
+    -D artifactId=myapp \
+    -D version=1.0-SNAPSHOT \
+    -B</code></pre> 
+          </div> 
+         </div> 
          <div class="paragraph"> 
-          <p>Apache Isis is a Java based framework, so in terms of prerequisites, you’ll need to install:</p> 
+          <p>where:</p> 
          </div> 
          <div class="ulist"> 
           <ul> 
-           <li> <p>Java 7 or 8 JDK</p> </li> 
-           <li> <p><a href="http://maven.apache.org">Apache Maven</a> 3.0.5 or later</p> </li> 
+           <li> <p><code>groupId</code> represents your own organization, and</p> </li> 
+           <li> <p><code>artifactId</code> is a unique identifier for this app within your organization.</p> </li> 
+           <li> <p><code>version</code> is the initial (snapshot) version of your app</p> </li> 
           </ul> 
          </div> 
          <div class="paragraph"> 
-          <p>You’ll probably also want to use an IDE; the Apache Isis committers use either IntelliJ or Eclipse; in the <a href="../dg/dg.html#_dg_ide">Developers' Guide</a> we have detailed setup instructions for using these two IDEs. If you’re a NetBeans user you should have no problems as it too has strong support for Maven.</p> 
+          <p>The archetype generation process will then run; it only takes a few seconds.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>When building and running within an IDE, you’ll also need to configure the Datanucleus enhancer. This is implemented as a Maven plugin, so in the case of IntelliJ, it’s easy enough to run the enhancer as required. It should be just as straightforward for NetBeans too.</p> 
+          <p>We also maintain the archetype for the most current <code>-SNAPSHOT</code>; an app generated with this archetype will contain the latest features of Apache Isis, but the usual caveats apply: some features still in development may be unstable.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>For Eclipse the maven integration story is a little less refined. All is not lost, however; DataNucleus also has an implementation of the enhancer as an Eclipse plugin, which usually works well enough.</p> 
+          <p>The process is almost identical to that for stable releases, however the <code>archetype:generate</code> goal is called with slightly different arguments:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="bash">mvn archetype:generate  \
+    -D archetypeGroupId=org.apache.isis.archetype \
+    -D archetypeArtifactId=helloworld-archetype \
+    -D archetypeVersion=1.15.0-SNAPSHOT \
+    -D groupId=com.mycompany \
+    -D artifactId=myapp \
+    -D version=1.0-SNAPSHOT \
+    -D archetypeRepository=http://repository-estatio.forge.cloudbees.com/snapshot/ \
+    -B</code></pre> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>where as before:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><code>groupId</code> represents your own organization, and</p> </li> 
+           <li> <p><code>artifactId</code> is a unique identifier for this app within your organization.</p> </li> 
+           <li> <p><code>version</code> is the initial (snapshot) version of your app</p> </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>but also:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><code>archetypeVersion</code> is the SNAPSHOT version of Apache Isis.</p> </li> 
+           <li> <p><code>archetypeRepository</code> specifies the location of our snapshot repo (hosted on <a href="http://www.cloudbees.com">CloudBees</a>), and</p> </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The archetype generation process will then run; it only takes a few seconds.</p> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_ugfun_getting-started_simpleapp-archetype">4.2. SimpleApp Archetype</h3>
-         <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
-          <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_simpleapp-archetype.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
-          <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
-          <ul class="dropdown-menu">
-           <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_simpleapp-archetype.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i>&nbsp; Edit</a></li>
-           <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_simpleapp-archetype.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; History</a></li>
-           <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_simpleapp-archetype.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i>&nbsp; Raw</a></li>
-           <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_simpleapp-archetype.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
-          </ul>
+         <h3 id="__ugfun_getting-started_helloworld-archetype_building-the-app">5.2. Building the App</h3> 
+         <div class="paragraph"> 
+          <p>Switch into the root directory of your newly generated app, and build your app:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="bash">cd myapp
+mvn clean install</code></pre> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>where <code>myapp</code> is the <code>artifactId</code> entered above.</p> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="__ugfun_getting-started_helloworld-archetype_running-the-app">5.3. Running the App</h3> 
+         <div class="paragraph"> 
+          <p>The <code>helloworld</code> archetype generates a single WAR file, configured to run both the <a href="../ugvw/ugvw.html">Wicket viewer</a> and the <a href="../ugvro/ugvro.html">Restful Objects viewer</a>. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Once you’ve built the app, you can run the WAR in a variety of ways.</p> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_using_mvn_jetty_plugin">5.3.1. Using mvn Jetty plugin</h4> 
+          <div class="paragraph"> 
+           <p>First, you could run the WAR in a Maven-hosted Jetty instance, though you need to <code>cd</code> into the <code>webapp</code> module:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="bash">mvn jetty:run</code></pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>You can also provide a system property to change the port:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="bash">mvn jetty:run -D jetty.port=9090</code></pre> 
+           </div> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_using_a_regular_servlet_container">5.3.2. Using a regular servlet container</h4> 
+          <div class="paragraph"> 
+           <p>You can also take the built WAR file and deploy it into a standalone servlet container such as [Tomcat](<a href="http://tomcat.apache.org" class="bare">http://tomcat.apache.org</a>). The default configuration does not require any configuration of the servlet container; just drop the WAR file into the <code>webapps</code> directory.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_from_within_the_ide">5.3.3. From within the IDE</h4> 
+          <div class="paragraph"> 
+           <p>Most of the time, though, you’ll probably want to run the app from within your IDE. The mechanics of doing this will vary by IDE; see the <a href="../dg/dg.html#_dg_ide">Developers' Guide</a> for details of setting up Eclipse or IntelliJ IDEA. Basically, though, it amounts to running <code>org.apache.isis.WebServer</code>, and ensuring that the <a href="../ugfun/ugfun.html#_ugfun_getting-started_datanucleus-enhancer">DataNucleus enhancer</a> has properly processed all domain entities.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>Here’s what the setup looks like in IntelliJ IDEA:</p> 
+          </div> 
+          <div class="imageblock"> 
+           <div class="content"> 
+            <a class="image" href="images/getting-started/helloworld.png"><img src="images/getting-started/helloworld.png" alt="helloworld" width="600px"></a> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>with the maven goal to run the DataNucleus enhancer (discussed in more detail <a href="#_ugfun_getting-started_datanucleus-enhancer">here</a>) before launch defined as:</p> 
+          </div> 
+          <div class="imageblock"> 
+           <div class="content"> 
+            <a class="image" href="images/getting-started/helloworld-before-launch.png"><img src="images/getting-started/helloworld-before-launch.png" alt="helloworld before launch" width="600px"></a> 
+           </div> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="__ugfun_getting-started_helloworld-archetype_using-the-app">5.4. Using the App</h3> 
+         <div class="paragraph"> 
+          <p>When you start the app, you’ll be presented with a welcome page from which you can access the webapp using either the <a href="../ugvw/ugvw.html">Wicket viewer</a> or the <a href="../ugvro/ugvro.html">Restful Objects viewer</a>:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/010-root-page.png"><img src="images/getting-started/using-hello-world/010-root-page.png" alt="010 root page" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The Wicket viewer provides a human usable web UI (implemented, as you might have guessed from its name, using <a href="http://wicket.apache.org">Apache Wicket</a>), so choose that and navigate to the login page:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/020-login-to-wicket-viewer.png"><img src="images/getting-started/using-hello-world/020-login-to-wicket-viewer.png" alt="020 login to wicket viewer" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The app itself is configured to run using <a href="../ugsec/ugsec.html">shiro security</a>, as configured in the <code>WEB-INF/shiro.ini</code> config file. You can login with:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p>username: <em>sven</em></p> </li> 
+           <li> <p>password: <em>pass</em></p> </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Once you’ve logged in you’ll see the default home page:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/030-home-page.png"><img src="images/getting-started/using-hello-world/030-home-page.png" alt="030 home page" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The application is configured to run with an in-memory database, so initially there is no data. Create an object using the menu:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/040-create-object-from-menu.png"><img src="images/getting-started/using-hello-world/040-create-object-from-menu.png" alt="040 create object from menu" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>which brings up a modal dialog:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/050-create-object-from-menu-prompt.png"><img src="images/getting-started/using-hello-world/050-create-object-from-menu-prompt.png" alt="050 create object from menu prompt" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>hitting OK returns the created object:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/060-created-object.png"><img src="images/getting-started/using-hello-world/060-created-object.png" alt="060 created object" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The above functionality is implemented by <a href="https://github.com/apache/isis/blob/master/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObjects.java#L43">this code</a>:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Action</span>(semantics = SemanticsOf.NON_IDEMPOTENT)
+<span class="annotation">@MemberOrder</span>(sequence = <span class="string"><span class="delimiter">"</span><span class="content">1</span><span class="delimiter">"</span></span>)
+<span class="directive">public</span> HelloWorldObject create(
+        <span class="annotation">@Parameter</span>(maxLength = <span class="integer">40</span>)
+        <span class="annotation">@ParameterLayout</span>(named = <span class="string"><span class="delimiter">"</span><span class="content">Name</span><span class="delimiter">"</span></span>)
+        <span class="directive">final</span> <span class="predefined-type">String</span> name) {
+    <span class="directive">final</span> HelloWorldObject object = <span class="keyword">new</span> HelloWorldObject(name);
+    serviceRegistry.injectServicesInto(object);
+    repositoryService.persist(object);
+    <span class="keyword">return</span> object;
+}</code></pre> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The <code>HelloWorldObject</code> contains a couple of properties, and a single action to update that property.</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p>The <code>name</code> property is read-only, and can only be modified using the <code>updateName</code> action.<br></p> 
+            <div class="paragraph"> 
+             <p>For example:</p> 
+            </div> 
+            <div class="imageblock"> 
+             <div class="content"> 
+              <a class="image" href="images/getting-started/using-hello-world/070-update-name.png"><img src="images/getting-started/using-hello-world/070-update-name.png" alt="070 update name" width="600px"></a> 
+             </div> 
+            </div> 
+            <div class="paragraph"> 
+             <p>The above functionality is implemented by <a href="https://github.com/apache/isis/blob/master/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java#L73">this code</a>:<br></p> 
+            </div> 
+            <div class="listingblock"> 
+             <div class="content"> 
+              <pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Action</span>(
+    semantics = SemanticsOf.IDEMPOTENT,
+    command = CommandReification.ENABLED,
+    publishing = Publishing.ENABLED
+)
+<span class="directive">public</span> HelloWorldObject updateName(
+        <span class="annotation">@Parameter</span>(maxLength = <span class="integer">40</span>)
+        <span class="annotation">@ParameterLayout</span>(named = <span class="string"><span class="delimiter">"</span><span class="content">Name</span><span class="delimiter">"</span></span>)
+        <span class="directive">final</span> <span class="predefined-type">String</span> name) {
+    setName(name);
+    <span class="keyword">return</span> <span class="local-variable">this</span>;
+}</code></pre> 
+             </div> 
+            </div> </li> 
+           <li> <p>The <code>notes</code> property is editable, and can be edited in-place.<br></p> 
+            <div class="paragraph"> 
+             <p>For example:</p> 
+            </div> 
+            <div class="imageblock"> 
+             <div class="content"> 
+              <a class="image" href="images/getting-started/using-hello-world/080-edit-notes.png"><img src="images/getting-started/using-hello-world/080-edit-notes.png" alt="080 edit notes" width="600px"></a> 
+             </div> 
+            </div> </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>It’s also possible to delete an object:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/090-delete-object.png"><img src="images/getting-started/using-hello-world/090-delete-object.png" alt="090 delete object" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The viewer displays a message confirming that the object has been deleted:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/100-object-deleted.png"><img src="images/getting-started/using-hello-world/100-object-deleted.png" alt="100 object deleted" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The above functionality is implemented by <a href="https://github.com/apache/isis/blob/master/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java#L87">this code</a>:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Action</span>(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)
+<span class="directive">public</span> <span class="type">void</span> delete() {
+    <span class="directive">final</span> <span class="predefined-type">String</span> title = titleService.titleOf(<span class="local-variable">this</span>);
+    messageService.informUser(<span class="predefined-type">String</span>.format(<span class="string"><span class="delimiter">"</span><span class="content">'%s' deleted</span><span class="delimiter">"</span></span>, title));
+    repositoryService.removeAndFlush(<span class="local-variable">this</span>);
+}</code></pre> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>This uses three services provided by the framework; these are injected into the domain object automatically.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Going back to the home page (<a href="http://localhost:8080">localhost:8080</a>) we can use <a href="https://swagger.io/">Swagger UI</a> as a front-end to the REST API provided by the Restful Objects viewer.</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/200-swagger-ui-before-reload.png"><img src="images/getting-started/using-hello-world/200-swagger-ui-before-reload.png" alt="200 swagger ui before reload" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The Swagger UI is created dynamically from a Swagger schema definition (the schema definition file itself can be downloaded from the Wicket viewer’s "Prototyping" menu). This Swagger schema definition groups resources according to Apache Isis metadata:</p> 
          </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/210-helloworld-resources.png"><img src="images/getting-started/using-hello-world/210-helloworld-resources.png" alt="210 helloworld resources" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>For example, an object can be created using the resource that represents the <code>HelloWorldObjects#create</code> action:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/220-create-object-thru-rest-api.png"><img src="images/getting-started/using-hello-world/220-create-object-thru-rest-api.png" alt="220 create object thru rest api" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The response indicates that the object was successfully created:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/230-create-object-thru-rest-api-response.png"><img src="images/getting-started/using-hello-world/230-create-object-thru-rest-api-response.png" alt="230 create object thru rest api response" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The Swagger UI also provides a resource to retrieve any object:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/240-retrieve-object-using-rest-api.png"><img src="images/getting-started/using-hello-world/240-retrieve-object-using-rest-api.png" alt="240 retrieve object using rest api" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>This results in a representation of the domain object (as per the requested <code>Response Content Type</code>, ie <code>ACCEPT</code> header):</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" href="images/getting-started/using-hello-world/250-retrieve-object-using-rest-api-response.png"><img src="images/getting-started/using-hello-world/250-retrieve-object-using-rest-api-response.png" alt="250 retrieve object using rest api response" width="600px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The Swagger UI is provided as a convenience; the REST API is actually a complete hypermedia API (in other words you can follow the links to access all the behaviour exposed in the regular Wicket app). The REST API implemented by Apache Isis is specified in the <a href="http://www.restfulobjects.org">Restful Object spec</a>.</p> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="__ugfun_getting-started_helloworld-archetype_experimenting">5.5. Experimenting</h3> 
+         <div class="paragraph"> 
+          <p>Once you are familiar with the generated app, try modifying it. There is plenty of guidance on this site; start with this guide (fundamentals) and then look at the other guides available the main <a href="../../documentation.html">documentation</a> page.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>If you use IntelliJ IDEA or Eclipse, do also install the <a href="../dg/dg.html#<em>dg_ide_intellij_live-templates">live templates (for IntelliJ)</a> / <a href="../dg/dg.html#</em>dg_ide_eclipse_editor-templates">editor templates (for Eclipse)</a>; these will help you follow the Apache Isis naming conventions.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>If you run into issues, please don’t hesitate to ask for help on the <a href="http://isis.apache.org/help.html">users mailing list</a>.</p> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="__ugfun_getting-started_helloworld-archetype_moving-on">5.6. Moving on</h3> 
+         <div class="paragraph"> 
+          <p>When you are ready to start working on your own app, we <em>don’t</em> recommend building on top of the helloworld app.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Instead, we suggest that you start with the <a href="#_ugfun_getting-started_simpleapp-archetype">simpleapp archetype</a> instead. Although a little more complex, it provides more structure and tests, all of which will help you as your application grows.</p> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_ugfun_getting-started_simpleapp-archetype">5.7. SimpleApp Archetype</h3> 
          <div class="paragraph"> 
-          <p>The quickest way to get started with Apache Isis is to run the simple archetype. This will generate a very simple one-class domain model, called <code>SimpleObject</code>, with a single property <code>name</code>.</p> 
+          <p>The quickest way to get started building an application "for real" is to run the <code>simpleapp</code> archetype. Like the <a href="#_ugfun_getting-started_helloworld-archetype">helloworld archetype</a>, this too will generate a very simple one-class domain model (an entity called <code>SimpleObject</code> with a couple of properties).</p> 
          </div> 
          <div class="paragraph"> 
-          <p>There is also a corresponding <code>SimpleObjects</code> domain service which acts as a repository for <code>SimpleObject</code> entity. From this you can easily rename these initial classes, and extend to build up your own Apache Isis domain application.</p> 
+          <p>However, the generated application also provides more structure to assist you as your application grows. For example:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p>the application is multi-module, separating out the business logic (<code>module-simple</code> Maven module) from the bootstrapping modules (<code>application</code> Maven module and the <code>webapp</code> module)</p> </li> 
+           <li> <p>the <code>SimpleObjectRepository</code> service (to create/retrieve instances) is separate from the <code>SimpleObjectMenu</code> menu service (for the UI); the former is delegated to by the latter.</p> </li> 
+           <li> <p>a <code>HomePageViewModel</code> service acts as a home page for the app.</p> </li> 
+           <li> <p>there are example integration tests, BDD tests as well as unit tests</p> </li> 
+           <li> <p>there are example fixture scripts for use both when prototyping and used by the integration and BDD tests</p> </li> 
+           <li> <p>the <a href="../rgmvn.html">Apache Isis Maven plugin</a> to <a href="../rgmvn.html#_rgmvn_validate">validate</a> your domain model is pre-configured</p> </li> 
+           <li> <p>Maven plugins to package your app as a Docker image is pre-configured</p> </li> 
+          </ul> 
          </div> 
          <div class="paragraph"> 
-          <p>Finally, the domain service also includes a <code>HomePageViewModel</code> which acts as a home page for the app.</p> 
+          <p>From this you can easily rename these initial classes, and extend to build up your own Apache Isis domain application.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_generating_the_app">4.2.1. Generating the App</h4> 
+          <h4 id="__ugfun_getting-started_simpleapp-archetype_generating-the-app">5.7.1. Generating the App</h4> 
           <div class="paragraph"> 
            <p>Create a new directory, and <code>cd</code> into that directory.</p> 
           </div> 
@@ -2226,7 +2640,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_building_the_app">4.2.2. Building the App</h4> 
+          <h4 id="__ugfun_getting-started_simpleapp-archetype_building-the-app">5.7.2. Building the App</h4> 
           <div class="paragraph"> 
            <p>Switch into the root directory of your newly generated app, and build your app:</p> 
           </div> 
@@ -2241,7 +2655,7 @@ mvn clean install</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_running_the_app">4.2.3. Running the App</h4> 
+          <h4 id="__ugfun_getting-started_simpleapp-archetype_running-the-app">5.7.3. Running the App</h4> 
           <div class="paragraph"> 
            <p>The <code>simpleapp</code> archetype generates a single WAR file, configured to run both the <a href="../ugvw/ugvw.html">Wicket viewer</a> and the <a href="../ugvro/ugvro.html">Restful Objects viewer</a>. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection.</p> 
           </div> 
@@ -2249,7 +2663,7 @@ mvn clean install</code></pre>
            <p>Once you’ve built the app, you can run the WAR in a variety of ways.</p> 
           </div> 
           <div class="sect4"> 
-           <h5 id="_using_mvn_jetty_plugin">Using mvn Jetty plugin</h5> 
+           <h5 id="_using_mvn_jetty_plugin_2">Using mvn Jetty plugin</h5> 
            <div class="paragraph"> 
             <p>First, you could run the WAR in a Maven-hosted Jetty instance, though you need to <code>cd</code> into the <code>webapp</code> module:</p> 
            </div> 
@@ -2268,13 +2682,61 @@ mvn clean install</code></pre>
            </div> 
           </div> 
           <div class="sect4"> 
-           <h5 id="_using_a_regular_servlet_container">Using a regular servlet container</h5> 
+           <h5 id="_using_a_regular_servlet_container_2">Using a regular servlet container</h5> 
            <div class="paragraph"> 
             <p>You can also take the built WAR file and deploy it into a standalone servlet container such as [Tomcat](<a href="http://tomcat.apache.org" class="bare">http://tomcat.apache.org</a>). The default configuration does not require any configuration of the servlet container; just drop the WAR file into the <code>webapps</code> directory.</p> 
            </div> 
           </div> 
           <div class="sect4"> 
-           <h5 id="_from_within_the_ide">From within the IDE</h5> 
+           <h5 id="_using_docker">Using Docker</h5> 
+           <div class="paragraph"> 
+            <p>It’s also possible to package up the application as a docker image to run as a container.</p> 
+           </div> 
+           <div class="ulist"> 
+            <ul> 
+             <li> <p>To package up the application as a docker image (specifying the docker image name as a system property):<br></p> 
+              <div class="listingblock"> 
+               <div class="content"> 
+                <pre class="CodeRay highlight"><code data-lang="bash">mvn install -Dmavenmixin-docker -Ddocker-plugin.imageName=mycompany/myapp</code></pre> 
+               </div> 
+              </div> 
+              <div class="paragraph"> 
+               <p>Alternatively, define the <code>${docker-plugin.imageName}</code> in the <code>webapp</code> module and use simply:<br></p> 
+              </div> 
+              <div class="listingblock"> 
+               <div class="content"> 
+                <pre class="CodeRay highlight"><code data-lang="bash">mvn install -Dmavenmixin-docker</code></pre> 
+               </div> 
+              </div> 
+              <div class="paragraph"> 
+               <p>The packaged image can be viewed using <code>docker images</code>.</p> 
+              </div> </li> 
+             <li> <p>To run a docker image previously packaged:<br></p> 
+              <div class="listingblock"> 
+               <div class="content"> 
+                <pre class="CodeRay highlight"><code data-lang="bash">docker container run -d -p 8080:8080 mycompany/myapp</code></pre> 
+               </div> 
+              </div> 
+              <div class="paragraph"> 
+               <p>This can then be accessed at <a href="http://localhost:8080">localhost:8080</a>.</p> 
+              </div> 
+              <div class="paragraph"> 
+               <p>See <a href="https://github.com/danhaywood/java-mavenmixin-docker#how-to-consume">mavenmixin-docker</a> for further details on how to run docker images.</p> 
+              </div> </li> 
+             <li> <p>To upload the application as a docker image to <a href="https://hub.docker.com">docker hub</a> (or some other docker registry):<br></p> 
+              <div class="listingblock"> 
+               <div class="content"> 
+                <pre class="CodeRay highlight"><code data-lang="bash">mvn -pl webapp deploy -Dmavenmixin-docker</code></pre> 
+               </div> 
+              </div> 
+              <div class="paragraph"> 
+               <p>This assumes that the <code>${docker-plugin.imageName}</code> property has been defined, <em>and</em> also that docker registry credentials have been specified in <code>~/.m2/settings.xml</code>. Once more, see <a href="https://github.com/danhaywood/java-mavenmixin-docker#how-to-configure">mavenmixin-docker</a> for further details.</p> 
+              </div> </li> 
+            </ul> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="_from_within_the_ide_2">From within the IDE</h5> 
            <div class="paragraph"> 
             <p>Most of the time, though, you’ll probably want to run the app from within your IDE. The mechanics of doing this will vary by IDE; see the <a href="../dg/dg.html#_dg_ide">Developers' Guide</a> for details of setting up Eclipse or IntelliJ IDEA. Basically, though, it amounts to running <code>org.apache.isis.WebServer</code>, and ensuring that the <a href="../ugfun/ugfun.html#_ugfun_getting-started_datanucleus-enhancer">DataNucleus enhancer</a> has properly processed all domain entities.</p> 
            </div> 
@@ -2286,10 +2748,18 @@ mvn clean install</code></pre>
              <a class="image" href="images/getting-started/simpleapp-webapp.png"><img src="images/getting-started/simpleapp-webapp.png" alt="simpleapp webapp" width="600px"></a> 
             </div> 
            </div> 
+           <div class="paragraph"> 
+            <p>with the maven goal to run the DataNucleus enhancer (discussed in more detail <a href="#_ugfun_getting-started_datanucleus-enhancer">here</a>) before launch defined as:</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" href="images/getting-started/simpleapp-webapp-before-launch.png"><img src="images/getting-started/simpleapp-webapp-before-launch.png" alt="simpleapp webapp before launch" width="600px"></a> 
+            </div> 
+           </div> 
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_running_with_fixtures">4.2.4. Running with Fixtures</h4> 
+          <h4 id="__ugfun_getting-started_simpleapp-archetype_running-with-fixtures">5.7.4. Running with Fixtures</h4> 
           <div class="paragraph"> 
            <p>It is also possible to start the application with a pre-defined set of data; useful for demos or manual exploratory testing. This is done by specifying a <a href="../ugtst/ugtst.html#_ugtst_fixture-scripts">fixture script</a> on the command line.</p> 
           </div> 
@@ -2306,185 +2776,62 @@ mvn clean install</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_using_the_app">4.2.5. Using the App</h4> 
-          <div class="admonitionblock note"> 
-           <table> 
-            <tbody>
-             <tr> 
-              <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
-              <td class="content"> 
-               <div class="paragraph"> 
-                <p>These screenshots are for v1.10.0.</p> 
-               </div> </td> 
-             </tr> 
-            </tbody>
-           </table> 
-          </div> 
-          <div class="paragraph"> 
-           <p>When you start the app, you’ll be presented with a welcome page from which you can access the webapp using either the <a href="../ugvw/ugvw.html">Wicket viewer</a> or the <a href="../ugvro/ugvro.html">Restful Objects viewer</a>:</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/010-root-page.png"><img src="images/getting-started/using-simple-app/010-root-page.png" alt="010 root page" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>The Wicket viewer provides a human usable web UI (implemented, as you might have guessed from its name, using <a href="http://wicket.apache.org">Apache Wicket</a>), so choose that and navigate to the login page:</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/020-login-to-wicket-viewer.png"><img src="images/getting-started/using-simple-app/020-login-to-wicket-viewer.png" alt="020 login to wicket viewer" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>The app itself is configured to run using <a href="../ugsec/ugsec.html">shiro security</a>, as configured in the <code>WEB-INF/shiro.ini</code> config file. You can login with:</p> 
-          </div> 
-          <div class="ulist"> 
-           <ul> 
-            <li> <p>username: <em>sven</em></p> </li> 
-            <li> <p>password: <em>pass</em></p> </li> 
-           </ul> 
-          </div> 
-          <div class="paragraph"> 
-           <p>The application is configured to run with an in-memory database, and (unless you started the app with fixture scripts as described above), initially there is no data. We can though run a fixture script from the app itself:</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/030-home-page-run-fixture-scripts.png"><img src="images/getting-started/using-simple-app/030-home-page-run-fixture-scripts.png" alt="030 home page run fixture scripts" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>The fixture script creates three objects, and the action returns the first of these:</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/040-first-object.png"><img src="images/getting-started/using-simple-app/040-first-object.png" alt="040 first object" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>The application generated is deliberaetly very minimal; we don’t want you to have to waste valuable time removing generated files. The object contains a single "name" property, and a single action to update that property:</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/050-update-name-prompt.png"><img src="images/getting-started/using-simple-app/050-update-name-prompt.png" alt="050 update name prompt" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>When you hit OK, the object is updated:</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/060-object-updated.png"><img src="images/getting-started/using-simple-app/060-object-updated.png" alt="060 object updated" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>For your most signficant domain entities you’ll likely have a domain service to retrieve or create instances of those obejcts. In the generated app we have a "Simple Objects" domain service that lets us list all objects:</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/070-list-all-prompt.png"><img src="images/getting-started/using-simple-app/070-list-all-prompt.png" alt="070 list all prompt" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>whereby we see the three objects created by the fixture script (one having been updated):</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/080-list-all.png"><img src="images/getting-started/using-simple-app/080-list-all.png" alt="080 list all" width="600px"></a> 
-           </div> 
-          </div> 
+          <h4 id="_using_the_app">5.7.5. Using the App</h4> 
           <div class="paragraph"> 
-           <p>and we can also use the domain service to create new instances:</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/090-create.png"><img src="images/getting-started/using-simple-app/090-create.png" alt="090 create" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>prompting us for the mandatory information (the name):</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/100-create-prompt.png"><img src="images/getting-started/using-simple-app/100-create-prompt.png" alt="100 create prompt" width="600px"></a> 
-           </div> 
+           <p>The generated application is almost identical similar to that generated by <a href="#_ugfun_getting-started_helloworld-archetype">helloworld archetype</a>; a description of how to use it can be found <a href="#_ugfun_getting-started_helloworld-archetype_using-the-app">here</a>.</p> 
           </div> 
           <div class="paragraph"> 
-           <p>which, of course, returns the newly created object:</p> 
+           <p>One additional feature that the simpleapp contains over the helloworld app is a home page. This shows all domain objects (as installed by fixture scripts, described <a href="#_ugfun_getting-started_simpleapp-archetype_running-with-fixtures">above</a>).</p> 
           </div> 
           <div class="imageblock"> 
            <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/110-object-created.png"><img src="images/getting-started/using-simple-app/110-object-created.png" alt="110 object created" width="600px"></a> 
+            <a class="image" href="images/getting-started/using-simple-app/030-home-page.png"><img src="images/getting-started/using-simple-app/030-home-page.png" alt="030 home page" width="600px"></a> 
            </div> 
           </div> 
           <div class="paragraph"> 
-           <p>When we list all objects again, we can see that the object was indeed created:</p> 
+           <p>It’s also possible to run fixture scripts from the app itself:</p> 
           </div> 
           <div class="imageblock"> 
            <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/120-list-all.png"><img src="images/getting-started/using-simple-app/120-list-all.png" alt="120 list all" width="600px"></a> 
+            <a class="image" href="images/getting-started/using-simple-app/040-run-fixture-script-menu.png"><img src="images/getting-started/using-simple-app/040-run-fixture-script-menu.png" alt="040 run fixture script menu" width="600px"></a> 
            </div> 
           </div> 
           <div class="paragraph"> 
-           <p>Going back to the home page (<a href="http://localhost:8080">localhost:8080</a>) we can also access the Restful Objects viewer. The generated application is configured to use HTTP Basic Auth:</p> 
+           <p>Some fixture scripts may allow their default behaviour to be tweaked ((eg specify how many objects to create):</p> 
           </div> 
           <div class="imageblock"> 
            <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/220-login-to-restful-viewer.png"><img src="images/getting-started/using-simple-app/220-login-to-restful-viewer.png" alt="220 login to restful viewer" width="600px"></a> 
+            <a class="image" href="images/getting-started/using-simple-app/050-run-fixture-script-prompt.png"><img src="images/getting-started/using-simple-app/050-run-fixture-script-prompt.png" alt="050 run fixture script prompt" width="600px"></a> 
            </div> 
           </div> 
           <div class="paragraph"> 
-           <p>The Restful Objects viewer provides a REST API for computer-to-computer interaction, but we can still interact with it from a browser:</p> 
+           <p>The table summarises the resultant fixtures that were run:</p> 
           </div> 
           <div class="imageblock"> 
            <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/230-home-page.png"><img src="images/getting-started/using-simple-app/230-home-page.png" alt="230 home page" width="600px"></a> 
+            <a class="image" href="images/getting-started/using-simple-app/060-run-fixture-script-result.png"><img src="images/getting-started/using-simple-app/060-run-fixture-script-result.png" alt="060 run fixture script result" width="600px"></a> 
            </div> 
           </div> 
-          <div class="admonitionblock tip"> 
-           <table> 
-            <tbody>
-             <tr> 
-              <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td> 
-              <td class="content"> 
-               <div class="paragraph"> 
-                <p>Depending on your browser, you may need to install plugins. For Chrome, we recommend json-view (which renders the JSON indented and automatically detects hyperlinks) and REST Postman.</p> 
-               </div> </td> 
-             </tr> 
-            </tbody>
-           </table> 
-          </div> 
           <div class="paragraph"> 
-           <p>The REST API is a complete hypermedia API, in other words you can follow the links to access all the behaviour exposed in the regular Wicket app. For example, we can navigate to the <code>listAll/invoke</code> resource:</p> 
+           <p>Navigating back to the home page shows the newly created objects:</p> 
           </div> 
           <div class="imageblock"> 
            <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/240-list-all-invoke.png"><img src="images/getting-started/using-simple-app/240-list-all-invoke.png" alt="240 list all invoke" width="600px"></a> 
+            <a class="image" href="images/getting-started/using-simple-app/070-home-page.png"><img src="images/getting-started/using-simple-app/070-home-page.png" alt="070 home page" width="600px"></a> 
            </div> 
           </div> 
-          <div class="paragraph"> 
-           <p>which when invoked (with an HTTP GET) will return a representation of the domain objects.</p> 
-          </div> 
-          <div class="imageblock"> 
-           <div class="content"> 
-            <a class="image" href="images/getting-started/using-simple-app/250-list-all-results.png"><img src="images/getting-started/using-simple-app/250-list-all-results.png" alt="250 list all results" width="600px"></a> 
-           </div> 
-          </div> 
-          <div class="paragraph"> 
-           <p>To log in, use <code>sven/pass</code>.</p> 
-          </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_modifying_the_app">4.2.6. Modifying the App</h4> 
+          <h4 id="_modifying_the_app">5.7.6. Modifying the App</h4> 
           <div class="paragraph"> 
-           <p>Once you are familiar with the generated app, you’ll want to start modifying it. There is plenty of guidance on this site; check out the 'programming model how-tos' section on the main <a href="../../documentation.html">documentation</a> page first).</p> 
+           <p>Once you are familiar with the generated app, you’ll want to start modifying it. There is plenty of guidance on this site; start with this guide (fundamentals) and then look at the other guides available the main <a href="../../documentation.html">documentation</a> page.</p> 
           </div> 
           <div class="paragraph"> 
            <p>If you use IntelliJ IDEA or Eclipse, do also install the <a href="../dg/dg.html#<em>dg_ide_intellij_live-templates">live templates (for IntelliJ)</a> / <a href="../dg/dg.html#</em>dg_ide_eclipse_editor-templates">editor templates (for Eclipse)</a>; these will help you follow the Apache Isis naming conventions.</p> 
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_app_structure">4.2.7. App Structure</h4> 
+          <h4 id="_app_structure">5.7.7. App Structure</h4> 
           <div class="paragraph"> 
            <p>As noted above, the generated app is a very simple application consisting of a single domain object that can be easily renamed and extended. The intention is not to showcase all of Apache Isis' capabilities; rather it is to allow you to very easily modify the generated application (eg rename <code>SimpleObject</code> to <code>Customer</code>) without having to waste time deleting lots of generated code.</p> 
           </div> 
@@ -2532,17 +2879,7 @@ mvn clean install</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_ugfun_getting-started_datanucleus-enhancer">4.3. Datanucleus Enhancer</h3>
-         <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
-          <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_datanucleus-enhancer.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
-          <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
-          <ul class="dropdown-menu">
-           <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_datanucleus-enhancer.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i>&nbsp; Edit</a></li>
-           <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_datanucleus-enhancer.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; History</a></li>
-           <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_datanucleus-enhancer.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i>&nbsp; Raw</a></li>
-           <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_getting-started_datanucleus-enhancer.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
-          </ul>
-         </div> 
+         <h3 id="_ugfun_getting-started_datanucleus-enhancer">5.8. Datanucleus Enhancer</h3> 
          <div class="paragraph"> 
           <p><a href="http://www.datanucleus.org/">DataNucleus</a> is the reference implementation of the JDO (Java data objects) spec, and Apache Isis integrates with DataNucleus as its persistence layer. Datanucleus is a very powerful library, allowing domain entities to be mapped not only to relational database tables, but also to NoSQL stores such as <a href="http://neo4j.com/">Neo4J</a>, <a href="http://www.mongodb.org/">MongoDB</a> and <a href="http://cassandra.apache.org/">Apache Cassandra</a>.</p> 
          </div> 
@@ -2566,78 +2903,15 @@ mvn clean install</code></pre>
           <p>What this means is that the enhancer — available as both a Maven plugin and as an Eclipse plugin — must, one way or another, be integrated into your development environment.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>If working from the Maven command line, JDO enhancement is done using the <code>maven-datanucleus-plugin</code>. As of 1.9.0, we put all the configuration into an (always active) profile:</p> 
-         </div> 
-         <div class="admonitionblock tip"> 
-          <table> 
-           <tbody>
-            <tr> 
-             <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td> 
-             <td class="content"> 
-              <div class="paragraph"> 
-               <p>The configuration described below is automatically set up by the <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a>.</p> 
-              </div> </td> 
-            </tr> 
-           </tbody>
-          </table> 
-         </div> 
-         <div class="listingblock"> 
-          <div class="content"> 
-           <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;profile&gt;</span>
-    <span class="tag">&lt;id&gt;</span>enhance<span class="tag">&lt;/id&gt;</span>
-    <span class="tag">&lt;activation&gt;</span>
-        <span class="tag">&lt;activeByDefault&gt;</span>true<span class="tag">&lt;/activeByDefault&gt;</span>
-    <span class="tag">&lt;/activation&gt;</span>
-    <span class="tag">&lt;properties&gt;</span>
-        <span class="tag">&lt;datanucleus-maven-plugin.version&gt;</span>4.0.1<span class="tag">&lt;/datanucleus-maven-plugin.version&gt;</span>
-    <span class="tag">&lt;/properties&gt;</span>
-    <span class="tag">&lt;build&gt;</span>
-        <span class="tag">&lt;plugins&gt;</span>
-            <span class="tag">&lt;plugin&gt;</span>
-                <span class="tag">&lt;groupId&gt;</span>org.datanucleus<span class="tag">&lt;/groupId&gt;</span>
-                <span class="tag">&lt;artifactId&gt;</span>datanucleus-maven-plugin<span class="tag">&lt;/artifactId&gt;</span>
-                <span class="tag">&lt;version&gt;</span>${datanucleus-maven-plugin.version}<span class="tag">&lt;/version&gt;</span>
-                <span class="tag">&lt;configuration&gt;</span>
-                    <span class="tag">&lt;fork&gt;</span>false<span class="tag">&lt;/fork&gt;</span>
-                    <span class="tag">&lt;log4jConfiguration&gt;</span>${basedir}/log4j.properties<span class="tag">&lt;/log4jConfiguration&gt;</span>
-                    <span class="tag">&lt;verbose&gt;</span>true<span class="tag">&lt;/verbose&gt;</span>
-                    <span class="tag">&lt;props&gt;</span>${basedir}/datanucleus.properties<span class="tag">&lt;/props&gt;</span>
-                <span class="tag">&lt;/configuration&gt;</span>
-                <span class="tag">&lt;executions&gt;</span>
-                    <span class="tag">&lt;execution&gt;</span>
-                        <span class="tag">&lt;phase&gt;</span>process-classes<span class="tag">&lt;/phase&gt;</span>
-                        <span class="tag">&lt;goals&gt;</span>
-                            <span class="tag">&lt;goal&gt;</span>enhance<span class="tag">&lt;/goal&gt;</span>
-                        <span class="tag">&lt;/goals&gt;</span>
-                    <span class="tag">&lt;/execution&gt;</span>
-                <span class="tag">&lt;/executions&gt;</span>
-            <span class="tag">&lt;/plugin&gt;</span>
-        <span class="tag">&lt;/plugins&gt;</span>
-    <span class="tag">&lt;/build&gt;</span>
-    <span class="tag">&lt;dependencies&gt;</span>
-        <span class="tag">&lt;dependency&gt;</span>
-            <span class="tag">&lt;groupId&gt;</span>org.datanucleus<span class="tag">&lt;/groupId&gt;</span>
-            <span class="tag">&lt;artifactId&gt;</span>datanucleus-core<span class="tag">&lt;/artifactId&gt;</span>
-        <span class="tag">&lt;/dependency&gt;</span>
-        <span class="tag">&lt;dependency&gt;</span>
-            <span class="tag">&lt;groupId&gt;</span>org.datanucleus<span class="tag">&lt;/groupId&gt;</span>
-            <span class="tag">&lt;artifactId&gt;</span>datanucleus-jodatime<span class="tag">&lt;/artifactId&gt;</span>
-        <span class="tag">&lt;/dependency&gt;</span>
-        <span class="tag">&lt;dependency&gt;</span>
-            <span class="tag">&lt;groupId&gt;</span>org.datanucleus<span class="tag">&lt;/groupId&gt;</span>
-            <span class="tag">&lt;artifactId&gt;</span>datanucleus-api-jdo<span class="tag">&lt;/artifactId&gt;</span>
-        <span class="tag">&lt;/dependency&gt;</span>
-    <span class="tag">&lt;/dependencies&gt;</span>
-<span class="tag">&lt;/profile&gt;</span></code></pre> 
-          </div> 
+          <p>If working from the Maven command line, JDO enhancement is done using the <code>maven-datanucleus-plugin</code>.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>The <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a> sets up the plugin correctly in the <code>dom</code> (domain object model) module. (It’s actually a little bit more complex to cater for users of the Eclipse IDE using Eclipse’s m2e plugin).</p> 
+          <p>Both the <a href="#_ugfun_getting-started_helloworld-archetype">HelloWorld</a> and <a href="#_ugfun_getting-started_simpleapp-archetype">SimpleApp</a> Maven archetypes generate applications that have this plugin pre-configured.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__code_meta_inf_persistence_xml_code">4.3.1. <code>META-INF/persistence.xml</code></h4> 
+          <h4 id="_meta_inf_persistence_xml">5.8.1. META-INF/persistence.xml</h4> 
           <div class="paragraph"> 
-           <p>It’s also a good idea to ensure that the <code>dom</code> module has a JDO <code>META-INF/persistence.xml</code> file:</p> 
+           <p>It’s also a good idea to ensure that every domain module(s) containing entities has a JDO <code>META-INF/persistence.xml</code> file:</p> 
           </div> 
           <div class="listingblock"> 
            <div class="content"> 
@@ -2656,13 +2930,13 @@ mvn clean install</code></pre>
             <tbody>
              <tr> 
               <td><i class="conum" data-value="1"></i><b>1</b></td> 
-              <td>change as required; typically is the name of the app.</td> 
+              <td>change as required; typically is the name of the domain module.</td> 
              </tr> 
             </tbody>
            </table> 
           </div> 
           <div class="paragraph"> 
-           <p>Again, the <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a> does this.</p> 
+           <p>Again, the applications generated by both the <a href="../ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">HelloWorld</a> and <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">Simpleapp</a> Maven archetypes do this.</p> 
           </div> 
           <div class="admonitionblock warning"> 
            <table> 
@@ -2685,7 +2959,7 @@ mvn clean install</code></pre>
        </div> 
       </div> 
       <div class="sect1"> 
-       <h2 id="_ugfun_programming-model">5. Programming Model</h2>
+       <h2 id="_ugfun_programming-model">6. Programming Model</h2>
        <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
         <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
         <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -2764,7 +3038,7 @@ mvn clean install</code></pre>
          <p>The framework also defines supplementary annotations, <code>@DomainObjectLayout</code> and <code>@DomainServiceLayout</code>. These provide hints relating to the layout of the domain object in the user interface. (Alternatively, these UI hints can be defined in a supplementary <a href="../ugvw/ugvw.html#_ugvw_layout"><code>.layout.xml</code></a> file.</p> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_ugfun_programming-model_domain-entities">5.1. Domain Entities</h3>
+         <h3 id="_ugfun_programming-model_domain-entities">6.1. Domain Entities</h3>
          <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
           <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-entities.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
           <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -2990,7 +3264,7 @@ RepositoryService repositoryService;</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_ugfun_programming-model_domain-services">5.2. Domain Services</h3>
+         <h3 id="_ugfun_programming-model_domain-services">6.2. Domain Services</h3>
          <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
           <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
           <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3005,7 +3279,7 @@ RepositoryService repositoryService;</code></pre>
           <p>This section looks at the programming model for writing your own domain services.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_ugfun_programming-model_domain-services_organizing-services">5.2.1. Organizing Services</h4>
+          <h4 id="_ugfun_programming-model_domain-services_organizing-services">6.2.1. Organizing Services</h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_organizing-services.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3052,7 +3326,7 @@ RepositoryService repositoryService;</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_ugfun_programming-model_domain-services_repository-and-factory">5.2.2. Repository and Factory</h4>
+          <h4 id="_ugfun_programming-model_domain-services_repository-and-factory">6.2.2. Repository and Factory</h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_repository-and-factory.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3118,7 +3392,7 @@ RepositoryService repositoryService;</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_ugfun_programming-model_domain-services_menu">5.2.3. Menu</h4>
+          <h4 id="_ugfun_programming-model_domain-services_menu">6.2.3. Menu</h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_menu.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3248,7 +3522,7 @@ RepositoryService repositoryService;</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_ugfun_programming-model_domain-services_event-subscribers">5.2.4. Event Subscribers</h4>
+          <h4 id="_ugfun_programming-model_domain-services_event-subscribers">6.2.4. Event Subscribers</h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_event-subscribers.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3316,7 +3590,7 @@ RepositoryService repositoryService;</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_ugfun_programming-model_domain-services_contributions">5.2.5. Contributions (deprecated)</h4>
+          <h4 id="_ugfun_programming-model_domain-services_contributions">6.2.5. Contributions (deprecated)</h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_contributions.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3391,7 +3665,7 @@ RepositoryService repositoryService;</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_ugfun_programming-model_domain-services_scoped-services">5.2.6. Scoped services</h4>
+          <h4 id="_ugfun_programming-model_domain-services_scoped-services">6.2.6. Scoped services</h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_scoped-services.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3424,7 +3698,7 @@ RepositoryService repositoryService;</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_ugfun_programming-model_domain-services_registering">5.2.7. Registering</h4>
+          <h4 id="_ugfun_programming-model_domain-services_registering">6.2.7. Registering</h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_registering.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3490,7 +3764,7 @@ isis.services = employee.Employees,\
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_ugfun_programming-model_domain-services_initialization">5.2.8. Initialization</h4>
+          <h4 id="_ugfun_programming-model_domain-services_initialization">6.2.8. Initialization</h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_initialization.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3516,7 +3790,7 @@ isis.services = employee.Employees,\
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_ugfun_programming-model_properties">5.3. Property</h3>
+         <h3 id="_ugfun_programming-model_properties">6.3. Property</h3>
          <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
           <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_properties.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
           <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3547,10 +3821,10 @@ isis.services = employee.Employees,\
           <p>Apache Isis recognises some of these annotations for JDO/DataNucleus and JAXB and infers some domain semantics from them (for example, the maximum allowable length of a string property).</p> 
          </div> 
          <div class="paragraph"> 
-          <p>Since writing getter and setter methods adds quite a bit of boilerplate, it’s common to use <a href="https://projectlombok.org/">Project Lombok</a> to code generate these methods at compile time (using Java’s annotation processor) simply by adding the <code>@lombok.Getter</code> and <code>@lombok.Setter</code> annotations to the field. The <a href="#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a> uses this approach.</p> 
+          <p>Since writing getter and setter methods adds quite a bit of boilerplate, it’s common to use <a href="https://projectlombok.org/">Project Lombok</a> to code generate these methods at compile time (using Java’s annotation processor) simply by adding the <code>@lombok.Getter</code> and <code>@lombok.Setter</code> annotations to the field. The <a href="#_ugfun_getting-started_helloworld-archetype">HelloWorld</a> and <a href="#_ugfun_getting-started_simpleapp-archetype">SimpleApp</a> archetypes use this approach.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__ugfun_programming-model_properties_value-vs-reference-types">5.3.1. Value vs Reference Types</h4> 
+          <h4 id="__ugfun_programming-model_properties_value-vs-reference-types">6.3.1. Value vs Reference Types</h4> 
           <div class="paragraph"> 
            <p>Properties can be either a value type (strings, int, date and so on) or be a reference to another object (for example, an <code>Order</code> referencing the <code>Customer</code> that placed it).</p> 
           </div> 
@@ -3616,7 +3890,7 @@ isis.services = employee.Employees,\
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__ugfun_programming-model_properties_optional-properties">5.3.2. Optional Properties</h4> 
+          <h4 id="__ugfun_programming-model_properties_optional-properties">6.3.2. Optional Properties</h4> 
           <div class="paragraph"> 
            <p>(For domain entities) JDO/DataNucleus' default is that a property is assumed to be mandatory if it is a primitive type (eg <code>int</code>, <code>boolean</code>), but optional if a reference type (eg <code>String</code>, <code>BigDecimal</code> etc). To override optionality in JDO/DataNucleus the <code>@Column(allowsNull="…​")</code> annotations is used.</p> 
           </div> 
@@ -3652,7 +3926,7 @@ isis.services = employee.Employees,\
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__ugfun_programming-model_properties_editable-properties">5.3.3. Editable Properties</h4> 
+          <h4 id="__ugfun_programming-model_properties_editable-properties">6.3.3. Editable Properties</h4> 
           <div class="paragraph"> 
            <p>Apache Isis provides the capability to allow individual properties to be modified. This is specified using the <code>@Property(editing=…​)</code> attribute.</p> 
           </div> 
@@ -3671,7 +3945,7 @@ isis.services = employee.Employees,\
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__ugfun_programming-model_properties_ignoring-properties">5.3.4. Ignoring Properties</h4> 
+          <h4 id="__ugfun_programming-model_properties_ignoring-properties">6.3.4. Ignoring Properties</h4> 
           <div class="paragraph"> 
            <p>By default Apache Isis will automatically render all properties in the <a href="../ugvw/ugvw.html">Wicket UI</a> or in the <a href="#../ugvro/ugvro.adoc">REST API</a>. To get Apache Isis to ignore a property (exclude it from its metamodel), annotate the getter using <code>@Programmatic</code>.</p> 
           </div> 
@@ -3683,7 +3957,7 @@ isis.services = employee.Employees,\
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__ugfun_programming-model_properties_derived-properties">5.3.5. Derived Properties</h4> 
+          <h4 id="__ugfun_programming-model_properties_derived-properties">6.3.5. Derived Properties</h4> 
           <div class="paragraph"> 
            <p>Derived properties are those with a getter but no setter. Provided that the property has not been annotated with <code>@Programmatic</code>, these will still be rendered in the UI, but they will be read-only (not editable) and their state will not be persisted.</p> 
           </div> 
@@ -3730,7 +4004,7 @@ AddressService addressService;
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__ugfun_programming-model_properties_datatypes">5.3.6. Data types</h4> 
+          <h4 id="__ugfun_programming-model_properties_datatypes">6.3.6. Data types</h4> 
           <div class="paragraph"> 
            <p>This section shows specific considerations for various datatypes, in particular how to annotate them for DataNucleus mapping to the persistence object store.</p> 
           </div> 
@@ -3949,7 +4223,7 @@ AddressService addressService;
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_ugfun_programming-model_collections">5.4. Collections</h3>
+         <h3 id="_ugfun_programming-model_collections">6.4. Collections</h3>
          <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
           <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_collections.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
           <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -3986,7 +4260,7 @@ AddressService addressService;
           <p>Since writing getter and setter methods adds quite a bit of boilerplate, it’s common to use <a href="https://projectlombok.org/">Project Lombok</a> to code generate these methods at compile time (using Java’s annotation processor) simply by adding the <code>@lombok.Getter</code> and <code>@lombok.Setter</code> annotations to the field.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__ugfun_programming-model_collections_mapping-bid

<TRUNCATED>