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 2019/07/04 06:25:47 UTC

[isis] branch ISIS-2062-antora updated (1dd8261 -> 5826986)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch ISIS-2062-antora
in repository https://gitbox.apache.org/repos/asf/isis.git.


 discard 1dd8261  ISIS-2062: updates docs for Spring @EventListener
     add 5c98648  ISIS-2062 minor improvements to the main site
     add 3b4e054  ISIS-2133 major: pulling fixture-script related code out of core
     add f97acbc  ISIS-2133 simplify extension poms
     add d218da3  ISIS-2133 fixes 'extension' build for maven
     add 07f1f2c  ISIS-2133 fixes smoketests (that use persona from fixtures)
     add bbb5966  ISIS-2133 makes fixtures truly optional; fixes demo + helloworld
     add 29ba11c  ISIS-1634 adds NamedFacet for parameters via reflection
     add ad8ea0a  ISIS-1634 java-doc: adds some eclipse specific notes
     new 5826986  ISIS-2062: updates docs for Spring @EventListener

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (1dd8261)
            \
             N -- N -- N   refs/heads/ISIS-2062-antora (5826986)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 antora/supplemental-ui/img/home/favicon2.png       | Bin 0 -> 2143 bytes
 .../supplemental-ui/img/home/team/AndiHuber.jfif   | Bin 3943 -> 0 bytes
 antora/supplemental-ui/img/home/team/AndiHuber.jpg | Bin 0 -> 62469 bytes
 antora/supplemental-ui/index.html                  |   6 +-
 antora/supplemental-ui/isis-favicon.png            | Bin 1597 -> 2143 bytes
 .../java/org/apache/isis/applib/clock/Clock.java   |   7 +-
 .../queryresultscache/QueryResultCacheControl.java |   2 +-
 .../QueryResultsCacheInternal.java                 |  20 +-
 .../sessmgmt/SessionManagementService.java         |   3 +-
 core/integtestsupport/pom.xml                      |   4 -
 .../integtestsupport/IntegrationTestAbstract3.java | 177 -------
 .../integtestsupport/IntegrationTestJupiter.java   |  91 ----
 .../integtestsupport/TransactionRuleAbstract.java  | 107 -----
 .../HeadlessTransactionSupportDefault.java         | 176 -------
 .../scenarios/ObjectFactoryForIntegration.java     |  78 ---
 .../java/org/apache/isis/applib/AppManifest.java   |  10 -
 core/mavendeps/testing/pom.xml                     |   5 -
 .../facets/all/i18n/NamedFacetTranslated.java      |   4 +-
 ...jectSpecIdFacetDerivedFromClassNameFactory.java |  32 +-
 .../NamedFacetForParameterUsingReflection.java}    |  15 +-
 .../ParameterNameFacetFactoryUsingReflection.java  |  77 +++
 .../progmodel/ProgrammingModelAbstract.java        |   4 +-
 ...Java5.java => ProgrammingModelFacetsJava8.java} |   6 +-
 .../ApplicationFeatureRepositoryDefault.java       |  13 +-
 .../services/swagger/internal/ClassExcluder.java   |   5 +-
 .../isis/metamodel/spec/ObjectSpecification.java   |   8 +-
 .../specloader/ProgrammingModelServiceDefault.java |   4 +-
 .../metamodel/specloader/ReflectorConstants.java   |   4 +-
 .../specloader/SpecificationLoaderDefault.java     |   4 +-
 .../specimpl/ObjectSpecificationAbstract.java      |  19 +-
 .../specimpl/dflt/ObjectSpecificationDefault.java  |  18 +-
 .../facets/param/name/ParameterNameFacetTest.java  | 109 +++++
 .../ParameterAnnotationFacetFactoryTest.java       |   4 +-
 .../SpecificationLoaderTestAbstract.java           |   4 +-
 .../testspec/ObjectSpecificationStub.java          |   5 +
 core/pom.xml                                       |  50 --
 .../context/session/RuntimeEventService.java       |  16 +-
 .../session/RuntimeEventSupport_Spring.java        |  16 +-
 .../runtime/system/session/IsisSessionFactory.java |   2 +-
 .../system/session/IsisSessionFactoryDefault.java  |  21 +-
 .../domainapp/application/DemoAppManifest.java     |  18 +-
 .../application/HelloWorldAppManifest.java         |  20 +-
 ...mainAppFixtureScriptsSpecificationProvider.java |   6 +-
 .../fixture/scenarios/DomainAppDemo.java           |   2 +-
 .../application/manifest/DomainAppAppManifest.java |   2 +-
 .../integtests/DomainAppIntegTestAbstract.java     |   2 +-
 .../application/simpleapp/module-simple/pom.xml    | 269 ++++++-----
 .../simple/fixture/SimpleObjectBuilder.java        |   2 +-
 .../simple/fixture/SimpleObject_persona.java       |   6 +-
 .../integtests/SimpleModuleIntegTestAbstract.java  |   4 -
 example/smoketest/pom.xml                          |   8 +
 .../isis/testdomain/jdo/JdoTestDomainModule.java   |   3 +-
 .../isis/testdomain/jdo/JdoTestDomainPersona.java  |   4 +-
 .../isis/testdomain/tests/AuditerServiceTest.java  |   2 +-
 .../tests/JdoBootstrappingTest_usingFixtures.java  |   2 +-
 .../testdomain/tests/PublisherServiceTest.java     |   2 +-
 extensions/asciidoc/pom.xml                        |  19 -
 extensions/{markdown => fixtures}/pom.xml          |  50 +-
 .../extensions/fixtures/FixturesEventService.java  |  62 +++
 .../fixtures/FixturesLifecyleService.java          |  62 +++
 .../isis/extensions/fixtures/IsisBootFixtures.java |  25 +-
 .../api}/FixtureScriptWithExecutionStrategy.java   |   5 +-
 .../fixtures/api}/PersonaWithBuilderScript.java    |   4 +-
 .../fixtures/api}/PersonaWithFinder.java           |   2 +-
 .../isis/extensions/fixtures/api}/WithPrereqs.java |   5 +-
 .../extensions/fixtures/api}/package-info.java     |   2 +-
 .../fixtures}/events/FixturesInstalledEvent.java   |   2 +-
 .../fixtures}/events/FixturesInstallingEvent.java  |   2 +-
 .../extensions/fixtures/legacy}/FixtureClock.java  |   2 +-
 .../extensions/fixtures/legacy}/FixtureType.java   |   2 +-
 .../fixtures/legacy}/InstallableFixture.java       |   4 +-
 .../fixtures/legacy}/TickingFixtureClock.java      |   2 +-
 .../fixtures/legacy}/clock/ClockFixture.java       |  15 +-
 .../legacy}/clock/TickingClockFixture.java         |  17 +-
 .../fixturescripts/BuilderScriptAbstract.java      |   6 +-
 .../fixturescripts/DiscoverableFixtureScript.java  |   6 +-
 .../fixturescripts/ExecutionParameters.java        |   9 +-
 .../fixturescripts/ExecutionParametersService.java |   6 +-
 .../legacy}/fixturescripts/FixtureResult.java      |   2 +-
 .../fixturescripts/FixtureResult.layout.xml        |   0
 .../legacy}/fixturescripts/FixtureResultList.java  |  20 +-
 .../legacy}/fixturescripts/FixtureScript.java      |  34 +-
 .../legacy}/fixturescripts/FixtureScripts.java     |  11 +-
 .../fixturescripts/SimpleFixtureScript.java        |   2 +-
 .../legacy}/fixturespec/FixtureScriptsDefault.java |  12 +-
 .../fixturespec/FixtureScriptsSpecification.java   |  10 +-
 .../FixtureScriptsSpecificationProvider.java       |   4 +-
 .../fixtures/legacy}/fixturespec/package-info.java |   8 +-
 .../installer}/FixturesInstallerAbstract.java      |   2 +-
 .../installer}/FixturesInstallerDelegate.java      |  18 +-
 .../FixturesInstallerFromConfiguration.java        |   4 +-
 .../fixtures/legacy/installer}/package-info.java   |   2 +-
 .../extensions/fixtures/legacy}/package-info.java  |   8 +-
 .../QueryResultsCacheControlInternal.java          |  11 +-
 .../legacy}/setup/PersonaEnumPersistAll.java       |  12 +-
 .../legacy}/teardown/TeardownFixtureAbstract.java  |   4 +-
 .../legacy}/teardown/TeardownFixtureAbstract2.java |   2 +-
 .../legacy}/FixtureClockInstantiationTest.java     |   3 +-
 .../fixturescripts/ExecutionContextTest.java       |   4 +-
 .../ExecutionParameters_AsKeyValueMap_Test.java    |   3 +-
 .../fixturescripts/ExecutionParameters_Test.java   |   4 +-
 extensions/markdown/pom.xml                        |  32 +-
 extensions/pom.xml                                 | 112 +++--
 extensions/specsupport/pom.xml                     | 150 ++++++
 .../isis/runtime/headless/HeadlessAbstract.java    |  12 +-
 .../headless/HeadlessTransactionSupport.java       |   0
 .../HeadlessWithBootstrappingAbstract.java         |   0
 .../apache/isis/runtime/headless/IsisSystem.java   |   5 +-
 .../runtime/headless/IsisSystemBootstrapper.java   |  26 +-
 .../auth/AuthenticationRequestNameOnly.java        |   0
 .../runtime/headless/logging/LeveledLogger.java    |   0
 .../isis/runtime/headless/logging/LogConfig.java   |   0
 .../isis/runtime/headless/logging/LogStream.java   |   0
 .../scenarios/DomainServiceProvider.java           |   0
 .../scenarios/DomainServiceProviderMockery.java    |   0
 .../isis/specsupport/scenarios/InMemoryDB.java     |   0
 .../specsupport/scenarios/ScenarioExecution.java   | 526 +++++++++++++++++++++
 .../scenarios/ScenarioExecutionForUnit.java        |   0
 .../scenarios/ScenarioExecutionScope.java          |   0
 .../isis/specsupport/specs/CukeGlueAbstract.java   |   0
 .../isis/specsupport/specs/CukeGlueAbstract2.java  |   0
 .../specs/CukeGlueBootstrappingAbstract.java       |   0
 .../isis/specsupport/specs/CukeSpecsAbstract.java  |   0
 .../java/org/apache/isis/specsupport/specs/V.java  |   0
 extensions/viewer-wicket-excel/pom.xml             |  19 -
 preview.sh                                         |   9 +-
 126 files changed, 1566 insertions(+), 1292 deletions(-)
 create mode 100644 antora/supplemental-ui/img/home/favicon2.png
 delete mode 100644 antora/supplemental-ui/img/home/team/AndiHuber.jfif
 create mode 100644 antora/supplemental-ui/img/home/team/AndiHuber.jpg
 delete mode 100644 core/integtestsupport/src/main/java/org/apache/isis/integtestsupport/IntegrationTestAbstract3.java
 delete mode 100644 core/integtestsupport/src/main/java/org/apache/isis/integtestsupport/IntegrationTestJupiter.java
 delete mode 100644 core/integtestsupport/src/main/java/org/apache/isis/integtestsupport/TransactionRuleAbstract.java
 delete mode 100644 core/integtestsupport/src/main/java/org/apache/isis/integtestsupport/components/HeadlessTransactionSupportDefault.java
 delete mode 100644 core/integtestsupport/src/main/java/org/apache/isis/integtestsupport/scenarios/ObjectFactoryForIntegration.java
 copy core/{runtime-extensions/src/main/java/org/apache/isis/runtime/headless/HeadlessTransactionSupport.java => metamodel/src/main/java/org/apache/isis/metamodel/facets/param/name/NamedFacetForParameterUsingReflection.java} (68%)
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/name/ParameterNameFacetFactoryUsingReflection.java
 rename core/metamodel/src/main/java/org/apache/isis/metamodel/progmodels/dflt/{ProgrammingModelFacetsJava5.java => ProgrammingModelFacetsJava8.java} (98%)
 create mode 100644 core/metamodel/src/test/java/org/apache/isis/metamodel/facets/param/name/ParameterNameFacetTest.java
 copy extensions/{markdown => fixtures}/pom.xml (75%)
 create mode 100644 extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesEventService.java
 create mode 100644 extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java
 copy core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScriptWithExecutionStrategy.java => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisBootFixtures.java (55%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/api}/FixtureScriptWithExecutionStrategy.java (85%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/api}/PersonaWithBuilderScript.java (87%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/api}/PersonaWithFinder.java (95%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/api}/WithPrereqs.java (83%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/api}/package-info.java (95%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures}/events/FixturesInstalledEvent.java (95%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures}/events/FixturesInstallingEvent.java (95%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/FixtureClock.java (99%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/FixtureType.java (97%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/InstallableFixture.java (90%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/TickingFixtureClock.java (99%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/clock/ClockFixture.java (91%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/clock/TickingClockFixture.java (91%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/BuilderScriptAbstract.java (90%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/DiscoverableFixtureScript.java (84%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/ExecutionParameters.java (99%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/ExecutionParametersService.java (81%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/FixtureResult.java (97%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/FixtureResult.layout.xml (100%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/FixtureResultList.java (80%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/FixtureScript.java (94%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/FixtureScripts.java (97%)
 rename {core/applib/src/main/java/org/apache/isis/applib => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/SimpleFixtureScript.java (96%)
 rename {core/applib/src/main/java/org/apache/isis/applib/services => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturespec/FixtureScriptsDefault.java (95%)
 rename {core/applib/src/main/java/org/apache/isis/applib/services => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturespec/FixtureScriptsSpecification.java (94%)
 rename {core/applib/src/main/java/org/apache/isis/applib/services => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturespec/FixtureScriptsSpecificationProvider.java (90%)
 rename {core/applib/src/main/java/org/apache/isis/applib/services => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/fixturespec/package-info.java (75%)
 rename {core/runtime/src/main/java/org/apache/isis/runtime/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/installer}/FixturesInstallerAbstract.java (96%)
 rename {core/runtime/src/main/java/org/apache/isis/runtime/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/installer}/FixturesInstallerDelegate.java (90%)
 rename {core/runtime/src/main/java/org/apache/isis/runtime/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/installer}/FixturesInstallerFromConfiguration.java (93%)
 rename {core/runtime/src/main/java/org/apache/isis/runtime/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/installer}/package-info.java (94%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixtures => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/package-info.java (83%)
 rename {core/applib/src/main/java/org/apache/isis/applib/services => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/queryresultscache/QueryResultsCacheControlInternal.java (78%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/setup/PersonaEnumPersistAll.java (85%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/teardown/TeardownFixtureAbstract.java (94%)
 rename {core/applib/src/main/java/org/apache/isis/applib/fixturescripts => extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy}/teardown/TeardownFixtureAbstract2.java (98%)
 rename {core/applib/src/test/java/org/apache/isis/applib/fixtures => extensions/fixtures/src/test/java/org/apache/isis/extensions/fixtures/legacy}/FixtureClockInstantiationTest.java (94%)
 rename {core/applib/src/test/java/org/apache/isis/applib => extensions/fixtures/src/test/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/ExecutionContextTest.java (97%)
 rename {core/applib/src/test/java/org/apache/isis/applib => extensions/fixtures/src/test/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/ExecutionParameters_AsKeyValueMap_Test.java (94%)
 rename {core/applib/src/test/java/org/apache/isis/applib => extensions/fixtures/src/test/java/org/apache/isis/extensions/fixtures/legacy}/fixturescripts/ExecutionParameters_Test.java (98%)
 create mode 100644 extensions/specsupport/pom.xml
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/HeadlessAbstract.java (92%)
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/HeadlessTransactionSupport.java (100%)
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/HeadlessWithBootstrappingAbstract.java (100%)
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/IsisSystem.java (97%)
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/IsisSystemBootstrapper.java (90%)
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/auth/AuthenticationRequestNameOnly.java (100%)
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/logging/LeveledLogger.java (100%)
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/logging/LogConfig.java (100%)
 rename {core/runtime-extensions => extensions/specsupport}/src/main/java/org/apache/isis/runtime/headless/logging/LogStream.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/scenarios/DomainServiceProvider.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/scenarios/DomainServiceProviderMockery.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/scenarios/InMemoryDB.java (100%)
 create mode 100644 extensions/specsupport/src/main/java/org/apache/isis/specsupport/scenarios/ScenarioExecution.java
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/scenarios/ScenarioExecutionForUnit.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/scenarios/ScenarioExecutionScope.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/specs/CukeGlueAbstract.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/specs/CukeGlueAbstract2.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/specs/CukeGlueBootstrappingAbstract.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/specs/CukeSpecsAbstract.java (100%)
 copy {core => extensions}/specsupport/src/main/java/org/apache/isis/specsupport/specs/V.java (100%)


[isis] 01/01: ISIS-2062: updates docs for Spring @EventListener

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2062-antora
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 582698610a5dd3d6f99df2ce60d35498345508a4
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jul 4 07:18:28 2019 +0100

    ISIS-2062: updates docs for Spring @EventListener
---
 .../rg/modules/ant/pages/Action/domainEvent.adoc   |  55 +++++----
 .../modules/ant/pages/Collection/domainEvent.adoc  |   7 +-
 .../pages/DomainObject/createdLifecycleEvent.adoc  |  20 ++--
 .../pages/DomainObject/loadedLifecycleEvent.adoc   |  16 ++-
 .../DomainObject/persistedLifecycleEvent.adoc      |  16 ++-
 .../DomainObject/persistingLifecycleEvent.adoc     |  16 ++-
 .../pages/DomainObject/removingLifecycleEvent.adoc |  16 ++-
 .../pages/DomainObject/updatedLifecycleEvent.adoc  |  16 ++-
 .../pages/DomainObject/updatingLifecycleEvent.adoc |  16 ++-
 .../pages/DomainObjectLayout/cssClassUiEvent.adoc  |  16 ++-
 .../ant/pages/DomainObjectLayout/iconUiEvent.adoc  |  16 ++-
 .../pages/DomainObjectLayout/layoutUiEvent.adoc    |  16 ++-
 .../ant/pages/DomainObjectLayout/titleUiEvent.adoc |  16 ++-
 .../rg/modules/ant/pages/Property/domainEvent.adoc |  47 ++++----
 .../cms/pages/methods/reserved/disable.adoc        |  22 ++--
 .../svc/pages/core-domain-api/EventBusService.adoc | 123 +++++++++++++--------
 .../svc/pages/integration-api/BookmarkService.adoc |   7 +-
 .../pages/persistence-layer-api/H2ManagerMenu.adoc |   6 +-
 .../persistence-layer-api/HsqlDbManagerMenu.adoc   |   6 +-
 .../btb/pages/hints-and-tips/persisted-title.adoc  |  14 ++-
 .../identifiers/title-and-icon-and-css-class.adoc  |   2 +-
 .../domain-services/event-subscribers.adoc         |  20 ++--
 .../fun/pages/ui-hints/names-and-descriptions.adoc |  11 +-
 .../pages/ui-hints/object-titles-and-icons.adoc    | 102 +++++++++--------
 .../pages/integ-test-support/wrapper-factory.adoc  |  46 ++++----
 .../hints-and-tips/highlight-current-row.adoc      |   9 +-
 preview.sh                                         |   7 +-
 27 files changed, 382 insertions(+), 282 deletions(-)

diff --git a/antora/components/rg/modules/ant/pages/Action/domainEvent.adoc b/antora/components/rg/modules/ant/pages/Action/domainEvent.adoc
index 4694a0a..6c5f20d 100644
--- a/antora/components/rg/modules/ant/pages/Action/domainEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/Action/domainEvent.adoc
@@ -61,12 +61,13 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ActionDomainEvent.class)
     public void on(ActionDomainEvent ev) {
-        ...
+        // ...
     }
 }
 ----
@@ -75,12 +76,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.CompletedEvent.class)
     public void on(ToDoItem.CompletedEvent ev) {
-        ...
+        // ...
     }
 }
 ----
@@ -100,24 +102,29 @@ Thus the general form is:
 
 [source,java]
 ----
-@org.axonframework.eventhandling.EventHandler   // if using axon
-@com.google.common.eventbus.Subscribe           // if using guava
-public void on(ActionDomainEvent ev) {
-    switch(ev.getEventPhase()) {
-        case HIDE:
-            // call ev.hide() or ev.veto("") to hide the action
-            break;
-        case DISABLE:
-            // call ev.disable("...") or ev.veto("...") to disable the action
-            break;
-        case VALIDATE:
-            // call ev.invalidate("...") or ev.veto("...")
-            // if action arguments are invalid
-            break;
-        case EXECUTING:
-            break;
-        case EXECUTED:
-            break;
+ import org.springframework.context.event.EventListener;
+
+@DomainService(nature=NatureOfService.DOMAIN)
+public class SomeSubscriber extends AbstractSubscriber {
+
+    @EventListener(ActionDomainEvent.class)
+    public void on(ActionDomainEvent ev) {
+        switch(ev.getEventPhase()) {
+            case HIDE:
+                // call ev.hide() or ev.veto("") to hide the action
+                break;
+            case DISABLE:
+                // call ev.disable("...") or ev.veto("...") to disable the action
+                break;
+            case VALIDATE:
+                // call ev.invalidate("...") or ev.veto("...")
+                // if action arguments are invalid
+                break;
+            case EXECUTING:
+                break;
+            case EXECUTED:
+                break;
+        }
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/Collection/domainEvent.adoc b/antora/components/rg/modules/ant/pages/Collection/domainEvent.adoc
index 4bffed7..f8bfea0 100644
--- a/antora/components/rg/modules/ant/pages/Collection/domainEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/Collection/domainEvent.adoc
@@ -90,12 +90,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.DependenciesChangedEvent.class)
     public void on(ToDoItem.DependenciesChangedEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObject/createdLifecycleEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObject/createdLifecycleEvent.adoc
index d2128d2..55a6c49 100644
--- a/antora/components/rg/modules/ant/pages/DomainObject/createdLifecycleEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObject/createdLifecycleEvent.adoc
@@ -23,7 +23,7 @@ For example:
 ----
 @DomainObject
 public class ToDoItemDto {
-    ...
+    // ...
 }
 ----
 
@@ -40,7 +40,7 @@ For example:
 public class ToDoItem {
     public static class CreatedEvent
         extends org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent<ToDoItem> { }
-    ...
+    // ...
 }
 ----
 
@@ -58,12 +58,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ObjectCreatedEvent.class)
     public void on(ObjectCreatedEvent ev) {
-        if(ev.getSource() instanceof ToDoItem) { ... }
+        if(ev.getSource() instanceof ToDoItem) {
+            // ...
+        }
     }
 }
 ----
@@ -72,12 +75,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.ObjectCreatedEvent.class)
     public void on(ToDoItem.ObjectCreatedEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObject/loadedLifecycleEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObject/loadedLifecycleEvent.adoc
index 1bccf1c..e1ce114 100644
--- a/antora/components/rg/modules/ant/pages/DomainObject/loadedLifecycleEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObject/loadedLifecycleEvent.adoc
@@ -49,12 +49,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ObjectLoadedEvent.class)
     public void on(ObjectLoadedEvent ev) {
-        if(ev.getSource() instanceof ToDoItem) { ... }
+        if(ev.getSource() instanceof ToDoItem) {
+            // ...
+         }
     }
 }
 ----
@@ -63,12 +66,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.ObjectLoadedEvent.class)
     public void on(ToDoItem.ObjectLoadedEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObject/persistedLifecycleEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObject/persistedLifecycleEvent.adoc
index ffc0844..9cc0cbc 100644
--- a/antora/components/rg/modules/ant/pages/DomainObject/persistedLifecycleEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObject/persistedLifecycleEvent.adoc
@@ -55,12 +55,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ObjectPersistedEvent.class)
     public void on(ObjectPersistedEvent ev) {
-        if(ev.getSource() instanceof ToDoItem) { ... }
+        if(ev.getSource() instanceof ToDoItem) {
+            // ...
+        }
     }
 }
 ----
@@ -69,12 +72,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.ObjectPersistedEvent.class)
     public void on(ToDoItem.ObjectPersistedEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObject/persistingLifecycleEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObject/persistingLifecycleEvent.adoc
index c39a00b..2c11927 100644
--- a/antora/components/rg/modules/ant/pages/DomainObject/persistingLifecycleEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObject/persistingLifecycleEvent.adoc
@@ -57,12 +57,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ObjectPersistingEvent.class)
     public void on(ObjectPersistingEvent ev) {
-        if(ev.getSource() instanceof ToDoItem) { ... }
+        if(ev.getSource() instanceof ToDoItem) {
+            // ...
+        }
     }
 }
 ----
@@ -71,12 +74,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.ObjectPersistingEvent.class)
     public void on(ToDoItem.ObjectPersistingEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObject/removingLifecycleEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObject/removingLifecycleEvent.adoc
index 9ff912b..d16ba92 100644
--- a/antora/components/rg/modules/ant/pages/DomainObject/removingLifecycleEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObject/removingLifecycleEvent.adoc
@@ -57,12 +57,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ObjectRemovingEvent.class)
     public void on(ObjectRemovingEvent ev) {
-        if(ev.getSource() instanceof ToDoItem) { ... }
+        if(ev.getSource() instanceof ToDoItem) {
+            // ...
+        }
     }
 }
 ----
@@ -71,12 +74,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.ObjectRemovingEvent.class)
     public void on(ToDoItem.ObjectRemovingEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObject/updatedLifecycleEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObject/updatedLifecycleEvent.adoc
index fe440c7..2b5bdf8 100644
--- a/antora/components/rg/modules/ant/pages/DomainObject/updatedLifecycleEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObject/updatedLifecycleEvent.adoc
@@ -54,12 +54,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ObjectUpdatedEvent.clas)
     public void on(ObjectUpdatedEvent ev) {
-        if(ev.getSource() instanceof ToDoItem) { ... }
+        if(ev.getSource() instanceof ToDoItem) {
+            // ...
+        }
     }
 }
 ----
@@ -68,12 +71,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.ObjectUpdatedEvent.class)
     public void on(ToDoItem.ObjectUpdatedEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObject/updatingLifecycleEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObject/updatingLifecycleEvent.adoc
index 6f5d0d9..c01ad31 100644
--- a/antora/components/rg/modules/ant/pages/DomainObject/updatingLifecycleEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObject/updatingLifecycleEvent.adoc
@@ -58,12 +58,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ObjectUpdatingEvent.class)
     public void on(ObjectUpdatingEvent ev) {
-        if(ev.getSource() instanceof ToDoItem) { ... }
+        if(ev.getSource() instanceof ToDoItem) {
+            // ...
+        }
     }
 }
 ----
@@ -72,12 +75,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.ObjectUpdatingEvent.class)
     public void on(ToDoItem.ObjectUpdatingEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObjectLayout/cssClassUiEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObjectLayout/cssClassUiEvent.adoc
index 1fcca4c..de78892 100644
--- a/antora/components/rg/modules/ant/pages/DomainObjectLayout/cssClassUiEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObjectLayout/cssClassUiEvent.adoc
@@ -60,12 +60,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(CssClassUiEvent.class)
     public void on(CssClassUiEvent ev) {
-        if(ev.getSource() instanceof ToDoItemDto) { ... }
+        if(ev.getSource() instanceof ToDoItemDto) {
+            // ...
+        }
     }
 }
 ----
@@ -74,12 +77,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItemDto.CssClassUiEvent.class)
     public void on(ToDoItemDto.CssClassUiEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObjectLayout/iconUiEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObjectLayout/iconUiEvent.adoc
index 8a35e4d..aa26eb3 100644
--- a/antora/components/rg/modules/ant/pages/DomainObjectLayout/iconUiEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObjectLayout/iconUiEvent.adoc
@@ -59,12 +59,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(IconUiEvent.class)
     public void on(IconUiEvent ev) {
-        if(ev.getSource() instanceof ToDoItemDto) { ... }
+        if(ev.getSource() instanceof ToDoItemDto) {
+            // ...
+        }
     }
 }
 ----
@@ -73,12 +76,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItemDto.IconUiEvent.class)
     public void on(ToDoItemDto.IconUiEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObjectLayout/layoutUiEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObjectLayout/layoutUiEvent.adoc
index 045654f..c96dfdb 100644
--- a/antora/components/rg/modules/ant/pages/DomainObjectLayout/layoutUiEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObjectLayout/layoutUiEvent.adoc
@@ -52,12 +52,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
-    @com.google.common.eventbus.Subscribe                    // if using guava
+    @EventListener(LayoutUiEvent.class)
     public void on(LayoutUiEvent ev) {
-        if(ev.getSource() instanceof ToDoItemDto) { ... }
+        if(ev.getSource() instanceof ToDoItemDto) {
+            // ...
+        }
     }
 }
 ----
@@ -66,12 +69,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
-    @com.google.common.eventbus.Subscribe                    // if using guava
+    @EventListner(ToDoItemDto.LayoutUiEvent.class)
     public void on(ToDoItemDto.LayoutUiEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/DomainObjectLayout/titleUiEvent.adoc b/antora/components/rg/modules/ant/pages/DomainObjectLayout/titleUiEvent.adoc
index 4b2dcd2..ccd673c 100644
--- a/antora/components/rg/modules/ant/pages/DomainObjectLayout/titleUiEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/DomainObjectLayout/titleUiEvent.adoc
@@ -59,12 +59,15 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(TitleUiEvent.class)
     public void on(TitleUiEvent ev) {
-        if(ev.getSource() instanceof ToDoItemDto) { ... }
+        if(ev.getSource() instanceof ToDoItemDto) {
+            // ...
+        }
     }
 }
 ----
@@ -73,12 +76,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItemDto.TitleUiEvent.class)
     public void on(ToDoItemDto.TitleUiEvent ev) {
-        ...
+        // ...
     }
 }
 ----
diff --git a/antora/components/rg/modules/ant/pages/Property/domainEvent.adoc b/antora/components/rg/modules/ant/pages/Property/domainEvent.adoc
index a4dd419..60a6373 100644
--- a/antora/components/rg/modules/ant/pages/Property/domainEvent.adoc
+++ b/antora/components/rg/modules/ant/pages/Property/domainEvent.adoc
@@ -73,12 +73,13 @@ or can be fine-grained (by subscribing to specific event subtypes):
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(ToDoItem.DueByChangedEvent.class)
     public void on(ToDoItem.DueByChangedEvent ev) {
-        ...
+        // ...
     }
 }
 ----
@@ -96,24 +97,28 @@ Thus the general form is:
 
 [source,java]
 ----
-@Programmatic
-@com.google.common.eventbus.Subscribe
-public void on(PropertyDomainEvent ev) {
-    switch(ev.getEventPhase()) {
-        case HIDE:
-            // call ev.hide() or ev.veto("") to hide the property
-            break;
-        case DISABLE:
-            // call ev.disable("...") or ev.veto("...") to disable the property
-            break;
-        case VALIDATE:
-            // call ev.invalidate("...") or ev.veto("...")
-            // if proposed property value is invalid
-            break;
-        case EXECUTING:
-            break;
-        case EXECUTED:
-            break;
+import org.springframework.context.event.EventListener;
+
+@DomainService(nature=NatureOfService.DOMAIN)
+public class SomeSubscriber extends AbstractSubscriber {
+
+    public void on(PropertyDomainEvent ev) {
+        switch(ev.getEventPhase()) {
+            case HIDE:
+                // call ev.hide() or ev.veto("") to hide the property
+                break;
+            case DISABLE:
+                // call ev.disable("...") or ev.veto("...") to disable the property
+                break;
+            case VALIDATE:
+                // call ev.invalidate("...") or ev.veto("...")
+                // if proposed property value is invalid
+                break;
+            case EXECUTING:
+                break;
+            case EXECUTED:
+                break;
+        }
     }
 }
 ----
diff --git a/antora/components/rg/modules/cms/pages/methods/reserved/disable.adoc b/antora/components/rg/modules/cms/pages/methods/reserved/disable.adoc
index 31fbc24..b44628a 100644
--- a/antora/components/rg/modules/cms/pages/methods/reserved/disable.adoc
+++ b/antora/components/rg/modules/cms/pages/methods/reserved/disable.adoc
@@ -67,13 +67,14 @@ Then, each property/collection/action emits either these base domain events or t
 
 [source,java]
 ----
-public class ToDoItem ... {
+public class ToDoItem  {
     public static class DescriptionDomainEvent extends PropertyDomainEvent<String> { }
-    @Property(
-        domainEvent = DescriptionDomainEvent.class
-    )
-    public String getDescription() { ... }
-    ...
+    @Property( domainEvent = DescriptionDomainEvent.class )
+    public String getDescription() {
+        // ...
+     }
+
+    // ...
 }
 ----
 
@@ -81,15 +82,16 @@ A vetoing subscriber can then subscribe to the domain events and veto access, eg
 
 [source,java]
 ----
-@DomainObject
+import org.springframework.context.event.EventListener;
+
+@DomainService(nature=NatureOfService.DOMAIN)
 public class VetoOutOfOfficeHours {
-    @Subscribe
+    @EventListener(ToDoItem.PropertyDomainEvent.class)
     public void on(ToDoItem.PropertyDomainEvent ev) {
-        if(!calendarService.isOfficeHours(clock.today()) {
+        if(!calendarService.isOfficeHours(clock.today())) {
             ev.veto("Cannot modify objects outside of office hours");
         }
     }
-    ...
 }
 ----
 
diff --git a/antora/components/rg/modules/svc/pages/core-domain-api/EventBusService.adoc b/antora/components/rg/modules/svc/pages/core-domain-api/EventBusService.adoc
index d920649..3ad4b09 100644
--- a/antora/components/rg/modules/svc/pages/core-domain-api/EventBusService.adoc
+++ b/antora/components/rg/modules/svc/pages/core-domain-api/EventBusService.adoc
@@ -6,7 +6,8 @@ include::_attributes.adoc[]
 
 The `EventBusService` allows domain objects to emit events to subscribing domain services using an in-memory event bus.
 
-The primary user of the service is the framework itself, which automatically emit events for xref:rg:ant:Action/domainEvent.adoc[actions], xref:rg:ant:Property/domainEvent.adoc[properties] and xref:rg:ant:Collection/domainEvent.adoc[collections].  Multiple events are generated:
+The primary user of the service is the framework itself, which automatically emit events for xref:rg:ant:Action/domainEvent.adoc[actions], xref:rg:ant:Property/domainEvent.adoc[properties] and xref:rg:ant:Collection/domainEvent.adoc[collections].
+Multiple events are generated:
 
 * when an object member is to be viewed, an event is fired; subscribers can veto (meaning that the member is hidden)
 * when an object member is to be enabled, the same event instance is fired; subscribers can veto (meaning that the member is disabled, ie cannot be edited/invoked)
@@ -14,9 +15,12 @@ The primary user of the service is the framework itself, which automatically emi
 * when an object member is about to be changed, then the same event instance is fired; subscribers can perform pre-execution operations
 * when an object member has been changed, then the same event instance is fired; subscribers can perform post-execution operations
 
-If a subscriber throws an exception in the first three steps, then the interaction is vetoed. If a subscriber throws an exception in the last two steps, then the transaction is aborted.  For more on this topic, see xref:rg:ant:Action/domainEvent.adoc[`@Action#domainEvent()`], xref:rg:ant:Property/domainEvent.adoc[`@Property#domainEvent()`] and xref:rg:ant:Collection/domainEvent.adoc[`@Collection#domainEvent()`].
+If a subscriber throws an exception in the first three steps, then the interaction is vetoed.
+If a subscriber throws an exception in the last two steps, then the transaction is aborted.
+For more on this topic, see xref:rg:ant:Action/domainEvent.adoc[`@Action#domainEvent()`], xref:rg:ant:Property/domainEvent.adoc[`@Property#domainEvent()`] and xref:rg:ant:Collection/domainEvent.adoc[`@Collection#domainEvent()`].
 
-It is also possible for domain objects to programmatically generate domain events.  However the events are published, the primary use case is to decoupling interactions from one module/package/namespace and another.
+It is also possible for domain objects to programmatically generate domain events.
+However the events are published, the primary use case is to decoupling interactions from one module/package/namespace and another.
 
 Two implementations are available, using either link:https://code.google.com/p/guava-libraries/[Guava]'s https://code.google.com/p/guava-libraries/wiki/EventBusExplained[`EventBus`], or alternatively using the link:http://www.axonframework.org/[AxonFramework]'s link:http://www.axonframework.org/docs/2.4/single.html#d5e1489[SimpleEventBus].  It is also possible to plug in a custom implementation.
 
@@ -29,16 +33,14 @@ The API defined by `EventBusService` is:
 [source,java]
 ----
 public abstract class EventBusService {
-    @Programmatic
-    public void post(Object event) { ... }                          // <1>
-    @Programmatic
-    public void register(final Object domainService) { ... }        // <2>
-    @Programmatic
-    public void unregister(final Object domainService) { ... }      // <3>
+    public void post(Object event) { /*...*/ }                          // <1>
+    public void register(final Object domainService) { /*...*/ }        // <2>
+    public void unregister(final Object domainService) { /*...*/ }      // <3>
 }
 ----
 <1> posts the event onto event bus
-<2> allows domain services to register themselves.  This should be done in their xref:rg:ant:PostConstruct.adoc[`@PostConstruct`] initialization method (for both singleton and xref:rg:ant:RequestScoped.adoc[`@RequestScoped`] domain services.
+<2> allows domain services to register themselves.
+This should be done in their xref:rg:ant:PostConstruct.adoc[`@PostConstruct`] initialization method (for both singleton and xref:rg:ant:RequestScoped.adoc[`@RequestScoped`] domain services.
 <3> exists for symmetry, but need never be called (it is in fact deliberately a no-op).
 
 
@@ -51,7 +53,8 @@ To use an alternative implementation, implement the `EventBusService` domain ser
 
 == Registering Subscribers
 
-The `register()` method should be called in the xref:rg:ant:PostConstruct.adoc[`@PostConstruct`] lifecycle method.  It is valid and probably the least confusing to readers to also "unregister" in the xref:rg:ant:PreDestroy.adoc[`@PreDestroy`] lifecycle method (though as noted xref:rg:svc:core-domain-api/EventBusService.adoc#api-and-implementation[above], unregistering is actually a no-op).
+The `register()` method should be called in the xref:rg:ant:PostConstruct.adoc[`@PostConstruct`] lifecycle method.
+It is valid and probably the least confusing to readers to also "unregister" in the xref:rg:ant:PreDestroy.adoc[`@PreDestroy`] lifecycle method (though as noted xref:rg:svc:core-domain-api/EventBusService.adoc#api-and-implementation[above], unregistering is actually a no-op).
 
 For example:
 
@@ -60,15 +63,19 @@ For example:
 @DomainService(nature=NatureOfService.DOMAIN)   // <1>
 @DomainServiceLayout( menuOrder="1")            // <2>
 public class MySubscribingDomainService {
+
     @PostConstruct
     public void postConstruct() {
         eventBusService.register(this);         // <3>
     }
+
     @PreDestroy
     public void preDestroy() {
         eventBusService.unregister(this);       // <4>
     }
-    ...
+
+    // ...
+
     @javax.inject.Inject
     EventBusService eventBusService;
 }
@@ -86,9 +93,8 @@ This works for both singleton (application-scoped) and also xref:rg:ant:RequestS
 
 [TIP]
 ====
-The xref:rg:cms:classes/super/AbstractSubscriber.adoc[`AbstractSubscriber`] class automatically performs this
-registration.  As a convenience, it is also annotated with the
-xref:rg:ant:DomainServiceLayout/menuOrder.adoc[`@DomainServiceLayout#menuOrder()`] attribute.
+The xref:rg:cms:classes/super/AbstractSubscriber.adoc[`AbstractSubscriber`] class automatically performs this registration.
+As a convenience, it is also annotated with the xref:rg:ant:DomainServiceLayout/menuOrder.adoc[`@DomainServiceLayout#menuOrder()`] attribute.
 ====
 
 
@@ -102,9 +108,11 @@ For example:
 [source,java]
 ----
 public class Customer {
-    @Action
-    public Customer placeOrder(Product product, @ParameterLayout(named="Quantity") int qty) { ... }
-    ...
+    @Action()
+    public Customer placeOrder( Product product, int quantity) {
+        // ...
+    }
+    // ...
 }
 ----
 
@@ -112,17 +120,22 @@ will propagate an instance of the default `o.a.i.applib.services.eventbus.Action
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
-public class MySubscribingDomainService
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
-    public void on(ActionDomainEvent ev) { ... }
-    ...
+public class MySubscribingDomainService extends AbstractSubscriber {
+    @EventListener(ActionDomainEvent.class)
+    public void on(ActionDomainEvent ev) {
+        // ...
+    }
+    // ...
 }
 ----
 
 
-More commonly though you will probably want to emit domain events of a specific subtype.  As a slightly more interesting example, suppose in a library domain that a `LibraryMember` wants to leave the library. A letter should be sent out detailing any books that they still have out on loan:
+More commonly though you will probably want to emit domain events of a specific subtype.
+As a slightly more interesting example, suppose in a library domain that a `LibraryMember` wants to leave the library.
+A letter should be sent out detailing any books that they still have out on loan:
 
 In the `LibraryMember` class, we publish the event by way of an annotation:
 
@@ -130,19 +143,25 @@ In the `LibraryMember` class, we publish the event by way of an annotation:
 ----
 public class LibraryMember {
     @Action(domainEvent=LibraryMemberLeaveEvent.class)  // <1>
-    public void leave() { ... }
-    ...
+    public void leave() {
+        // ...
+    }
+    // ...
 }
 ----
 <1> `LibraryMemberLeaveEvent` is a subclass of `o.a.i.applib.eventbus.ActionDomainEvent`.  The topic of subclassing is discussed in more detail xref:rg:svc:core-domain-api/EventBusService.adoc#event-hierarchy[below].
 
-Meanwhile, in the `BookRepository` domain service, we subscribe to the event and act upon it.  For example:
+Meanwhile, in the `BookRepository` domain service, we subscribe to the event and act upon it.
+For example:
 
 [source,java]
 ----
-public class BookRepository {
-    @Programmatic
-    @com.google.common.eventbus.Subscribe
+import org.springframework.context.event.EventListener;
+
+@DomainService(nature = NatureOfService.DOMAIN)
+public class BookRepository extends AbstractSubscriber {
+
+    @EventListener(LbraryMemberLeaveEvent.class)
     public void onLibraryMemberLeaving(LibraryMemberLeaveEvent e) {
         LibraryMember lm = e.getLibraryMember();
         List<Book> lentBooks = findBooksOnLoanFor(lm);
@@ -150,7 +169,7 @@ public class BookRepository {
             sendLetter(lm, lentBooks);
         }
     }
-    ...
+
 }
 ----
 
@@ -207,8 +226,10 @@ and finally at the action level we can define:
 public class LibraryMember {
     public static class LeaveEvent extends LibraryMember.ActionDomainEvent { }
     @Action(domainEvent=LeaveEvent.class)
-    public void leave() { ... }
-    ...
+    public void leave() {
+        //...
+    }
+    // ...
 }
 ----
 
@@ -224,7 +245,7 @@ A slight variation on this is to not fix the generic parameter at the class leve
 public static class LibraryMember {
     public abstract static class ActionDomainEvent<S>
             extends LibMemModule.ActionDomainEvent<S> { }
-    ...
+    // ...
 }
 ----
 
@@ -235,10 +256,13 @@ and instead parameterize down at the action level:
 public class LibraryMember {
     public static class LeaveEvent
             extends LibraryMember.ActionDomainEvent<LibraryMember> { } // <1>
-    }
+
     @Action(domainEvent=LeaveEvent.class)
-    public void leave() { ... }
-    ...
+    public void leave() {
+        // ...
+    }
+
+    // ...
 }
 ----
 
@@ -256,12 +280,12 @@ The `LibraryMember` example described above could for example be rewritten into:
 [source,java]
 ----
 public class LibraryMember {
-    ...
+    @Action()
     public void leave() {
-        ...
-        eventBusService.post(new LibraryMember.LeaveEvent(...));    // <1>
+        // ...
+        eventBusService.post(new LibraryMember.LeaveEvent(/*...*/));    // <1>
     }
-    ...
+    // ...
 }
 ----
 <1> `LibraryMember.LeaveEvent` could be _any_ class, not just a subclass of `o.a.i.applib.event.ActionDomainEvent`.
@@ -272,23 +296,28 @@ In practice we suspect there will be few cases where the programmatic approach i
 
 == Using `WrapperFactory`
 
-An alternative way to cause events to be posted is through the xref:rg:svc:application-layer-api/WrapperFactory.adoc[`WrapperFactory`].  This is useful when you wish to enforce a (lack-of-) trust boundary between the caller and the callee.
+An alternative way to cause events to be posted is through the xref:rg:svc:application-layer-api/WrapperFactory.adoc[`WrapperFactory`].
+This is useful when you wish to enforce a (lack-of-) trust boundary between the caller and the callee.
 
-For example, suppose that `Customer#placeOrder(...)` emits a `PlaceOrderEvent`, which is subscribed to by a `ReserveStockSubscriber`.  This subscriber in turn calls `StockManagementService#reserveStock(...)`.  Any business rules on `#reserveStock(...)` should be enforced.
+For example, suppose that `Customer#placeOrder(...)` emits a `PlaceOrderEvent`, which is subscribed to by a `ReserveStockSubscriber`.
+This subscriber in turn calls `StockManagementService#reserveStock(...)`.
+Any business rules on `#reserveStock(...)` should be enforced.
 
 In the `ReserveStockSubscriber`, we therefore use the `WrapperFactory`:
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
-public class ReserveStockSubscriber {
-    @Programmatic
-    @Subscribe
+public class ReserveStockSubscriber extends AbstractSubscriber{
+
+    @EventListener(Customer.PlaceOrderEvent.class)
     public void on(Customer.PlaceOrderEvent ev) {
         wrapperFactory.wrap(stockManagementService)
                       .reserveStock(ev.getProduct(), ev.getQuantity());
     }
-    ...
+
     @Inject
     StockManagementService stockManagementService;
     @Inject
diff --git a/antora/components/rg/modules/svc/pages/integration-api/BookmarkService.adoc b/antora/components/rg/modules/svc/pages/integration-api/BookmarkService.adoc
index 3d23d53..1fbade0 100644
--- a/antora/components/rg/modules/svc/pages/integration-api/BookmarkService.adoc
+++ b/antora/components/rg/modules/svc/pages/integration-api/BookmarkService.adoc
@@ -83,9 +83,12 @@ Either of these can be suppressed, if required, using a vetoing subscriber.  For
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
-public class AlwaysHideBookmarkHolderAssociationsObjectProperty {
-    @Subscribe
+public class AlwaysHideBookmarkHolderAssociationsObjectProperty
+                                            extends AbstractSubscriber{
+    @EventListener(BookmarkHolderAssociationContributions.ObjectDomainEvent.class)
     public void on(BookmarkHolderAssociationContributions.ObjectDomainEvent ev) {
         ev.hide();
     }
diff --git a/antora/components/rg/modules/svc/pages/persistence-layer-api/H2ManagerMenu.adoc b/antora/components/rg/modules/svc/pages/persistence-layer-api/H2ManagerMenu.adoc
index 8cac259..c459ba4 100644
--- a/antora/components/rg/modules/svc/pages/persistence-layer-api/H2ManagerMenu.adoc
+++ b/antora/components/rg/modules/svc/pages/persistence-layer-api/H2ManagerMenu.adoc
@@ -76,10 +76,12 @@ The menu can be hidden or disabled by subscribing to its domain event, eg:
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=DOMAIN)
-public void HideH2ManagerMenu extends AbstractSubscriber {
+public class HideH2ManagerMenu extends AbstractSubscriber {
 
-    @EventHandler @Subscribe
+    @EventListener(H2ManagerMenu.ActionDomainEvent.class)
     public void on(H2ManagerMenu.ActionDomainEvent ev) {
         ev.hide();
     }
diff --git a/antora/components/rg/modules/svc/pages/persistence-layer-api/HsqlDbManagerMenu.adoc b/antora/components/rg/modules/svc/pages/persistence-layer-api/HsqlDbManagerMenu.adoc
index 51d8e8c..72368a5 100644
--- a/antora/components/rg/modules/svc/pages/persistence-layer-api/HsqlDbManagerMenu.adoc
+++ b/antora/components/rg/modules/svc/pages/persistence-layer-api/HsqlDbManagerMenu.adoc
@@ -30,10 +30,12 @@ The menu can be hidden or disabled by subscribing to its domain event, eg:
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=DOMAIN)
-public void HideHsqlDbManagerMenu extends AbstractSubscriber {
+public class HideHsqlDbManagerMenu extends AbstractSubscriber {
 
-    @EventHandler @Subscribe
+    @EventListener(HsqlDbManagerMenu.ActionDomainEvent.class)
     public void on(HsqlDbManagerMenu.ActionDomainEvent ev) {
         ev.hide();
     }
diff --git a/antora/components/ug/modules/btb/pages/hints-and-tips/persisted-title.adoc b/antora/components/ug/modules/btb/pages/hints-and-tips/persisted-title.adoc
index c041f0a..b16de3c 100644
--- a/antora/components/ug/modules/btb/pages/hints-and-tips/persisted-title.adoc
+++ b/antora/components/ug/modules/btb/pages/hints-and-tips/persisted-title.adoc
@@ -22,16 +22,21 @@ We can then define a subscribing domain service that leverage this.
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature = NatureOfService.DOMAIN)
 public class TitlingService extends AbstractSubscriber {
-    @Subscribe
-    public void on(final ObjectPersistingEvent ev) {
+
+    @EventListener(ObjectPersistingEvent.class)
+    public void on(ObjectPersistingEvent ev) {
         handle(ev.getSource());
     }
-    @Subscribe
-    public void on(final ObjectUpdatingEvent ev) {
+
+    @EventListener(ObjectUpdatingEvent.class)
+    public void on(ObjectUpdatingEvent ev) {
         handle(ev.getSource());
     }
+
     private void handle(final Object persistentInstance) {
         if(persistentInstance instanceof ObjectWithPersistedTitle) {
             final ObjectWithPersistedTitle objectWithPersistedTitle =
@@ -39,6 +44,7 @@ public class TitlingService extends AbstractSubscriber {
             objectWithPersistedTitle.setTitle(titleService.titleOf(objectWithPersistedTitle));
         }
     }
+
     @Inject
     TitleService titleService;
 }
diff --git a/antora/components/ug/modules/fun/pages/building-blocks/identifiers/title-and-icon-and-css-class.adoc b/antora/components/ug/modules/fun/pages/building-blocks/identifiers/title-and-icon-and-css-class.adoc
index 3257116..6aa563a 100644
--- a/antora/components/ug/modules/fun/pages/building-blocks/identifiers/title-and-icon-and-css-class.adoc
+++ b/antora/components/ug/modules/fun/pages/building-blocks/identifiers/title-and-icon-and-css-class.adoc
@@ -8,7 +8,7 @@ The icon informally identifies the type of the domain object, while the title id
 
 == Title
 
-The title of a domain object is shown in several places: as the main heading for an object; as a link text for an object referencing another object, and also in tables representing collections of objects.
+The title of a domain object is shown in several places: as the main heading for an object; as a link text or tooltip for an object referencing another object, and also in tables representing collections of objects.
 
 The title is not formally required to be a unique identify the object within its type, but it needs to be "unique enough" that a human user is able to distinguish one instance from another.
 
diff --git a/antora/components/ug/modules/fun/pages/programming-model/domain-services/event-subscribers.adoc b/antora/components/ug/modules/fun/pages/programming-model/domain-services/event-subscribers.adoc
index 6eb5fa2..debc1c6 100644
--- a/antora/components/ug/modules/fun/pages/programming-model/domain-services/event-subscribers.adoc
+++ b/antora/components/ug/modules/fun/pages/programming-model/domain-services/event-subscribers.adoc
@@ -13,19 +13,14 @@ We suggest naming such classes `XxxSubscriptions`, for example:
 
 [source,java]
 ----
-@DomainService(
-    nature=NatureOfService.DOMAIN                      // <1>
-)
-@DomainServiceLayout(
-    menuOrder="10",
-    name="...",
-}
+import org.springframework.context.event.EventListener;
+
+@DomainService( nature=NatureOfService.DOMAIN )         // <1>
 public class CustomerOrderSubscriptions
                     extends AbstractSubscriber {        // <2>
 
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
-    public void on(final Customer.DeletedEvent ev) {    // <3>
+    @EventListener(Customer.DeletedEvent.class)         // <3>
+    public void on(final Customer.DeletedEvent ev) {    // <4>
         Customer customer = ev.getSource();
         orderRepository.delete(customer);
     }
@@ -34,9 +29,10 @@ public class CustomerOrderSubscriptions
     OrderRepository orderRepository;
 }
 ----
-<1> subscriptions do not appear in the UI at all, so should use the domain nature of service
+<1> subscriptions do not appear in the UI at all
 <2> subclass from the `AbstractSubscriber` convenience superclass
-<3> the parameter type of the method corresponds to the event emitted on the event bus.
+<3> use Spring Frameworkr's `@EventListener`
+<4> the parameter type of the method corresponds to the event emitted on the event bus.
 The actual method name does not matter (though it must have `public` visibility).
 
 
diff --git a/antora/components/ug/modules/fun/pages/ui-hints/names-and-descriptions.adoc b/antora/components/ug/modules/fun/pages/ui-hints/names-and-descriptions.adoc
index 116a1da..710bd8c 100644
--- a/antora/components/ug/modules/fun/pages/ui-hints/names-and-descriptions.adoc
+++ b/antora/components/ug/modules/fun/pages/ui-hints/names-and-descriptions.adoc
@@ -5,6 +5,7 @@ include::_attributes.adoc[]
 
 The name of classes and class members are usually inferred from the Java source code directly.
 For example, an action method called `placeOrder` will be rendered as "Place Order", and a collection called `orderItems` is rendered as "Order Items".
+The same is true for action parameter names also, though note that the code must be compiled with the `--parameters` flag (to javac).
 
 Occasionally though the desired name is not possible; either the name is a Java reserved word (eg "class"), or might require characters that are not valid, for example abbreviations.
 
@@ -47,15 +48,5 @@ The table below summarizes the annotations available:
 |===
 
 
-[TIP]
-====
-If you're running on Java 8, then note that it's possible to write Isis applications without using `@ParameterLayout(named=...)` annotation.
-Support for this can be found in the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s paraname8 metamodel extension (non-ASF).
-(In the future we'll fold this into core).
-
-See also our guidance on xref:downloads:mn:about.adoc#_migration-notes_1.8.0-to-1.9.0_upgrading-to-java8[upgrading to Java 8].
-====
-
-
 The framework also supports i18n: locale-specific names and descriptions.
 For more information, see the xref:ug:btb:i18n.adoc[beyond-the-basics] guide.
diff --git a/antora/components/ug/modules/fun/pages/ui-hints/object-titles-and-icons.adoc b/antora/components/ug/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
index 8b2632a..bd2b62a 100644
--- a/antora/components/ug/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
+++ b/antora/components/ug/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
@@ -15,9 +15,12 @@ In conjunction with xref:ug:vw:customisation/tweaking-css-classes.adoc[customize
 
 == Object Title
 
-The object title is a label to identify an object to the end-user.  Generally the object title is a label to identify an object to the end-user.  There is no requirement for it to be absolutely unique, but it should be "unique enough" to distinguish the object from other object's likely to be rendered on the same page.
+The object title is a label to identify an object to the end-user.
+Generally the object title is a label to identify an object to the end-user.
+There is no requirement for it to be absolutely unique, but it should be "unique enough" to distinguish the object from other object's likely to be rendered on the same page.
 
-The title is always shown with an icon, so there is generally no need for the title to include information about the object's type.  For example the title of a customer object shouldn't include the literal string "Customer"; it can just have the customer's name, reference or some other meaningful business identifier.
+The title is always shown with an icon, so there is generally no need for the title to include information about the object's type.
+For example the title of a customer object shouldn't include the literal string "Customer"; it can just have the customer's name, reference or some other meaningful business identifier.
 
 
 === Declarative style
@@ -29,11 +32,16 @@ For example:
 [source,java]
 ----
 public class Customer {
+
     @Title(sequence="1", append=" ")
-    public String getFirstName() { ... }
+    @lombok.Getter
+    private String firstName;
+
     @Title(sequence="2")
-    public Product getLastName() { ... }
-    ...
+    @lombok.Getter
+    private String lastName;
+
+    // ...
 }
 ----
 
@@ -42,37 +50,40 @@ might return "Arthur Clarke", while:
 [source,java]
 ----
 public class CustomerAlt {
+
     @Title(sequence="2", prepend=", ")
-    public String getFirstName() { ... }
+    @lombok.Getter
+    private String firstName;
 
     @Title(sequence="1")
-    public Product getLastName() { ... }
-    ...
+    @lombok.Getter
+    private String lastName;
+
+    // ...
 }
 ----
 
 could return "Clarke, Arthur".
 
-Note that the sequence is in Dewey Decimal Format.  This allows a subclass to intersperse information within the title.  For example (please forgive this horrible domain modelling (!)):
+Note that the sequence is in Dewey Decimal Format, which allows a subclass to intersperse information within the title.
+For example:
 
 
 [source,java]
 ----
 public class Author extends Customer {
+
     @Title(sequence="1.5", append=". ")
-    public String getMiddleInitial() { ... }
-    ...
+    @lombok.Getter
+    private String middleInitial;
+
+    // ...
 }
 ----
 
 could return "Arthur C. Clarke".
 
 
-[TIP]
-====
-Titles can sometimes get be long and therefore rather cumbersome in "parented" tables.  If `@Title` has been used then the Wicket viewer will automatically exclude portions of the title belonging to the owning object.
-====
-
 
 === Imperative style
 
@@ -85,7 +96,7 @@ For example:
 public class Author extends Customer {
 
     public String title() {
-        StringBuilder buf = new StringBuilder();
+        final StringBuilder buf = new StringBuilder();
         buf.append(getFirstName());
         if(getMiddleInitial() != null) {
             buf.append(getMiddleInitial()).append(". ");
@@ -93,7 +104,8 @@ public class Author extends Customer {
         buf.append(getLastName();
         return buf.toString();
     }
-    ...
+
+    // ...
 }
 ----
 
@@ -114,7 +126,8 @@ In the target object, we define an appropriate event type and use the xref:rg:an
 public class Author extends Customer {
     public static class TitleUiEvent
             extends org.apache.isis.applib.events.ui.TitleUiEvent<Author> {}
-    ...
+
+    //...
 }
 ----
 
@@ -122,14 +135,15 @@ The subscriber can then populate this event:
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class AuthorSubscriptions extends AbstractSubscriber {
 
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(Author.TitleUiEvent.class)
     public void on(Author.TitleUiEvent ev) {
         Author author = ev.getSource();
-        ev.setTitle(titleOf(author);
+        ev.setTitle(titleOf(author));
     }
 
     private String titleOf(Author author) {
@@ -138,7 +152,7 @@ public class AuthorSubscriptions extends AbstractSubscriber {
         if(author.getMiddleInitial() != null) {
             buf.append(author.getMiddleInitial()).append(". ");
         }
-        buf.append(author.getLastName();
+        buf.append(author.getLastName());
         return buf.toString();
     }
 }
@@ -149,7 +163,7 @@ public class AuthorSubscriptions extends AbstractSubscriber {
 
 The icon is often the same for all instances of a particular class, and is picked up by convention.
 
-It's is also possible for an individual instance to return a custom icon, typically so that some significant state of that domain object is represented.
+It's also possible for an individual instance to return a custom icon, typically so that some significant state of that domain object is represented.
 For example, a custom icon could be used to represent a shipped order, say, or an overdue library loan.
 
 
@@ -158,18 +172,16 @@ For example, a custom icon could be used to represent a shipped order, say, or a
 If there is no requirement to customize the icon (the normal case), then the icon is usually picked up as the `.png` file in the same package as the class.
 For example, the icon for a class `org.mydomain.myapp.Customer` will be `org/mydomain/myapp/Customer.png` (if it exists).
 
-Alternatively, font-awesome icon can be used.
-This is specified using the xref:rg:ant:DomainObjectLayout/cssClassFa.adoc[`@DomainObjectLayout#cssClassFa()`] attribute.
+Alternatively, a font-awesome icon can be used.
+This is specified using the xref:rg:ant:DomainObjectLayout/cssClassFa.adoc[`@DomainObjectLayout#cssClassFa()`] attribute or in the xref:ug:vw:layout/file-based.adoc[layout.xml] file.
 
 For example:
 
 [source,java]
 ----
-@DomainObjectLayout(
-    cssClassFa="play"               // <1>
-)
+@DomainObjectLayout( cssClassFa="play" )    // <1>
 public class InvoiceRun {
-    ...
+    // ...
 }
 ----
 <1> will use the "fa-play" icon.
@@ -188,7 +200,7 @@ public class Order {
     public String iconName() {
         return isShipped() ? "shipped": null;
     }
-    ...
+    // ..
 }
 ----
 
@@ -203,7 +215,7 @@ As for title, the determination of which image file to use for the icon can be e
 
 In the target object, we define an appropriate event type and use the xref:rg:ant:DomainObjectLayout/iconUiEvent.adoc[`@DomainObjectLayout#iconUiEvent()`] attribute to specify.
 
-For example
+For example:
 
 [source,java]
 ----
@@ -213,18 +225,20 @@ For example
 public class Order {
     public static class IconUiEvent
             extends org.apache.isis.applib.events.ui.IconUiEvent<Order> {}
-    ...
+    // ..
 }
 ----
 
 The subscriber can then populate this event:
 
+*TODO: v2: *what annotation is required for SpringBoot event subscribers?
+
 [source,java]
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class OrderSubscriptions extends AbstractSubscriber {
 
-    @org.axonframework.eventhandling.EventHandler       // if using axon
+    @org.axonframework.eventhandling.EventHandler       p
     @com.google.common.eventbus.Subscribe               // if using guava
     public void on(Order.IconUiEvent ev) {
         Order order = ev.getSource();
@@ -250,7 +264,7 @@ In conjunction with xref:ug:vw:customisation/tweaking-css-classes.adoc[customize
 === Declarative style
 
 To render an object with a particular CSS, use
-xref:rg:ant:DomainObjectLayout/cssClass.adoc[`@DomainObjectLayout#cssClass()`].
+xref:rg:ant:DomainObjectLayout/cssClass.adoc[`@DomainObjectLayout#cssClass()`] or in the xref:ug:vw:layout/file-based.adoc[layout.xml] file.
 
 When the domain object is rendered on its own page, this CSS class will appear on a top-level `<div>`.
 Or, when the domain object is rendered as a row in a collection, then the CSS class will appear in a `<div>` wrapped by the `<tr>` of the row.
@@ -272,7 +286,7 @@ public class Order {
     public String cssClass() {
         return isShipped() ? "shipped": null;       <1>
     }
-    ...
+    // ...
 }
 ----
 <1> the implementation might well be the same as the `iconName()`.
@@ -291,13 +305,11 @@ For example
 
 [source,java]
 ----
-@DomainObjectLayout(
-    cssClassUiEvent = Author.CssClassUiEvent.class
-)
+@DomainObjectLayout( cssClassUiEvent = Author.CssClassUiEvent.class )
 public class Order {
     public static class CssClassUiEvent
             extends org.apache.isis.applib.events.ui.CssClassUiEvent<Order> {}
-    ...
+    // ..
 }
 ----
 
@@ -305,18 +317,18 @@ The subscriber can then populate this event:
 
 [source,java]
 ----
+import org.springframework.context.event.EventListener;
+
 @DomainService(nature=NatureOfService.DOMAIN)
 public class OrderSubscriptions extends AbstractSubscriber {
 
-    @org.axonframework.eventhandling.EventHandler       // if using axon
-    @com.google.common.eventbus.Subscribe               // if using guava
+    @EventListener(Order.CssClassUiEvent.class)
     public void on(Order.CssClassUiEvent ev) {
         Order order = ev.getSource();
-        ev.setIconName(iconNameOf(order);
+        ev.setIconName(cssClassOf(order));
     }
 
-    private String cssClassOf(Order order) {
-        StringBuilder buf = new StringBuilder();
+    private static String cssClassOf(Order order) {
         return order.isShipped() ? "shipped": null;
     }
 }
diff --git a/antora/components/ug/modules/tst/pages/integ-test-support/wrapper-factory.adoc b/antora/components/ug/modules/tst/pages/integ-test-support/wrapper-factory.adoc
index c1e51bb..d9e8b66 100644
--- a/antora/components/ug/modules/tst/pages/integ-test-support/wrapper-factory.adoc
+++ b/antora/components/ug/modules/tst/pages/integ-test-support/wrapper-factory.adoc
@@ -130,32 +130,34 @@ A test might therefore look like:
 
 [source,java]
 ----
-@Inject
-private EventBusService eventBusService;                                          // <1>
-
-@Test
-public void subscriberReceivesEvents() throws Exception {
-
-    // given
-    final ToDoItem.CompletedEvent[] evHolder = new ToDoItem.CompletedEvent[1];    // <2>
-    eventBusService.register(new Object() {
-        @Subscribe
-        public void on(final ToDoItem.CompletedEvent ev) {                        // <3>
-            evHolder[0] = ev;
-        }
-    });
-
-    // when
-    toDoItem.completed();                                                         // <4>
-
-    // then
-    then(evHolder[0].getSource()).isEqualTo(unwrap(toDoItem));                    // <5>
-    then(evHolder[0].getIdentifier().getMemberName()).isEqualTo("completed");
+public class SomeIntegratTest /* ... */ {
+    @Inject
+    private EventBusService eventBusService;                                       // <1>
+
+    @Test
+    public void subscriberReceivesEvents() {
+
+        // given
+        final ToDoItem.CompletedEvent[] evHolder = new ToDoItem.CompletedEvent[1]; // <2>
+        eventBusService.register(new Object() {
+            @org.springframework.context.event.EventListener(ToDoItem.CompletedEvent.class)
+            public void on(final ToDoItem.CompletedEvent ev) {                     // <3>
+                evHolder[0] = ev;
+            }
+        });
+
+        // when
+        toDoItem.completed();                                                      // <4>
+
+        // then
+        then(evHolder[0].getSource()).isEqualTo(unwrap(toDoItem));                 // <5>
+        then(evHolder[0].getIdentifier().getMemberName()).isEqualTo("completed");
+    }
 }
 ----
 <1> inject xref:rg:svc:core-domain-api/EventBusService.adoc[`EventBusService`] into this test
 <2> holder for subscriber to capture event to
-<3> subscriber's callback, using the guava subscriber syntax
+<3> subscriber's callback, using Spring events
 <4> invoking the domain object using the wrapper
 <5> assert that the event was populated
 
diff --git a/antora/components/ug/modules/vw/pages/hints-and-tips/highlight-current-row.adoc b/antora/components/ug/modules/vw/pages/hints-and-tips/highlight-current-row.adoc
index f8bc44d..078b584 100644
--- a/antora/components/ug/modules/vw/pages/hints-and-tips/highlight-current-row.adoc
+++ b/antora/components/ug/modules/vw/pages/hints-and-tips/highlight-current-row.adoc
@@ -31,11 +31,13 @@ Next, we define the domain service to act as the subscriber:
 [source,java]
 .HomePageViewModel.java
 ----
-public class HomePageViewModel ... {
+import org.springframework.context.event.EventListener;
+
+public class HomePageViewModel {
+
     @DomainService(nature = NatureOfService.DOMAIN)
     public static class CssHighlighter extends AbstractSubscriber {
-        @org.axonframework.eventhandling.EventHandler       // if using axon
-        @com.google.common.eventbus.Subscribe               // if using guava
+        @EventListener(DemoObject.CssClassUiEvent.class)
         public void on(DemoObject.CssClassUiEvent ev) {
             if(getContext() == null) { return; }
             if(ev.getSource() == getContext().getSelected()) {      // <1>
@@ -51,6 +53,7 @@ public class HomePageViewModel ... {
         @Inject
         Scratchpad scratchpad;                                      // <3>
     }
+
 }
 ----
 <1> If the domain object is the currently selected then set the CSS class
diff --git a/preview.sh b/preview.sh
index ae57ef6..cb45623 100644
--- a/preview.sh
+++ b/preview.sh
@@ -1,9 +1,4 @@
 #!/usr/bin/env bash
 rm -rf antora/target/site \
 && antora site.yml $@ \
-&& serve antora/target/site
-
-#rm -rf antora/target/site
-#antora site.yml $@
-##cp -R antora/hp-overlay
-#serve antora/target/site
+&& serve --local antora/target/site