http://git-wip-us.apache.org/repos/asf/isis-site/blob/f27adae8/content/versions/SNAPSHOT/guides/rgant/rgant.html
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgant/rgant.html 
b/content/versions/SNAPSHOT/guides/rgant/rgant.html
index 939bfcb..d9575e8 100644
--- a/content/versions/SNAPSHOT/guides/rgant/rgant.html
+++ b/content/versions/SNAPSHOT/guides/rgant/rgant.html
@@ -2084,6 +2084,26 @@ table.CodeRay td.code>pre{padding:0}
          </thead> 
          <tbody> 
           <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgant/rgant.html#_rgant-Action_associateWith"><code>associateWith()</code></a></p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><em>memberId</em><br> ("")</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>associates an action with another property or collection of 
the action.</p> 
+             </div>
+            </div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgant/rgant.html#_rgant-Action_associateWith"><code>associateWith-Sequence()</code></a></p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><em>memberId</em><br> ("")</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>associates an action with another property or collection of 
the action.</p> 
+             </div>
+            </div></td> 
+          </tr> 
+          <tr> 
            <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgant/rgant.html#_rgant-Action_command"><code>command()</code></a></p></td>
 
            <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>AS_CONFIGURED</code>, <code>ENABLED</code>, 
<code>DISABLED</code><br> (<code>AS_CONFIGURED</code>)</p></td> 
            <td class="tableblock halign-left valign-top">
@@ -2114,6 +2134,16 @@ table.CodeRay td.code>pre{padding:0}
             </div></td> 
           </tr> 
           <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>commandDtoProcessor()</code></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Implementation of <code>CommandDtoProcessor</code> 
interface<br> (null)</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>If the <code>Command</code> also implements 
<code>CommandWithDto</code> (meaning that it can return a 
<code>CommandDto</code>, in other words be converted into an XML memento), then 
optionally specifies a processor that can refine this XML.</p> 
+             </div>
+            </div></td> 
+          </tr> 
+          <tr> 
            <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgant/rgant.html#_rgant-Action_domainEvent"><code>domainEvent()</code></a></p></td>
 
            <td class="tableblock halign-left valign-top"><p 
class="tableblock">subtype of <code>ActionDomainEvent</code><br> 
(<code>ActionDomainEvent.Default</code>)</p></td> 
            <td class="tableblock halign-left valign-top">
@@ -2139,6 +2169,9 @@ table.CodeRay td.code>pre{padding:0}
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
+              <p>(deprecated - use view models and associated actions 
instead).</p> 
+             </div> 
+             <div class="paragraph"> 
               <p>whether an action can be invoked on a single object and/or on 
many objects in a collection.</p> 
              </div> 
              <div class="paragraph"> 
@@ -2162,6 +2195,9 @@ table.CodeRay td.code>pre{padding:0}
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
+              <p>(deprecated).</p> 
+             </div> 
+             <div class="paragraph"> 
               <p>specifies that a custom implementation of 
<code>PublishingPayloadFactoryForAction</code> be used to create the (payload 
of the) published event representing the action invocation</p> 
              </div>
             </div></td> 
@@ -2245,7 +2281,93 @@ table.CodeRay td.code>pre{padding:0}
          </table> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Action_command">3.1. <code>command()</code></h3>
+         <h3 id="_rgant-Action_associateWith">3.1. 
<code>associateWith()</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/rgant/_rgant-Action_associateWith.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/rgant/_rgant-Action_associateWith.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/rgant/_rgant-Action_associateWith.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/rgant/_rgant-Action_associateWith.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/rgant/_rgant-Action_associateWith.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>associateWith</code> attribute allows an action to be 
associated with other properties or collections of the same domain object. The 
optional <code>associateWithSequence</code> attribute specifies the order of 
the action in the UI.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>For example, an <code>Order</code> could have a collection of 
<code>OrderItem</code>s, and might provide actions to add and remove items:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">Order</span> {
+
+    <span class="annotation">@Collection</span>
+    <span class="predefined-type">SortedSet</span>&lt;OrderItem&gt; getItems() 
{ ... }
+
+    <span class="annotation">@Action</span>(associateWith=<span 
class="string"><span class="delimiter">"</span><span 
class="content">items</span><span class="delimiter">"</span></span>, 
associateWithSequence=<span class="string"><span 
class="delimiter">"</span><span class="content">1</span><span 
class="delimiter">"</span></span>)
+    <span class="directive">public</span> Order addItem(Product p, <span 
class="type">int</span> quantity) { ... }
+
+    <span class="annotation">@Action</span>(associateWith=<span 
class="string"><span class="delimiter">"</span><span 
class="content">items</span><span class="delimiter">"</span></span>, 
associateWithSequence=<span class="string"><span 
class="delimiter">"</span><span class="content">2</span><span 
class="delimiter">"</span></span>)
+    <span class="directive">public</span> Order removeItem(OrderItem item) { 
... }
+    ...
+}</code></pre> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>These actions - <code>addItem()</code> and 
<code>removeItem()</code> can be thought of as associated with with the 
<code>items</code> collection because that is the state that they primarily 
affect.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>In the user interface associated actions are rendered close to 
the member to which they relate.</p> 
+         </div> 
+         <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>The same effect can be accomplished using 
<code>@MemberOrder</code> or with the <code>.layout.xml</code> file.</p> 
+              </div> </td> 
+            </tr> 
+           </tbody>
+          </table> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_inferred_defaults_and_choices">3.1.1. Inferred Defaults and 
Choices</h4> 
+          <div class="paragraph"> 
+           <p>If an action is associated with a collection, then any scalar or 
collection parameter of the action that is the same type as that collection 
will automatically have a list of choices provided for it, being the items of 
the associated collection.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>This is only done provided that there isn’t already an 
explicit <code>choicesNXxx()</code> or <code>autoCompleteNXxx()</code> 
supporting method. However, this list of choices <em>does</em> take priority 
over any choices that are inferred from the parameter type itself (as per 
either an <code>@DomainObject(autoCompleteRepository=…​)</code> or 
<code>@DomainObject(bounded=…​)</code>).</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>In addition, if the action has a collection parameter of the 
same type as the associated collection, then the Wicket viewer will render the 
collection with checkboxes. The user can use these checkboxes can be used to 
select the items of the action parameter.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>For example, suppose we have a "removeItems(…​)" action:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">Order</span> {
+
+    <span class="annotation">@Collection</span>
+    <span class="predefined-type">SortedSet</span>&lt;OrderItem&gt; getItems() 
{ ... }
+
+    ...
+
+    <span class="annotation">@Action</span>(associateWith=<span 
class="string"><span class="delimiter">"</span><span 
class="content">items</span><span class="delimiter">"</span></span>, 
associateWithSequence=<span class="string"><span 
class="delimiter">"</span><span class="content">2</span><span 
class="delimiter">"</span></span>)
+    <span class="directive">public</span> Order removeItems(<span 
class="predefined-type">SortedSet</span>&lt;OrderItem&gt; items) { ... }
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The Wicket viewer will then render the "items" collection with 
checkboxes, and any selected items will be used as the pre-selected set of 
items if the action is invoked.</p> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgant-Action_command">3.2. <code>command()</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/rgant/_rgant-Action_command.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>
@@ -2257,7 +2379,7 @@ table.CodeRay td.code>pre{padding:0}
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The <code>@Action(command=…​)</code> attribute (and the 
related <code>@Action(commandPersistence=…​)</code> and 
<code>@Action(commandExecuteIn=…​)</code> attributes) allows an action 
invocation to be made into a concrete object such that it can be inspected and 
persisted. The primary use case for this is enhanced profiling/auditing, and it 
also supports the deferring the execution of the action such that it can be 
invoked in the background.</p> 
+          <p>The <code>@Action(command=…​)</code> attribute (and the 
related <code>@Action(commandXxx=…​)</code> attributes) allows an action 
invocation to be made into a concrete object such that it can be inspected and 
persisted. The primary use case for this are to support the deferring the 
execution of the action such that it can be invoked in the background, and to 
replay commands in a master/slave configuration.</p> 
          </div> 
          <div class="paragraph"> 
           <p>The annotation works with (and is influenced by the behaviour of) 
a number of domain services:</p> 
@@ -2296,26 +2418,26 @@ table.CodeRay td.code>pre{padding:0}
           <p>The <code>command()</code> attribute determines whether the 
action invocation should be reified into a <code>Command</code> object (by the 
<a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext"><code>CommandContext</code></a>
 service).</p> 
          </div> 
          <div class="paragraph"> 
-          <p>The default is <code>AS_CONFIGURED</code>, meaning that the <a 
href="../rgcfg/rgcfg.html#_rgcfg_configuring-core">configuration property</a> 
<code>isis.services.command.actions</code> is used to determine the whether the 
action is reified:</p> 
+          <p>The default is <code>AS_CONFIGURED</code>, meaning that the <a 
href="../rgcfg/rgcfg.html#_rgcfg_configuring-core">configuration property</a> 
<code>isis.services.command.actions</code> is used to determine whether the 
action invocation is reified:</p> 
          </div> 
          <div class="ulist"> 
           <ul> 
            <li> <p><code>all</code><br></p> 
             <div class="paragraph"> 
-             <p>all actions are reified</p> 
+             <p>all action invocations are reified</p> 
             </div> </li> 
            <li> <p><code>ignoreSafe</code> (or 
<code>ignoreQueryOnly</code>)<br></p> 
             <div class="paragraph"> 
-             <p>actions with safe (read-only) semantics are ignored, but 
actions which may modify data are not ignored</p> 
+             <p>invocations of actions with safe (read-only) semantics are 
ignored, but actions which may modify data are not ignored</p> 
             </div> </li> 
            <li> <p><code>none</code><br></p> 
             <div class="paragraph"> 
-             <p>no actions are reified.</p> 
+             <p>no action invocations are reified.</p> 
             </div> </li> 
           </ul> 
          </div> 
          <div class="paragraph"> 
-          <p>If there is no configuration property in 
<code>isis.properties</code> then all actions are reified into 
<code>Command</code>s.</p> 
+          <p>If there is no configuration property in 
<code>isis.properties</code> then all action invocations are reified into 
<code>Command</code>s.</p> 
          </div> 
          <div class="admonitionblock note"> 
           <table> 
@@ -2331,7 +2453,7 @@ table.CodeRay td.code>pre{padding:0}
           </table> 
          </div> 
          <div class="paragraph"> 
-          <p>This default can be overridden on an action-by-action basis; if 
<code>command()</code> is set to <code>ENABLED</code> then the action is 
reified irrespective of the configured value; if set to <code>DISABLED</code> 
then the action is NOT reified irrespective of the configured value.</p> 
+          <p>This default can be overridden on an action-by-action basis; if 
<code>command()</code> is set to <code>ENABLED</code> then the action is 
reified irrespective of the configured value; if set to <code>DISABLED</code> 
then the action invocation is NOT reified irrespective of the configured 
value.</p> 
          </div> 
          <div class="paragraph"> 
           <p>For example:</p> 
@@ -2348,9 +2470,9 @@ table.CodeRay td.code>pre{padding:0}
           <p>corresponds to the behaviour described above; the 
<code>Command</code> object is persisted (assuming an appropriate 
<code>CommandService</code> is defined, and executed immediately in the 
foreground).</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__code_commandpersistence_code">3.1.1. 
<code>commandPersistence()</code></h4> 
+          <h4 id="__code_commandpersistence_code">3.2.1. 
<code>commandPersistence()</code></h4> 
           <div class="paragraph"> 
-           <p>If the action has been reified, then the 
<code>commandPersistence()</code> attribute determines whether that 
<code>Command</code> object should then also be persisted (the default), or not 
persisted, or only if hinted.</p> 
+           <p>If the action invocation has been reified, then the 
<code>commandPersistence()</code> attribute determines whether that 
<code>Command</code> object should then also be persisted (the default), or not 
persisted, or only if hinted.</p> 
           </div> 
           <div class="paragraph"> 
            <p>To explain this last alternative:</p> 
@@ -2377,7 +2499,6 @@ table.CodeRay td.code>pre{padding:0}
             <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">Order</span> {
     <span class="annotation">@Action</span>(
         command=CommandReification.ENABLED,
-        commandExecuteIn=CommandExecuteIn.FOREGROUND,
         commandPersistence=CommandPersistence.NOT_PERSISTED
     )
     <span class="directive">public</span> Invoice generateInvoice(...) { ... }
@@ -2389,7 +2510,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__code_commandexecutein_code">3.1.2. 
<code>commandExecuteIn()</code></h4> 
+          <h4 id="__code_commandexecutein_code">3.2.2. 
<code>commandExecuteIn()</code></h4> 
           <div class="paragraph"> 
            <p>For persisted commands, the <code>commandExecuteIn()</code> 
attribute determines whether the <code>Command</code> should be executed in the 
foreground (the default) or executed in the background.</p> 
           </div> 
@@ -2404,18 +2525,162 @@ table.CodeRay td.code>pre{padding:0}
             <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">Order</span> {
     <span class="annotation">@Action</span>(
         command=CommandReification.ENABLED,
-        commandExecuteIn=CommandExecuteIn.BACKGROUND)
+        commandExecuteIn=CommandExecuteIn.BACKGROUND
+    )
     <span class="directive">public</span> Invoice generateInvoice(...) { ... }
 }</code></pre> 
            </div> 
           </div> 
           <div class="paragraph"> 
-           <p>will result in the <code>Command</code> being persisted but its 
execution deferred to a background execution mechanism. The returned object 
from this action is the persisted <code>Command</code> itself.</p> 
+           <p>will result in the <code>Command</code> being persisted but its 
execution deferred to a background execution mechanism. The returned object 
from this action invocation is the persisted <code>Command</code> itself.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="__code_commanddtoprocessor_code">3.2.3. 
<code>commandDtoProcessor()</code></h4> 
+          <div class="paragraph"> 
+           <p>The <code>commandDtoProcessor()</code> attribute allows an 
implementation of <code>CommandDtoProcessor</code> to be specified. This 
interface has the following API:</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">CommandDtoProcessor</span> {
+    CommandDto process(             <i class="conum" 
data-value="1"></i><b>(1)</b>
+            Command command,        <i class="conum" 
data-value="2"></i><b>(2)</b>
+            CommandDto dto);        <i class="conum" 
data-value="3"></i><b>(3)</b>
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="colist arabic"> 
+           <table> 
+            <tbody>
+             <tr> 
+              <td><i class="conum" data-value="1"></i><b>1</b></td> 
+              <td>The returned <code>CommandDto</code>. This will typically be 
the <code>CommandDto</code> passed in, but supplemented in some way.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>The <code>Command</code> being processed</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>The <code>CommandDto</code> (XML) obtained already from the 
<code>Command</code> (by virtue of it also implementing 
<code>CommandWithDto</code>, see discussion below).</td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>This interface is used by the framework-provided implementations 
of <code>ContentMappingService</code> for the REST API, allowing 
<code>Command</code>s implementations that also implement 
<code>CommandWithDto</code> to be further customised as they are serialized 
out. The primary use case for this capability is in support of master/slave 
replication.</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p>on the master, <code>Command</code>s are serialized to 
XML. This includes the identity of the target object and the argument values of 
all parameters.</p> 
+             <div class="admonitionblock important"> 
+              <table> 
+               <tbody>
+                <tr> 
+                 <td class="icon"> <i class="fa icon-important" 
title="Important"></i> </td> 
+                 <td class="content"> 
+                  <div class="paragraph"> 
+                   <p>However, any <code>Blob</code>s and <code>Clob</code>s 
are deliberately excluded from this XML (they are instead stored as 
references). This is to prevent the storage requirements for 
<code>Command</code> from becoming excessive. A 
<code>CommandDtoProcessor</code> can be provided to re-attach blob information 
if required.</p> 
+                  </div> </td> 
+                </tr> 
+               </tbody>
+              </table> 
+             </div> </li> 
+            <li> <p>replaying <code>Command</code>s requires this missing 
parameter information to be reinstated. The <code>CommandDtoProcessor</code> 
therefore offers a hook to dynamically re-attach the missing <code>Blob</code> 
or <code>Clob</code> argument.</p> </li> 
+           </ul> 
+          </div> 
+          <div class="paragraph"> 
+           <p>As a special case, returning <code>null</code> means that the 
command’s DTO is effectively excluded when retrieving the list of commands. 
If replicating from master to slave, this effectively allows certain commands 
to be ignored. The <code>CommandDtoProcessor.Null</code> class provides a 
convenience implementation for this requirement.</p> 
+          </div> 
+          <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>If <code>commandDtoProcessor()</code> is specified, then 
<code>command()</code> is assumed to be ENABLED.</p> 
+               </div> </td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="_example_implementation">Example implementation</h5> 
+           <div class="paragraph"> 
+            <p>Consider the following method:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code data-lang="java"><span 
class="annotation">@Action</span>(
+    domainEvent = IncomingDocumentRepository.UploadDomainEvent.class,
+    commandDtoProcessor = DeriveBlobArg0FromReturnedDocument.class
+)
+<span class="directive">public</span> <span 
class="predefined-type">Document</span> upload(<span 
class="directive">final</span> <span class="predefined-type">Blob</span> blob) {
+    <span class="directive">final</span> <span 
class="predefined-type">String</span> name = blob.getName();
+    <span class="directive">final</span> DocumentType type = 
DocumentTypeData.INCOMING.findUsing(documentTypeRepository);
+    <span class="directive">final</span> ApplicationUser me = meService.me();
+    <span class="predefined-type">String</span> atPath = me != <span 
class="predefined-constant">null</span> ? me.getAtPath() : <span 
class="predefined-constant">null</span>;
+    <span class="keyword">if</span> (atPath == <span 
class="predefined-constant">null</span>) {
+        atPath = <span class="string"><span class="delimiter">"</span><span 
class="content">/</span><span class="delimiter">"</span></span>;
+    }
+    <span class="keyword">return</span> 
incomingDocumentRepository.upsertAndArchive(type, atPath, name, blob);
+}</code></pre> 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>The <code>Blob</code> argument will not be persisted in the 
memento of the <code>Command</code>, but the information is implicitly 
available in the <code>Document</code> that is returned by the action. The 
<code>DeriveBlobArg0FromReturnedDocument</code> processor retrieves this 
information and dynamically adds:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">DeriveBlobArg0FromReturnedDocument</span>
+        <span class="directive">extends</span> 
CommandDtoProcessorForActionAbstract {
+
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> CommandDto process(Command command, 
CommandDto commandDto) {
+        <span class="directive">final</span> Bookmark result = 
commandWithDto.getResult();
+        <span class="keyword">if</span>(result == <span 
class="predefined-constant">null</span>) {
+            <span class="keyword">return</span> commandDto;
+        }
+        <span class="keyword">try</span> {
+            <span class="directive">final</span> <span 
class="predefined-type">Document</span> document = 
bookmarkService.lookup(result, <span 
class="predefined-type">Document</span>.class);
+            <span class="keyword">if</span> (document != <span 
class="predefined-constant">null</span>) {
+                ParamDto paramDto = getParamDto(commandDto, <span 
class="integer">0</span>);
+                CommonDtoUtils.setValueOn(paramDto, ValueType.BLOB, 
document.getBlob(), bookmarkService);
+            }
+        } <span class="keyword">catch</span>(<span 
class="exception">Exception</span> ex) {
+            <span class="keyword">return</span> commandDto;
+        }
+        <span class="keyword">return</span> commandDto;
+    }
+    <span class="annotation">@Inject</span>
+    BookmarkService bookmarkService;
+}</code></pre> 
+            </div> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="_null_implementation">Null implementation</h5> 
+           <div class="paragraph"> 
+            <p>The null implementation can be used to simply indicate that no 
DTO should be returned for a <code>Command</code>. The effect is to ignore it 
for replay purposes:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code data-lang="xml">pubc 
interface CommandDtoProcessor {
+    ...
+    class Null implements CommandDtoProcessor {
+        public CommandDto process(Command command, CommandDto commandDto) {
+            return null;
+        }
+    }
+}</code></pre> 
+            </div> 
+           </div> 
           </div> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Action_domainEvent">3.2. domainEvent()</h3>
+         <h3 id="_rgant-Action_domainEvent">3.3. domainEvent()</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/rgant/_rgant-Action_domainEvent.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>
@@ -2485,7 +2750,7 @@ table.CodeRay td.code>pre{padding:0}
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_subscribers">3.2.1. Subscribers</h4> 
+          <h4 id="_subscribers">3.3.1. Subscribers</h4> 
           <div class="paragraph"> 
            <p>Subscribers (which must be domain services) subscribe using 
either the <a href="https://github.com/google/guava";>Guava</a> API or (if the 
<a 
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>
 has been appropriately configured) using the <a 
href="http://www.axonframework.org/";>Axon Framework</a> API. The examples below 
use the Guava API.</p> 
           </div> 
@@ -2574,7 +2839,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_default_doop_and_noop_events">3.2.2. Default, Doop and Noop 
events</h4> 
+          <h4 id="_default_doop_and_noop_events">3.3.2. Default, Doop and Noop 
events</h4> 
           <div class="paragraph"> 
            <p>If the <code>domainEvent</code> attribute is not explicitly 
specified (is left as its default value, 
<code>ActionDomainEvent.Default</code>), then the framework will, by default, 
post an event.</p> 
           </div> 
@@ -2589,14 +2854,14 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_raising_events_programmatically">3.2.3. Raising events 
programmatically</h4> 
+          <h4 id="_raising_events_programmatically">3.3.3. Raising events 
programmatically</h4> 
           <div class="paragraph"> 
            <p>Normally events are only raised for interactions through the UI. 
However, events can be raised programmatically either by calling the <a 
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>
 API directly, or by emulating the UI by wrapping the target object using the 
<a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_WrapperFactory"><code>WrapperFactory</code></a>
 domain service.</p> 
           </div> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Action_hidden">3.3. <code>hidden()</code></h3>
+         <h3 id="_rgant-Action_hidden">3.4. <code>hidden()</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/rgant/_rgant-Action_hidden.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>
@@ -2668,7 +2933,7 @@ table.CodeRay td.code>pre{padding:0}
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Action_invokeOn">3.4. <code>invokeOn()</code></h3>
+         <h3 id="_rgant-Action_invokeOn">3.5. <code>invokeOn()</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/rgant/_rgant-Action_invokeOn.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>
@@ -2751,7 +3016,7 @@ table.CodeRay td.code>pre{padding:0}
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Action_publishing">3.5. <code>publishing()</code></h3>
+         <h3 id="_rgant-Action_publishing">3.6. <code>publishing()</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/rgant/_rgant-Action_publishing.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>
@@ -2763,7 +3028,7 @@ table.CodeRay td.code>pre{padding:0}
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The <code>publishing()</code> attribute determines whether and 
how an action invocation is published via the registered implementation of a <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a>)
 or <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a>.
 This attribute is also supported for <a 
href="../rgant/rgant.html#_rgant-DomainObject_publishing">domain objects</a>, 
where it controls whether changed objects are published as events, and for <a 
href="../rgant/rgant.html#_rgant_Property_publishing"><code>@Property#publishing()</code></a>,
 where it controls whether property edits are published as events.</p> 
+          <p>The <code>publishing()</code> attribute determines whether and 
how an action invocation is published via the registered implementation of a <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a>)
 or <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a>.
 This attribute is also supported for <a 
href="../rgant/rgant.html#_rgant-DomainObject_publishing">domain objects</a>, 
where it controls whether changed objects are published as events, and for <a 
href="../rgant/rgant.html#_rgant-Property_publishing"><code>@Property#publishing()</code></a>,
 where it controls whether property edits are published as events.</p> 
          </div> 
          <div class="paragraph"> 
           <p>A common use case is to notify external "downstream" systems of 
changes in the state of the Isis application. The default value for the 
attribute is <code>AS_CONFIGURED</code>, meaning that the <a 
href="../rgcfg/rgcfg.html#_rgcfg_configuring-core">configuration property</a> 
<code>isis.services.publish.actions</code> is used to determine the whether the 
action is published:</p> 
@@ -2812,7 +3077,7 @@ table.CodeRay td.code>pre{padding:0}
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="__code_publishingpayloadfactory_code">3.5.1. 
<code>publishingPayloadFactory()</code></h4> 
+          <h4 id="__code_publishingpayloadfactory_code">3.6.1. 
<code>publishingPayloadFactory()</code></h4> 
           <div class="paragraph"> 
            <p>The (optional) related <code>publishingPayloadFactory()</code> 
specifies the class to use to create the (payload of the) event to be published 
by the publishing factory.</p> 
           </div> 
@@ -2835,7 +3100,7 @@ table.CodeRay td.code>pre{padding:0}
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Action_restrictTo">3.6. <code>restrictTo()</code></h3>
+         <h3 id="_rgant-Action_restrictTo">3.7. <code>restrictTo()</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/rgant/_rgant-Action_restrictTo.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>
@@ -2869,7 +3134,7 @@ table.CodeRay td.code>pre{padding:0}
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Action_semantics">3.7. <code>semantics()</code></h3>
+         <h3 id="_rgant-Action_semantics">3.8. <code>semantics()</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/rgant/_rgant-Action_semantics.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>
@@ -2988,7 +3253,7 @@ WrapperFactory wrapperFactory;</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Action_typeOf">3.8. <code>typeOf()</code></h3>
+         <h3 id="_rgant-Action_typeOf">3.9. <code>typeOf()</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/rgant/_rgant-Action_typeOf.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>
@@ -5631,9 +5896,9 @@ WrapperFactory wrapperFactory;</code></pre>
          </div> 
          <div class="olist arabic"> 
           <ol class="arabic"> 
-           <li> <p><a 
href="../rgant/rgant.html#_rgant_Discriminator"><code>@Discriminator</code></a></p>
 </li> 
+           <li> <p><a 
href="../rgant/rgant.html#_rgant-Discriminator"><code>@Discriminator</code></a></p>
 </li> 
            <li> <p><code>@DomainObject#objectType</code></p> </li> 
-           <li> <p><a 
href="../rgant/rgant.html#_rgant_PersistenceCapable"><code>@PersistenceCapable</code></a>,
 if at least the <code>schema</code> attribute is defined. <br></p> 
+           <li> <p><a 
href="../rgant/rgant.html#_rgant-PersistenceCapable"><code>@PersistenceCapable</code></a>,
 if at least the <code>schema</code> attribute is defined. <br></p> 
             <div class="paragraph"> 
              <p>If both <code>schema</code> and <code>table</code> are 
defined, then the value is “schema.table�?. If only <code>schema</code> is 
defined, then the value is “schema.className�?.</p> 
             </div> </li> 
@@ -6070,7 +6335,7 @@ WrapperFactory wrapperFactory;</code></pre>
            </table> 
           </div> 
           <div class="paragraph"> 
-           <p>The autocomplete action can also be a regular method, annotated 
using <a 
href="../rgant/rgant.html#_rgant_Programmatic"><code>@Programmatic</code></a>:</p>
 
+           <p>The autocomplete action can also be a regular method, annotated 
using <a 
href="../rgant/rgant.html#_rgant-Programmatic"><code>@Programmatic</code></a>:</p>
 
           </div> 
           <div class="listingblock"> 
            <div class="content"> 
@@ -6930,9 +7195,9 @@ WrapperFactory wrapperFactory;</code></pre>
           </div> 
           <div class="olist arabic"> 
            <ol class="arabic"> 
-            <li> <p><a 
href="../rgant/rgant.html#_rgant_Discriminator"><code>@Discriminator</code></a></p>
 </li> 
+            <li> <p><a 
href="../rgant/rgant.html#_rgant-Discriminator"><code>@Discriminator</code></a></p>
 </li> 
             <li> <p><code>@DomainObject#objectType</code>, or <a 
href="../rgant/rgant.html#_rgant_aaa_deprecated"><code>@ObjectType</code></a> 
(deprecated)</p> </li> 
-            <li> <p><a 
href="../rgant/rgant.html#_rgant_PersistenceCapable"><code>@PersistenceCapable</code></a>,
 if at least the <code>schema</code> attribute is defined. <br></p> 
+            <li> <p><a 
href="../rgant/rgant.html#_rgant-PersistenceCapable"><code>@PersistenceCapable</code></a>,
 if at least the <code>schema</code> attribute is defined. <br></p> 
              <div class="paragraph"> 
               <p>If both <code>schema</code> and <code>table</code> are 
defined, then the value is “schema.table�?. If only <code>schema</code> is 
defined, then the value is “schema.className�?.</p> 
              </div> </li> 
@@ -6983,7 +7248,7 @@ WrapperFactory wrapperFactory;</code></pre>
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The <code>publishing()</code> attribute determines whether and 
how a modified object instance is published via the registered implementation 
of a <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a>)
 or <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a>.
 This attribute is also supported for <a 
href="../rgant/rgant.html#_rgant-Action_publishing">actions</a>, where it 
controls whether action invocations are published as events, and for <a 
href="../rgant/rgant.html#_rgant_Property_publishing"><code>@Property#publishing()</code></a>,
 where it controls whether property edits are published as events.</p> 
+          <p>The <code>publishing()</code> attribute determines whether and 
how a modified object instance is published via the registered implementation 
of a <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a>)
 or <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a>.
 This attribute is also supported for <a 
href="../rgant/rgant.html#_rgant-Action_publishing">actions</a>, where it 
controls whether action invocations are published as events, and for <a 
href="../rgant/rgant.html#_rgant-Property_publishing"><code>@Property#publishing()</code></a>,
 where it controls whether property edits are published as events.</p> 
          </div> 
          <div class="paragraph"> 
           <p>A common use case is to notify external "downstream" systems of 
changes in the state of the Isis application.</p> 
@@ -8450,7 +8715,7 @@ WrapperFactory wrapperFactory;</code></pre>
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>equivalent to <a 
href="../rgant/rgant.html#_rgant_DomainObject_objectType"><code>@DomainObject#objectType()</code></a>,
 specifies the objectType of the service.</p> 
+              <p>equivalent to <a 
href="../rgant/rgant.html#_rgant-DomainObject_objectType"><code>@DomainObject#objectType()</code></a>,
 specifies the objectType of the service.</p> 
              </div> 
              <div class="paragraph"> 
               <p>The instanceId for services is always "1".</p> 
@@ -9656,7 +9921,7 @@ container.persist(cust);</code></pre>
          </div> 
         </div> 
         <div class="paragraph"> 
-         <p>Apache Isis does provide several other ways to specify 
optionality: using the <a 
href="../rgant/rgant.html#_rgant_Property_optionality"><code>@Property#optionality()</code></a>
 / <a 
href="../rgant/rgant.html#_rgant_Parameter_optionality"><code>@Parameter#optionality()</code></a>
 annotation. For properties, the optionality can also be inferred from the <a 
href="../rgant/rgant.html#_rgant_Column_allowsNull"><code>@Column#allowsNull()</code></a>
 attribute.</p> 
+         <p>Apache Isis does provide several other ways to specify 
optionality: using the <a 
href="../rgant/rgant.html#_rgant-Property_optionality"><code>@Property#optionality()</code></a>
 / <a 
href="../rgant/rgant.html#_rgant-Parameter_optionality"><code>@Parameter#optionality()</code></a>
 annotation. For properties, the optionality can also be inferred from the <a 
href="../rgant/rgant.html#_rgant-Column_allowsNull"><code>@Column#allowsNull()</code></a>
 attribute.</p> 
         </div> 
         <div class="admonitionblock tip"> 
          <table> 
@@ -9665,7 +9930,7 @@ container.persist(cust);</code></pre>
             <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td> 
             <td class="content"> 
              <div class="paragraph"> 
-              <p>See the <a 
href="../rgant/rgant.html#_rgant_Property_optionality"><code>@Property#optionality()</code></a>
 documentation for a much fuller discussion on the relationship between using 
the Apache Isis annotations vs <a 
href="../rgant/rgant.html#_rgant_Column_allowsNull"><code>@Column#allowsNull()</code></a>.</p>
 
+              <p>See the <a 
href="../rgant/rgant.html#_rgant-Property_optionality"><code>@Property#optionality()</code></a>
 documentation for a much fuller discussion on the relationship between using 
the Apache Isis annotations vs <a 
href="../rgant/rgant.html#_rgant-Column_allowsNull"><code>@Column#allowsNull()</code></a>.</p>
 
              </div> </td> 
            </tr> 
           </tbody>
@@ -9818,7 +10083,7 @@ container.persist(cust);</code></pre>
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>Deprecated; use <a 
href="../rgant/rgant.html#_rgant_minLength"><code>@MinLength</code></a> 
instead.<br></p> 
+              <p>Deprecated; use <a 
href="../rgant/rgant.html#_rgant-MinLength"><code>@MinLength</code></a> 
instead.<br></p> 
              </div> 
              <div class="paragraph"> 
               <p>Can be used to specify the minimum length for <a 
href="../rgcms/rgcms.html#<em>rgcms_methods_prefixes_autoComplete"><code>autoComplete…​()</code></a>
 supporting method; but because this _is a supporting method rather than the 
action method itself, we now feel it is misleading to use the 
<code>@Parameter</code> annotation in this situation.</p> 
@@ -10158,7 +10423,7 @@ container.persist(cust);</code></pre>
              <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
              <td class="content"> 
               <div class="paragraph"> 
-               <p>It is also possible to specify optionality using <a 
href="../rgant/rgant.html#_rgant_Nullable"><code>@Nullable</code></a> 
annotation.</p> 
+               <p>It is also possible to specify optionality using <a 
href="../rgant/rgant.html#_rgant-Nullable"><code>@Nullable</code></a> 
annotation.</p> 
               </div> </td> 
             </tr> 
            </tbody>
@@ -10811,9 +11076,9 @@ container.persist(cust);</code></pre>
          </div> 
          <div class="olist arabic"> 
           <ol class="arabic"> 
-           <li> <p><a 
href="../rgant/rgant.html#_rgant_Discriminator"><code>@Discriminator</code></a></p>
 </li> 
+           <li> <p><a 
href="../rgant/rgant.html#_rgant-Discriminator"><code>@Discriminator</code></a></p>
 </li> 
            <li> <p><code>@DomainObject#objectType</code></p> </li> 
-           <li> <p><a 
href="../rgant/rgant.html#_rgant_PersistenceCapable"><code>@PersistenceCapable</code></a>,
 if at least the <code>schema</code> attribute is defined. <br></p> 
+           <li> <p><a 
href="../rgant/rgant.html#_rgant-PersistenceCapable"><code>@PersistenceCapable</code></a>,
 if at least the <code>schema</code> attribute is defined. <br></p> 
             <div class="paragraph"> 
              <p>If both <code>schema</code> and <code>table</code> are 
defined, then the value is “schema.table�?. If only <code>schema</code> is 
defined, then the value is “schema.className�?.</p> 
             </div> </li> 
@@ -11160,6 +11425,46 @@ container.persist(cust);</code></pre>
          </thead> 
          <tbody> 
           <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgant/rgant.html#_rgant-Property_command"><code>command()</code></a></p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>AS_CONFIGURED</code>, <code>ENABLED</code>, 
<code>DISABLED</code><br> (<code>AS_CONFIGURED</code>)</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>whether the property edit should be reified into a 
<code>o.a.i.applib.</code><br> <code>services.command.Command</code> object 
through the <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext"><code>CommandContext</code></a>
 service.</p> 
+             </div>
+            </div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>commandExecuteIn()</code></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>FOREGROUND</code>,<code>BACKGROUND</code><br> 
(<code>FOREGROUND</code>)</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>whether to execute the command immediately, or to persist it 
(assuming that an appropriate implementation of <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a>
 has been configured) such that a background scheduler can execute the command 
asynchronously</p> 
+             </div>
+            </div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>commandPersistence()</code></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>PERSISTED</code>, <code>NOT_PERSISTED</code>, 
<code>IF_HINTED</code><br> (<code>PERSISTED</code>)</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>whether the reified <code>Command</code> (as provided by the 
<code>CommandContext</code> domain service) should actually be persisted 
(assuming an appropriate implementation of <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a>
 has been configured).</p> 
+             </div>
+            </div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>commandDtoProcessor()</code></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Implementation of <code>CommandDtoProcessor</code> 
interface<br> (null)</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>If the <code>Command</code> also implements 
<code>CommandWithDto</code> (meaning that it can return a 
<code>CommandDto</code>, in other words be converted into an XML memento), then 
optionally specifies a processor that can refine this XML.</p> 
+             </div>
+            </div></td> 
+          </tr> 
+          <tr> 
            <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgant/rgant.html#_rgant-Property_domainEvent"><code>domainEvent()</code></a></p></td>
 
            <td class="tableblock halign-left valign-top"><p 
class="tableblock">subtype of <code>PropertyDomainEvent</code><br> 
(<code>PropertyDomainEvent.Default</code>)</p></td> 
            <td class="tableblock halign-left valign-top">
@@ -11334,7 +11639,264 @@ container.persist(cust);</code></pre>
          </table> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_domainEvent">30.1. 
<code>domainEvent()</code></h3>
+         <h3 id="_rgant-Property_command">30.1. <code>command()</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/rgant/_rgant-Property_command.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/rgant/_rgant-Property_command.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/rgant/_rgant-Property_command.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/rgant/_rgant-Property_command.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/rgant/_rgant-Property_command.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>@Property(command=…​)</code> attribute (and the 
related <code>@Property(commandXxx=…​)</code> attributes) allows a property 
edit to be made into a concrete object such that it can be inspected and 
persisted. The primary use case for this are to support the deferring the 
execution of the action such that it can be invoked in the background, and to 
replay commands in a master/slave configuration.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The annotation works with (and is influenced by the behaviour of) 
a number of domain services:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext"><code>CommandContext</code></a></p>
 </li> 
+           <li> <p><a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a></p>
 </li> 
+           <li> <p><a 
href="../rgsvc/rgsvc.html#_rgsvc_spi_BackgroundService"><code>BackgroundService</code></a>
 and</p> </li> 
+           <li> <p><a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_BackgroundCommandService"><code>BackgroundCommandService</code></a></p>
 </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Each property edit is reified by the <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext"><code>CommandContext</code></a>
 service into a <code>Command</code> object, capturing details of the target 
object, the property, the proposed new value fo the property, the user, a 
timestamp and so on.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>If an appropriate <code>CommandService</code> is configured (for 
example using (non-ASF) <a 
href="http://platform.incode.org/modules/spi/command/spi-command.html";>Incode 
Platform’s command</a> module), then the <code>Command</code> itself is 
persisted.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>By default, actions are invoked in directly in the thread of the 
invocation. If there is an implementation of 
<code>BackgroundCommandService</code> (as the (non-ASF) <a 
href="http://platform.incode.org"; target="_blank">Incode Platform</a>'s command 
module does provide), then this means in turn that the 
<code>BackgroundService</code> can be used by the domain object code to 
programmatically create background <code>Command</code>s.</p> 
+         </div> 
+         <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>If background <code>Command</code>s are used, then an 
external scheduler, using <a 
href="../ugbtb/ugbtb.html#_ugbtb_headless-access_BackgroundCommandExecution">headless
 access</a>, must also be configured.</p> 
+              </div> </td> 
+            </tr> 
+           </tbody>
+          </table> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The <code>command()</code> attribute determines whether the 
property edit should be reified into a <code>Command</code> object (by the <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext"><code>CommandContext</code></a>
 service).</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The default is <code>AS_CONFIGURED</code>, meaning that the <a 
href="../rgcfg/rgcfg.html#_rgcfg_configuring-core">configuration property</a> 
<code>isis.services.command.properties</code> is used to determine whether the 
property edit is reified:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><code>all</code><br></p> 
+            <div class="paragraph"> 
+             <p>all property edits are reified</p> 
+            </div> </li> 
+           <li> <p><code>none</code><br></p> 
+            <div class="paragraph"> 
+             <p>no property edits are reified.</p> 
+            </div> </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>If there is no configuration property in 
<code>isis.properties</code> then all property edits are reified into 
<code>Command</code>s.</p> 
+         </div> 
+         <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>Note: <code>Command</code> reification does not necessarily 
imply that <code>Command</code> objects will be persisted; that depends on 
whether there is a <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService"><code>CommandService</code></a>
 configured that will persist said <code>Command</code>s.</p> 
+              </div> </td> 
+            </tr> 
+           </tbody>
+          </table> 
+         </div> 
+         <div class="paragraph"> 
+          <p>This default can be overridden on an property-by-property basis; 
if <code>command()</code> is set to <code>ENABLED</code> then the action is 
reified irrespective of the configured value; if set to <code>DISABLED</code> 
then the property edit is NOT reified irrespective of the configured value.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>For example:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">Order</span> {
+    <span 
class="annotation">@Property</span>(command=CommandReification.ENABLED)
+    <span class="directive">public</span> Product getProduct() { ... }
+    <span class="directive">public</span> <span class="type">void</span> 
setProduct(Product p) { ... }
+}</code></pre> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>corresponds to the behaviour described above; the 
<code>Command</code> object is persisted (assuming an appropriate 
<code>CommandService</code> is defined, and executed immediately in the 
foreground).</p> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="__code_commandpersistence_code_2">30.1.1. 
<code>commandPersistence()</code></h4> 
+          <div class="paragraph"> 
+           <p>If the property edit has been reified, then the 
<code>commandPersistence()</code> attribute determines whether that 
<code>Command</code> object should then also be persisted (the default), or not 
persisted, or only if hinted.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>To explain this last alternative:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">Order</span> {
+    <span class="annotation">@Property</span>(
+        command=CommandReification.ENABLED,
+        commandPersistence=CommandPersistence.IF_HINTED
+    )
+    <span class="directive">public</span> Product getProduct() { ... }
+    <span class="directive">public</span> <span class="type">void</span> 
setProduct(Product p) { ... }
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>will suppress the persistence of the <code>Command</code> object 
<em>unless</em> a child background <code>Command</code> has been created in the 
body of the property by way of the <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_BackgroundService"><code>BackgroundService</code></a>.</p>
 
+          </div> 
+          <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>Unlike actions, where this is quite feasible, it is rather 
unlikely to occur as a side-effect of editing a property.</p> 
+               </div> </td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>On the other hand:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">Order</span> {
+    <span class="annotation">@Property</span>(
+        command=CommandReification.ENABLED,
+        commandPersistence=CommandPersistence.NOT_PERSISTED
+    )
+    <span class="directive">public</span> Product getProduct() { ... }
+    <span class="directive">public</span> <span class="type">void</span> 
setProduct(Product p) { ... }
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>will prevent the parent <code>Command</code> object from being 
persisted, <em>even if</em> a child background <code>Command</code> is 
created.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="__code_commandexecutein_code_2">30.1.2. 
<code>commandExecuteIn()</code></h4> 
+          <div class="paragraph"> 
+           <p>For persisted commands, the <code>commandExecuteIn()</code> 
attribute determines whether the <code>Command</code> should be executed in the 
foreground (the default) or executed in the background.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>Background execution means that the command is not executed 
immediately, but is available for a configured <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_BackgroundCommandService"><code>BackgroundCommandService</code></a>
 to execute, eg by way of an in-memory scheduler such as Quartz. See <a 
href="../ugbtb/ugbtb.html#_ugbtb_headless-access_BackgroundCommandExecution">here</a>
 for further information on this topic.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>For example:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="type">class</span> <span 
class="class">Order</span> {
+    <span class="annotation">@Property</span>(
+        command=CommandReification.ENABLED,
+        commandExecuteIn=CommandExecuteIn.BACKGROUND
+    )
+    <span class="directive">public</span> Product getProduct() { ... }
+    <span class="directive">public</span> <span class="type">void</span> 
setProduct(Product p) { ... }
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>will result in the <code>Command</code> being persisted but its 
execution deferred to a background execution mechanism. The returned object 
from this property edit is the persisted <code>Command</code> itself.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="__code_commanddtoprocessor_code_2">30.1.3. 
<code>commandDtoProcessor()</code></h4> 
+          <div class="paragraph"> 
+           <p>The <code>commandDtoProcessor()</code> attribute allows an 
implementation of <code>CommandDtoProcessor</code> to be specified. This 
interface has the following API:</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">CommandDtoProcessor</span> {
+    CommandDto process(             <i class="conum" 
data-value="1"></i><b>(1)</b>
+            Command command,        <i class="conum" 
data-value="2"></i><b>(2)</b>
+            CommandDto dto);        <i class="conum" 
data-value="3"></i><b>(3)</b>
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="colist arabic"> 
+           <table> 
+            <tbody>
+             <tr> 
+              <td><i class="conum" data-value="1"></i><b>1</b></td> 
+              <td>The returned <code>CommandDto</code>. This will typically be 
the <code>CommandDto</code> passed in, but supplemented in some way.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>The <code>Command</code> being processed</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>The <code>CommandDto</code> (XML) obtained already from the 
<code>Command</code> (by virtue of it also implementing 
<code>CommandWithDto</code>, see discussion below).</td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>This interface is used by the framework-provided implementations 
of <code>ContentMappingService</code> for the REST API, allowing 
<code>Command</code>s implementations that also implement 
<code>CommandWithDto</code> to be further customised as they are serialized 
out. The primary use case for this capability is in support of master/slave 
replication.</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p>on the master, <code>Command</code>s are serialized to 
XML. This includes the identity of the target object and the intended new value 
of the property.</p> 
+             <div class="admonitionblock important"> 
+              <table> 
+               <tbody>
+                <tr> 
+                 <td class="icon"> <i class="fa icon-important" 
title="Important"></i> </td> 
+                 <td class="content"> 
+                  <div class="paragraph"> 
+                   <p>However, any <code>Blob</code>s and <code>Clob</code>s 
are deliberately excluded from this XML (they are instead stored as 
references). This is to prevent the storage requirements for 
<code>Command</code> from becoming excessive. A 
<code>CommandDtoProcessor</code> can be provided to re-attach blob information 
if required.</p> 
+                  </div> </td> 
+                </tr> 
+               </tbody>
+              </table> 
+             </div> </li> 
+            <li> <p>replaying <code>Command</code>s requires this missing 
parameter information to be reinstated. The <code>CommandDtoProcessor</code> 
therefore offers a hook to dynamically re-attach the missing <code>Blob</code> 
or <code>Clob</code> argument.</p> </li> 
+           </ul> 
+          </div> 
+          <div class="paragraph"> 
+           <p>As a special case, returning <code>null</code> means that the 
command’s DTO is effectively excluded when retrieving the list of commands. 
If replicating from master to slave, this effectively allows certain commands 
to be ignored. The <code>CommandDtoProcessor.Null</code> class provides a 
convenience implementation for this requirement.</p> 
+          </div> 
+          <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>If <code>commandDtoProcessor()</code> is specified, then 
<code>command()</code> is assumed to be ENABLED.</p> 
+               </div> </td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>For an example application, see <a 
href="#_rgant-Action_command"><code>Action#command()</code></a>.</p> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgant-Property_domainEvent">30.2. 
<code>domainEvent()</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/rgant/_rgant-Property_domainEvent.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>
@@ -11415,7 +11977,7 @@ container.persist(cust);</code></pre>
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_subscribers_13">30.1.1. Subscribers</h4> 
+          <h4 id="_subscribers_13">30.2.1. Subscribers</h4> 
           <div class="paragraph"> 
            <p>Subscribers (which must be domain services) subscribe using 
either the <a href="https://github.com/google/guava";>Guava</a> API or (if the 
<a 
href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_EventBusService"><code>EventBusService</code></a>
 has been appropriately configured) using the <a 
href="http://www.axonframework.org/";>Axon Framework</a> API. The examples below 
use the Guava API.</p> 
           </div> 
@@ -11504,7 +12066,7 @@ container.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_default_doop_and_noop_events_13">30.1.2. Default, Doop and 
Noop events</h4> 
+          <h4 id="_default_doop_and_noop_events_13">30.2.2. Default, Doop and 
Noop events</h4> 
           <div class="paragraph"> 
            <p>If the <code>domainEvent</code> attribute is not explicitly 
specified (is left as its default value, 
<code>PropertyDomainEvent.Default</code>), then the framework will, by default, 
post an event.</p> 
           </div> 
@@ -11519,14 +12081,14 @@ container.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_raising_events_programmatically_6">30.1.3. Raising events 
programmatically</h4> 
+          <h4 id="_raising_events_programmatically_6">30.2.3. Raising events 
programmatically</h4> 
           <div class="paragraph"> 
            <p>Normally events are only raised for interactions through the UI. 
However, events can be raised programmatically by wrapping the target object 
using the <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_WrapperFactory"><code>WrapperFactory</code></a>
 service.</p> 
           </div> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_editing">30.2. <code>editing()</code></h3>
+         <h3 id="_rgant-Property_editing">30.3. <code>editing()</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/rgant/_rgant-Property_editing.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>
@@ -11584,7 +12146,7 @@ container.persist(cust);</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_fileAccept">30.3. 
<code>fileAccept()</code></h3>
+         <h3 id="_rgant-Property_fileAccept">30.4. 
<code>fileAccept()</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/rgant/_rgant-Property_fileAccept.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>
@@ -11624,7 +12186,7 @@ container.persist(cust);</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_hidden">30.4. <code>hidden()</code></h3>
+         <h3 id="_rgant-Property_hidden">30.5. <code>hidden()</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/rgant/_rgant-Property_hidden.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>
@@ -11718,7 +12280,7 @@ container.persist(cust);</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_maxLength">30.5. <code>maxLength()</code></h3>
+         <h3 id="_rgant-Property_maxLength">30.6. <code>maxLength()</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/rgant/_rgant-Property_maxLength.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>
@@ -11752,7 +12314,7 @@ container.persist(cust);</code></pre>
           <p>In this case there is therefore no need for the 
<code>@Property#maxLength()</code> attribute.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_non_persistent_properties">30.5.1. Non-persistent 
properties</h4> 
+          <h4 id="_non_persistent_properties">30.6.1. Non-persistent 
properties</h4> 
           <div class="paragraph"> 
            <p>Of course, not every property is persistent (it could instead be 
derived), and neither is every domain object an entity (it could be a view 
model). For these non persistable properties the <code>maxLength()</code> 
attribute is still required.</p> 
           </div> 
@@ -11791,7 +12353,7 @@ container.persist(cust);</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_mustSatisfy">30.6. 
<code>mustSatisfy()</code></h3>
+         <h3 id="_rgant-Property_mustSatisfy">30.7. 
<code>mustSatisfy()</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/rgant/_rgant-Property_mustSatisfy.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>
@@ -11878,7 +12440,7 @@ container.persist(cust);</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_notPersisted">30.7. 
<code>notPersisted()</code></h3>
+         <h3 id="_rgant-Property_notPersisted">30.8. 
<code>notPersisted()</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/rgant/_rgant-Property_notPersisted.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>
@@ -11962,7 +12524,7 @@ container.persist(cust);</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_optionality">30.8. 
<code>optionality()</code></h3>
+         <h3 id="_rgant-Property_optionality">30.9. 
<code>optionality()</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/rgant/_rgant-Property_optionality.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>
@@ -11999,7 +12561,7 @@ container.persist(cust);</code></pre>
           <p>In this case there is no need for the 
<code>@Property#optionality()</code> attribute.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_mismatched_defaults">30.8.1. Mismatched defaults</h4> 
+          <h4 id="_mismatched_defaults">30.9.1. Mismatched defaults</h4> 
           <div class="paragraph"> 
            <p>If the <code>@Column#allowsNull()</code> attribute is omitted 
and the `@Property#optionality() attribute is also omitted, then note that 
Isis' defaults and JDO’s defaults differ. Specifically, Isis always assumes 
properties are mandatory, whereas JDO specifies that primitives are mandatory, 
but all reference types are optional.</p> 
           </div> 
@@ -12008,7 +12570,7 @@ container.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_superclass_inheritance_type">30.8.2. Superclass inheritance 
type</h4> 
+          <h4 id="_superclass_inheritance_type">30.9.2. Superclass inheritance 
type</h4> 
           <div class="paragraph"> 
            <p>There is one case (at least) it may be necessary to annotate the 
property with both <code>@Column#allowsNull</code> and also 
<code>@Property#optionality()</code>. If the property is logically mandatory 
and is in a subclass, but the mapping of the class hierarchy is to store both 
the superclass and subclass(es) into a single table (ie a "roll-up" mapping 
using <code>javax.jdo.annotations.InheritanceStrategy#SUPERCLASS_TABLE</code>), 
then JDO requires that the property is annotated as 
<code>@Column#allowsNull="true"</code>: its value will be not defined for other 
subclasses.</p> 
           </div> 
@@ -12055,7 +12617,7 @@ container.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_non_persistent_properties_2">30.8.3. Non-persistent 
properties</h4> 
+          <h4 id="_non_persistent_properties_2">30.9.3. Non-persistent 
properties</h4> 
           <div class="paragraph"> 
            <p>Of course, not every property is persistent (it could instead be 
derived), and neither is every domain object an entity (it could be a view 
model). For these non persistable properties the <code>optionality()</code> 
attribute is still required.</p> 
           </div> 
@@ -12133,7 +12695,7 @@ container.persist(cust);</code></pre>
               <td class="icon"> <i class="fa icon-note" title="Note"></i> 
</td> 
               <td class="content"> 
                <div class="paragraph"> 
-                <p>It is also possible to specify optionality using <a 
href="../rgant/rgant.html#_rgant_Nullable"><code>@Nullable</code></a> 
annotation.</p> 
+                <p>It is also possible to specify optionality using <a 
href="../rgant/rgant.html#_rgant-Nullable"><code>@Nullable</code></a> 
annotation.</p> 
                </div> </td> 
              </tr> 
             </tbody>
@@ -12142,7 +12704,7 @@ container.persist(cust);</code></pre>
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgant-Property_regexPattern">30.9. 
<code>regexPattern()</code></h3>
+         <h3 id="_rgant-Property_regexPattern">30.10. 
<code>regexPattern()</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/rgant/_rgant-Property_regexPattern.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>
@@ -12989,7 +13551,7 @@ container.persist(cust);</code></pre>
              <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
              <td class="content"> 
               <div class="paragraph"> 
-               <p>Design note: we considered implementing this an "immutable" 
flag on the <a href="#_rgant_Property"><code>@Property</code></a> annotation 
(because this flag is typically appropriate for immutable/unchanging properties 
of a domain object). However, we decided not to do that, on the basis that it 
might be interpreted as having a deeper impact within the framework than simply 
a hint for rendering.</p> 
+               <p>Design note: we considered implementing this an "immutable" 
flag on the <a href="#_rgant-Property"><code>@Property</code></a> annotation 
(because this flag is typically appropriate for immutable/unchanging properties 
of a domain object). However, we decided not to do that, on the basis that it 
might be interpreted as having a deeper impact within the framework than simply 
a hint for rendering.</p> 
               </div> </td> 
             </tr> 
            </tbody>
@@ -13268,7 +13830,7 @@ serviceRegistry.injectServicesInto(vm);</code></pre>
               <p>The <code>@ViewModel</code> does not allow the objectType to 
be specified, meaning that it is incompatible with the metamodel validation 
check ennabled by the <a 
href="../rgcfg/rgcfg.html#__rgcfg_configuring-core_metamodel-validation"><code>explicitObjectType</code></a>
 configuration property.</p> 
              </div> 
              <div class="paragraph"> 
-              <p>Instead, use <a 
href="../rgant/rgant.html#_rgant_DomainObject_nature"><code>@DomainObject#nature()</code></a>
 with <code>Nature.VIEW_MODEL</code>, and specify <a 
href="../rgant/rgant.html#_rgant_DomainObject_objectType"><code>@DomainObject#objectType()</code></a>.</p>
 
+              <p>Instead, use <a 
href="../rgant/rgant.html#_rgant-DomainObject_nature"><code>@DomainObject#nature()</code></a>
 with <code>Nature.VIEW_MODEL</code>, and specify <a 
href="../rgant/rgant.html#_rgant-DomainObject_objectType"><code>@DomainObject#objectType()</code></a>.</p>
 
              </div> </td> 
            </tr> 
           </tbody>

Reply via email to