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 2018/02/13 13:48:36 UTC

[09/19] isis-site git commit: publishes 1.16.1-SNAPSHOT

http://git-wip-us.apache.org/repos/asf/isis-site/blob/f27adae8/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf b/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf
index 35a0634..d6f3396 100644
--- a/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf
+++ b/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf
@@ -4,8 +4,8 @@
 << /Title (Framework Internal Services)
 /Creator (Asciidoctor PDF 1.5.0.alpha.11, based on Prawn 1.3.0)
 /Producer (Asciidoctor PDF 1.5.0.alpha.11, based on Prawn 1.3.0)
-/CreationDate (D:20180108230453+00'00')
-/ModDate (D:20180108230453+00'00')
+/CreationDate (D:20180213131057+00'00')
+/ModDate (D:20180213131057+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/f27adae8/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf b/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf
index 1f4e0a5..dbd3172 100644
--- a/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf
+++ b/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf
@@ -4,8 +4,8 @@
 << /Title (Apache Isis Maven plugin)
 /Creator (Asciidoctor PDF 1.5.0.alpha.11, based on Prawn 1.3.0)
 /Producer (Asciidoctor PDF 1.5.0.alpha.11, based on Prawn 1.3.0)
-/CreationDate (D:20180108230526+00'00')
-/ModDate (D:20180108230526+00'00')
+/CreationDate (D:20180213131101+00'00')
+/ModDate (D:20180213131101+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/f27adae8/content/versions/SNAPSHOT/guides/rgsvc/images/reference-services-spi/ErrorReportingService/kitchensink-example.png
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgsvc/images/reference-services-spi/ErrorReportingService/kitchensink-example.png b/content/versions/SNAPSHOT/guides/rgsvc/images/reference-services-spi/ErrorReportingService/kitchensink-example.png
index 04a613b..da8617e 100644
Binary files a/content/versions/SNAPSHOT/guides/rgsvc/images/reference-services-spi/ErrorReportingService/kitchensink-example.png and b/content/versions/SNAPSHOT/guides/rgsvc/images/reference-services-spi/ErrorReportingService/kitchensink-example.png differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/f27adae8/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.html
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.html b/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.html
index c679a2e..6c4d9b9 100644
--- a/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.html
+++ b/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.html
@@ -1220,40 +1220,46 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementations">4.1.2. Implementations</h4> 
+          <h4 id="_rgsvc_presentation-layer-spi_ContentMappingService_implementations">4.1.2. Implementations</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/rgsvc/_rgsvc_presentation-layer-spi_ContentMappingService_implementations.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/rgsvc/_rgsvc_presentation-layer-spi_ContentMappingService_implementations.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/rgsvc/_rgsvc_presentation-layer-spi_ContentMappingService_implementations.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/rgsvc/_rgsvc_presentation-layer-spi_ContentMappingService_implementations.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/rgsvc/_rgsvc_presentation-layer-spi_ContentMappingService_implementations.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
+           </ul>
+          </div> 
+          <div class="paragraph"> 
+           <p>The framework provides two implementations of this service, both in support of the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a> SPI.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>By way of background: implementations of the SPI <code>CommandService</code> work with custom implementations of the <code>Command</code> interface, typically being persisted to a datastore. The <code>CommandWithDto</code> interface is a subtype of <code>Command</code> for implementations that can be reified into <a href="../rgcms/rgcms.html#_rgcms_schema-cmd"><code>CommandDto</code></a> XML instances. One implementation that does this is the (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s command module.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>For framework implementations of <code>ContentMappingService</code> allow domain service actions that return <code>CommandDto</code>s (either singularly or in a list) to be converted into XML documents:</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p><code>o.a.i.applib.conmap.ContentMappingServiceForCommandDto</code> will map any single instnce of a <code>CommandWithDto</code> into a <code>CommandDto</code> XML document</p> </li> 
+            <li> <p><code>o.a.i.applib.conmap.ContentMappingServiceForCommandsDto</code> will map list of <code>CommandWithDto</code>s into a <code>CommandsDto</code> XML document, and will wrap any single instance of a <code>CommandWithDto</code> into a singleton list and thence into a <code>CommandsDto</code> XML document.</p> </li> 
+           </ul> 
+          </div> 
           <div class="paragraph"> 
-           <p>No default implementations are provided by Apache Isis framework itself.</p> 
+           <p>If the action invocation or property edit represent provides an implementation of a <code>CommandDtoProcessor</code> (by way of <a href="../rgant/rgant.html#_rgant-Action_command"><code>@Action#commandDtoProcessor()</code></a> or <a href="../rgant/rgant.html#_rgant-Property_command"><code>@Property#commandDtoProcessor()</code></a>) then this is also called to post-process the persisted <code>CommandDto</code> if required. A typical use case for this is to dynamically add in serialized <code>Blob</code>s or <code>Clob</code>s, the values of which are not captured by default in <code>CommandDto</code>.</p> 
           </div> 
           <div class="paragraph"> 
-           <p>However, the (non-ASF) <a href="http://github.com/isisaddons/isis-app-todoapp">Isis addons' todoapp</a> includes a sample implementation to convert its <code>ToDoItem</code> entity into a (JAXB annotated) <code>ToDoItemDto</code>. The source code is:</p> 
+           <p>To support the writing of custom implementations of this interface, the framework also provides <code>ContentMappingService.Util</code> which includes a couple of convenience utilities:</p> 
           </div> 
           <div class="listingblock"> 
            <div class="content"> 
-            <pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainService</span>(nature = NatureOfService.DOMAIN)
-<span class="directive">public</span> <span class="type">class</span> <span class="class">ContentMappingServiceForToDoItem</span> <span class="directive">implements</span> ContentMappingService {
-    <span class="annotation">@Override</span>
-    <span class="directive">public</span> <span class="predefined-type">Object</span> map(
-            <span class="directive">final</span> <span class="predefined-type">Object</span> object,
-            <span class="directive">final</span> <span class="predefined-type">List</span>&lt;MediaType&gt; acceptableMediaTypes) {
-        <span class="keyword">if</span>(object <span class="keyword">instanceof</span> ToDoItem) {
-            <span class="keyword">for</span> (MediaType acceptableMediaType : acceptableMediaTypes) {
-                <span class="directive">final</span> <span class="predefined-type">Map</span>&lt;<span class="predefined-type">String</span>, <span class="predefined-type">String</span>&gt; parameters = acceptableMediaType.getParameters();
-                <span class="directive">final</span> <span class="predefined-type">String</span> className = parameters.get(<span class="string"><span class="delimiter">"</span><span class="content">x-ro-domain-type</span><span class="delimiter">"</span></span>);
-                <span class="keyword">if</span>(className.eqausl(ToDoItemV1_1.class.getName())) {
-                    <span class="keyword">return</span> newToDoItemV1_1((ToDoItem) object);
-                }
-            }
-        }
-        <span class="keyword">return</span> <span class="predefined-constant">null</span>;
-    }
-    <span class="directive">private</span> ToDoItemV1_1 newToDoItemV1_1(<span class="directive">final</span> ToDoItem toDoItem) {
-        <span class="directive">final</span> ToDoItemV1_1 dto = <span class="keyword">new</span> ToDoItemV1_1();
-        dto.setToDoItem(toDoItem);
-        dto.setDescription(toDoItem.getDescription());
-        ...
-        return dto;
-    }
-    ...
+            <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="directive">static</span> <span class="type">class</span> <span class="class">Util</span> {
+    <span class="directive">public</span> <span class="directive">static</span> <span class="predefined-type">String</span> determineDomainType(
+        <span class="directive">final</span> <span class="predefined-type">List</span>&lt;MediaType&gt; acceptableMediaTypes) { ... }
+    <span class="directive">public</span> <span class="directive">static</span> <span class="type">boolean</span> isSupported(
+            <span class="directive">final</span> <span class="predefined-type">Class</span>&lt;?&gt; clazz,
+            <span class="directive">final</span> <span class="predefined-type">List</span>&lt;MediaType&gt; acceptableMediaTypes) { ... }
 }</code></pre> 
            </div> 
           </div> 
@@ -1263,6 +1269,9 @@ table.CodeRay td.code>pre{padding:0}
           <div class="paragraph"> 
            <p>This service is a companion to the default implementation of the <a href="../rgfis/rgfis.html#_rgfis_presentation-layer_ContentNegotiationService"><code>ContentNegotiationService</code></a>.</p> 
           </div> 
+          <div class="paragraph"> 
+           <p>The framework implementations of <code>ContentMappingService</code> use the <a href="#_rgsvc_metadata-api_MetamodelService"><code>MetaModelService</code></a> to lookup any custom implementations of <code>CommandDtoProcessor</code>.</p> 
+          </div> 
          </div> 
         </div> 
         <div class="sect2"> 
@@ -1381,7 +1390,7 @@ table.CodeRay td.code>pre{padding:0}
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The <code>ErrorReportingService</code> service is an optional SPI that provides the ability to record any errors/exceptions that might occur in the application into an external incident recording system (such as JIRA). The service also allows a user-friendly (jargon-free) error message to be returned and rendered to the end-user, along with an optional incident reference (eg a JIRA issue <code>XXX-1234</code>).</p> 
+          <p>The <code>ErrorReportingService</code> service is an optional SPI that provides the ability to record any errors/exceptions that might occur in the application into an external incident recording system (such as JIRA or Slack). The service also allows a user-friendly (jargon-free) error message to be returned and rendered to the end-user, along with an optional incident reference (eg a JIRA issue <code>XXX-1234</code>). The service can also return a URL for an external image. For example, this could be to a comic strip or (as a bit of fun) a picture of a random kitten.</p> 
          </div> 
          <div class="sect3"> 
           <h4 id="_spi_3">4.3.1. SPI</h4> 
@@ -1439,7 +1448,9 @@ table.CodeRay td.code>pre{padding:0}
     <span class="directive">public</span> Ticket(
         <span class="directive">final</span> <span class="predefined-type">String</span> reference,             <i class="conum" data-value="1"></i><b>(1)</b>
         <span class="directive">final</span> <span class="predefined-type">String</span> userMessage,           <i class="conum" data-value="2"></i><b>(2)</b>
-        <span class="directive">final</span> <span class="predefined-type">String</span> details) { ... }       <i class="conum" data-value="3"></i><b>(3)</b>
+        <span class="directive">final</span> <span class="predefined-type">String</span> details,               <i class="conum" data-value="3"></i><b>(3)</b>
+        <span class="directive">final</span> StackTracePolicy policy,      <i class="conum" data-value="4"></i><b>(4)</b>
+        <span class="directive">final</span> <span class="predefined-type">String</span> kittenUrl) { ... }     <i class="conum" data-value="5"></i><b>(5)</b>
 }</code></pre> 
            </div> 
           </div> 
@@ -1458,6 +1469,14 @@ table.CodeRay td.code>pre{padding:0}
               <td><i class="conum" data-value="3"></i><b>3</b></td> 
               <td>is optional additional details to show. For example, these might include text on how to recover from the error, or workarounds, or just further details on contacting the help desk if the issue is severe and requires immediate attention.</td> 
              </tr> 
+             <tr> 
+              <td><i class="conum" data-value="4"></i><b>4</b></td> 
+              <td>is optional, specifying whether to show a button to view details of the stack trace. By default a stack trace button is not shown if a ticket is returned (but <em>is</em> shown if there is no <code>ErrorReportingService</code> configured, or if it returns no ticket).</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="5"></i><b>5</b></td> 
+              <td>is optioal, specifying an external URL of an image to display for the end user.</td> 
+             </tr> 
             </tbody>
            </table> 
           </div> 
@@ -1479,13 +1498,12 @@ table.CodeRay td.code>pre{padding:0}
     <span class="directive">public</span> Ticket reportError(<span class="directive">final</span> ErrorDetails errorDetails) {
         <span class="keyword">return</span> <span class="keyword">new</span> Ticket(
                 nextTicketReference(),
-                <span class="string"><span class="delimiter">"</span><span class="content">The Kitchen sink app is sorry to report that: </span><span class="delimiter">"</span></span> + errorDetails.getMainMessage(),
-                  <span class="string"><span class="delimiter">"</span><span class="content">These are additional details for the end-user to read.</span><span class="char">\n</span><span class="delimiter">"</span></span>
-                + <span class="string"><span class="delimiter">"</span><span class="content">This content should be able to span many lines.</span><span class="char">\n</span><span class="delimiter">"</span></span>
-                + <span class="string"><span class="delimiter">"</span><span class="content">More detail.</span><span class="char">\n</span><span class="delimiter">"</span></span>
-                + <span class="string"><span class="delimiter">"</span><span class="content">Some suggested work-arounds.</span><span class="char">\n</span><span class="delimiter">"</span></span>
-                + <span class="string"><span class="delimiter">"</span><span class="content">Details of how to contact help desk.</span><span class="char">\n</span><span class="delimiter">"</span></span>
-                + <span class="string"><span class="delimiter">"</span><span class="content">And so on</span><span class="delimiter">"</span></span>);
+                errorDetails.getMainMessage(),
+                  <span class="string"><span class="delimiter">"</span><span class="content">By way of an apology, </span><span class="char">\n</span><span class="delimiter">"</span></span>
+                          + <span class="string"><span class="delimiter">"</span><span class="content">here's a picture of a </span><span class="char">\n</span><span class="delimiter">"</span></span>
+                          + <span class="string"><span class="delimiter">"</span><span class="content">kitten for you to look at.</span><span class="delimiter">"</span></span>,
+                <span class="string"><span class="delimiter">"</span><span class="content">http://www.randomkittengenerator.com/cats/rotator.php</span><span class="delimiter">"</span></span>
+                );
     }
     <span class="predefined-type">String</span> nextTicketReference() {
         <span class="keyword">return</span> <span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span> + ticketNumber++;
@@ -2418,7 +2436,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementations_2">4.13.2. Implementations</h4> 
+          <h4 id="_implementations">4.13.2. Implementations</h4> 
           <div class="paragraph"> 
            <p>The framework provides an implementation, <code>SessionLoggingService.Stderr</code> that just prints out to standard error. This is not registered by default, but can be easily registered manually using <code>AppManifestAbstract.Builder#withAdditionalServices(…​)</code>.</p> 
           </div> 
@@ -2476,7 +2494,7 @@ table.CodeRay td.code>pre{padding:0}
            </table> 
           </div> 
           <div class="paragraph"> 
-           <p>There can be multiple implementations of <code>TableColumnOrderService</code> registered, ordered as per <a href="../rgant/rgant.html#_rgant_DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>. The ordering provided by the first such service that returns a non-<code>null</code> value will be used. If all provided implementations return <code>null</code>, then the framework will fallback to a default implementation.</p> 
+           <p>There can be multiple implementations of <code>TableColumnOrderService</code> registered, ordered as per <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>. The ordering provided by the first such service that returns a non-<code>null</code> value will be used. If all provided implementations return <code>null</code>, then the framework will fallback to a default implementation.</p> 
           </div> 
          </div> 
          <div class="sect3"> 
@@ -2904,7 +2922,7 @@ table.CodeRay td.code>pre{padding:0}
               <p>Programmatic persistence of commands to be persisted (so can be executed by a background mechanism, eg scheduler)</p> 
              </div>
             </div></td> 
-           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>BackgroundServiceDefault</code><br> <code>o.a.i.core</code><br> <code>isis-core-runtime</code></p></td> 
+           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>BackgroundService-</code> <code>Default</code><br> <code>o.a.i.core</code><br> <code>isis-core-runtime</code></p></td> 
            <td class="tableblock halign-left valign-top"><p class="tableblock">depends on:<br> <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_BackgroundCommandService"><code>BackgroundCommand-Service</code></a></p></td> 
           </tr> 
           <tr> 
@@ -2919,6 +2937,17 @@ table.CodeRay td.code>pre{padding:0}
            <td class="tableblock halign-left valign-top"><p class="tableblock">API is also a concrete class.<br> depends on:<br> <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a> for persistent <code>Command</code>, else in-memory impl. used. </p><p class="tableblock">The <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_InteractionContext"><code>InteractionContext</code></a> manages the actual execution of the command.</p></td> 
           </tr> 
           <tr> 
+           <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandExecutorService"><code>o.a.i.applib.</code><br> <code>services.command</code><br> <code>CommandExecutorService</code></a></p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>Executes the specified <code>Command</code>.</p> 
+             </div>
+            </div></td> 
+           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CommandExecutorService-</code> <code>Default</code><br> <code>o.a.i.core</code><br> <code>isis-core-runtime</code></p></td> 
+           <td class="tableblock halign-left valign-top"></td> 
+          </tr> 
+          <tr> 
            <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_DtoMappingHelper"><code>o.a.i.applib.</code><br> <code>services.dto</code><br> <code>DtoMappingHelper</code></a></p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
@@ -3009,7 +3038,7 @@ table.CodeRay td.code>pre{padding:0}
          </ul> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_ActionInvocationContext">5.1. <code>ActionInvocationContext</code></h3>
+         <h3 id="_rgsvc_application-layer-api_ActionInvocationContext">5.1. <code>ActionInvocationContext</code> (deprecated)</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/rgsvc/_rgsvc_application-layer-api_ActionInvocationContext.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>
@@ -3026,6 +3055,22 @@ table.CodeRay td.code>pre{padding:0}
          <div class="paragraph"> 
           <p>When an action is invoked in this way, this service allows each object instance to "know where it is" in the collection; it acts a little like an iterator. In particular, an object can determine if it is the last object to be called, and so can perform special processing, eg to return a summary calculated result.</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>Bulk actions are now deprecated, which means that this service is also deprecated.</p> 
+              </div> 
+              <div class="paragraph"> 
+               <p>Instead, the recommended technique is to define a view model to wrap around the collection, and then to use an action on the view model, associated with the collection and with a collection parameter), to act upon the selected items of the collection.</p> 
+              </div> </td> 
+            </tr> 
+           </tbody>
+          </table> 
+         </div> 
          <div class="sect3"> 
           <h4 id="_api_implementation_5">5.1.1. API &amp; Implementation</h4> 
           <div class="paragraph"> 
@@ -3491,44 +3536,40 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
  <span class="tag">&lt;/servlet&gt;</span></code></pre> 
            </div> 
           </div> 
-         </div> 
-        </div> 
-        <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_CommandContext">5.3. <code>CommandContext</code></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/rgsvc/_rgsvc_application-layer-api_CommandContext.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/rgsvc/_rgsvc_application-layer-api_CommandContext.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/rgsvc/_rgsvc_application-layer-api_CommandContext.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/rgsvc/_rgsvc_application-layer-api_CommandContext.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/rgsvc/_rgsvc_application-layer-api_CommandContext.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
-          </ul>
-         </div> 
-         <div class="paragraph"> 
-          <p>The <code>CommandContext</code> service is a <a href="../rgant/rgant.html#_rgant-RequestScoped">request-scoped</a> service that reifies the invocation of an action on a domain object into an object itself. This reified information is encapsulated within the <code>Command</code> object.</p> 
-         </div> 
-         <div class="paragraph"> 
-          <p>By default, the <code>Command</code> is held in-memory only; once the action invocation has completed, the <code>Command</code> object is gone. The optional supporting <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a> enables the implementation of <code>Command</code> to be pluggable. With an appropriate implementation (eg as provided by the (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s command module’s <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a>) the <code>Command</code> may then be persisted.</p> 
-         </div> 
-         <div class="paragraph"> 
-          <p>The primary use case for persistent <code>Command</code>s is in support of background commands; they act as a parent to any background commands that can be persisted either explicitly using the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_BackgroundService"><code>BackgroundService</code></a>, or implicitly by way of the <a href="../rgant/rgant.html#_rgant-Action_command"><code>@Action#command()</code></a> annotation.</p> 
-         </div> 
-         <div class="paragraph"> 
-          <p>There are a number of related use cases:</p> 
-         </div> 
-         <div class="ulist"> 
-          <ul> 
-           <li> <p>to enable profiling of the running application (which actions are invoked then most often, what is their response time)</p> </li> 
-           <li> <p>if a <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a> or <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a> (the latter now deprecated) is configured, they provide better traceability as the <code>Command</code> is also correlated with any published events, again through the unique <code>transactionId</code> GUID</p> </li> 
-           <li> <p>if a <a href="../rgsvc/rgsvc.html#_rgsvc_spi_AuderService"><code>AuditerService</code></a> or <a href="../rgsvc/rgsvc.html#_rgsvc_spi_AuditService"><code>AuditingService</code></a> (the latter now deprecated) is configured, they provide better audit information, since the <code>Command</code> (the 'cause' of an action) can be correlated to the audit records (the "effect" of the action) through the <code>transactionId</code> GUID</p> </li> 
-          </ul> 
-         </div> 
-         <div class="paragraph"> 
-          <p>However, while persistent <code>Command</code>s <em>can</em> be used for these use cases, it is recommended instead to use the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_InteractionContext"><code>InteractionContext</code></a> service and persistent implementations of the <code>Interaction</code> object, eg as provided by the (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s publishmq module.</p> 
+          <div class="literalblock"> 
+           <div class="content"> 
+            <pre>    [[_rgsvc_application-layer-api_CommandContext]]
+= `CommandContext`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../../
+:_imagesdir: images/</pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The <code>CommandContext</code> service is a <a href="../rgant/rgant.html#_rgant-RequestScoped">request-scoped</a> service that reifies the invocation of an action on a domain object into an object itself. This reified information is encapsulated within the <code>Command</code> object.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>By default, the <code>Command</code> is held in-memory only; once the action invocation has completed, the <code>Command</code> object is gone. The optional supporting <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a> enables the implementation of <code>Command</code> to be pluggable. With an appropriate implementation (eg as provided by the (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s command module’s <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a>) the <code>Command</code> may then be persisted.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The primary use case for persistent <code>Command</code>s is in support of background commands; they act as a parent to any background commands that can be persisted either explicitly using the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_BackgroundService"><code>BackgroundService</code></a>, or implicitly by way of the <a href="../rgant/rgant.html#_rgant-Action_command"><code>@Action#command()</code></a> annotation.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>There are a number of related use cases:</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p>to enable profiling of the running application (which actions are invoked then most often, what is their response time)</p> </li> 
+            <li> <p>if a <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a> or <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a> (the latter now deprecated) is configured, they provide better traceability as the <code>Command</code> is also correlated with any published events, again through the unique <code>transactionId</code> GUID</p> </li> 
+            <li> <p>if a <a href="../rgsvc/rgsvc.html#_rgsvc_spi_AuderService"><code>AuditerService</code></a> or <a href="../rgsvc/rgsvc.html#_rgsvc_spi_AuditService"><code>AuditingService</code></a> (the latter now deprecated) is configured, they provide better audit information, since the <code>Command</code> (the 'cause' of an action) can be correlated to the audit records (the "effect" of the action) through the <code>transactionId</code> GUID</p> </li> 
+           </ul> 
+          </div> 
+          <div class="paragraph"> 
+           <p>However, while persistent <code>Command</code>s <em>can</em> be used for these use cases, it is recommended instead to use the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_InteractionContext"><code>InteractionContext</code></a> service and persistent implementations of the <code>Interaction</code> object, eg as provided by the (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s publishmq module.</p> 
+          </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__rgsvc_application-layer-api_CommandContext_screencast">5.3.1. Screencast</h4> 
+          <h4 id="__rgsvc_application-layer-api_CommandContext_screencast">5.2.7. Screencast</h4> 
           <div class="paragraph"> 
            <p>The <a href="https://www.youtube.com/watch?v=tqXUZkPB3EI">screencast</a> provides a run-through of the command (profiling) service, auditing service, publishing service. It also shows how commands can be run in the background either explicitly by scheduling through the background service or implicitly by way of a framework annotation.</p> 
           </div> 
@@ -3547,7 +3588,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_implementation_7">5.3.2. API &amp; Implementation</h4> 
+          <h4 id="_api_implementation_7">5.2.8. API &amp; Implementation</h4> 
           <div class="paragraph"> 
            <p>The <code>CommandContext</code> request-scoped service defines the following very simple API:</p> 
           </div> 
@@ -3677,7 +3718,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_usage_5">5.3.3. Usage</h4> 
+          <h4 id="_usage_5">5.2.9. Usage</h4> 
           <div class="paragraph"> 
            <p>The typical way to indicate that an action should be treated as a command is to annotate it with the <a href="../rgant/rgant.html#_rgant-Action_command"><code>@Action#command()</code></a> annotation.</p> 
           </div> 
@@ -3730,7 +3771,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_interacting_with_the_services">5.3.4. Interacting with the services</h4> 
+          <h4 id="_interacting_with_the_services">5.2.10. Interacting with the services</h4> 
           <div class="paragraph"> 
            <p>Typically domain objects will have little need to interact with the <code>CommandContext</code> and <code>Command</code> directly; what is more useful is that these are persisted in support of the various use cases identified above.</p> 
           </div> 
@@ -3781,7 +3822,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_12">5.3.5. Related Services</h4> 
+          <h4 id="_related_services_12">5.2.11. Related Services</h4> 
           <div class="paragraph"> 
            <p>The <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext"><code>CommandContext</code></a> service is very similar in nature to the <a href="../rgsvc/rgsvc.html#_rgsvc_api_InteactionContext"><code>InteactionContext</code></a>, in that the <code>Command</code> object accessed through it is very similar to the <code>Interaction</code> object obtained from the <code>InteractionContext</code>. The principle distinction is that while <code>Command</code> represents the <em>intention</em> to invoke an action or edit a property, the <code>Interaction</code> (and contained <code>Execution</code>s) represents the actual execution.</p> 
           </div> 
@@ -3794,7 +3835,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_DtoMappingHelper">5.4. <code>DtoMappingHelper</code></h3>
+         <h3 id="_rgsvc_application-layer-api_DtoMappingHelper">5.3. <code>DtoMappingHelper</code></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/rgsvc/_rgsvc_application-layer-api_DtoMappingHelper.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>
@@ -3809,7 +3850,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           <p>The <code>DtoMappingHelper</code> converts the domain object’s internal identifier into a serializable <code>OidDto</code> for use in the <a href="../rgcms/rgcms.html#_rgcms_schema-cmd">command</a> and <a href="../rgcms/rgcms.html#_rgcms_schema-ixn">interaction</a> schemas.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_and_usage">5.4.1. API and Usage</h4> 
+          <h4 id="_api_and_usage">5.3.1. API and Usage</h4> 
           <div class="paragraph"> 
            <p>The API of <code>DtoMappingHelper</code> is:</p> 
           </div> 
@@ -3837,7 +3878,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_InteractionContext">5.5. <code>InteractionContext</code></h3>
+         <h3 id="_rgsvc_application-layer-api_InteractionContext">5.4. <code>InteractionContext</code></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/rgsvc/_rgsvc_application-layer-api_InteractionContext.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>
@@ -3867,7 +3908,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </ul> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_implementation_8">5.5.1. API &amp; Implementation</h4> 
+          <h4 id="_api_implementation_8">5.4.1. API &amp; Implementation</h4> 
           <div class="paragraph"> 
            <p>The public API of the service consists of several related classes:</p> 
           </div> 
@@ -4093,13 +4134,13 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_interacting_with_the_services_2">5.5.2. Interacting with the services</h4> 
+          <h4 id="_interacting_with_the_services_2">5.4.2. Interacting with the services</h4> 
           <div class="paragraph"> 
            <p>Typically domain objects will have little need to interact with the <code>InteractionContext</code> and <code>Interaction</code> directly. The services are used within the framework however, primarily to support the <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a> SPI, and to emit domain events over the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>.</p> 
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__rgsvc_application-layer-api_InteractionContext_Related-Classes">5.5.3. Related Classes</h4> 
+          <h4 id="__rgsvc_application-layer-api_InteractionContext_Related-Classes">5.4.3. Related Classes</h4> 
           <div class="paragraph"> 
            <p>This service is very similar in nature to <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext"><code>CommandContext</code></a>, in that the <code>Interaction</code> object accessed through it is very similar to the <code>Command</code> object obtained from the <code>CommandContext</code>. The principle distinction is that while <code>Command</code> represents the <em>intention</em> to invoke an action or edit a property, the <code>Interaction</code> (and contained <code>Execution</code>s) represents the actual execution.</p> 
           </div> 
@@ -4109,7 +4150,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_MessageService">5.6. <code>MessageService</code></h3>
+         <h3 id="_rgsvc_application-layer-api_MessageService">5.5. <code>MessageService</code></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/rgsvc/_rgsvc_application-layer-api_MessageService.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>
@@ -4137,7 +4178,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_and_usage_2">5.6.1. API and Usage</h4> 
+          <h4 id="_api_and_usage_2">5.5.1. API and Usage</h4> 
           <div class="paragraph"> 
            <p>The API of <code>MessageService</code> is:</p> 
           </div> 
@@ -4203,14 +4244,14 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_15">5.6.2. Implementation</h4> 
+          <h4 id="_implementation_15">5.5.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service, <code>o.a.i.core.runtime.services.message.MessageServiceDefault</code>.</p> 
           </div> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_SessionManagementService">5.7. <code>SessionManagementService</code></h3>
+         <h3 id="_rgsvc_application-layer-api_SessionManagementService">5.6. <code>SessionManagementService</code></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/rgsvc/_rgsvc_application-layer-api_SessionManagementService.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>
@@ -4225,7 +4266,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           <p>The <code>SessionManagementService</code> provides the ability to programmatically manage sessions. The primary use case is for fixture scripts or other routines that are invoked from the UI and which create or modify large amounts of data. A classic example is migrating data from one system to another.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api">5.7.1. API</h4> 
+          <h4 id="_api">5.6.1. API</h4> 
           <div class="paragraph"> 
            <p>The API of <code>SessionManagementService</code> is:</p> 
           </div> 
@@ -4257,14 +4298,14 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_16">5.7.2. Implementation</h4> 
+          <h4 id="_implementation_16">5.6.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.runtime.services.xactn.SessionManagementServiceDefault</code>).</p> 
           </div> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_TitleService">5.8. <code>TitleService</code></h3>
+         <h3 id="_rgsvc_application-layer-api_TitleService">5.7. <code>TitleService</code></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/rgsvc/_rgsvc_application-layer-api_TitleService.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>
@@ -4292,7 +4333,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_2">5.8.1. API</h4> 
+          <h4 id="_api_2">5.7.1. API</h4> 
           <div class="paragraph"> 
            <p>The API of <code>TitleService</code> is:</p> 
           </div> 
@@ -4320,7 +4361,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_usage_6">5.8.2. Usage</h4> 
+          <h4 id="_usage_6">5.7.2. Usage</h4> 
           <div class="paragraph"> 
            <p>By way of example, here’s some code based on a system for managing government benefits:</p> 
           </div> 
@@ -4345,14 +4386,14 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_17">5.8.3. Implementation</h4> 
+          <h4 id="_implementation_17">5.7.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.metamodel.services.title.TitleServiceDefault</code>).</p> 
           </div> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_TransactionService">5.9. <code>TransactionService3</code></h3>
+         <h3 id="_rgsvc_application-layer-api_TransactionService">5.8. <code>TransactionService3</code></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/rgsvc/_rgsvc_application-layer-api_TransactionService.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>
@@ -4380,7 +4421,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_3">5.9.1. API</h4> 
+          <h4 id="_api_3">5.8.1. API</h4> 
           <div class="paragraph"> 
            <p>The API of <code>TransactionService3</code> is:</p> 
           </div> 
@@ -4545,14 +4586,14 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_18">5.9.2. Implementation</h4> 
+          <h4 id="_implementation_18">5.8.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service, <code>o.a.i.core.metamodel.services.xactn.TransactionServiceDefault</code>.</p> 
           </div> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_application-layer-api_WrapperFactory">5.10. <code>WrapperFactory</code></h3>
+         <h3 id="_rgsvc_application-layer-api_WrapperFactory">5.9. <code>WrapperFactory</code></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/rgsvc/_rgsvc_application-layer-api_WrapperFactory.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>
@@ -4589,7 +4630,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           <p>This capability is frequently used within <a href="../ugtst/ugtst.html#_ugtst_integ-test-support">integration tests</a>, but can also be used in production code. (There are analogies that can be drawn here with the way that JEE beans can interact through an EJB local interface).</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_4">5.10.1. API</h4> 
+          <h4 id="_api_4">5.9.1. API</h4> 
           <div class="paragraph"> 
            <p>The API provided by the service is:</p> 
           </div> 
@@ -4688,7 +4729,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_usage_7">5.10.2. Usage</h4> 
+          <h4 id="_usage_7">5.9.2. Usage</h4> 
           <div class="paragraph"> 
            <p>The caller will typically obtain the target object (eg from some repository) and then use the injected <code>WrapperFactory</code> to wrap it before interacting with it.</p> 
           </div> 
@@ -4748,7 +4789,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_listener_api">5.10.3. Listener API</h4> 
+          <h4 id="_listener_api">5.9.3. Listener API</h4> 
           <div class="paragraph"> 
            <p>The <code>WrapperFactory</code> also provides a listener API to allow other services to listen in on interactions.</p> 
           </div> 
@@ -5062,6 +5103,9 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           <p>The primary use case for persistent <code>Command</code>s is in support of background commands; they act as a parent to any background commands that can be persisted either explicitly using the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_BackgroundService"><code>BackgroundService</code></a>, or implicitly by way of the <a href="../rgant/rgant.html#_rgant-Action_command"><code>@Action#command()</code></a> annotation.</p> 
          </div> 
          <div class="paragraph"> 
+          <p>Persistent <code>Command</code>s also support the ability to replicate from a master to a slave instance of an application. One use case for this is for regression testing, allowing a production usages to be replayed against a new release candidate, eg after upgrading that application to a new version of Apache Isis itself (or some other dependency).</p> 
+         </div> 
+         <div class="paragraph"> 
           <p>There are a number of related use cases:</p> 
          </div> 
          <div class="ulist"> 
@@ -8639,7 +8683,7 @@ Element customerXsd = snapshot.getXsdElement();</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgsvc_metadata-api_MetamodelService">9.3. <code>MetaModelService4</code></h3>
+         <h3 id="_rgsvc_metadata-api_MetamodelService">9.3. <code>MetaModelService5</code></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/rgsvc/_rgsvc_metadata-api_MetamodelService.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>
@@ -8651,23 +8695,33 @@ Element customerXsd = snapshot.getXsdElement();</code></pre>
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The <code>MetaModelService4</code> service (and its various supertypes) provides access to a number of aspects of Apache Isis' internal metamodel.</p> 
+          <p>The <code>MetaModelService5</code> service (and its various supertypes) provides access to a number of aspects of Apache Isis' internal metamodel.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_8">9.3.1. API</h4> 
+          <h4 id="_rgsvc_metadata-api_MetamodelService_api">9.3.1. API</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/rgsvc/_rgsvc_metadata-api_MetamodelService_api.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/rgsvc/_rgsvc_metadata-api_MetamodelService_api.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/rgsvc/_rgsvc_metadata-api_MetamodelService_api.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/rgsvc/_rgsvc_metadata-api_MetamodelService_api.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/rgsvc/_rgsvc_metadata-api_MetamodelService_api.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
+           </ul>
+          </div> 
           <div class="paragraph"> 
            <p>The API defined by the service is:</p> 
           </div> 
           <div class="listingblock"> 
            <div class="content"> 
             <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">interface</span> <span class="class">MetaModelService4</span> {
-    <span class="predefined-type">Class</span>&lt;?&gt; fromObjectType(<span class="predefined-type">String</span> objectType);   <i class="conum" data-value="1"></i><b>(1)</b>
-    <span class="predefined-type">String</span> toObjectType(<span class="predefined-type">Class</span>&lt;?&gt; domainType);     <i class="conum" data-value="2"></i><b>(2)</b>
-    <span class="type">void</span> rebuild(<span class="predefined-type">Class</span>&lt;?&gt; domainType);            <i class="conum" data-value="3"></i><b>(3)</b>
-    <span class="predefined-type">List</span>&lt;DomainMember&gt; <span class="keyword">export</span>();                  <i class="conum" data-value="4"></i><b>(4)</b>
+    <span class="predefined-type">Class</span>&lt;?&gt; fromObjectType(<span class="predefined-type">String</span> objectType);         <i class="conum" data-value="1"></i><b>(1)</b>
+    <span class="predefined-type">String</span> toObjectType(<span class="predefined-type">Class</span>&lt;?&gt; domainType);           <i class="conum" data-value="2"></i><b>(2)</b>
+    <span class="type">void</span> rebuild(<span class="predefined-type">Class</span>&lt;?&gt; domainType);                  <i class="conum" data-value="3"></i><b>(3)</b>
+    <span class="predefined-type">List</span>&lt;DomainMember&gt; <span class="keyword">export</span>();                        <i class="conum" data-value="4"></i><b>(4)</b>
 
     <span class="comment">// introduced in MetaModelService2</span>
-    <span class="type">enum</span> Sort {                                   <i class="conum" data-value="5"></i><b>(5)</b>
+    <span class="type">enum</span> Sort {                                         <i class="conum" data-value="5"></i><b>(5)</b>
         VIEW_MODEL, JDO_ENTITY, DOMAIN_SERVICE,
         MIXIN, VALUE, COLLECTION, UNKNOWN;
     }
@@ -8675,7 +8729,7 @@ Element customerXsd = snapshot.getXsdElement();</code></pre>
         STRICT,
         RELAXED
     }
-    Sort sortOf(<span class="predefined-type">Class</span>&lt;?&gt; domainType);             <i class="conum" data-value="6"></i><b>(6)</b>
+    Sort sortOf(<span class="predefined-type">Class</span>&lt;?&gt; domainType);                   <i class="conum" data-value="6"></i><b>(6)</b>
     Sort sortOf(Bookmark bookmark);
 
     <span class="comment">// introduced in MetaModelService3</span>
@@ -8683,8 +8737,13 @@ Element customerXsd = snapshot.getXsdElement();</code></pre>
     Sort sortOf(Bookmark bookmark, Mode mode);
 
     <span class="comment">// introduced in MetaModelService4</span>
-    AppManifest getAppManifest();                 <i class="conum" data-value="7"></i><b>(7)</b>
+    AppManifest getAppManifest();                       <i class="conum" data-value="7"></i><b>(7)</b>
     AppManifest2 getAppManifest2();
+
+    <span class="comment">// introduced in MetaModelService5</span>
+    CommandDtoProcessor commandDtoProcessorFor(         <i class="conum" data-value="8"></i><b>(8)</b>
+                        <span class="predefined-type">String</span> memberIdentifier);
+
 }</code></pre> 
            </div> 
           </div> 
@@ -8719,18 +8778,42 @@ Element customerXsd = snapshot.getXsdElement();</code></pre>
               <td><i class="conum" data-value="7"></i><b>7</b></td> 
               <td>returns the <code>AppManifest</code> used to bootstrap the application. If an <code>AppManifest2</code> was used (from a <code>Module</code>), then this is also returned (else just <code>null</code>).</td> 
              </tr> 
+             <tr> 
+              <td><i class="conum" data-value="8"></i><b>8</b></td> 
+              <td>obtain an implementation of <code>CommandDtoProcessor</code> (if any) as per an <a href="../rgant/rgant.html#_rgant-Action_command"><code>@Action#commandDtoProcessor()</code></a> or <a href="../rgant/rgant.html#_rgant-Property_command"><code>@Property#commandDtoProcessor()</code></a>.</td> 
+             </tr> 
             </tbody>
            </table> 
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_27">9.3.2. Implementation</h4> 
+          <h4 id="_rgsvc_metadata-api_MetamodelService_implementation">9.3.2. Implementation</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/rgsvc/_rgsvc_metadata-api_MetamodelService_implementation.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/rgsvc/_rgsvc_metadata-api_MetamodelService_implementation.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/rgsvc/_rgsvc_metadata-api_MetamodelService_implementation.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/rgsvc/_rgsvc_metadata-api_MetamodelService_implementation.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/rgsvc/_rgsvc_metadata-api_MetamodelService_implementation.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
+           </ul>
+          </div> 
           <div class="paragraph"> 
            <p>The framework provides a default implementation of this service, <code>o.a.i.c.m.services.metamodel.MetaModelServiceDefault</code>.</p> 
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_22">9.3.3. Related Services</h4> 
+          <h4 id="_rgsvc_metadata-api_MetamodelService_related_services">9.3.3. Related 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/rgsvc/_rgsvc_metadata-api_MetamodelService_related_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>
+           <ul class="dropdown-menu">
+            <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_MetamodelService_related_services.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/rgsvc/_rgsvc_metadata-api_MetamodelService_related_services.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/rgsvc/_rgsvc_metadata-api_MetamodelService_related_services.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/rgsvc/_rgsvc_metadata-api_MetamodelService_related_services.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
+           </ul>
+          </div> 
           <div class="paragraph"> 
            <p>The <code>MetaModelServiceMenu</code> provides a method to download all domain members as a CSV. Internally this calls <code>MetaModelService#export()</code>. Under the covers this uses the API provided by the <a href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_ApplicationFeatureRepository"><code>ApplicationFeatureRepository</code></a> domain service.</p> 
           </div> 
@@ -8765,7 +8848,7 @@ Element customerXsd = snapshot.getXsdElement();</code></pre>
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_9">9.4.1. API</h4> 
+          <h4 id="_api_8">9.4.1. API</h4> 
           <div class="paragraph"> 
            <p>The API of <code>ServiceRegistry2</code> is:</p> 
           </div> 
@@ -8826,7 +8909,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_28">9.4.3. Implementation</h4> 
+          <h4 id="_implementation_27">9.4.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.runtime.services.registry.ServiceRegistryDefault</code>).</p> 
           </div> 
@@ -8917,7 +9000,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_23">9.5.3. Related Services</h4> 
+          <h4 id="_related_services_22">9.5.3. Related Services</h4> 
           <div class="paragraph"> 
            <p>A <code>SwaggerServiceMenu</code> domain service provides a prototype action that enables the swagger spec to be downloaded from the Wicket viewer’s UI.</p> 
           </div> 
@@ -9098,7 +9181,7 @@ repositoryService.persist(cust);</code></pre>
           <p>The default implementation of this service, <code>FixtureScriptsDefault</code>, uses the associated <a href="../rgsvc/rgsvc.html#_rgsvc_testing_FixtureScriptsSpecificationProvider"><code>FixtureScriptsSpecificationProvider</code></a> to obtain a <code>FixtureScriptsSpecification</code>. This configures this service, for example telling it which package to search for <code>FixtureScript</code> classes, how to execute those classes, and hints that influence the UI.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_10">10.2.1. API</h4> 
+          <h4 id="_api_9">10.2.1. API</h4> 
           <div class="paragraph"> 
            <p>The API for the service is:</p> 
           </div> 
@@ -9114,7 +9197,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_29">10.2.2. Implementation</h4> 
+          <h4 id="_implementation_28">10.2.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The default implementation is <code>o.a.i.applib.services.fixturespec.FixtureScriptsDefault</code></p> 
           </div> 
@@ -9162,7 +9245,7 @@ repositoryService.persist(cust);</code></pre>
            </table> 
           </div> 
           <div class="sect4"> 
-           <h5 id="_related_services_24">Related Services</h5> 
+           <h5 id="_related_services_23">Related Services</h5> 
            <div class="paragraph"> 
             <p>The default implementation of this domain service interacts with <a href="../rgsvc/rgsvc.html#_rgsvc_testing_FixtureScriptsSpecificationProvider"><code>FixtureScriptsSpecificationProvider</code></a>.</p> 
            </div> 
@@ -9234,7 +9317,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_30">10.3.2. Implementation</h4> 
+          <h4 id="_implementation_29">10.3.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a> has a simple implementation of this service:</p> 
           </div> 
@@ -9273,7 +9356,7 @@ repositoryService.persist(cust);</code></pre>
           <p>The <code>SudoService</code> allows the current user reported by the <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_UserService"><code>UserService</code></a> to be temporarily changed to some other user. This is useful both for <a href="../ugtst/ugtst.html#_ugtst_integ-test-support">integration testing</a> (eg if testing a workflow system whereby objects are moved from one user to another) and while running <a href="../ugtst/ugtst.html#_ugtst_fixture-scripts">fixture scripts</a> (eg setting up objects that would normally require several users to have acted upon the objects).</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_11">10.4.1. API</h4> 
+          <h4 id="_api_10">10.4.1. API</h4> 
           <div class="paragraph"> 
            <p>The API provided by the service is:</p> 
           </div> 
@@ -9312,7 +9395,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_31">10.4.2. Implementation</h4> 
+          <h4 id="_implementation_30">10.4.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.runtime.services.sudo.SudoServiceDefault</code>).</p> 
           </div> 
@@ -9442,7 +9525,7 @@ repositoryService.persist(cust);</code></pre>
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_12">10.5.1. API</h4> 
+          <h4 id="_api_11">10.5.1. API</h4> 
           <div class="paragraph"> 
            <p>The API of this service:</p> 
           </div> 
@@ -9466,7 +9549,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_32">10.5.2. Implementation</h4> 
+          <h4 id="_implementation_31">10.5.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The framework provides a default implementation of this service: <code>SwitchUserServiceImpl</code> in <code>isis-core-runtime</code></p> 
           </div> 
@@ -9992,7 +10075,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_25">11.3.2. Related Services</h4> 
+          <h4 id="_related_services_24">11.3.2. Related Services</h4> 
           <div class="paragraph"> 
            <p>The <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a> also captures the metrics gathered by the <code>MetricsService</code> and publishes them as part of the <code>PublishedObjects</code> class (part of its SPI).</p> 
           </div> 
@@ -10135,7 +10218,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_26">11.4.3. Related Services</h4> 
+          <h4 id="_related_services_25">11.4.3. Related Services</h4> 
           <div class="paragraph"> 
            <p>The <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_Scratchpad"><code>Scratchpad</code></a> service is also intended for actions that are called many times, allowing arbitrary information to be shared between them. Those methods could be called from some outer loop in domain code, or by the framework itself if the action invoked has the <a href="../rgant/rgant.html#_rgant-Action_invokeOn"><code>@Action#invokeOn()</code></a> annotation attribute set to <code>OBJECT_AND_COLLECTION</code> or <code>COLLECTION_ONLY</code>.</p> 
           </div> 
@@ -10176,7 +10259,7 @@ repositoryService.persist(cust);</code></pre>
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_api_13">11.5.1. API</h4> 
+          <h4 id="_api_12">11.5.1. API</h4> 
           <div class="paragraph"> 
            <p>The API of <code>RepositoryService</code> is:</p> 
           </div> 
@@ -10495,7 +10578,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_33">11.5.3. Implementation</h4> 
+          <h4 id="_implementation_32">11.5.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The default implementation of this domain service is <code>o.a.i.core.metamodel.services.repository.RepositoryServiceDefault</code>.</p> 
           </div> 
@@ -10749,7 +10832,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementations_3">12.1.2. Implementations</h4> 
+          <h4 id="_implementations_2">12.1.2. Implementations</h4> 
           <div class="paragraph"> 
            <p>The framework allows multiple implementations of this service to be registered; all will be called. The framework provides one implementation of its own, <code>AuditerServiceLogging</code> (in <code>o.a.i.applib.services.audit</code> package); this logs simple messages to an SLF4J logger.</p> 
           </div> 
@@ -10798,7 +10881,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_27">12.1.5. Related Services</h4> 
+          <h4 id="_related_services_26">12.1.5. Related Services</h4> 
           <div class="paragraph"> 
            <p>The auditing service works very well with implementations of <a href="../rgsvc/rgsvc.html#<em>rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a> that persist the <code>Interaction.Execution</code> objects obtained from the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_InteractionContext"><code>InteractionContext</code></a> service. The interaction execution captures the _cause of an interaction (an action was invoked, a property was edited), while the <code>AuditerService</code> audit entries capture the <em>effect</em> of that interaction in terms of changed state.</p> 
           </div> 
@@ -10861,7 +10944,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_34">12.2.2. Implementation</h4> 
+          <h4 id="_implementation_33">12.2.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The most full-featured available implementation is the (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s audit module. This creates an audit records for each changed property (ie every time that <code>AuditingService3#audit(…​)</code> is called. The implementation is <code>org.isisaddons.module.audit.dom.AuditingService</code>.</p> 
           </div> 
@@ -10895,7 +10978,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_28">12.2.5. Related Services</h4> 
+          <h4 id="_related_services_27">12.2.5. Related Services</h4> 
           <div class="paragraph"> 
            <p>This service has been deprecated and replaced by the equivalent <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_AuditerService"><code>AuditerService</code></a>.</p> 
           </div> 
@@ -10970,7 +11053,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_35">12.3.2. Implementation</h4> 
+          <h4 id="_implementation_34">12.3.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>There is no default implementation of this service provided by the core Apache Isis framework.</p> 
           </div> 
@@ -11004,7 +11087,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_29">12.3.3. Related Services</h4> 
+          <h4 id="_related_services_28">12.3.3. Related Services</h4> 
           <div class="paragraph"> 
            <p>This service is intended (though not mandated) to be used by implementations of <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a>. The (non-ASF) <a href="http://github.com/isisaddons-legacy/isis-module-publishing">Isis addons' publishing</a> module does use it (though the (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a> publishmq module does not).</p> 
           </div> 
@@ -11108,7 +11191,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementations_4">12.4.2. Implementations</h4> 
+          <h4 id="_implementations_3">12.4.2. Implementations</h4> 
           <div class="paragraph"> 
            <p>The framework allows multiple implementations of this service to be registered; all will be called. The framework provides one implementation of its own, <code>PublisherServiceLogging</code> (in <code>o.a.i.applib.services.publish</code> package); this logs "deep" serializations to an SLF4J logger.</p> 
           </div> 
@@ -11153,7 +11236,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_30">12.4.5. Related Services</h4> 
+          <h4 id="_related_services_29">12.4.5. Related Services</h4> 
           <div class="paragraph"> 
            <p>This service supports two main use cases:</p> 
           </div> 
@@ -11269,7 +11352,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_36">12.5.2. Implementation</h4> 
+          <h4 id="_implementation_35">12.5.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>There is no default implementation of this service provided by the core Apache Isis framework.</p> 
           </div> 
@@ -11392,7 +11475,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_31">12.5.4. Related Services</h4> 
+          <h4 id="_related_services_30">12.5.4. Related Services</h4> 
           <div class="paragraph"> 
            <p>The <code>PublishingService</code> is intended for coarse-grained publish/subscribe for system-to-system interactions, from Apache Isis to some other system. Here the only events published are those that action invocations (for actions annotated with <a href="../rgant/rgant.html#_rgant-Action_publishing"><code>@Action#publishing()</code></a>) and of changed objects (for objects annotated with <a href="../rgant/rgant.html#_rgant-DomainObject_publishing"><code>@DomainObject#publishing()</code></a>.</p> 
           </div> 
@@ -11501,7 +11584,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_37">12.6.2. Implementation</h4> 
+          <h4 id="_implementation_36">12.6.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core Apache Isis framework itself defines only an API; there is no default implementation. Rather, the implementation will depend on the security mechanism being used.</p> 
           </div> 
@@ -11534,7 +11617,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_32">12.6.3. Related Services</h4> 
+          <h4 id="_related_services_31">12.6.3. Related Services</h4> 
           <div class="paragraph"> 
            <p>The most common use case is to allow users to sign-up through Apache Isis' Wicket viewer. Because the process requires email to be sent, the following services must be configured:</p> 
           </div> 
@@ -11663,7 +11746,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_38">13.1.2. Implementation</h4> 
+          <h4 id="_implementation_37">13.1.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>Isis provides an implementation of this service, namely <code>o.a.i.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections</code>.</p> 
           </div> 
@@ -11682,7 +11765,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_related_services_33">13.1.3. Related Services</h4> 
+          <h4 id="_related_services_32">13.1.3. Related Services</h4> 
           <div class="paragraph"> 
            <p>The <a href="#_rgsvc_testing_FixtureScripts"><code>FixtureScripts</code></a> domain service uses <code>ClassDiscoveryService</code> to discover <code>FixtureScript</code>s implementations to present in the UI.</p> 
           </div>