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:33 UTC

[1/3] isis git commit: ISIS-1195: updating cg guide with details on setting up annotation processor correctly

Repository: isis
Updated Branches:
  refs/heads/master b1616e43e -> 1e10ba74a


ISIS-1195: updating cg guide with details on setting up annotation processor correctly


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

Branch: refs/heads/master
Commit: 9ac0ffe223d757a96f0e0c6c6f6092f21988de52
Parents: b1616e4
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Oct 24 12:45:23 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Oct 24 12:45:23 2015 +0100

----------------------------------------------------------------------
 .../main/asciidoc/guides/_cg_ide_intellij.adoc  |  60 ++++++++++++++-----
 .../asciidoc/guides/_cg_ide_project-lombok.adoc |   2 +-
 .../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
 12 files changed, 47 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
index f357820..fbc3f97 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
@@ -116,31 +116,50 @@ And then restart:
 image::{_imagesdir}appendices/dev-env/intellij-idea/030-import-settings/030-restart.png[width="200px"]
 
 
+[[_cg_ide_intellij_other-settings-compiler]]
+=== Other Settings (Compiler)
 
-=== Other Settings
+There are also some other settings that influence the compiler.  We highly recommend you set these.
 
-There are also some other miscellaneous settings that we recommend that you adjust (though these are not critical).
+On the *Compiler* Settings page, ensure that `build automatically` is enabled (and optionally `compile independent modules in parallel`):
+
+.IntelliJ Compiler Settings
+image::{_imagesdir}appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png[width="600px"]
+
+
+On the *Annotation Processors* page, enable and adjust:
+
+.IntelliJ Annotation Processor Settings
+image::{_imagesdir}appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png[width="600px"]
+
+This setting enables the generation of the `Q*` classes for DataNucleus type-safe queries, as well as being required
+for frameworks such as xref:_cg_ide_project-lombok[Project Lombok].
+
+
+[[_cg_ide_intellij_other-settings-maven]]
+=== Other Settings (Maven)
+
+There are also some other settings for Maven that we recommend you adjust (though these are less critical):
 
 First, specify an up-to-date Maven installation, using `File > Settings` (or `IntelliJ > Preferences` if on MacOS):
 
-.IntelliJ Other Settings - Maven Installation
-image::{_imagesdir}appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png[width="600px"]
+.IntelliJ Maven Settings - Installation
+image::{_imagesdir}appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png[width="600px"]
 
 Still on the Maven settings page, configure as follows:
 
-.IntelliJ Other Settings - Maven Configuration
-image::{_imagesdir}appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png[width="600px"]
+.IntelliJ Maven Settings - Configuration
+image::{_imagesdir}appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png[width="600px"]
 
-On the compiler settings page, ensure that `build automatically` is enabled (and optionally `compile independent modules in parallel`):
 
-.IntelliJ Other Settings - Compiler Settings
-image::{_imagesdir}appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png[width="600px"]
+=== Other Settings (Misc)
 
-On the auto import page, check the `optimize imports on the fly` and `add unambiguous imports on the fly`
+These settings are optional but also recommended.
 
-.IntelliJ Other Settings - Auto Import
-image::{_imagesdir}appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png[width="600px"]
+On the *auto import* page, check the `optimize imports on the fly` and `add unambiguous imports on the fly`
 
+.IntelliJ Maven Settings - Auto Import
+image::{_imagesdir}appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png[width="600px"]
 
 
 
@@ -381,6 +400,13 @@ To fix the issue, try:
 
 One thing worth knowing; IntelliJ actively scans the filesystem all the time.  It'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 `File > Synchronize`, `ctrl-alt-Y`.
 
+If you hit an error of "duplicate classes":
+
+image::{_imagesdir}appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png[width="600px",link="{_imagesdir}appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png"]
+
+then make sure you have correctly configured the xref:_cg_ide_intellij_other-settings-compiler[annotation processor]
+settings.  Pay attention in particular to the "Production sources directory" and "Test sources directory", that these
+are set up correctly.
 
 
 
@@ -401,9 +427,15 @@ In this section are a couple of options that will reduce the length of the chang
 
 === Setting up Dynamic Reloading
 
-NOTE: TODO - see link:http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/[IntelliJ blog].
+See the link:http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/[IntelliJ blog] for setting up DCEVM.
+
+This is supported for Eclipse, too.
 
 
 === Setting up JRebel
 
-NOTE: TODO
+See the repo for the (non-ASF) link:https://github.com/isisaddons/isis-jrebel-plugin[Isis JRebel] plugin.  With some
+modification, this should work for IntelliJ too.
+
+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).

http://git-wip-us.apache.org/repos/asf/isis/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/_cg_ide_project-lombok.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_project-lombok.adoc b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_project-lombok.adoc
index a933c98..26b6991 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_project-lombok.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_project-lombok.adoc
@@ -31,7 +31,7 @@ private String name;
 ----
 
 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).
+so that it can emit additional bytecode (eg for the getter and setter).  See xref:_cg_ide_intellij_other-settings-compiler[here] for details of setting up in IntelliJ (Eclipse has very similar support).
 
 (As of `1.10.0-SNAPSHOT`), Apache Isis supports link:https://projectlombok.org/[Project Lombok], in that the annotations that would normally be placed on the getter (namely xref:rg.adoc#_rg_annotations_manpage-Property[`Property`], xref:rg.adoc#_rg_annotations_manpage-PropertyLayout[`@PropertyLayout`], xref:rg.adoc#_rg_annotations_manpage-Collection[`@Collection`], xref:rg.adoc#_rg_annotations_manpage-CollectionLayout[`@CollectionLayout`] and xref:rg.adoc#_rg_annotations_manpage-MemberOrder[`@MemberOrder`]) can be placed on the field instead.
 

http://git-wip-us.apache.org/repos/asf/isis/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png b/adocs/documentation/src/main/asciidoc/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/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png b/adocs/documentation/src/main/asciidoc/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/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png b/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/010-maven-installation.png
deleted file mode 100644
index 9fef693..0000000
Binary files a/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png b/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/020-maven-configuration.png
deleted file mode 100644
index 945968d..0000000
Binary files a/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png b/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/030-build-automatically.png
deleted file mode 100644
index b383b3c..0000000
Binary files a/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png b/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/040-other-settings/040-auto-import.png
deleted file mode 100644
index 293d2c3..0000000
Binary files a/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png b/adocs/documentation/src/main/asciidoc/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/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png b/adocs/documentation/src/main/asciidoc/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/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png b/adocs/documentation/src/main/asciidoc/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/adocs/documentation/src/main/asciidoc/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/blob/9ac0ffe2/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png b/adocs/documentation/src/main/asciidoc/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/adocs/documentation/src/main/asciidoc/guides/images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png differ


[3/3] isis git commit: ISIS-830: suppress the postEvent for Command object (special case, otherwise catch-22 situation).

Posted by da...@apache.org.
ISIS-830: suppress the postEvent for Command object (special case, otherwise catch-22 situation).


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

Branch: refs/heads/master
Commit: 1e10ba74a5498d768bc915cb564f7feefa6a21ed
Parents: c22159f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Oct 24 14:56:54 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Oct 24 14:56:54 2015 +0100

----------------------------------------------------------------------
 .../specloader/ServiceInitializer.java          | 13 ++++++---
 .../system/persistence/PersistenceSession.java  | 28 +++++++++++++++++++-
 .../transaction/IsisTransactionManager.java     |  6 +++--
 .../jdo/datanucleus/JDOStateManagerForIsis.java |  2 +-
 .../service/eventbus/EventBusServiceJdo.java    |  4 +++
 5 files changed, 45 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/1e10ba74/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
index f4d32bc..f3ab09e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
@@ -106,7 +106,10 @@ public class ServiceInitializer {
             final Object service = entry.getKey();
             final Method method = entry.getValue();
 
-            LOG.info("... calling @PostConstruct method: " + service.getClass().getName() + ": " + method.getName());
+            if(LOG.isDebugEnabled()) {
+                LOG.debug(
+                        "... calling @PostConstruct method: " + service.getClass().getName() + ": " + method.getName());
+            }
             
             final int numParams = method.getParameterTypes().length;
             
@@ -114,7 +117,7 @@ public class ServiceInitializer {
             if(numParams == 0) {
                 MethodExtensions.invoke(method, service);
             } else {
-                MethodExtensions.invoke(method, service, new Object[]{props});
+                MethodExtensions.invoke(method, service, new Object[] { props });
             }
         }
     }
@@ -124,8 +127,10 @@ public class ServiceInitializer {
         for (final Map.Entry<Object, Method> entry : preDestroyMethodsByService.entrySet()) {
             final Object service = entry.getKey();
             final Method method = entry.getValue();
-            
-            LOG.info("... calling @PreDestroy method: " + service.getClass().getName() + ": " + method.getName());
+
+            if(LOG.isDebugEnabled()) {
+                LOG.debug("... calling @PreDestroy method: " + service.getClass().getName() + ": " + method.getName());
+            }
             
             try {
                 MethodExtensions.invoke(method, service);

http://git-wip-us.apache.org/repos/asf/isis/blob/1e10ba74/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 3dfcc29..44aa5e8 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -41,6 +41,7 @@ import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.eventbus.AbstractLifecycleEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.eventbus.ObjectCreatedEvent;
@@ -632,7 +633,32 @@ public class PersistenceSession implements
         servicesInjector.injectServicesInto(pojo);
 
         CallbackFacet.Util.callCallback(adapter, CreatedCallbackFacet.class);
-        postEvent(new ObjectCreatedEvent.Default(), pojo);
+
+        if (Command.class.isAssignableFrom(pojo.getClass())) {
+
+            // special case... the command object is created while the transaction is being started and before
+            // the event bus service is initialized (nb: we initialize services *within* a transaction).  To resolve
+            // this catch-22 situation, we simply suppress the posting of this event for this domain class.
+
+            // this seems the least unpleasant of the various options available:
+            // * we could have put a check in the EventBusService to ignore the post if not yet initialized;
+            //   however this might hide other genuine errors
+            // * we could have used the thread-local in JdoStateManagerForIsis and the "skip(...)" hook in EventBusServiceJdo
+            //   to have this event be skipped; but that seems like co-opting some other design
+            // * we could have the transaction initialize the EventBusService as a "special case" before creating the Command;
+            //   but then do we worry about it being re-init'd later by the ServicesInitializer?
+
+            // so, doing it this way is this simplest, least obscure.
+
+            if(LOG.isDebugEnabled()) {
+                LOG.debug("Skipping postEvent for creation of Command pojo");
+            }
+
+
+        } else {
+            postEvent(new ObjectCreatedEvent.Default(), pojo);
+
+        }
 
         return adapter;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/1e10ba74/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
index 677393d..f7c1bf1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
@@ -273,9 +273,12 @@ public class IsisTransactionManager implements SessionScopedComponent {
         if (getTransaction() == null || getTransaction().getState().isComplete()) {
             noneInProgress = true;
 
-
             startRequestOnRequestScopedServices();
+
+            // note that at this point there may not be an EventBusService initialized.  The PersistenceSession has
+            // logic to suppress the posting of the ObjectCreatedEvent for the special case of Command objects.
             createCommandIfConfigured();
+
             initOtherApplibServicesIfConfigured();
             
             IsisTransaction isisTransaction = createTransaction();
@@ -293,7 +296,6 @@ public class IsisTransactionManager implements SessionScopedComponent {
         }
     }
 
-    
     private void initOtherApplibServicesIfConfigured() {
         
         final Bulk.InteractionContext bic = getServiceOrNull(Bulk.InteractionContext.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/1e10ba74/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java
index c001c98..32d0527 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java
@@ -23,10 +23,10 @@ import org.datanucleus.ExecutionContext;
 import org.datanucleus.cache.CachedPC;
 import org.datanucleus.enhancement.Persistable;
 import org.datanucleus.metadata.AbstractClassMetaData;
-import org.datanucleus.state.ObjectProvider;
 import org.datanucleus.state.ReferentialStateManagerImpl;
 import org.datanucleus.store.FieldValues;
 import org.datanucleus.store.fieldmanager.FieldManager;
+
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/1e10ba74/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
index 505fceb..3be6c12 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
@@ -17,6 +17,7 @@
 package org.apache.isis.objectstore.jdo.datanucleus.service.eventbus;
 
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault;
@@ -42,6 +43,9 @@ import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis.Hint;
 @DomainService(
         nature = NatureOfService.DOMAIN
 )
+@DomainServiceLayout(
+        menuOrder = "0" // initialize first, so available for any services that persist objects in their @PostConstruct
+)
 public class EventBusServiceJdo extends EventBusServiceDefault {
 
     /**


[2/3] isis git commit: ISIS-830: adding documentation

Posted by da...@apache.org.
ISIS-830: adding documentation


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

Branch: refs/heads/master
Commit: c22159fe55317aabbe07d7ac7bccc30b7fe582cb
Parents: 9ac0ffe
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Oct 24 13:59:16 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Oct 24 13:59:16 2015 +0100

----------------------------------------------------------------------
 .../src/main/asciidoc/guides/_rg_classes.adoc   |   2 +
 .../guides/_rg_classes_domainevent.adoc         |  76 +++++++++++
 ...domainevent_manpage-AbstractDomainEvent.adoc |  20 +++
 ...s_domainevent_manpage-ActionDomainEvent.adoc |  20 +++
 ...mainevent_manpage-CollectionDomainEvent.adoc |  21 +++
 ...domainevent_manpage-PropertyDomainEvent.adoc |  17 +++
 .../guides/_rg_classes_lifecycleevent.adoc      | 130 +++++++++++++++++++
 ...cleevent_manpage-AbstractLifecycleEvent.adoc |  27 ++++
 ...fecycleevent_manpage-ObjectCreatedEvent.adoc |  20 +++
 ...ifecycleevent_manpage-ObjectLoadedEvent.adoc |  17 +++
 ...cycleevent_manpage-ObjectPersistedEvent.adoc |  19 +++
 ...ycleevent_manpage-ObjectPersistingEvent.adoc |  21 +++
 ...ecycleevent_manpage-ObjectRemovingEvent.adoc |  20 +++
 ...fecycleevent_manpage-ObjectUpdatedEvent.adoc |  21 +++
 ...ecycleevent_manpage-ObjectUpdatingEvent.adoc |  22 ++++
 .../main/asciidoc/guides/_rg_classes_super.adoc |  49 ++-----
 ...asses_super_manpage-AbstractDomainEvent.adoc |  18 ---
 ...lasses_super_manpage-AbstractSubscriber.adoc |   8 ++
 ...classes_super_manpage-ActionDomainEvent.adoc |  20 ---
 ...ses_super_manpage-CollectionDomainEvent.adoc |  21 ---
 ...asses_super_manpage-PropertyDomainEvent.adoc |  17 ---
 .../asciidoc/guides/_rg_methods_lifecycle.adoc  |   7 +-
 .../_rg_methods_lifecycle_manpage-created.adoc  |   6 +
 .../_rg_methods_lifecycle_manpage-loaded.adoc   |   5 +
 ..._rg_methods_lifecycle_manpage-persisted.adoc |   4 +
 ...rg_methods_lifecycle_manpage-persisting.adoc |   4 +
 .../_rg_methods_lifecycle_manpage-removed.adoc  |   4 +
 .../_rg_methods_lifecycle_manpage-removing.adoc |   4 +
 .../_rg_methods_lifecycle_manpage-updated.adoc  |   4 +
 .../_rg_methods_lifecycle_manpage-updating.adoc |   5 +
 30 files changed, 512 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc
index 528a8a3..7155f67 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes.adoc
@@ -10,6 +10,8 @@ This chapter describes the usage of various classes and interfaces that are not
 
 include::_rg_classes_AppManifest-bootstrapping.adoc[leveloffset=+1]
 include::_rg_classes_super.adoc[leveloffset=+1]
+include::_rg_classes_domainevent.adoc[leveloffset=+1]
+include::_rg_classes_lifecycleevent.adoc[leveloffset=+1]
 include::_rg_classes_value-types.adoc[leveloffset=+1]
 include::_rg_classes_utility.adoc[leveloffset=+1]
 include::_rg_classes_spec.adoc[leveloffset=+1]

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent.adoc
new file mode 100644
index 0000000..9010e73
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent.adoc
@@ -0,0 +1,76 @@
+[[_rg_classes_domainevent]]
+= Domain Event Classes
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+This section catalogues the various domain event classes defined by Apache Isis.
+
+These events are broadcast on the xref:rg.adoc#_rg_services-api_manpage-EventBusService[`EventBusService`].  The domain
+events are broadcast as a result of being specified in the xref:rg.adoc#_rg_annotations_manpage-Action_domainEvent[`@Action#domainEvent()`],  xref:rg.adoc#_rg_annotations_manpage-Property_domainEvent[`@Property#domainEvent()`] or xref:rg.adoc#_rg_annotations_manpage-Collection_domainEvent[`@Collection#domainEvent()`] attributes.
+
+They are listed in the table below.
+
+.Domain Event Classes
+[cols="2,4a,1,1", options="header"]
+|===
+
+|API
+|Maven Module +
+Impl'n (g: a:)
+|Implementation
+|Notes
+
+
+|xref:rg.adoc#_rg_classes_domainevent_manpage-AbstractDomainEvent[`o.a.i.applib.` +
+`AbstractDomainEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class)
+|Superclass of the other domain events, listed below in this table.
+
+
+|xref:rg.adoc#_rg_classes_domainevent_manpage-ActionDomainEvent[`o.a.i.applib.` +
+`ActionDomainEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`ActionDomainEvent.Default` is the concrete implementation used if no `@Action#domainEvent` attribute is specified
+|Broadcast whenever there is an interaction (hide/disable/validate/pre-execute/post-execute) with an object's action.
+
+
+|xref:rg.adoc#_rg_classes_domainevent_manpage-CollectionDomainEvent[`o.a.i.applib.` +
+`CollectionDomainEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`CollectionDomainEvent.Default` is the concrete implementation used if no `@Collection#domainEvent` attribute
+is specified.
+|Broadcast whenever there is an interaction (hide/disable/validate/access) with an object's collection.
+
+
+|xref:rg.adoc#_rg_classes_domainevent_manpage-PropertyDomainEvent[`o.a.i.applib.` +
+`PropertyDomainEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`PropertyDomainEvent.Default` is the concrete implementation used if no `@Propert#domainEvent` attribute is specified
+|Broadcast whenever there is an interaction (hide/disable/validate/access) with an object's property.
+
+
+
+|===
+
+
+
+
+include::_rg_classes_domainevent_manpage-AbstractDomainEvent.adoc[leveloffset=+1]
+include::_rg_classes_domainevent_manpage-ActionDomainEvent.adoc[leveloffset=+1]
+include::_rg_classes_domainevent_manpage-CollectionDomainEvent.adoc[leveloffset=+1]
+include::_rg_classes_domainevent_manpage-PropertyDomainEvent.adoc[leveloffset=+1]
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-AbstractDomainEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-AbstractDomainEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-AbstractDomainEvent.adoc
new file mode 100644
index 0000000..ac5276f
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-AbstractDomainEvent.adoc
@@ -0,0 +1,20 @@
+[[_rg_classes_domainevent_manpage-AbstractDomainEvent]]
+= `AbstractDomainEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+This class is the superclass for all domain events that are raised by the framework when interacting with actions, properties or collections.
+
+Its immediate subclasses are:
+
+* xref:rg.adoc#_rg_classes_domainevent_manpage-ActionDomainEvent[`ActionDomainEvent`]
+
+* xref:rg.adoc#_rg_classes_domainevent_manpage-PropertyDomainEvent[`PropertyDomainEvent`]
+
+* xref:rg.adoc#_rg_classes_domainevent_manpage-CollectionDomainEvent[`CollectionDomainEvent`]
+
+This class defines the `Phase` enum that is common to all domain events (hide/disable/validate/pre-execute/post-execute), and provides methods such as `veto(...)` by which subscribers can influence the interaction (eg hide a collection, disable a property, validate action arguments).
+
+It class also provides `get(...)` and `put(...)` 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.

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-ActionDomainEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-ActionDomainEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-ActionDomainEvent.adoc
new file mode 100644
index 0000000..be71b6f
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-ActionDomainEvent.adoc
@@ -0,0 +1,20 @@
+[[_rg_classes_domainevent_manpage-ActionDomainEvent]]
+= `ActionDomainEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+Subclass of xref:rg.adoc#_rg_classes_domainevent_manpage-AbstractDomainEvent[`AbstractDomainEvent`] for actions.
+
+The class has a number of responsibilities (in addition to those it inherits):
+
+* capture the target object being interacted with
+
+* capture the arguments for each of the action's parameters
+
+* provide selected metadata about the action parameters from the metamodel (names, types)
+
+* link back to the xref:rg.adoc#_rg_services-api_manpage-CommandContext[`CommandContext`] service's `Command` object
+
+The class itself is instantiated automatically by the framework whenever interacting with a rendered object's action.

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-CollectionDomainEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-CollectionDomainEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-CollectionDomainEvent.adoc
new file mode 100644
index 0000000..030ba87
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-CollectionDomainEvent.adoc
@@ -0,0 +1,21 @@
+[[_rg_classes_domainevent_manpage-CollectionDomainEvent]]
+= `CollectionDomainEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+Subclass of xref:rg.adoc#_rg_classes_domainevent_manpage-AbstractDomainEvent[`AbstractDomainEvent`] for collections.
+
+The class has a couple of responsibilities (in addition to those it inherits):
+
+* capture the target object being interacted with
+
+* 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)
+
+* capture the object reference being added or removed
+
+
+The class itself is instantiated automatically by the framework whenever interacting with a rendered object's collection.
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-PropertyDomainEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-PropertyDomainEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-PropertyDomainEvent.adoc
new file mode 100644
index 0000000..a843152
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_domainevent_manpage-PropertyDomainEvent.adoc
@@ -0,0 +1,17 @@
+[[_rg_classes_domainevent_manpage-PropertyDomainEvent]]
+= `PropertyDomainEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+Subclass of xref:rg.adoc#_rg_classes_domainevent_manpage-AbstractDomainEvent[`AbstractDomainEvent`] for properties.
+
+The class has a couple of responsibilities (in addition to those it inherits):
+
+* capture the target object being interacted with
+
+* capture the old and new values of the property
+
+
+The class itself is instantiated automatically by the framework whenever interacting with a rendered object's property.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent.adoc
new file mode 100644
index 0000000..f51ea02
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent.adoc
@@ -0,0 +1,130 @@
+[[_rg_classes_lifecycleevent]]
+= Lifecycle Events (1.10.0-SNAPSHOT)
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+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.
+
+The lifecycle event classes are listed in the table below:
+
+
+.Lifecycle Event Classes
+[cols="2,4a,1,1", options="header"]
+|===
+
+|API
+|Maven Module +
+Impl'n (g: a:)
+|Implementation
+|Notes
+
+
+|xref:rg.adoc#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent[`o.a.i.applib.` +
+`AbstractLifecycleEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class)
+|Superclass of the other lifecycle events, listed below in this table.
+
+
+|xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectCreatedDomainEvent[`o.a.i.applib.` +
+`ObjectCreatedEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`ObjectCreatedEvent.Default` is the concrete implementation that is used.
+|Broadcast when an object is first instantiated
+using the xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-creation-api[`DomainObjectContainer`]'s
+`#newTransientInstance(...)` method.
+
+
+|xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectLoadedDomainEvent[`o.a.i.applib.` +
+`ObjectLoadedEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`ObjectLoadedEvent.Default` is the concrete implementation that is  used.
+|Broadcast when an object is retrieved from the database.
+
+
+|xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectPersistedDomainEvent[`o.a.i.applib.` +
+`ObjectPersistedEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`ObjectPersistedEvent.Default` is the concrete implementation that is used.
+|Broadcast when an object is first saved (inserted) into the database using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#persist(...)` method.
+
+
+|xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectPersistingDomainEvent[`o.a.i.applib.` +
+`ObjectPersistingEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`ObjectPersistingEvent.Default` is the concrete implementation that is used.
+|Broadcast when an object is about to be saved (inserted) into the database using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#persist(...)` method.
+
+
+|xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectRemovingDomainEvent[`o.a.i.applib.` +
+`ObjectRemovingEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`ObjectRemovingEvent.Default` is the concrete implementation that is used.
+|Broadcast when an object is about to be deleted from the database using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#remove(...)` method.
+
+
+|xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectUpdatedDomainEvent[`o.a.i.applib.` +
+`ObjectUpdatedEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`ObjectUpdatedEvent.Default` is the concrete implementation that is used.
+|Broadcast when an object has just been updated in the database.  This is done either explicitly when the current
+transaction is flushed using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#flush(...)` method, else is done implicitly when the transaction commits at the end of the user request.
+
+
+|xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectUpdatingDomainEvent[`o.a.i.applib.` +
+`ObjectUpdatingEvent`]
+|``o.a.i.core`` +
+``services.eventbus`` +
+``isis-core-applib``
+|(abstract class). +
+`ObjectUpdatingEvent.Default` is the concrete implementation that is used.
+|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
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#flush(...)` method, else is done implicitly when the transaction commits at the end of the user request.
+
+
+|===
+
+
+
+include::_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent.adoc[leveloffset=+1]
+include::_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent.adoc[leveloffset=+1]
+include::_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent.adoc[leveloffset=+1]
+include::_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent.adoc[leveloffset=+1]
+include::_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent.adoc[leveloffset=+1]
+include::_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent.adoc[leveloffset=+1]
+include::_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent.adoc[leveloffset=+1]
+include::_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent.adoc[leveloffset=+1]
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent.adoc
new file mode 100644
index 0000000..e7baf30
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent.adoc
@@ -0,0 +1,27 @@
+[[_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent]]
+= `AbstractLifecycleEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+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.
+
+Its immediate subclasses are:
+
+* xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent[`ObjectCreatedEvent`]
+
+* xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent[`ObjectLoadedEvent`]
+
+* xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent[`ObjectPersistedEvent`]
+
+* xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent[`ObjectPersistingEvent`]
+
+* xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent[`ObjectRemovingEvent`]
+
+* xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent[`ObjectUpdatedEvent`]
+
+* xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent[`ObjectUpdatingEvent`]
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent.adoc
new file mode 100644
index 0000000..5798ba0
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent.adoc
@@ -0,0 +1,20 @@
+[[_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent]]
+= `ObjectCreatedEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+
+Subclass of xref:rg.adoc#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast
+when an object is first instantiated using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-creation-api[`DomainObjectContainer`]'s
+`#newTransientInstance(...)` method.
+
+`ObjectCreatedEvent.Default` is the concrete implementation that is used.
+
+[NOTE]
+====
+In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
+====
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent.adoc
new file mode 100644
index 0000000..627308a
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent.adoc
@@ -0,0 +1,17 @@
+[[_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent]]
+= `ObjectLoadedEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+
+Subclass of xref:rg.adoc#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast
+when an object is retrieved from the database.
+
+`ObjectLoadedEvent.Default` is the concrete implementation that is used.
+
+[NOTE]
+====
+In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
+====

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent.adoc
new file mode 100644
index 0000000..4a1bd91
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent.adoc
@@ -0,0 +1,19 @@
+[[_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent]]
+= `ObjectPersistedEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+Subclass of xref:rg.adoc#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast
+when an object is first saved (inserted) into the database using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#persist(...)` method.
+
+
+`ObjectPersistedEvent.Default` is the concrete implementation that is used.
+
+[NOTE]
+====
+In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
+====

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent.adoc
new file mode 100644
index 0000000..1baf88e
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent.adoc
@@ -0,0 +1,21 @@
+[[_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent]]
+= `ObjectPersistingEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+Subclass of xref:rg.adoc#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast
+when an object is about to be saved (inserted) into the database using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#persist(...)` method.
+
+
+`ObjectPersistingEvent.Default` is the concrete implementation that is used.
+
+[NOTE]
+====
+In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
+====
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent.adoc
new file mode 100644
index 0000000..069f759
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent.adoc
@@ -0,0 +1,20 @@
+[[_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent]]
+= `ObjectRemovingEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+Subclass of xref:rg.adoc#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast
+when an object is about to be deleted from the database using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#remove(...)` method.
+
+
+`ObjectRemovingEvent.Default` is the concrete implementation that is used.
+
+[NOTE]
+====
+In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
+====
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent.adoc
new file mode 100644
index 0000000..fa244b7
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent.adoc
@@ -0,0 +1,21 @@
+[[_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent]]
+= `ObjectUpdatedEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+
+Subclass of xref:rg.adoc#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast
+when an object has just been updated in the database.  This is done either explicitly when the current
+transaction is flushed using the
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#flush(...)` method, else is done implicitly when the transaction commits at the end of the user request.
+
+`ObjectUpdatedEvent.Default` is the concrete implementation that is used.
+
+[NOTE]
+====
+In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
+====
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent.adoc
new file mode 100644
index 0000000..05fc948
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent.adoc
@@ -0,0 +1,22 @@
+[[_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent]]
+= `ObjectUpdatingEvent`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+
+Subclass of xref:rg.adoc#_rg_classes_lifecycleevent_manpage-AbstractLifecycleEvent[`AbstractLifecycleEvent`], 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
+xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
+`#flush(...)` method, else is done implicitly when the transaction commits at the end of the user request.
+
+
+`ObjectUpdatingEvent.Default` is the concrete implementation that is used.
+
+[NOTE]
+====
+In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
+====
+

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc
index 422c6e6..5714797 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super.adoc
@@ -5,7 +5,8 @@
 :_imagesdir: images/
 
 
-This section catalogues the various convenience superclasses defined by Apache Isis.  These are listed in the table below.
+This section catalogues the various convenience (non event) superclasses defined by Apache Isis.  These are listed in the table below.
+
 
 .Convenience Superclasses
 [cols="2,4a,1,1", options="header"]
@@ -26,15 +27,6 @@ Impl'n (g: a:)
 |
 
 
-|xref:rg.adoc#_rg_classes_super_manpage-AbstractDomainEvent[`o.a.i.applib.` +
-`AbstractDomainEvent`]
-|``o.a.i.core`` +
-``services.eventbus`` +
-``isis-core-applib``
-|(abstract class)
-|
-
-
 |xref:rg.adoc#_rg_classes_super_manpage-AbstractDomainObject[`o.a.i.applib.` +
 `AbstractDomainObject`]
 |``o.a.i.core`` +
@@ -59,27 +51,17 @@ Impl'n (g: a:)
 |
 
 
-|xref:rg.adoc#_rg_classes_super_manpage-AbstractViewModel[`o.a.i.applib.` +
-`AbstractViewModel`]
+|xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[`o.a.i.applib.` +
+`AbstractSubscriber`]
 |``o.a.i.core`` +
 ``isis-core-applib``
 |(abstract class)
 |
 
 
-|xref:rg.adoc#_rg_classes_super_manpage-ActionDomainEvent[`o.a.i.applib.` +
-`ActionDomainEvent`]
-|``o.a.i.core`` +
-``services.eventbus`` +
-``isis-core-applib``
-|(abstract class)
-|
-
-
-|xref:rg.adoc#_rg_classes_super_manpage-CollectionDomainEvent[`o.a.i.applib.` +
-`CollectionDomainEvent`]
+|xref:rg.adoc#_rg_classes_super_manpage-AbstractViewModel[`o.a.i.applib.` +
+`AbstractViewModel`]
 |``o.a.i.core`` +
-``services.eventbus`` +
 ``isis-core-applib``
 |(abstract class)
 |
@@ -99,36 +81,25 @@ Impl'n (g: a:)
 `FixtureScripts`]
 |``o.a.i.core`` +
 ``isis-core-applib``
-|(abstract class)
+|(abstract class). +
+`FixtureScriptsDefault` is a default implementation that is used when the alternative xref:rg.adoc#_rg_services-api_manpage-FixtureScriptsSpecificationProvider[`FixtureScriptsSpecificationProvider`] is provided
+  (and no other implementation of `FixtureScripts` was found).
 |depends on: +
 `ClassDiscoveryService`
 
 
-|xref:rg.adoc#_rg_classes_super_manpage-PropertyDomainEvent[`o.a.i.applib.` +
-`PropertyDomainEvent`]
-|``o.a.i.core`` +
-``services.eventbus`` +
-``isis-core-applib``
-|(abstract class)
-|
-
-
-
 |===
 
 
 
 
 include::_rg_classes_super_manpage-AbstractContainedObject.adoc[leveloffset=+1]
-include::_rg_classes_super_manpage-AbstractDomainEvent.adoc[leveloffset=+1]
 include::_rg_classes_super_manpage-AbstractDomainObject.adoc[leveloffset=+1]
 include::_rg_classes_super_manpage-AbstractFactoryAndRepository.adoc[leveloffset=+1]
 include::_rg_classes_super_manpage-AbstractService.adoc[leveloffset=+1]
+include::_rg_classes_super_manpage-AbstractSubscriber.adoc[leveloffset=+1]
 include::_rg_classes_super_manpage-AbstractViewModel.adoc[leveloffset=+1]
-include::_rg_classes_super_manpage-ActionDomainEvent.adoc[leveloffset=+1]
-include::_rg_classes_super_manpage-CollectionDomainEvent.adoc[leveloffset=+1]
 include::_rg_classes_super_manpage-FixtureScript.adoc[leveloffset=+1]
 include::_rg_classes_super_manpage-FixtureScripts.adoc[leveloffset=+1]
-include::_rg_classes_super_manpage-PropertyDomainEvent.adoc[leveloffset=+1]
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-AbstractDomainEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-AbstractDomainEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-AbstractDomainEvent.adoc
deleted file mode 100644
index cbdbcc1..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-AbstractDomainEvent.adoc
+++ /dev/null
@@ -1,18 +0,0 @@
-[[_rg_classes_super_manpage-AbstractDomainEvent]]
-= `AbstractDomainEvent`
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-:_basedir: ../
-:_imagesdir: images/
-
-
-This class is the superclass for all domain events that are raised by the framework when interacting with actions, properties or collections.
-
-Its immediate subclasses are:
-
-* xref:rg.adoc#_rg_classes_super_manpage-ActionDomainEvent[`ActionDomainEvent`]
-
-* xref:rg.adoc#_rg_classes_super_manpage-PropertyDomainEvent[`PropertyDomainEvent`]
-
-This class defines the `Phase` enum that is common to all domain events (hide/disable/validate/pre-execute/post-execute), and provides methods such as `veto(...)` by which subscribers can influence the interaction (eg hide a collection, disable a property, validate action arguments).
-
-It class also provides `get(...)` and `put(...)` 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.

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-AbstractSubscriber.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-AbstractSubscriber.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-AbstractSubscriber.adoc
new file mode 100644
index 0000000..b663f38
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-AbstractSubscriber.adoc
@@ -0,0 +1,8 @@
+[[_rg_classes_super_manpage-AbstractSubscriber]]
+= `AbstractSubscriber`
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+:_basedir: ../
+:_imagesdir: images/
+
+
+This is a convenience superclass for creating subscriber domain services on the xref:rg.adoc#_rg_services-api_manpage-EventBusService[`EventBusService`].  It uses xref:rg.adoc#_rg_annotations_manpage-PostConstruct[`@PostConstruct`] and xref:rg.adoc#_rg_annotations_manpage-PreDestroy[`@PreDestroy`] callbacks to automatically register itself with the `EventBusService`.

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-ActionDomainEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-ActionDomainEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-ActionDomainEvent.adoc
deleted file mode 100644
index d5ed13b..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-ActionDomainEvent.adoc
+++ /dev/null
@@ -1,20 +0,0 @@
-[[_rg_classes_super_manpage-ActionDomainEvent]]
-= `ActionDomainEvent`
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-:_basedir: ../
-:_imagesdir: images/
-
-
-Subclass of xref:rg.adoc#_rg_classes_super_manpage-AbstractDomainEvent[`AbstractDomainEvent`] for actions.
-
-The class has a number of responsibilities (in addition to those it inherits):
-
-* capture the target object being interacted with
-
-* capture the arguments for each of the action's parameters
-
-* provide selected metadata about the action parameters from the metamodel (names, types)
-
-* link back to the xref:rg.adoc#_rg_services-api_manpage-CommandContext[`CommandContext`] service's `Command` object
-
-The class itself is instantiated automatically by the framework whenever interacting with a rendered object's action.

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-CollectionDomainEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-CollectionDomainEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-CollectionDomainEvent.adoc
deleted file mode 100644
index f8953db..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-CollectionDomainEvent.adoc
+++ /dev/null
@@ -1,21 +0,0 @@
-[[_rg_classes_super_manpage-CollectionDomainEvent]]
-= `CollectionDomainEvent`
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-:_basedir: ../
-:_imagesdir: images/
-
-
-Subclass of xref:rg.adoc#_rg_classes_super_manpage-AbstractDomainEvent[`AbstractDomainEvent`] for collections.
-
-The class has a couple of responsibilities (in addition to those it inherits):
-
-* capture the target object being interacted with
-
-* 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)
-
-* capture the object reference being added or removed
-
-
-The class itself is instantiated automatically by the framework whenever interacting with a rendered object's collection.
-
-

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-PropertyDomainEvent.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-PropertyDomainEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-PropertyDomainEvent.adoc
deleted file mode 100644
index 64961c9..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_classes_super_manpage-PropertyDomainEvent.adoc
+++ /dev/null
@@ -1,17 +0,0 @@
-[[_rg_classes_super_manpage-PropertyDomainEvent]]
-= `PropertyDomainEvent`
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-:_basedir: ../
-:_imagesdir: images/
-
-
-Subclass of xref:rg.adoc#_rg_classes_super_manpage-AbstractDomainEvent[`AbstractDomainEvent`] for properties.
-
-The class has a couple of responsibilities (in addition to those it inherits):
-
-* capture the target object being interacted with
-
-* capture the old and new values of the property
-
-
-The class itself is instantiated automatically by the framework whenever interacting with a rendered object's property.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle.adoc
index b23ab6e..ca38de0 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle.adoc
@@ -11,9 +11,12 @@ The lifecycle callback methods notify a domain entity about its interaction with
 
 [WARNING]
 ====
-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.
+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:
 
-You may therefore want to consider using the JDO API directly; see xref:rg.adoc#_rg_methods_lifecycle_jdo-api[here] for further discussion.
+* 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 xref:rg.adoc#_rg_methods_lifecycle_jdo-api[here] for further discussion.
+
+* alternatively (1.10.0-SNAPSHOT), you can use a subscriber for the xref:rg.adoc#_rg_classes_lifecycleevent[lifecycle event]s fired in Isis.
 ====
 
 The lifecycle callback methods supported by Isis are:

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-created.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-created.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-created.adoc
index 89c4152..8f40cb4 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-created.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-created.adoc
@@ -8,4 +8,10 @@
 The `created()` lifecycle callback method is called when an object has just been created using xref:rg.adoc#_rg_services-api_manpage-DomainObjectContainer[`newTransientInstance()`]
 
 
+[TIP]
+====
+Alternatively, consider using a xref:rg.adoc#_rg_services-api_manpage-EventBusService[event bus] xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[subscriber] on the xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectCreatedEvent[`ObjectCreatedEvent`].
+====
+
+
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-loaded.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-loaded.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-loaded.adoc
index 9a5fa76..2e74e6a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-loaded.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-loaded.adoc
@@ -8,3 +8,8 @@
 
 The `loaded()` lifecycle callback method is called when a (persistent) object has just been loaded from the object store.
 
+
+[TIP]
+====
+Alternatively, consider using a xref:rg.adoc#_rg_services-api_manpage-EventBusService[event bus] xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[subscriber] on the xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectLoadedEvent[`ObjectLoadedEvent`].
+====

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisted.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisted.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisted.adoc
index 5f1e683..d3222b8 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisted.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisted.adoc
@@ -10,3 +10,7 @@ The `persisted()` lifecycle callback method is called when object has just been
 
 See also xref:rg.adoc#_rg_methods_lifecycle_manpage-persisting[`persisting()`].
 
+[TIP]
+====
+Alternatively, consider using a xref:rg.adoc#_rg_services-api_manpage-EventBusService[event bus] xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[subscriber] on the xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectPersistedEvent[`ObjectPersistedEvent`].
+====

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisting.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisting.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisting.adoc
index 96afbe8..ff64652 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisting.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-persisting.adoc
@@ -10,3 +10,7 @@ The `persisting()` lifecycle callback method is called when a (not-yet-persisten
 
 See also xref:rg.adoc#_rg_methods_lifecycle_manpage-persisted[`persisted()`].
 
+[TIP]
+====
+Alternatively, consider using a xref:rg.adoc#_rg_services-api_manpage-EventBusService[event bus] xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[subscriber] on the xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectPersistingEvent[`ObjectPersistingEvent`].
+====

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removed.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removed.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removed.adoc
index 6a85b5e..68c75b3 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removed.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removed.adoc
@@ -10,3 +10,7 @@ The `removed()` lifecycle callback method is called when a (persistent) object h
 
 See also xref:rg.adoc#_rg_methods_lifecycle_manpage-removing[`removing()`].
 
+[TIP]
+====
+Alternatively, consider using a xref:rg.adoc#_rg_services-api_manpage-EventBusService[event bus] xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[subscriber] on the xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectRemovedEvent[`ObjectRemovedEvent`].
+====

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removing.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removing.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removing.adoc
index b45bc94..8ebc6df 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-removing.adoc
@@ -10,3 +10,7 @@ The `removing()` lifecycle callback method is called when a (persistent) object
 
 See also xref:rg.adoc#_rg_methods_lifecycle_manpage-removed[`removed()`].
 
+[TIP]
+====
+Alternatively, consider using a xref:rg.adoc#_rg_services-api_manpage-EventBusService[event bus] xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[subscriber] on the xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectRemovingEvent[`ObjectRemovingEvent`].
+====

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updated.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updated.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updated.adoc
index b683b5f..77374d2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updated.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updated.adoc
@@ -12,3 +12,7 @@ The `updated()` lifecycle callback method is called when a (persistent) object h
 
 See also xref:rg.adoc#_rg_methods_lifecycle_manpage-updating[`updating()`].
 
+[TIP]
+====
+Alternatively, consider using a xref:rg.adoc#_rg_services-api_manpage-EventBusService[event bus] xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[subscriber] on the xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectUpdatedEvent[`ObjectUpdatedEvent`].
+====

http://git-wip-us.apache.org/repos/asf/isis/blob/c22159fe/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updating.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updating.adoc b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updating.adoc
index b92ba8b..d663ae2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updating.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rg_methods_lifecycle_manpage-updating.adoc
@@ -8,3 +8,8 @@
 The `updating()` lifecycle callback method is called when a (persistent) object is just about to be updated in the object store
 
 See also xref:rg.adoc#_rg_methods_lifecycle_manpage-updated[`updated()`].
+
+[TIP]
+====
+Alternatively, consider using a xref:rg.adoc#_rg_services-api_manpage-EventBusService[event bus] xref:rg.adoc#_rg_classes_super_manpage-AbstractSubscriber[subscriber] on the xref:rg.adoc#_rg_classes_lifecycleevent_manpage-ObjectUpdatingEvent[`ObjectUpdatingEvent`].
+====