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

[1/2] isis-site git commit: ISIS-830: docs for the new lifecycle events

Repository: isis-site
Updated Branches:
  refs/heads/asf-site 0e3bd5277 -> aaf2db1d2


http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/rg.html
----------------------------------------------------------------------
diff --git a/content/guides/rg.html b/content/guides/rg.html
index e2cc34b..0f02f9a 100644
--- a/content/guides/rg.html
+++ b/content/guides/rg.html
@@ -11703,10 +11703,18 @@ RemoveFrom&#8230;&#8203;()</code></a></p></td>
 </td>
 <td class="content">
 <div class="paragraph">
-<p>Note that these callbacks are fired by Apache Isis rather than JDO.  In the future we may deprecate them because they duplicate functionality already available in JDO.</p>
+<p>Note that these callbacks are fired by Apache Isis rather than JDO.  In the future we may deprecate them because there are better mechanisms available using listeners/subscribers:</p>
 </div>
-<div class="paragraph">
-<p>You may therefore want to consider using the JDO API directly; see <a href="#_rg_methods_lifecycle_jdo-api">here</a> for further discussion.</p>
+<div class="ulist">
+<ul>
+<li>
+<p>in Isis 1.9.0 and earlier, you may therefore want to consider using the JDO API directly to set up a lifecycle
+listener; see <a href="#_rg_methods_lifecycle_jdo-api">here</a> for further discussion.</p>
+</li>
+<li>
+<p>alternatively (1.10.0-SNAPSHOT), you can use a subscriber for the <a href="#_rg_classes_lifecycleevent">lifecycle event</a>s fired in Isis.</p>
+</li>
+</ul>
 </div>
 </td>
 </tr>
@@ -11845,12 +11853,40 @@ RemoveFrom&#8230;&#8203;()</code></a></p></td>
 <div class="paragraph">
 <p>The <code>created()</code> lifecycle callback method is called when an object has just been created using <a href="#_rg_services-api_manpage-DomainObjectContainer"><code>newTransientInstance()</code></a></p>
 </div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Alternatively, consider using a <a href="#_rg_services-api_manpage-EventBusService">event bus</a> <a href="#_rg_classes_super_manpage-AbstractSubscriber">subscriber</a> on the <a href="#_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent"><code>ObjectCreatedEvent</code></a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_rg_methods_reserved_manpage-loaded">3.3.2. <code>loaded()</code></h4>
 <div class="paragraph">
 <p>The <code>loaded()</code> lifecycle callback method is called when a (persistent) object has just been loaded from the object store.</p>
 </div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Alternatively, consider using a <a href="#_rg_services-api_manpage-EventBusService">event bus</a> <a href="#_rg_classes_super_manpage-AbstractSubscriber">subscriber</a> on the <a href="#_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent"><code>ObjectLoadedEvent</code></a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_rg_methods_reserved_manpage-persisted">3.3.3. <code>persisted()</code></h4>
@@ -11860,6 +11896,20 @@ RemoveFrom&#8230;&#8203;()</code></a></p></td>
 <div class="paragraph">
 <p>See also <a href="#_rg_methods_lifecycle_manpage-persisting"><code>persisting()</code></a>.</p>
 </div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Alternatively, consider using a <a href="#_rg_services-api_manpage-EventBusService">event bus</a> <a href="#_rg_classes_super_manpage-AbstractSubscriber">subscriber</a> on the <a href="#_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent"><code>ObjectPersistedEvent</code></a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_rg_methods_reserved_manpage-persisting">3.3.4. <code>persisting()</code></h4>
@@ -11869,6 +11919,20 @@ RemoveFrom&#8230;&#8203;()</code></a></p></td>
 <div class="paragraph">
 <p>See also <a href="#_rg_methods_lifecycle_manpage-persisted"><code>persisted()</code></a>.</p>
 </div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Alternatively, consider using a <a href="#_rg_services-api_manpage-EventBusService">event bus</a> <a href="#_rg_classes_super_manpage-AbstractSubscriber">subscriber</a> on the <a href="#_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent"><code>ObjectPersistingEvent</code></a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_rg_methods_reserved_manpage-removed">3.3.5. <code>removed()</code></h4>
@@ -11878,6 +11942,20 @@ RemoveFrom&#8230;&#8203;()</code></a></p></td>
 <div class="paragraph">
 <p>See also <a href="#_rg_methods_lifecycle_manpage-removing"><code>removing()</code></a>.</p>
 </div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Alternatively, consider using a <a href="#_rg_services-api_manpage-EventBusService">event bus</a> <a href="#_rg_classes_super_manpage-AbstractSubscriber">subscriber</a> on the <a href="#_rg_classes_lifecycleevent_manpage-ObjectRemovedEvent"><code>ObjectRemovedEvent</code></a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_rg_methods_reserved_manpage-removing">3.3.6. <code>removing()</code></h4>
@@ -11887,6 +11965,20 @@ RemoveFrom&#8230;&#8203;()</code></a></p></td>
 <div class="paragraph">
 <p>See also <a href="#_rg_methods_lifecycle_manpage-removed"><code>removed()</code></a>.</p>
 </div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Alternatively, consider using a <a href="#_rg_services-api_manpage-EventBusService">event bus</a> <a href="#_rg_classes_super_manpage-AbstractSubscriber">subscriber</a> on the <a href="#_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent"><code>ObjectRemovingEvent</code></a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_rg_methods_reserved_manpage-updated">3.3.7. <code>updated()</code></h4>
@@ -11896,6 +11988,20 @@ RemoveFrom&#8230;&#8203;()</code></a></p></td>
 <div class="paragraph">
 <p>See also <a href="#_rg_methods_lifecycle_manpage-updating"><code>updating()</code></a>.</p>
 </div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Alternatively, consider using a <a href="#_rg_services-api_manpage-EventBusService">event bus</a> <a href="#_rg_classes_super_manpage-AbstractSubscriber">subscriber</a> on the <a href="#_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent"><code>ObjectUpdatedEvent</code></a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_rg_methods_reserved_manpage-updating">3.3.8. <code>updating()</code></h4>
@@ -11905,6 +12011,20 @@ RemoveFrom&#8230;&#8203;()</code></a></p></td>
 <div class="paragraph">
 <p>See also <a href="#_rg_methods_lifecycle_manpage-updated"><code>updated()</code></a>.</p>
 </div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Alternatively, consider using a <a href="#_rg_services-api_manpage-EventBusService">event bus</a> <a href="#_rg_classes_super_manpage-AbstractSubscriber">subscriber</a> on the <a href="#_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent"><code>ObjectUpdatingEvent</code></a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_rg_methods_lifecycle_jdo-api">3.3.9. Using the JDO API</h4>
@@ -19450,7 +19570,7 @@ implementation:</p>
 <div class="sect2">
 <h3 id="_rg_classes_super">6.2. Superclasses</h3>
 <div class="paragraph">
-<p>This section catalogues the various convenience superclasses defined by Apache Isis.  These are listed in the table below.</p>
+<p>This section catalogues the various convenience (non event) superclasses defined by Apache Isis.  These are listed in the table below.</p>
 </div>
 <table class="tableblock frame-all grid-all spread">
 <caption class="title">Table 29. Convenience Superclasses</caption>
@@ -19481,17 +19601,6 @@ Impl&#8217;n (g: a:)</th>
 <td class="tableblock halign-left valign-top"></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_super_manpage-AbstractDomainEvent"><code>o.a.i.applib.</code><br>
-<code>AbstractDomainEvent</code></a></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><code>o.a.i.core</code><br>
-<code>services.eventbus</code><br>
-<code>isis-core-applib</code></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class)</p></td>
-<td class="tableblock halign-left valign-top"></td>
-</tr>
-<tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_super_manpage-AbstractDomainObject"><code>o.a.i.applib.</code><br>
 <code>AbstractDomainObject</code></a></p></td>
 <td class="tableblock halign-left valign-top"><div><div class="paragraph">
@@ -19522,32 +19631,20 @@ Impl&#8217;n (g: a:)</th>
 <td class="tableblock halign-left valign-top"></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_super_manpage-AbstractViewModel"><code>o.a.i.applib.</code><br>
-<code>AbstractViewModel</code></a></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><code>o.a.i.core</code><br>
-<code>isis-core-applib</code></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class)</p></td>
-<td class="tableblock halign-left valign-top"></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_super_manpage-ActionDomainEvent"><code>o.a.i.applib.</code><br>
-<code>ActionDomainEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_super_manpage-AbstractSubscriber"><code>o.a.i.applib.</code><br>
+<code>AbstractSubscriber</code></a></p></td>
 <td class="tableblock halign-left valign-top"><div><div class="paragraph">
 <p><code>o.a.i.core</code><br>
-<code>services.eventbus</code><br>
 <code>isis-core-applib</code></p>
 </div></div></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class)</p></td>
 <td class="tableblock halign-left valign-top"></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_super_manpage-CollectionDomainEvent"><code>o.a.i.applib.</code><br>
-<code>CollectionDomainEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_super_manpage-AbstractViewModel"><code>o.a.i.applib.</code><br>
+<code>AbstractViewModel</code></a></p></td>
 <td class="tableblock halign-left valign-top"><div><div class="paragraph">
 <p><code>o.a.i.core</code><br>
-<code>services.eventbus</code><br>
 <code>isis-core-applib</code></p>
 </div></div></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class)</p></td>
@@ -19572,21 +19669,12 @@ Impl&#8217;n (g: a:)</th>
 <p><code>o.a.i.core</code><br>
 <code>isis-core-applib</code></p>
 </div></div></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>FixtureScriptsDefault</code> is a default implementation that is used when the alternative <a href="#_rg_services-api_manpage-FixtureScriptsSpecificationProvider"><code>FixtureScriptsSpecificationProvider</code></a> is provided
+  (and no other implementation of <code>FixtureScripts</code> was found).</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">depends on:<br>
 <code>ClassDiscoveryService</code></p></td>
 </tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_super_manpage-PropertyDomainEvent"><code>o.a.i.applib.</code><br>
-<code>PropertyDomainEvent</code></a></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><code>o.a.i.core</code><br>
-<code>services.eventbus</code><br>
-<code>isis-core-applib</code></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class)</p></td>
-<td class="tableblock halign-left valign-top"></td>
-</tr>
 </tbody>
 </table>
 <div class="sect3">
@@ -19640,32 +19728,7 @@ when the transaction is flushed (typically when a query is performed).</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_super_manpage-AbstractDomainEvent">6.2.2. <code>AbstractDomainEvent</code></h4>
-<div class="paragraph">
-<p>This class is the superclass for all domain events that are raised by the framework when interacting with actions, properties or collections.</p>
-</div>
-<div class="paragraph">
-<p>Its immediate subclasses are:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><a href="#_rg_classes_super_manpage-ActionDomainEvent"><code>ActionDomainEvent</code></a></p>
-</li>
-<li>
-<p><a href="#_rg_classes_super_manpage-PropertyDomainEvent"><code>PropertyDomainEvent</code></a></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>This class defines the <code>Phase</code> enum that is common to all domain events (hide/disable/validate/pre-execute/post-execute), and provides methods such as <code>veto(&#8230;&#8203;)</code> by which subscribers can influence the interaction (eg hide a collection, disable a property, validate action arguments).</p>
-</div>
-<div class="paragraph">
-<p>It class also provides <code>get(&#8230;&#8203;)</code> and <code>put(&#8230;&#8203;)</code> methods that allow adhoc sharing of user data between different phases.  One event instance is used for both the hide and disable phases, and a different event instance is shared between validate/pre-execute/post-execute.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_rg_classes_super_manpage-AbstractDomainObject">6.2.3. <code>AbstractDomainObject</code></h4>
+<h4 id="_rg_classes_super_manpage-AbstractDomainObject">6.2.2. <code>AbstractDomainObject</code></h4>
 <div class="paragraph">
 <p>This class extends <a href="#_rg_classes_super_manpage-AbstractContainedObject"><code>AbstractContainedObject</code></a>, adding
 in convenience methods for managing the persistence lifecycle of the object instance.</p>
@@ -19676,7 +19739,7 @@ in convenience methods for managing the persistence lifecycle of the object inst
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_super_manpage-AbstractFactoryAndRepository">6.2.4. <code>AbstractFactoryAndRepository</code></h4>
+<h4 id="_rg_classes_super_manpage-AbstractFactoryAndRepository">6.2.3. <code>AbstractFactoryAndRepository</code></h4>
 <div class="paragraph">
 <p>This class extends <a href="#_rg_classes_super_manpage-AbstractContainedObject"><code>AbstractContainedObject</code></a>.  Its
 intent was to be a convenience subclass for services acting as either a repository or a factory, however note that
@@ -19687,7 +19750,7 @@ intent was to be a convenience subclass for services acting as either a reposito
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_super_manpage-AbstractService">6.2.5. <code>AbstractService</code></h4>
+<h4 id="_rg_classes_super_manpage-AbstractService">6.2.4. <code>AbstractService</code></h4>
 <div class="paragraph">
 <p>This class extends <a href="#_rg_classes_super_manpage-AbstractContainedObject"><code>AbstractContainedObject</code></a>, adding
 in an implementation of <code>getId()</code> based upon the classes name.</p>
@@ -19697,6 +19760,12 @@ in an implementation of <code>getId()</code> based upon the classes name.</p>
 </div>
 </div>
 <div class="sect3">
+<h4 id="_rg_classes_super_manpage-AbstractSubscriber">6.2.5. <code>AbstractSubscriber</code></h4>
+<div class="paragraph">
+<p>This is a convenience superclass for creating subscriber domain services on the <a href="#_rg_services-api_manpage-EventBusService"><code>EventBusService</code></a>.  It uses <a href="#_rg_annotations_manpage-PostConstruct"><code>@PostConstruct</code></a> and <a href="#_rg_annotations_manpage-PreDestroy"><code>@PreDestroy</code></a> callbacks to automatically register itself with the <code>EventBusService</code>.</p>
+</div>
+</div>
+<div class="sect3">
 <h4 id="_rg_classes_super_manpage-AbstractViewModel">6.2.6. <code>AbstractViewModel</code></h4>
 <div class="paragraph">
 <p>This class extends <a href="#_rg_classes_super_manpage-AbstractContainedObject"><code>AbstractContainedObject</code></a>, also
@@ -19718,60 +19787,7 @@ implementing the <a href="#_rg_classes_super_manpage-ViewModel"><code>ViewModel<
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_super_manpage-ActionDomainEvent">6.2.7. <code>ActionDomainEvent</code></h4>
-<div class="paragraph">
-<p>Subclass of <a href="#_rg_classes_super_manpage-AbstractDomainEvent"><code>AbstractDomainEvent</code></a> for actions.</p>
-</div>
-<div class="paragraph">
-<p>The class has a number of responsibilities (in addition to those it inherits):</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>capture the target object being interacted with</p>
-</li>
-<li>
-<p>capture the arguments for each of the action&#8217;s parameters</p>
-</li>
-<li>
-<p>provide selected metadata about the action parameters from the metamodel (names, types)</p>
-</li>
-<li>
-<p>link back to the <a href="#_rg_services-api_manpage-CommandContext"><code>CommandContext</code></a> service&#8217;s <code>Command</code> object</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>The class itself is instantiated automatically by the framework whenever interacting with a rendered object&#8217;s action.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_rg_classes_super_manpage-CollectionDomainEvent">6.2.8. <code>CollectionDomainEvent</code></h4>
-<div class="paragraph">
-<p>Subclass of <a href="#_rg_classes_super_manpage-AbstractDomainEvent"><code>AbstractDomainEvent</code></a> for collections.</p>
-</div>
-<div class="paragraph">
-<p>The class has a couple of responsibilities (in addition to those it inherits):</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>capture the target object being interacted with</p>
-</li>
-<li>
-<p>indicate whether the interaction is to add or remove an object from the collection (or simply to indicate that the collection is being accessed/read)</p>
-</li>
-<li>
-<p>capture the object reference being added or removed</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>The class itself is instantiated automatically by the framework whenever interacting with a rendered object&#8217;s collection.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_rg_classes_super_manpage-FixtureScript">6.2.9. <code>FixtureScript</code></h4>
+<h4 id="_rg_classes_super_manpage-FixtureScript">6.2.7. <code>FixtureScript</code></h4>
 <div class="paragraph">
 <p>The <code>FixtureScript</code> class is an abstract class defining an API to set up data within the object store, either for integration tests or while demoing/prototyping.</p>
 </div>
@@ -19792,7 +19808,7 @@ domain services to set up data.  The provided <code>ExecutionContext</code> is u
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_super_manpage-FixtureScripts">6.2.10. <code>FixtureScripts</code></h4>
+<h4 id="_rg_classes_super_manpage-FixtureScripts">6.2.8. <code>FixtureScripts</code></h4>
 <div class="paragraph">
 <p>This abstract class is intended to allow a domain service that can execute <a href="#_rg_classes_super_manpage-FixtureScript"><code>FixtureScript</code></a>s to be easily written.</p>
 </div>
@@ -19804,48 +19820,566 @@ implemented instead.  The framework will then automatically use <a href="#_rg_se
 <p>See the see the <a href="ug.html#_ug_testing_fixture-scripts">user guide&#8217;s testing chapter</a> for further discussion on the use of fixture scripts, in particular <a href="ug.html#_ug_testing_fixture-scripts_api-and-usage">fixture scripts' API and usage</a>.</p>
 </div>
 </div>
-<div class="sect3">
-<h4 id="_rg_classes_super_manpage-PropertyDomainEvent">6.2.11. <code>PropertyDomainEvent</code></h4>
-<div class="paragraph">
-<p>Subclass of <a href="#_rg_classes_super_manpage-AbstractDomainEvent"><code>AbstractDomainEvent</code></a> for properties.</p>
 </div>
+<div class="sect2">
+<h3 id="_rg_classes_domainevent">6.3. Domain Event Classes</h3>
 <div class="paragraph">
-<p>The class has a couple of responsibilities (in addition to those it inherits):</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>capture the target object being interacted with</p>
-</li>
-<li>
-<p>capture the old and new values of the property</p>
-</li>
-</ul>
+<p>This section catalogues the various domain event classes defined by Apache Isis.</p>
 </div>
 <div class="paragraph">
-<p>The class itself is instantiated automatically by the framework whenever interacting with a rendered object&#8217;s property.</p>
-</div>
+<p>These events are broadcast on the <a href="#_rg_services-api_manpage-EventBusService"><code>EventBusService</code></a>.  The domain
+events are broadcast as a result of being specified in the <a href="#_rg_annotations_manpage-Action_domainEvent"><code>@Action#domainEvent()</code></a>,  <a href="#_rg_annotations_manpage-Property_domainEvent"><code>@Property#domainEvent()</code></a> or <a href="#_rg_annotations_manpage-Collection_domainEvent"><code>@Collection#domainEvent()</code></a> attributes.</p>
 </div>
-</div>
-<div class="sect2">
-<h3 id="_rg_classes_value-types">6.3. Value Types</h3>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-TODO
-</td>
-</tr>
-</table>
+<div class="paragraph">
+<p>They are listed in the table below.</p>
 </div>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 30. JDK Classes</caption>
+<caption class="title">Table 30. Domain Event Classes</caption>
 <colgroup>
+<col style="width: 25%;">
+<col style="width: 50%;">
+<col style="width: 12%;">
+<col style="width: 12%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">API</th>
+<th class="tableblock halign-left valign-top">Maven Module<br>
+Impl&#8217;n (g: a:)</th>
+<th class="tableblock halign-left valign-top">Implementation</th>
+<th class="tableblock halign-left valign-top">Notes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_domainevent_manpage-AbstractDomainEvent"><code>o.a.i.applib.</code><br>
+<code>AbstractDomainEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Superclass of the other domain events, listed below in this table.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_domainevent_manpage-ActionDomainEvent"><code>o.a.i.applib.</code><br>
+<code>ActionDomainEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>ActionDomainEvent.Default</code> is the concrete implementation used if no <code>@Action#domainEvent</code> attribute is specified</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast whenever there is an interaction (hide/disable/validate/pre-execute/post-execute) with an object&#8217;s action.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_domainevent_manpage-CollectionDomainEvent"><code>o.a.i.applib.</code><br>
+<code>CollectionDomainEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>CollectionDomainEvent.Default</code> is the concrete implementation used if no <code>@Collection#domainEvent</code> attribute
+is specified.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast whenever there is an interaction (hide/disable/validate/access) with an object&#8217;s collection.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_domainevent_manpage-PropertyDomainEvent"><code>o.a.i.applib.</code><br>
+<code>PropertyDomainEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>PropertyDomainEvent.Default</code> is the concrete implementation used if no <code>@Propert#domainEvent</code> attribute is specified</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast whenever there is an interaction (hide/disable/validate/access) with an object&#8217;s property.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="sect3">
+<h4 id="_rg_classes_domainevent_manpage-AbstractDomainEvent">6.3.1. <code>AbstractDomainEvent</code></h4>
+<div class="paragraph">
+<p>This class is the superclass for all domain events that are raised by the framework when interacting with actions, properties or collections.</p>
+</div>
+<div class="paragraph">
+<p>Its immediate subclasses are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#_rg_classes_domainevent_manpage-ActionDomainEvent"><code>ActionDomainEvent</code></a></p>
+</li>
+<li>
+<p><a href="#_rg_classes_domainevent_manpage-PropertyDomainEvent"><code>PropertyDomainEvent</code></a></p>
+</li>
+<li>
+<p><a href="#_rg_classes_domainevent_manpage-CollectionDomainEvent"><code>CollectionDomainEvent</code></a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>This class defines the <code>Phase</code> enum that is common to all domain events (hide/disable/validate/pre-execute/post-execute), and provides methods such as <code>veto(&#8230;&#8203;)</code> by which subscribers can influence the interaction (eg hide a collection, disable a property, validate action arguments).</p>
+</div>
+<div class="paragraph">
+<p>It class also provides <code>get(&#8230;&#8203;)</code> and <code>put(&#8230;&#8203;)</code> methods that allow adhoc sharing of user data between different phases.  One event instance is used for both the hide and disable phases, and a different event instance is shared between validate/pre-execute/post-execute.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_domainevent_manpage-ActionDomainEvent">6.3.2. <code>ActionDomainEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_domainevent_manpage-AbstractDomainEvent"><code>AbstractDomainEvent</code></a> for actions.</p>
+</div>
+<div class="paragraph">
+<p>The class has a number of responsibilities (in addition to those it inherits):</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>capture the target object being interacted with</p>
+</li>
+<li>
+<p>capture the arguments for each of the action&#8217;s parameters</p>
+</li>
+<li>
+<p>provide selected metadata about the action parameters from the metamodel (names, types)</p>
+</li>
+<li>
+<p>link back to the <a href="#_rg_services-api_manpage-CommandContext"><code>CommandContext</code></a> service&#8217;s <code>Command</code> object</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The class itself is instantiated automatically by the framework whenever interacting with a rendered object&#8217;s action.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_domainevent_manpage-CollectionDomainEvent">6.3.3. <code>CollectionDomainEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_domainevent_manpage-AbstractDomainEvent"><code>AbstractDomainEvent</code></a> for collections.</p>
+</div>
+<div class="paragraph">
+<p>The class has a couple of responsibilities (in addition to those it inherits):</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>capture the target object being interacted with</p>
+</li>
+<li>
+<p>indicate whether the interaction is to add or remove an object from the collection (or simply to indicate that the collection is being accessed/read)</p>
+</li>
+<li>
+<p>capture the object reference being added or removed</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The class itself is instantiated automatically by the framework whenever interacting with a rendered object&#8217;s collection.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_domainevent_manpage-PropertyDomainEvent">6.3.4. <code>PropertyDomainEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_domainevent_manpage-AbstractDomainEvent"><code>AbstractDomainEvent</code></a> for properties.</p>
+</div>
+<div class="paragraph">
+<p>The class has a couple of responsibilities (in addition to those it inherits):</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>capture the target object being interacted with</p>
+</li>
+<li>
+<p>capture the old and new values of the property</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The class itself is instantiated automatically by the framework whenever interacting with a rendered object&#8217;s property.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_rg_classes_lifecycleevent">6.4. Lifecycle Events (1.10.0-SNAPSHOT)</h3>
+<div class="paragraph">
+<p>This section catalogues the various lifecycle event classes defined by Apache Isis (1.10.0-SNAPSHOT).  These events
+are fired automatically when a domain object is loaded, created, updated and so forth.</p>
+</div>
+<div class="paragraph">
+<p>The lifecycle event classes are listed in the table below:</p>
+</div>
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 31. Lifecycle Event Classes</caption>
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 50%;">
+<col style="width: 12%;">
+<col style="width: 12%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">API</th>
+<th class="tableblock halign-left valign-top">Maven Module<br>
+Impl&#8217;n (g: a:)</th>
+<th class="tableblock halign-left valign-top">Implementation</th>
+<th class="tableblock halign-left valign-top">Notes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent"><code>o.a.i.applib.</code><br>
+<code>AbstractLifecycleEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Superclass of the other lifecycle events, listed below in this table.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_lifecycleevent_manpage-ObjectCreatedDomainEvent"><code>o.a.i.applib.</code><br>
+<code>ObjectCreatedEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>ObjectCreatedEvent.Default</code> is the concrete implementation that is used.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast when an object is first instantiated
+using the <a href="#_rg_services-api_manpage-DomainObjectContainer_object-creation-api"><code>DomainObjectContainer</code></a>'s
+<code>#newTransientInstance(&#8230;&#8203;)</code> method.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_lifecycleevent_manpage-ObjectLoadedDomainEvent"><code>o.a.i.applib.</code><br>
+<code>ObjectLoadedEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>ObjectLoadedEvent.Default</code> is the concrete implementation that is  used.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast when an object is retrieved from the database.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_lifecycleevent_manpage-ObjectPersistedDomainEvent"><code>o.a.i.applib.</code><br>
+<code>ObjectPersistedEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>ObjectPersistedEvent.Default</code> is the concrete implementation that is used.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast when an object is first saved (inserted) into the database using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#persist(&#8230;&#8203;)</code> method.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_lifecycleevent_manpage-ObjectPersistingDomainEvent"><code>o.a.i.applib.</code><br>
+<code>ObjectPersistingEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>ObjectPersistingEvent.Default</code> is the concrete implementation that is used.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast when an object is about to be saved (inserted) into the database using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#persist(&#8230;&#8203;)</code> method.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_lifecycleevent_manpage-ObjectRemovingDomainEvent"><code>o.a.i.applib.</code><br>
+<code>ObjectRemovingEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>ObjectRemovingEvent.Default</code> is the concrete implementation that is used.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast when an object is about to be deleted from the database using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#remove(&#8230;&#8203;)</code> method.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_lifecycleevent_manpage-ObjectUpdatedDomainEvent"><code>o.a.i.applib.</code><br>
+<code>ObjectUpdatedEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>ObjectUpdatedEvent.Default</code> is the concrete implementation that is used.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast when an object has just been updated in the database.  This is done either explicitly when the current
+transaction is flushed using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#flush(&#8230;&#8203;)</code> method, else is done implicitly when the transaction commits at the end of the user request.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rg_classes_lifecycleevent_manpage-ObjectUpdatingDomainEvent"><code>o.a.i.applib.</code><br>
+<code>ObjectUpdatingEvent</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>o.a.i.core</code><br>
+<code>services.eventbus</code><br>
+<code>isis-core-applib</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(abstract class).<br>
+<code>ObjectUpdatingEvent.Default</code> is the concrete implementation that is used.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast when an object is about to be updated in the database.  This is done either explicitly when the current
+transaction is flushed using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#flush(&#8230;&#8203;)</code> method, else is done implicitly when the transaction commits at the end of the user request.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="sect3">
+<h4 id="_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent">6.4.1. <code>AbstractLifecycleEvent</code></h4>
+<div class="paragraph">
+<p>This class is the superclass for all lifecycle events that are raised by the framework when loading, saving, updating
+or deleting objects from the database.</p>
+</div>
+<div class="paragraph">
+<p>Its immediate subclasses are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent"><code>ObjectCreatedEvent</code></a></p>
+</li>
+<li>
+<p><a href="#_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent"><code>ObjectLoadedEvent</code></a></p>
+</li>
+<li>
+<p><a href="#_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent"><code>ObjectPersistedEvent</code></a></p>
+</li>
+<li>
+<p><a href="#_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent"><code>ObjectPersistingEvent</code></a></p>
+</li>
+<li>
+<p><a href="#_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent"><code>ObjectRemovingEvent</code></a></p>
+</li>
+<li>
+<p><a href="#_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent"><code>ObjectUpdatedEvent</code></a></p>
+</li>
+<li>
+<p><a href="#_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent"><code>ObjectUpdatingEvent</code></a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent">6.4.2. <code>ObjectCreatedEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent"><code>AbstractLifecycleEvent</code></a>, broadcast
+when an object is first instantiated using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-creation-api"><code>DomainObjectContainer</code></a>'s
+<code>#newTransientInstance(&#8230;&#8203;)</code> method.</p>
+</div>
+<div class="paragraph">
+<p><code>ObjectCreatedEvent.Default</code> is the concrete implementation that is used.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent">6.4.3. <code>ObjectLoadedEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent"><code>AbstractLifecycleEvent</code></a>, broadcast
+when an object is retrieved from the database.</p>
+</div>
+<div class="paragraph">
+<p><code>ObjectLoadedEvent.Default</code> is the concrete implementation that is used.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent">6.4.4. <code>ObjectPersistedEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent"><code>AbstractLifecycleEvent</code></a>, broadcast
+when an object is first saved (inserted) into the database using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#persist(&#8230;&#8203;)</code> method.</p>
+</div>
+<div class="paragraph">
+<p><code>ObjectPersistedEvent.Default</code> is the concrete implementation that is used.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent">6.4.5. <code>ObjectPersistingEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent"><code>AbstractLifecycleEvent</code></a>, broadcast
+when an object is about to be saved (inserted) into the database using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#persist(&#8230;&#8203;)</code> method.</p>
+</div>
+<div class="paragraph">
+<p><code>ObjectPersistingEvent.Default</code> is the concrete implementation that is used.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent">6.4.6. <code>ObjectRemovingEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent"><code>AbstractLifecycleEvent</code></a>, broadcast
+when an object is about to be deleted from the database using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#remove(&#8230;&#8203;)</code> method.</p>
+</div>
+<div class="paragraph">
+<p><code>ObjectRemovingEvent.Default</code> is the concrete implementation that is used.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent">6.4.7. <code>ObjectUpdatedEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent"><code>AbstractLifecycleEvent</code></a>, broadcast
+when an object has just been updated in the database.  This is done either explicitly when the current
+transaction is flushed using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#flush(&#8230;&#8203;)</code> method, else is done implicitly when the transaction commits at the end of the user request.</p>
+</div>
+<div class="paragraph">
+<p><code>ObjectUpdatedEvent.Default</code> is the concrete implementation that is used.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent">6.4.8. <code>ObjectUpdatingEvent</code></h4>
+<div class="paragraph">
+<p>Subclass of <a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent"><code>AbstractLifecycleEvent</code></a>, broadcast
+when an object is about to be updated in the database.  This is done either explicitly when the current
+transaction is flushed using the
+<a href="#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api"><code>DomainObjectContainer</code></a>'s
+<code>#flush(&#8230;&#8203;)</code> method, else is done implicitly when the transaction commits at the end of the user request.</p>
+</div>
+<div class="paragraph">
+<p><code>ObjectUpdatingEvent.Default</code> is the concrete implementation that is used.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_rg_classes_value-types">6.5. Value Types</h3>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 32. JDK Classes</caption>
+<colgroup>
+<col style="width: 50%;">
 <col style="width: 50%;">
-<col style="width: 50%;">
 </colgroup>
 <thead>
 <tr>
@@ -19913,7 +20447,7 @@ TODO
 </tbody>
 </table>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 31. JodaTime classes</caption>
+<caption class="title">Table 33. JodaTime classes</caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -19940,7 +20474,7 @@ TODO
 </tbody>
 </table>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 32. Isis Applib classes</caption>
+<caption class="title">Table 34. Isis Applib classes</caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -19980,7 +20514,7 @@ TODO
 </tbody>
 </table>
 <div class="sect3">
-<h4 id="_rg_classes_value-types_manpage-Blob">6.3.1. <code>Blob</code></h4>
+<h4 id="_rg_classes_value-types_manpage-Blob">6.5.1. <code>Blob</code></h4>
 <div class="admonitionblock note">
 <table>
 <tr>
@@ -19995,7 +20529,7 @@ TODO
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_value-types_manpage-Clob">6.3.2. <code>Clob</code></h4>
+<h4 id="_rg_classes_value-types_manpage-Clob">6.5.2. <code>Clob</code></h4>
 <div class="admonitionblock note">
 <table>
 <tr>
@@ -20010,7 +20544,7 @@ TODO
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_value-types_manpage-Color">6.3.3. <code>Color</code></h4>
+<h4 id="_rg_classes_value-types_manpage-Color">6.5.3. <code>Color</code></h4>
 <div class="admonitionblock note">
 <table>
 <tr>
@@ -20025,7 +20559,7 @@ TODO
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_value-types_manpage-Money">6.3.4. <code>Money</code></h4>
+<h4 id="_rg_classes_value-types_manpage-Money">6.5.4. <code>Money</code></h4>
 <div class="admonitionblock note">
 <table>
 <tr>
@@ -20040,7 +20574,7 @@ TODO
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_value-types_manpage-Password">6.3.5. <code>Password</code></h4>
+<h4 id="_rg_classes_value-types_manpage-Password">6.5.5. <code>Password</code></h4>
 <div class="admonitionblock note">
 <table>
 <tr>
@@ -20056,13 +20590,13 @@ TODO
 </div>
 </div>
 <div class="sect2">
-<h3 id="_rg_classes_utility">6.4. Applib Utility Classes</h3>
+<h3 id="_rg_classes_utility">6.6. Applib Utility Classes</h3>
 <div class="paragraph">
 <p>The <code>org.apache.isis.applib.util</code> package has a number of simple utility
 classes designed to simplify the coding of some common tasks.</p>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_utility_manpage-Enums">6.4.1. <code>Enums</code></h4>
+<h4 id="_rg_classes_utility_manpage-Enums">6.6.1. <code>Enums</code></h4>
 <div class="admonitionblock note">
 <table>
 <tr>
@@ -20077,7 +20611,7 @@ TODO
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_utility_manpage-ObjectContracts">6.4.2. <code>ObjectContracts</code></h4>
+<h4 id="_rg_classes_utility_manpage-ObjectContracts">6.6.2. <code>ObjectContracts</code></h4>
 <div class="paragraph">
 <p>The <code>ObjectContracts</code> test provides a series of methods to make it easy for your domain objects to:</p>
 </div>
@@ -20222,7 +20756,7 @@ TODO
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_utility_manpage-Reasons">6.4.3. <code>Reasons</code></h4>
+<h4 id="_rg_classes_utility_manpage-Reasons">6.6.3. <code>Reasons</code></h4>
 <div class="paragraph">
 <p>There are two different classes provided to help build reasons returned
 by <code>disableXxX()</code> and <code>validateXxx()</code> methods:</p>
@@ -20258,7 +20792,7 @@ by <code>disableXxX()</code> and <code>validateXxx()</code> methods:</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_utility_manpage-TitleBuffer">6.4.4. <code>TitleBuffer</code></h4>
+<h4 id="_rg_classes_utility_manpage-TitleBuffer">6.6.4. <code>TitleBuffer</code></h4>
 <div class="paragraph">
 <p>The <code>TitleBuffer</code> utility class is intended to make it easy to construct title strings (returned from the <a href="#_rg_methods_reserved_manpage-title"><code>title()</code></a> method).</p>
 </div>
@@ -20268,7 +20802,7 @@ by <code>disableXxX()</code> and <code>validateXxx()</code> methods:</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_rg_classes_spec">6.5. Specification pattern</h3>
+<h3 id="_rg_classes_spec">6.7. Specification pattern</h3>
 <div class="paragraph">
 <p>The interfaces and classes listed in this chapter provide support for the  <code>Specification</code> pattern, as described in Eric Evans' book <em>Domain Driven Design</em>, p224.</p>
 </div>
@@ -20276,7 +20810,7 @@ by <code>disableXxX()</code> and <code>validateXxx()</code> methods:</p>
 <p>Apache Isis will automatically apply such specifications as validation rules on properties (as per <a href="#_rg_annotations_manpage-Property_mustSatisfy"><code>@Property#mustSatisfy()</code></a>) and on action parameters (as per <a href="#_rg_annotations_manpage-Parameter_mustSatisfy"><code>@Parameter#mustSatisfy()</code></a>).</p>
 </div>
 <div class="sect3">
-<h4 id="__code_specification_code">6.5.1. <code>Specification</code></h4>
+<h4 id="__code_specification_code">6.7.1. <code>Specification</code></h4>
 <div class="paragraph">
 <p>The heart of the support for this pattern is the <code>Specification</code> interface:</p>
 </div>
@@ -20327,7 +20861,7 @@ by <code>disableXxX()</code> and <code>validateXxx()</code> methods:</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_specification2_code">6.5.2. <code>Specification2</code></h4>
+<h4 id="__code_specification2_code">6.7.2. <code>Specification2</code></h4>
 <div class="paragraph">
 <p>The <code>Specification2</code> interface extends the <code>Specification</code> API to add support for i18n.  This is done by defining an additional method that returns a <a href="#_rg_classes_i18n_manpage-TranslatableString">translatable string</a>:</p>
 </div>
@@ -20351,7 +20885,7 @@ by <code>disableXxX()</code> and <code>validateXxx()</code> methods:</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_adapter_classes">6.5.3. Adapter classes</h4>
+<h4 id="_adapter_classes">6.7.3. Adapter classes</h4>
 <div class="paragraph">
 <p>The <code>AbstractSpecification</code> and <code>AbstractSpecification2</code> adapter classes provide a partial implementation of the respective interfaces, providing type-safety.  (Their design is modelled on the <code>TypesafeMatcher</code> class within <a href="http://hamcrest.org/JavaHamcrest/">Hamcrest</a>).</p>
 </div>
@@ -20381,7 +20915,7 @@ by <code>disableXxX()</code> and <code>validateXxx()</code> methods:</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_combining_specifications">6.5.4. Combining specifications</h4>
+<h4 id="_combining_specifications">6.7.4. Combining specifications</h4>
 <div class="paragraph">
 <p>There are also adapter classes that can be inherited from to combine specifications:</p>
 </div>
@@ -20404,12 +20938,12 @@ by <code>disableXxX()</code> and <code>validateXxx()</code> methods:</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_rg_classes_i18n">6.6. i18n support</h3>
+<h3 id="_rg_classes_i18n">6.8. i18n support</h3>
 <div class="paragraph">
 <p>The <code>org.apache.isis.applib.services.i18n</code> package contains a single class to support i18n.</p>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_i18n_manpage-TranslatableString">6.6.1. <code>TranslatableString</code></h4>
+<h4 id="_rg_classes_i18n_manpage-TranslatableString">6.8.1. <code>TranslatableString</code></h4>
 <div class="admonitionblock important">
 <table>
 <tr>
@@ -20428,12 +20962,12 @@ TODO - see <a href="ug.html#_ug_more-advanced_i18n">user guide, i18n</a>.
 </div>
 </div>
 <div class="sect2">
-<h3 id="_rg_classes_contributee">6.7. Contributee</h3>
+<h3 id="_rg_classes_contributee">6.9. Contributee</h3>
 <div class="paragraph">
 <p>The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces.</p>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_mixins_manpage-HasTransactionId">6.7.1. <code>HasTransactionId</code></h4>
+<h4 id="_rg_classes_mixins_manpage-HasTransactionId">6.9.1. <code>HasTransactionId</code></h4>
 <div class="paragraph">
 <p>The <code>HasTransactionId</code> interface is a mix-in for any domain objects that reference a transaction id, such as
 auditing entries or commands.</p>
@@ -20476,7 +21010,7 @@ auditing entries or commands.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_mixins_manpage-HasUserName">6.7.2. <code>HasUsername</code></h4>
+<h4 id="_rg_classes_mixins_manpage-HasUserName">6.9.2. <code>HasUsername</code></h4>
 <div class="paragraph">
 <p>The <code>HasUsername</code> interface is a mix-in for domain objects to be associated with a username.  Other services and modules can then contribute actions/collections to render such additional information relating to the activities of the user.</p>
 </div>
@@ -20518,13 +21052,13 @@ auditing entries or commands.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_rg_classes_roles">6.8. Roles</h3>
+<h3 id="_rg_classes_roles">6.10. Roles</h3>
 <div class="paragraph">
 <p>The interfaces listed in this chapter are role interfaces; they define a contract for the framework
  to interact with those domain objects that implement these interfaces.</p>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_roles_manpage-HoldsUpdatedAt">6.8.1. <code>HoldsUpdatedAt</code></h4>
+<h4 id="_rg_classes_roles_manpage-HoldsUpdatedAt">6.10.1. <code>HoldsUpdatedAt</code></h4>
 <div class="paragraph">
 <p>The <code>HoldsUpdatedAt</code> role interface allows the (framework-provided) <code>TimestampService</code> to update each object with
 the current timestamp whenever it is modified in a transaction.</p>
@@ -20570,7 +21104,7 @@ the current timestamp whenever it is modified in a transaction.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_roles_manpage-HoldsUpdatedBy">6.8.2. <code>HoldsUpdatedBy</code></h4>
+<h4 id="_rg_classes_roles_manpage-HoldsUpdatedBy">6.10.2. <code>HoldsUpdatedBy</code></h4>
 <div class="paragraph">
 <p>The <code>HoldsUpdatedBy</code> role interface &#8230;&#8203;</p>
 </div>
@@ -20586,7 +21120,7 @@ the current timestamp whenever it is modified in a transaction.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_rg_classes_roles_manpage-Timestampable">6.8.3. <code>Timestampable</code></h4>
+<h4 id="_rg_classes_roles_manpage-Timestampable">6.10.3. <code>Timestampable</code></h4>
 <div class="paragraph">
 <p>The <code>Timestampable</code> role interface is a convenience that combines the <a href="#_rg_classes_roles_manpage-HoldsUpdatedAt"><code>HoldsUpdatedAt</code></a> and <a href="#_rg_classes_roles_manpage-HoldsUpdatedBy"><code>HoldsUpdatedBy</code></a> interfaces.  It is defined as:</p>
 </div>
@@ -21263,7 +21797,7 @@ using security or using a <a href="ug.html#_ug_more-advanced_decoupling_vetoing-
 <p>Most of the you&#8217;re likely to run Apache Isis using the <a href="ug.html#_ug_wicket-viewer">Wicket viewer</a>.  In this case Apache Isis' "deployment type" concept maps to Wicket&#8217;s "configuration" concept:</p>
 </div>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 33. Apache Isis' deployment type corresponds to Apache Wicket&#8217;s configuration</caption>
+<caption class="title">Table 35. Apache Isis' deployment type corresponds to Apache Wicket&#8217;s configuration</caption>
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -21455,7 +21989,7 @@ using security or using a <a href="ug.html#_ug_more-advanced_decoupling_vetoing-
 <p>To specify the <code>AppManifest</code> as a configuration property, use:</p>
 </div>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 34. Core Configuration Properties (ignored if <code>isis.appManifest</code> is present)</caption>
+<caption class="title">Table 36. Core Configuration Properties (ignored if <code>isis.appManifest</code> is present)</caption>
 <colgroup>
 <col style="width: 33%;">
 <col style="width: 16%;">
@@ -21491,7 +22025,7 @@ using security or using a <a href="ug.html#_ug_more-advanced_decoupling_vetoing-
 <p>If the <code>AppManifest</code> approach is <em>not</em> being used, then the following configuration properties are used to specify the major components of Apache Isis to use:</p>
 </div>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 35. Core Configuration Properties (ignored if <code>isis.appManifest</code> is present)</caption>
+<caption class="title">Table 37. Core Configuration Properties (ignored if <code>isis.appManifest</code> is present)</caption>
 <colgroup>
 <col style="width: 33%;">
 <col style="width: 16%;">
@@ -21631,7 +22165,7 @@ using security or using a <a href="ug.html#_ug_more-advanced_decoupling_vetoing-
 </table>
 </div>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 36. Core Configuration Properties</caption>
+<caption class="title">Table 38. Core Configuration Properties</caption>
 <colgroup>
 <col style="width: 33%;">
 <col style="width: 16%;">
@@ -22186,7 +22720,7 @@ frustrating to have to annotate every property.</p>
 <div class="sect4">
 <h5 id="_configuration_properties_for_apache_isis_itself">Configuration Properties for Apache Isis itself</h5>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 37. JDO/DataNucleus Objectstore Configuration Properties</caption>
+<caption class="title">Table 39. JDO/DataNucleus Objectstore Configuration Properties</caption>
 <colgroup>
 <col style="width: 33%;">
 <col style="width: 16%;">
@@ -22239,7 +22773,7 @@ frustrating to have to annotate every property.</p>
 <div class="sect4">
 <h5 id="_configuration_properties_passed_through_directly_to_datanucleus">Configuration Properties passed through directly to DataNucleus.</h5>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 38. JDO/DataNucleus Objectstore Configuration Properties</caption>
+<caption class="title">Table 40. JDO/DataNucleus Objectstore Configuration Properties</caption>
 <colgroup>
 <col style="width: 33%;">
 <col style="width: 16%;">
@@ -23870,67 +24404,84 @@ determines which additional configuration files to search for
 <li><a href="#_rg_classes_super">6.2. Superclasses</a>
 <ul class="sectlevel3">
 <li><a href="#_rg_classes_super_manpage-AbstractContainedObject">6.2.1. <code>AbstractContainedObject</code></a></li>
-<li><a href="#_rg_classes_super_manpage-AbstractDomainEvent">6.2.2. <code>AbstractDomainEvent</code></a></li>
-<li><a href="#_rg_classes_super_manpage-AbstractDomainObject">6.2.3. <code>AbstractDomainObject</code></a></li>
-<li><a href="#_rg_classes_super_manpage-AbstractFactoryAndRepository">6.2.4. <code>AbstractFactoryAndRepository</code></a></li>
-<li><a href="#_rg_classes_super_manpage-AbstractService">6.2.5. <code>AbstractService</code></a></li>
+<li><a href="#_rg_classes_super_manpage-AbstractDomainObject">6.2.2. <code>AbstractDomainObject</code></a></li>
+<li><a href="#_rg_classes_super_manpage-AbstractFactoryAndRepository">6.2.3. <code>AbstractFactoryAndRepository</code></a></li>
+<li><a href="#_rg_classes_super_manpage-AbstractService">6.2.4. <code>AbstractService</code></a></li>
+<li><a href="#_rg_classes_super_manpage-AbstractSubscriber">6.2.5. <code>AbstractSubscriber</code></a></li>
 <li><a href="#_rg_classes_super_manpage-AbstractViewModel">6.2.6. <code>AbstractViewModel</code></a></li>
-<li><a href="#_rg_classes_super_manpage-ActionDomainEvent">6.2.7. <code>ActionDomainEvent</code></a></li>
-<li><a href="#_rg_classes_super_manpage-CollectionDomainEvent">6.2.8. <code>CollectionDomainEvent</code></a></li>
-<li><a href="#_rg_classes_super_manpage-FixtureScript">6.2.9. <code>FixtureScript</code></a></li>
-<li><a href="#_rg_classes_super_manpage-FixtureScripts">6.2.10. <code>FixtureScripts</code></a></li>
-<li><a href="#_rg_classes_super_manpage-PropertyDomainEvent">6.2.11. <code>PropertyDomainEvent</code></a></li>
+<li><a href="#_rg_classes_super_manpage-FixtureScript">6.2.7. <code>FixtureScript</code></a></li>
+<li><a href="#_rg_classes_super_manpage-FixtureScripts">6.2.8. <code>FixtureScripts</code></a></li>
+</ul>
+</li>
+<li><a href="#_rg_classes_domainevent">6.3. Domain Event Classes</a>
+<ul class="sectlevel3">
+<li><a href="#_rg_classes_domainevent_manpage-AbstractDomainEvent">6.3.1. <code>AbstractDomainEvent</code></a></li>
+<li><a href="#_rg_classes_domainevent_manpage-ActionDomainEvent">6.3.2. <code>ActionDomainEvent</code></a></li>
+<li><a href="#_rg_classes_domainevent_manpage-CollectionDomainEvent">6.3.3. <code>CollectionDomainEvent</code></a></li>
+<li><a href="#_rg_classes_domainevent_manpage-PropertyDomainEvent">6.3.4. <code>PropertyDomainEvent</code></a></li>
+</ul>
+</li>
+<li><a href="#_rg_classes_lifecycleevent">6.4. Lifecycle Events (1.10.0-SNAPSHOT)</a>
+<ul class="sectlevel3">
+<li><a href="#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent">6.4.1. <code>AbstractLifecycleEvent</code></a></li>
+<li><a href="#_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent">6.4.2. <code>ObjectCreatedEvent</code></a></li>
+<li><a href="#_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent">6.4.3. <code>ObjectLoadedEvent</code></a></li>
+<li><a href="#_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent">6.4.4. <code>ObjectPersistedEvent</code></a></li>
+<li><a href="#_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent">6.4.5. <code>ObjectPersistingEvent</code></a></li>
+<li><a href="#_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent">6.4.6. <code>ObjectRemovingEvent</code></a></li>
+<li><a href="#_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent">6.4.7. <code>ObjectUpdatedEvent</code></a></li>
+<li><a href="#_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent">6.4.8. <code>ObjectUpdatingEvent</code></a></li>
 </ul>
 </li>
-<li><a href="#_rg_classes_value-types">6.3. Value Types</a>
+<li><a href="#_rg_classes_value-types">6.5. Value Types</a>
 <ul class="sectlevel3">
-<li><a href="#_rg_classes_value-types_manpage-Blob">6.3.1. <code>Blob</code></a></li>
-<li><a href="#_rg_classes_value-types_manpage-Clob">6.3.2. <code>Clob</code></a></li>
-<li><a href="#_rg_classes_value-types_manpage-Color">6.3.3. <code>Color</code></a></li>
-<li><a href="#_rg_classes_value-types_manpage-Money">6.3.4. <code>Money</code></a></li>
-<li><a href="#_rg_classes_value-types_manpage-Password">6.3.5. <code>Password</code></a></li>
+<li><a href="#_rg_classes_value-types_manpage-Blob">6.5.1. <code>Blob</code></a></li>
+<li><a href="#_rg_classes_value-types_manpage-Clob">6.5.2. <code>Clob</code></a></li>
+<li><a href="#_rg_classes_value-types_manpage-Color">6.5.3. <code>Color</code></a></li>
+<li><a href="#_rg_classes_value-types_manpage-Money">6.5.4. <code>Money</code></a></li>
+<li><a href="#_rg_classes_value-types_manpage-Password">6.5.5. <code>Password</code></a></li>
 </ul>
 </li>
-<li><a href="#_rg_classes_utility">6.4. Applib Utility Classes</a>
+<li><a href="#_rg_classes_utility">6.6. Applib Utility Classes</a>
 <ul class="sectlevel3">
-<li><a href="#_rg_classes_utility_manpage-Enums">6.4.1. <code>Enums</code></a></li>
-<li><a href="#_rg_classes_utility_manpage-ObjectContracts">6.4.2. <code>ObjectContracts</code></a>
+<li><a href="#_rg_classes_utility_manpage-Enums">6.6.1. <code>Enums</code></a></li>
+<li><a href="#_rg_classes_utility_manpage-ObjectContracts">6.6.2. <code>ObjectContracts</code></a>
 <ul class="sectlevel4">
 <li><a href="#_the_issue_in_more_detail">The issue in more detail</a></li>
 </ul>
 </li>
-<li><a href="#_rg_classes_utility_manpage-Reasons">6.4.3. <code>Reasons</code></a></li>
-<li><a href="#_rg_classes_utility_manpage-TitleBuffer">6.4.4. <code>TitleBuffer</code></a></li>
+<li><a href="#_rg_classes_utility_manpage-Reasons">6.6.3. <code>Reasons</code></a></li>
+<li><a href="#_rg_classes_utility_manpage-TitleBuffer">6.6.4. <code>TitleBuffer</code></a></li>
 </ul>
 </li>
-<li><a href="#_rg_classes_spec">6.5. Specification pattern</a>
+<li><a href="#_rg_classes_spec">6.7. Specification pattern</a>
 <ul class="sectlevel3">
-<li><a href="#__code_specification_code">6.5.1. <code>Specification</code></a></li>
-<li><a href="#__code_specification2_code">6.5.2. <code>Specification2</code></a></li>
-<li><a href="#_adapter_classes">6.5.3. Adapter classes</a></li>
-<li><a href="#_combining_specifications">6.5.4. Combining specifications</a></li>
+<li><a href="#__code_specification_code">6.7.1. <code>Specification</code></a></li>
+<li><a href="#__code_specification2_code">6.7.2. <code>Specification2</code></a></li>
+<li><a href="#_adapter_classes">6.7.3. Adapter classes</a></li>
+<li><a href="#_combining_specifications">6.7.4. Combining specifications</a></li>
 </ul>
 </li>
-<li><a href="#_rg_classes_i18n">6.6. i18n support</a>
+<li><a href="#_rg_classes_i18n">6.8. i18n support</a>
 <ul class="sectlevel3">
-<li><a href="#_rg_classes_i18n_manpage-TranslatableString">6.6.1. <code>TranslatableString</code></a></li>
+<li><a href="#_rg_classes_i18n_manpage-TranslatableString">6.8.1. <code>TranslatableString</code></a></li>
 </ul>
 </li>
-<li><a href="#_rg_classes_contributee">6.7. Contributee</a>
+<li><a href="#_rg_classes_contributee">6.9. Contributee</a>
 <ul class="sectlevel3">
-<li><a href="#_rg_classes_mixins_manpage-HasTransactionId">6.7.1. <code>HasTransactionId</code></a></li>
-<li><a href="#_rg_classes_mixins_manpage-HasUserName">6.7.2. <code>HasUsername</code></a></li>
+<li><a href="#_rg_classes_mixins_manpage-HasTransactionId">6.9.1. <code>HasTransactionId</code></a></li>
+<li><a href="#_rg_classes_mixins_manpage-HasUserName">6.9.2. <code>HasUsername</code></a></li>
 </ul>
 </li>
-<li><a href="#_rg_classes_roles">6.8. Roles</a>
+<li><a href="#_rg_classes_roles">6.10. Roles</a>
 <ul class="sectlevel3">
-<li><a href="#_rg_classes_roles_manpage-HoldsUpdatedAt">6.8.1. <code>HoldsUpdatedAt</code></a>
+<li><a href="#_rg_classes_roles_manpage-HoldsUpdatedAt">6.10.1. <code>HoldsUpdatedAt</code></a>
 <ul class="sectlevel4">
 <li><a href="#_alternative_approaches">Alternative approaches</a></li>
 </ul>
 </li>
-<li><a href="#_rg_classes_roles_manpage-HoldsUpdatedBy">6.8.2. <code>HoldsUpdatedBy</code></a></li>
-<li><a href="#_rg_classes_roles_manpage-Timestampable">6.8.3. <code>Timestampable</code></a>
+<li><a href="#_rg_classes_roles_manpage-HoldsUpdatedBy">6.10.2. <code>HoldsUpdatedBy</code></a></li>
+<li><a href="#_rg_classes_roles_manpage-Timestampable">6.10.3. <code>Timestampable</code></a>
 <ul class="sectlevel4">
 <li><a href="#_alternatives_4">Alternatives</a></li>
 </ul>


[2/2] isis-site git commit: ISIS-830: docs for the new lifecycle events

Posted by da...@apache.org.
ISIS-830: docs for the new lifecycle events


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

Branch: refs/heads/asf-site
Commit: aaf2db1d2ad8f4eb093f09271db4283ba6614355
Parents: 0e3bd52
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Oct 24 15:02:34 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Oct 24 15:02:34 2015 +0100

----------------------------------------------------------------------
 content/guides/cg.html                          |  130 ++-
 .../010-build-automatically.png                 |  Bin 0 -> 50767 bytes
 .../020-annotation-processor.png                |  Bin 0 -> 57338 bytes
 .../010-maven-installation.png                  |  Bin 43353 -> 0 bytes
 .../020-maven-configuration.png                 |  Bin 53554 -> 0 bytes
 .../030-build-automatically.png                 |  Bin 50767 -> 0 bytes
 .../040-other-settings/040-auto-import.png      |  Bin 31963 -> 0 bytes
 .../010-maven-installation.png                  |  Bin 0 -> 43353 bytes
 .../020-maven-configuration.png                 |  Bin 0 -> 53554 bytes
 .../044-other-settings-misc/010-auto-import.png |  Bin 0 -> 31963 bytes
 .../010-duplicate-classes.png                   |  Bin 0 -> 115681 bytes
 content/guides/rg.html                          | 1001 ++++++++++++++----
 12 files changed, 856 insertions(+), 275 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/cg.html
----------------------------------------------------------------------
diff --git a/content/guides/cg.html b/content/guides/cg.html
index dacbd81..78aa93b 100644
--- a/content/guides/cg.html
+++ b/content/guides/cg.html
@@ -710,45 +710,70 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 </div>
 </div>
 <div class="sect4">
-<h5 id="_other_settings">Other Settings</h5>
+<h5 id="_cg_ide_intellij_other-settings-compiler">Other Settings (Compiler)</h5>
 <div class="paragraph">
-<p>There are also some other miscellaneous settings that we recommend that you adjust (though these are not critical).</p>
+<p>There are also some other settings that influence the compiler.  We highly recommend you set these.</p>
 </div>
 <div class="paragraph">
-<p>First, specify an up-to-date Maven installation, using <code>File &gt; Settings</code> (or <code>IntelliJ &gt; Preferences</code> if on MacOS):</p>
+<p>On the <strong>Compiler</strong> Settings page, ensure that <code>build automatically</code> is enabled (and optionally <code>compile independent modules in parallel</code>):</p>
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png" alt="010 maven installation" width="600px">
+<img src="images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png" alt="010 build automatically" width="600px">
 </div>
-<div class="title">Figure 16. IntelliJ Other Settings - Maven Installation</div>
+<div class="title">Figure 16. IntelliJ Compiler Settings</div>
 </div>
 <div class="paragraph">
-<p>Still on the Maven settings page, configure as follows:</p>
+<p>On the <strong>Annotation Processors</strong> page, enable and adjust:</p>
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png" alt="020 maven configuration" width="600px">
+<img src="images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png" alt="020 annotation processor" width="600px">
+</div>
+<div class="title">Figure 17. IntelliJ Annotation Processor Settings</div>
+</div>
+<div class="paragraph">
+<p>This setting enables the generation of the <code>Q*</code> classes for DataNucleus type-safe queries, as well as being required
+for frameworks such as <a href="#_cg_ide_project-lombok">Project Lombok</a>.</p>
 </div>
-<div class="title">Figure 17. IntelliJ Other Settings - Maven Configuration</div>
 </div>
+<div class="sect4">
+<h5 id="_cg_ide_intellij_other-settings-maven">Other Settings (Maven)</h5>
 <div class="paragraph">
-<p>On the compiler settings page, ensure that <code>build automatically</code> is enabled (and optionally <code>compile independent modules in parallel</code>):</p>
+<p>There are also some other settings for Maven that we recommend you adjust (though these are less critical):</p>
+</div>
+<div class="paragraph">
+<p>First, specify an up-to-date Maven installation, using <code>File &gt; Settings</code> (or <code>IntelliJ &gt; Preferences</code> if on MacOS):</p>
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png" alt="030 build automatically" width="600px">
+<img src="images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png" alt="010 maven installation" width="600px">
 </div>
-<div class="title">Figure 18. IntelliJ Other Settings - Compiler Settings</div>
+<div class="title">Figure 18. IntelliJ Maven Settings - Installation</div>
 </div>
 <div class="paragraph">
-<p>On the auto import page, check the <code>optimize imports on the fly</code> and <code>add unambiguous imports on the fly</code></p>
+<p>Still on the Maven settings page, configure as follows:</p>
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png" alt="040 auto import" width="600px">
+<img src="images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png" alt="020 maven configuration" width="600px">
 </div>
-<div class="title">Figure 19. IntelliJ Other Settings - Auto Import</div>
+<div class="title">Figure 19. IntelliJ Maven Settings - Configuration</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_other_settings_misc">Other Settings (Misc)</h5>
+<div class="paragraph">
+<p>These settings are optional but also recommended.</p>
+</div>
+<div class="paragraph">
+<p>On the <strong>auto import</strong> page, check the <code>optimize imports on the fly</code> and <code>add unambiguous imports on the fly</code></p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png" alt="010 auto import" width="600px">
+</div>
+<div class="title">Figure 20. IntelliJ Maven Settings - Auto Import</div>
 </div>
 </div>
 </div>
@@ -764,7 +789,7 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/010-maven-modules-view.png" alt="010 maven modules view" width="730px">
 </div>
-<div class="title">Figure 20. IntelliJ Maven Module Management - Importing Maven modules</div>
+<div class="title">Figure 21. IntelliJ Maven Module Management - Importing Maven modules</div>
 </div>
 <div class="paragraph">
 <p>We can then import another module (from some other directory).  For example, here we are importing the Isis Addons' todoapp example:</p>
@@ -773,7 +798,7 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/020-adding-another-module.png" alt="020 adding another module" width="400px">
 </div>
-<div class="title">Figure 21. IntelliJ Maven Module Management - Importing another Module</div>
+<div class="title">Figure 22. IntelliJ Maven Module Management - Importing another Module</div>
 </div>
 <div class="paragraph">
 <p>You should then see the new Maven module loaded in the <em>Projects</em> window and also the <em>Maven Projects</em> window:</p>
@@ -782,7 +807,7 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/030-other-module-added.png" alt="030 other module added" width="730px">
 </div>
-<div class="title">Figure 22. IntelliJ Maven Module Management -</div>
+<div class="title">Figure 23. IntelliJ Maven Module Management -</div>
 </div>
 <div class="paragraph">
 <p>If any dependencies are already loaded in the project, then IntelliJ will automatically update the CLASSPATH to resolve to locally held modules (rather from <code>.m2/repository</code> folder).  So, for example (assuming that the <code>&lt;version&gt;</code> is correct, of course), the Isis todoapp will have local dependencies on the Apache Isis core.</p>
@@ -797,7 +822,7 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/040-ignoring-modules.png" alt="040 ignoring modules" width="730px">
 </div>
-<div class="title">Figure 23. IntelliJ Maven Module Management - Ignoring Modules</div>
+<div class="title">Figure 24. IntelliJ Maven Module Management - Ignoring Modules</div>
 </div>
 <div class="paragraph">
 <p>Confirm that it&#8217;s ok to ignore these modules:</p>
@@ -806,7 +831,7 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/050-ignoring-modules-2.png" alt="050 ignoring modules 2" width="300px">
 </div>
-<div class="title">Figure 24. IntelliJ Maven Module Management - Ignoring Modules (ctd)</div>
+<div class="title">Figure 25. IntelliJ Maven Module Management - Ignoring Modules (ctd)</div>
 </div>
 <div class="paragraph">
 <p>All being well you should see that the <em>Projects</em> window now only contains the code you are working on.  Its classpath dependencies will be adjusted (eg to resolve to Apache Isis core from <code>.m2/repository</code>):</p>
@@ -815,7 +840,7 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/060-ignored-modules.png" alt="060 ignored modules" width="730px">
 </div>
-<div class="title">Figure 25. IntelliJ Maven Module Management - Updated Projects Window</div>
+<div class="title">Figure 26. IntelliJ Maven Module Management - Updated Projects Window</div>
 </div>
 </div>
 <div class="sect3">
@@ -835,7 +860,7 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/110-running-the-app/010-run-configuration.png" alt="010 run configuration" width="600px">
 </div>
-<div class="title">Figure 26. IntelliJ Running the App - Run Configuration</div>
+<div class="title">Figure 27. IntelliJ Running the App - Run Configuration</div>
 </div>
 <div class="paragraph">
 <p>We specify the <code>Main class</code> to be <code>org.apache.isis.WebServer</code>; this is a wrapper around Jetty.  It&#8217;s possible to pass program arguments to this (eg to automatically install fixtures), but for now leave this blank.</p>
@@ -850,7 +875,7 @@ at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/110-running-the-app/020-datanucleus-enhancer-goal.png" alt="020 datanucleus enhancer goal" width="400px">
 </div>
-<div class="title">Figure 27. IntelliJ Running the App - Datanucleus Enhancer Goal</div>
+<div class="title">Figure 28. IntelliJ Running the App - Datanucleus Enhancer Goal</div>
 </div>
 <div class="paragraph">
 <p>The <code>-o</code> flag in the goal means run off-line; this will run faster.</p>
@@ -880,7 +905,7 @@ if you forget to set up the enhancer goal, or don&#8217;t run it on the correct
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/110-running-the-app/030-running-unit-tests.png" alt="030 running unit tests" width="600px">
 </div>
-<div class="title">Figure 28. IntelliJ Running the App - Unit Tests Run Configuration</div>
+<div class="title">Figure 29. IntelliJ Running the App - Unit Tests Run Configuration</div>
 </div>
 <div class="paragraph">
 <p>As a side-effect, this will create a run configuration, very similar to the one we manually created for the main app:</p>
@@ -889,7 +914,7 @@ if you forget to set up the enhancer goal, or don&#8217;t run it on the correct
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/110-running-the-app/040-running-unit-tests-run-configuration.png" alt="040 running unit tests run configuration" width="600px">
 </div>
-<div class="title">Figure 29. IntelliJ Running the App - Unit Tests Run Configuration</div>
+<div class="title">Figure 30. IntelliJ Running the App - Unit Tests Run Configuration</div>
 </div>
 <div class="paragraph">
 <p>Thereafter, you should run units by selecting this configuration (if you use the right click approach you&#8217;ll end up with lots of run configurations, all similar).</p>
@@ -907,7 +932,7 @@ if you forget to set up the enhancer goal, or don&#8217;t run it on the correct
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/110-running-the-app/050-running-integration-tests-run-configuration.png" alt="050 running integration tests run configuration" width="600px">
 </div>
-<div class="title">Figure 30. IntelliJ Running the App - Integration Tests Run Configuration</div>
+<div class="title">Figure 31. IntelliJ Running the App - Integration Tests Run Configuration</div>
 </div>
 </div>
 </div>
@@ -1142,7 +1167,7 @@ if you forget to set up the enhancer goal, or don&#8217;t run it on the correct
 <div class="content">
 <img src="images/appendices/dev-env/intellij-idea/050-some-plugins/020-some-plugins-confirmation.png" alt="020 some plugins confirmation" width="600px">
 </div>
-<div class="title">Figure 31. IntelliJ Plugins</div>
+<div class="title">Figure 32. IntelliJ Plugins</div>
 </div>
 <div class="sect5">
 <h6 id="_maven_helper_plugin">Maven Helper Plugin</h6>
@@ -1202,6 +1227,19 @@ if you forget to set up the enhancer goal, or don&#8217;t run it on the correct
 <div class="paragraph">
 <p>One thing worth knowing; IntelliJ actively scans the filesystem all the time.  It&#8217;s therefore (almost always) fine to build the app from the Maven command line; IntelliJ will detect the changes and keep in sync.  If you want to force that, use <code>File &gt; Synchronize</code>, <code>ctrl-alt-Y</code>.</p>
 </div>
+<div class="paragraph">
+<p>If you hit an error of "duplicate classes":</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png"><img src="images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png" alt="010 duplicate classes" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>then make sure you have correctly configured the <a href="#_cg_ide_intellij_other-settings-compiler">annotation processor</a>
+settings.  Pay attention in particular to the "Production sources directory" and "Test sources directory", that these
+are set up correctly.</p>
+</div>
 </div>
 </div>
 <div class="sect3">
@@ -1225,32 +1263,22 @@ if you forget to set up the enhancer goal, or don&#8217;t run it on the correct
 </div>
 <div class="sect4">
 <h5 id="_setting_up_dynamic_reloading">Setting up Dynamic Reloading</h5>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-TODO - see <a href="http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/">IntelliJ blog</a>.
-</td>
-</tr>
-</table>
+<div class="paragraph">
+<p>See the <a href="http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/">IntelliJ blog</a> for setting up DCEVM.</p>
+</div>
+<div class="paragraph">
+<p>This is supported for Eclipse, too.</p>
 </div>
 </div>
 <div class="sect4">
 <h5 id="_setting_up_jrebel">Setting up JRebel</h5>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-TODO
-</td>
-</tr>
-</table>
+<div class="paragraph">
+<p>See the repo for the (non-ASF) <a href="https://github.com/isisaddons/isis-jrebel-plugin">Isis JRebel</a> plugin.  With some
+modification, this should work for IntelliJ too.</p>
+</div>
+<div class="paragraph">
+<p>Note that JRebel is a commercial product, requiring a license.  At the time of writing there is also currently a
+non-commercial free license (though note this comes with some usage conditions).</p>
 </div>
 </div>
 </div>
@@ -1468,7 +1496,7 @@ your code.</p>
 </div>
 <div class="paragraph">
 <p>Under the covers it is implemented as an annotation processor; it basically hooks into the Java compiler
-so that it can emit additional bytecode (eg for the getter and setter).</p>
+so that it can emit additional bytecode (eg for the getter and setter).  See <a href="#_cg_ide_intellij_other-settings-compiler">here</a> for details of setting up in IntelliJ (Eclipse has very similar support).</p>
 </div>
 <div class="paragraph">
 <p>(As of <code>1.10.0-SNAPSHOT</code>), Apache Isis supports <a href="https://projectlombok.org/">Project Lombok</a>, in that the annotations that would normally be placed on the getter (namely <a href="rg.html#_rg_annotations_manpage-Property"><code>Property</code></a>, <a href="rg.html#_rg_annotations_manpage-PropertyLayout"><code>@PropertyLayout</code></a>, <a href="rg.html#_rg_annotations_manpage-Collection"><code>@Collection</code></a>, <a href="rg.html#_rg_annotations_manpage-CollectionLayout"><code>@CollectionLayout</code></a> and <a href="rg.html#_rg_annotations_manpage-MemberOrder"><code>@MemberOrder</code></a>) can be placed on the field instead.</p>
@@ -7504,7 +7532,9 @@ xxx<br>
 <li><a href="#_download_and_install">Download and Install</a></li>
 <li><a href="#_new_project">New Project</a></li>
 <li><a href="#_import_settings">Import Settings</a></li>
-<li><a href="#_other_settings">Other Settings</a></li>
+<li><a href="#_cg_ide_intellij_other-settings-compiler">Other Settings (Compiler)</a></li>
+<li><a href="#_cg_ide_intellij_other-settings-maven">Other Settings (Maven)</a></li>
+<li><a href="#_other_settings_misc">Other Settings (Misc)</a></li>
 </ul>
 </li>
 <li><a href="#_importing_maven_modules">2.1.2. Importing Maven Modules</a></li>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png b/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png
new file mode 100644
index 0000000..b383b3c
Binary files /dev/null and b/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png b/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png
new file mode 100644
index 0000000..96f4199
Binary files /dev/null and b/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png b/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png
deleted file mode 100644
index 9fef693..0000000
Binary files a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png b/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png
deleted file mode 100644
index 945968d..0000000
Binary files a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png b/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png
deleted file mode 100644
index b383b3c..0000000
Binary files a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png b/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png
deleted file mode 100644
index 293d2c3..0000000
Binary files a/content/guides/images/appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png b/content/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png
new file mode 100644
index 0000000..9fef693
Binary files /dev/null and b/content/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png b/content/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png
new file mode 100644
index 0000000..945968d
Binary files /dev/null and b/content/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png b/content/guides/images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png
new file mode 100644
index 0000000..293d2c3
Binary files /dev/null and b/content/guides/images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png differ

http://git-wip-us.apache.org/repos/asf/isis-site/blob/aaf2db1d/content/guides/images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png
----------------------------------------------------------------------
diff --git a/content/guides/images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png b/content/guides/images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png
new file mode 100644
index 0000000..1d6d6c3
Binary files /dev/null and b/content/guides/images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png differ