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 2017/04/20 08:39:30 UTC

[20/34] isis-site git commit: ISIS-1521: ugfun.adoc and FIXMEs

http://git-wip-us.apache.org/repos/asf/isis-site/blob/6ad91949/content/guides/rgsvc/rgsvc.html
----------------------------------------------------------------------
diff --git a/content/guides/rgsvc/rgsvc.html b/content/guides/rgsvc/rgsvc.html
index 5653e86..a59509d 100644
--- a/content/guides/rgsvc/rgsvc.html
+++ b/content/guides/rgsvc/rgsvc.html
@@ -439,7 +439,7 @@
          </div> 
         </div> 
         <div class="paragraph"> 
-         <p>A small number of domain services can be considered both API and SPI; a good example is the <a href="#_rgsvc_api_EmailService"><code>EmailService</code></a> that is of direct use for domain objects wishing to send out emails, but is also used by the framework to support the <a href="ugvw.html#_ugvw_features_user-registration">user registration</a> functionality supported by the <a href="ugvw.html">Wicket viewer</a>. The same is true of the <a href="#_rgsvc_api_EventBusService"><code>EventBusService</code></a>; this can be used by domain objects to broadcast arbitrary events, but is also used by the framework to automatically emit events for <a href="rgant.html#_rgant-Action_domainEvent"><code>@Action#domainEvent()</code></a> etc.</p> 
+         <p>A small number of domain services can be considered both API and SPI; a good example is the <a href="../rgsvc/rgsvc.html#_rgsvc_api_EmailService"><code>EmailService</code></a> that is of direct use for domain objects wishing to send out emails, but is also used by the framework to support the <a href="../ugvw/ugvw.html#_ugvw_features_user-registration">user registration</a> functionality supported by the <a href="../ugvw/ugvw.html">Wicket viewer</a>. The same is true of the <a href="../rgsvc/rgsvc.html#_rgsvc_api_EventBusService"><code>EventBusService</code></a>; this can be used by domain objects to broadcast arbitrary events, but is also used by the framework to automatically emit events for <a href="../rgant/rgant.html#_rgant-Action_domainEvent"><code>@Action#domainEvent()</code></a> etc.</p> 
         </div> 
         <div class="paragraph"> 
          <p>For these hybrid services we have categorized the service as an "API" service. This chapter therefore contains only the strictly SPI services.</p> 
@@ -454,7 +454,7 @@
          <p>The vast majority of Apache Isis' domain services are defined in Apache Isis' applib (<code>o.a.i.core:isis-core-applib</code> module) as stable, public classes. Importantly, this also minimizes the coupling between your code and Apache Isis, allowing you to easily mock out these services in your unit tests.</p> 
         </div> 
         <div class="paragraph"> 
-         <p>The framework also defines a number of "internal" services. These are not part of the framework\u2019s formal API, in that they use classes that are outside of the applib. These internal framework services should be thought of as part of the internal design of the framework, and are liable to change from release to release. The internal framework services are documented in the <a href="rgfis.html">Framework Internal Services</a> guide.</p> 
+         <p>The framework also defines a number of "internal" services. These are not part of the framework\u2019s formal API, in that they use classes that are outside of the applib. These internal framework services should be thought of as part of the internal design of the framework, and are liable to change from release to release. The internal framework services are documented in the <a href="../rgfis/rgfis.html">Framework Internal Services</a> guide.</p> 
         </div> 
        </div> 
        <div class="sect2"> 
@@ -497,10 +497,10 @@
          <p>For objects that are already persisted, the service is automatically injected just after the object is rehydrated by JDO/DataNucleus.</p> 
         </div> 
         <div class="paragraph"> 
-         <p>For transient objects (instantiated programmatically), the <a href="#_rgsvc_api_FactoryService"><code>FactoryService</code></a>'s <code>instantiate()</code> method (or the deprecated <a href="#_rgsvc_api_DomainObjectContainer"><code>DomainObjectContainer</code></a>'s <code>newTransientInstance()</code> method) will automatically inject the services.</p> 
+         <p>For transient objects (instantiated programmatically), the <a href="../rgsvc/rgsvc.html#_rgsvc_api_FactoryService"><code>FactoryService</code></a>'s <code>instantiate()</code> method (or the deprecated <a href="../rgsvc/rgsvc.html#_rgsvc_api_DomainObjectContainer"><code>DomainObjectContainer</code></a>'s <code>newTransientInstance()</code> method) will automatically inject the services.</p> 
         </div> 
         <div class="paragraph"> 
-         <p>Alternatively the object can be instantiated simply using <code>new</code>, then services injected using <a href="#_rgsvc_api_ServiceRegistry"><code>ServiceRegistry</code></a>'s <code>injectServicesInto(\u2026\u200b)</code> method (or the deprecated <a href="#_rgsvc_api_DomainObjectContainer"><code>DomainObjectContainer</code></a>'s <code>injectServicesInto(\u2026\u200b)</code> method).</p> 
+         <p>Alternatively the object can be instantiated simply using <code>new</code>, then services injected using <a href="../rgsvc/rgsvc.html#_rgsvc_api_ServiceRegistry"><code>ServiceRegistry</code></a>'s <code>injectServicesInto(\u2026\u200b)</code> method (or the deprecated <a href="../rgsvc/rgsvc.html#_rgsvc_api_DomainObjectContainer"><code>DomainObjectContainer</code></a>'s <code>injectServicesInto(\u2026\u200b)</code> method).</p> 
         </div> 
        </div> 
        <div class="sect2"> 
@@ -509,7 +509,7 @@
          <p>The framework provides default implementations for many of the domain services. This is convenient, but sometimes you will want to replace the default implementation with your own service implementation.</p> 
         </div> 
         <div class="paragraph"> 
-         <p>The trick is to use the <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> attribute, specifying a low number (typically <code>"1"</code>).</p> 
+         <p>The trick is to use the <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> attribute, specifying a low number (typically <code>"1"</code>).</p> 
         </div> 
         <div class="admonitionblock note"> 
          <table> 
@@ -518,14 +518,14 @@
             <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
             <td class="content"> 
              <div class="paragraph"> 
-              <p>For a small number of domain services, all implementations are used (following the chain-of-responsibility pattern), not just the first one. The services in question are: <a href="#_rgsvc_spi_ContentMappingService"><code>ContentMappingService</code></a>, <a href="#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>, and <a href="#_rgsvc_spi_RoutingService"><code>RoutingService</code></a>.</p> 
+              <p>For a small number of domain services, all implementations are used (following the chain-of-responsibility pattern), not just the first one. The services in question are: <a href="../rgsvc/rgsvc.html#_rgsvc_spi_ContentMappingService"><code>ContentMappingService</code></a>, <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>, and <a href="../rgsvc/rgsvc.html#_rgsvc_spi_RoutingService"><code>RoutingService</code></a>.</p> 
              </div> </td> 
            </tr> 
           </tbody>
          </table> 
         </div> 
         <div class="paragraph"> 
-         <p>For example, suppose you wanted to provide your own implementation of <a href="#_rgsvc_api_LocaleProvider"><code>LocaleProvider</code></a>. Here\u2019s how:</p> 
+         <p>For example, suppose you wanted to provide your own implementation of <a href="../rgsvc/rgsvc.html#_rgsvc_api_LocaleProvider"><code>LocaleProvider</code></a>. Here\u2019s how:</p> 
         </div> 
         <div class="listingblock"> 
          <div class="content"> 
@@ -619,22 +619,22 @@
         </div> 
         <div class="ulist"> 
          <ul> 
-          <li> <p>the (request-scoped) <a href="#_rgsvc_api_CommandContext"><code>CommandContext</code></a> captures the user\u2019s intention to invoke an action or edit a property; this is held by the <code>Command</code> object.</p> </li> 
-          <li> <p>if a <a href="#_rgsvc_spi_CommandService"><code>CommandService</code></a> has been configured, then this will be used to create the <code>Command</code> object implementation, generally so that it can then also be persisted.<br></p> 
+          <li> <p>the (request-scoped) <a href="../rgsvc/rgsvc.html#_rgsvc_api_CommandContext"><code>CommandContext</code></a> captures the user\u2019s intention to invoke an action or edit a property; this is held by the <code>Command</code> object.</p> </li> 
+          <li> <p>if a <a href="../rgsvc/rgsvc.html#_rgsvc_spi_CommandService"><code>CommandService</code></a> has been configured, then this will be used to create the <code>Command</code> object implementation, generally so that it can then also be persisted.<br></p> 
            <div class="paragraph"> 
-            <p>If the action or property is annotated to be invoked in the background (using <a href="rgant.html#_rgant-Action_command"><code>@Action#command\u2026\u200b()</code></a> or <a href="rgant.html#_rgant-Property_command"><code>@Property#command\u2026\u200b()</code></a>) then no further work is done. But, if the action/property is to be executed in the foreground, then the interaction continues.</p> 
+            <p>If the action or property is annotated to be invoked in the background (using <a href="../rgant/rgant.html#_rgant-Action_command"><code>@Action#command\u2026\u200b()</code></a> or <a href="../rgant/rgant.html#_rgant-Property_command"><code>@Property#command\u2026\u200b()</code></a>) then no further work is done. But, if the action/property is to be executed in the foreground, then the interaction continues.</p> 
            </div> </li> 
-          <li> <p>the (request-scoped) <a href="#_rgsvc_api_InteractionContext"><code>InteractionContext</code></a> domain service acts as a factory for the <code>Interaction</code> object, which keeps track of the call-graph of executions (<code>Interaction.Execution</code>) of either action invocations or property edits. In the majority of cases there is likely to be just a single top-level node of this graph, but for applications that use the <a href="#_rgsvc_api_WrapperFactory"><code>WrapperFactory</code></a> extensively each successive call results in a new child execution.</p> </li> 
-          <li> <p>before and after each action invocation/property edit, a <a href="rgcms.html#_rgcms_classes_domainevent">domain event</a> is may be broadcast to all subscribers. Whether this occurs depends on whether the action/property has been annotated (using <a href="rgant.html#_rgant-Action_domainEvent"><code>@Action#domainEvent()</code></a> or <a href="rgant.html#_rgant-Property_domainEvent"><code>@Property#domainEvent()</code></a>).<br></p> 
+          <li> <p>the (request-scoped) <a href="../rgsvc/rgsvc.html#_rgsvc_api_InteractionContext"><code>InteractionContext</code></a> domain service acts as a factory for the <code>Interaction</code> object, which keeps track of the call-graph of executions (<code>Interaction.Execution</code>) of either action invocations or property edits. In the majority of cases there is likely to be just a single top-level node of this graph, but for applications that use the <a href="../rgsvc/rgsvc.html#_rgsvc_api_WrapperFactory"><code>WrapperFactory</code></a> extensively each successive call results in a new child execution.</p> </li> 
+          <li> <p>before and after each action invocation/property edit, a <a href="../rgcms/rgcms.html#_rgcms_classes_domainevent">domain event</a> is may be broadcast to all subscribers. Whether this occurs depends on whether the action/property has been annotated (using <a href="../rgant/rgant.html#_rgant-Action_domainEvent"><code>@Action#domainEvent()</code></a> or <a href="../rgant/rgant.html#_rgant-Property_domainEvent"><code>@Property#domainEvent()</code></a>).<br></p> 
            <div class="paragraph"> 
             <p>(Note that susbcribers will also receive events for vetoing the action/property; this is not shown on the diagram).</p> 
            </div> </li> 
-          <li> <p>As each execution progresses, and objects that are modified are "enlisted" into the (internal) <a href="rgfis.html#_rgfis_spi_ChangedObjectsServiceInternal"><code>ChangedObjectsServiceInternal</code></a> domain service. Metrics as to which objects are merely loaded into memory are also captured using the <a href="#_rgsvc_api_MetricsService"><code>MetricsService</code></a> (not shown on the diagram).</p> </li> 
-          <li> <p>At the end of each execution, details of that execution are published through the (internal) <a href="rgfis.html#_rgfis_spi_PublisherServiceInternal"><code>PublisherServiceInternal</code></a> domain service. This is only done for actions/properties annotated appropriate (with <a href="rgant.html#_rgant-Action_publishing"><code>@Action#publishing()</code></a> or <a href="rgant.html#_rgant-Property_publishing"><code>@Property#publishing()</code></a>). <br></p> 
+          <li> <p>As each execution progresses, and objects that are modified are "enlisted" into the (internal) <a href="../rgfis/rgfis.html#_rgfis_spi_ChangedObjectsServiceInternal"><code>ChangedObjectsServiceInternal</code></a> domain service. Metrics as to which objects are merely loaded into memory are also captured using the <a href="../rgsvc/rgsvc.html#_rgsvc_api_MetricsService"><code>MetricsService</code></a> (not shown on the diagram).</p> </li> 
+          <li> <p>At the end of each execution, details of that execution are published through the (internal) <a href="../rgfis/rgfis.html#_rgfis_spi_PublisherServiceInternal"><code>PublisherServiceInternal</code></a> domain service. This is only done for actions/properties annotated appropriate (with <a href="../rgant/rgant.html#_rgant-Action_publishing"><code>@Action#publishing()</code></a> or <a href="../rgant/rgant.html#_rgant-Property_publishing"><code>@Property#publishing()</code></a>). <br></p> 
            <div class="paragraph"> 
-            <p>The internal service delegates in turn to any registered <a href="#_rgsvc_spi_PublishingService"><code>PublishingService</code></a> (deprecated) and also to any registered <a href="#_rgsvc_spi_PublisherService"><code>PublisherService</code></a>s (there may be more than one).</p> 
+            <p>The internal service delegates in turn to any registered <a href="../rgsvc/rgsvc.html#_rgsvc_spi_PublishingService"><code>PublishingService</code></a> (deprecated) and also to any registered <a href="../rgsvc/rgsvc.html#_rgsvc_spi_PublisherService"><code>PublisherService</code></a>s (there may be more than one).</p> 
            </div> </li> 
-          <li> <p>At the end of each transaction, details of all changed objects are published, again through the (internal) <a href="rgfis.html#_rgfis_spi_PublisherServiceInternal"><code>PublisherServiceInternal</code></a> to any registered <code>PublishingService</code> or <code>PublisherService</code> implementations. Only domain objects specified to be published with <a href="rgant.html#_rgant-DomainObject_publishing"><code>@DomainObject#publishing()</code></a> are published.<br></p> 
+          <li> <p>At the end of each transaction, details of all changed objects are published, again through the (internal) <a href="../rgfis/rgfis.html#_rgfis_spi_PublisherServiceInternal"><code>PublisherServiceInternal</code></a> to any registered <code>PublishingService</code> or <code>PublisherService</code> implementations. Only domain objects specified to be published with <a href="../rgant/rgant.html#_rgant-DomainObject_publishing"><code>@DomainObject#publishing()</code></a> are published.<br></p> 
            <div class="admonitionblock note"> 
             <table> 
              <tbody>
@@ -642,26 +642,26 @@
                <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
                <td class="content"> 
                 <div class="paragraph"> 
-                 <p>Note that it\u2019s possible for there to be more than one transaction per top-level interaction, by virtue of the <a href="#_rgsvc_api_TransactionService"><code>TransactionService</code></a>.</p> 
+                 <p>Note that it\u2019s possible for there to be more than one transaction per top-level interaction, by virtue of the <a href="../rgsvc/rgsvc.html#_rgsvc_api_TransactionService"><code>TransactionService</code></a>.</p> 
                 </div> </td> 
               </tr> 
              </tbody>
             </table> 
            </div> </li> 
-          <li> <p>Also at the end of each transaction, details of all changed properties are passed to any registered <a href="#_rgsvc_spi_AuditerService"><code>AuditerService</code></a> or <a href="#_rgsvc_spi_AuditingService"><code>AuditingService</code></a> (the latter deprecated) by way of the (internal) <a href="rgfis.html#_rgfis_spi_AuditingServiceInternal"><code>AuditingServiceInternal</code></a> domain service.</p> </li> 
+          <li> <p>Also at the end of each transaction, details of all changed properties are passed to any registered <a href="../rgsvc/rgsvc.html#_rgsvc_spi_AuditerService"><code>AuditerService</code></a> or <a href="../rgsvc/rgsvc.html#_rgsvc_spi_AuditingService"><code>AuditingService</code></a> (the latter deprecated) by way of the (internal) <a href="../rgfis/rgfis.html#_rgfis_spi_AuditingServiceInternal"><code>AuditingServiceInternal</code></a> domain service.</p> </li> 
          </ul> 
         </div> 
         <div class="paragraph"> 
-         <p>Implementations of <a href="#_rgsvc_spi_CommandService"><code>CommandService</code></a> can use the <code>Command#getMemento()</code> method to obtain a XML equivalent of that <code>Command</code>, reified using the <a href="rgcms.html#_rgcms_schema-cmd"><code>cmd.xsd</code></a> schema. This can be converted back into a <code>CommandDto</code> using the <code>CommandDtoUtils</code> utility class (part of the applib).</p> 
+         <p>Implementations of <a href="../rgsvc/rgsvc.html#_rgsvc_spi_CommandService"><code>CommandService</code></a> can use the <code>Command#getMemento()</code> method to obtain a XML equivalent of that <code>Command</code>, reified using the <a href="../rgcms/rgcms.html#_rgcms_schema-cmd"><code>cmd.xsd</code></a> schema. This can be converted back into a <code>CommandDto</code> using the <code>CommandDtoUtils</code> utility class (part of the applib).</p> 
         </div> 
         <div class="paragraph"> 
-         <p>Similarly, implementations of <a href="#_rgsvc_spi_PublisherService"><code>PublisherService</code></a> can use the <code>InteractionDtoUtils</code> utility class to obtain a <code>InteractionDto</code> representing the interaction, either just for a single execution or for the entire call-graph. This can be converted into XML in a similar fashion.</p> 
+         <p>Similarly, implementations of <a href="../rgsvc/rgsvc.html#_rgsvc_spi_PublisherService"><code>PublisherService</code></a> can use the <code>InteractionDtoUtils</code> utility class to obtain a <code>InteractionDto</code> representing the interaction, either just for a single execution or for the entire call-graph. This can be converted into XML in a similar fashion.</p> 
         </div> 
         <div class="paragraph"> 
          <p>Likewise, the <code>PublishedObjects</code> class passed to the <code>PublisherService</code> at the end of the interaction provides the <code>PublishedObjects#getDto()</code> method which returns a <code>ChangesDto</code> instance. This can be converted into XML using the <code>ChangesDtoUtils</code> utility class.</p> 
         </div> 
         <div class="paragraph"> 
-         <p>One final point: multiple <a href="#_rgsvc_spi_PublisherService"><code>PublisherService</code></a> implementations are supported because different implementations may have different responsibilities. For example, the (non-ASF) <a href="http://github.com/isisaddons/isis-module-publishmq">Isis addons' publishmq</a> module is responsible for publishing messages onto an ActiveMQ event bus, for inter-system communication. However, the SPI can also be used for profiling; each execution within the call-graph contains metrics of the number of objects loaded or modified as a result of that execution, and thus could be used for application profiling. The framework provides a default <code>PublisherServiceLogging</code> implementation that logs this using SLF4J.</p> 
+         <p>One final point: multiple <a href="../rgsvc/rgsvc.html#_rgsvc_spi_PublisherService"><code>PublisherService</code></a> implementations are supported because different implementations may have different responsibilities. For example, the (non-ASF) <a href="http://github.com/isisaddons/isis-module-publishmq">Isis addons' publishmq</a> module is responsible for publishing messages onto an ActiveMQ event bus, for inter-system communication. However, the SPI can also be used for profiling; each execution within the call-graph contains metrics of the number of objects loaded or modified as a result of that execution, and thus could be used for application profiling. The framework provides a default <code>PublisherServiceLogging</code> implementation that logs this using SLF4J.</p> 
         </div> 
        </div> 
       </div> 
@@ -696,7 +696,7 @@
         </thead> 
         <tbody> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_ContentMappingService"><code>o.a.i.applb.</code><br> <code>services.conmap</code><br> <code>ContentMappingService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_ContentMappingService"><code>o.a.i.applb.</code><br> <code>services.conmap</code><br> <code>ContentMappingService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -707,18 +707,18 @@
           <td class="tableblock halign-left valign-top"><p class="tableblock">Replaces (and simplifies) the earlier <code>ContentMappingService</code> that defined an SPI using classes internal to the framework.<br> + No default implementation.</p></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_EmailNotificationService"><code>o.a.i.applib.</code><br> <code>services.userreg</code><br> <code>EmailNotificationService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_EmailNotificationService"><code>o.a.i.applib.</code><br> <code>services.userreg</code><br> <code>EmailNotificationService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
-             <p>Notify a user during <a href="#_rgsvc_spi_UserRegistrationService">self-registration</a> of users.</p> 
+             <p>Notify a user during <a href="../rgsvc/rgsvc.html#_rgsvc_spi_UserRegistrationService">self-registration</a> of users.</p> 
             </div>
            </div></td> 
           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>EmailNotificationService-</code><br> <code>Default</code><br> <code>o.a.i.core</code><br> <code>isis-core-runtime</code></p></td> 
           <td class="tableblock halign-left valign-top"><p class="tableblock">depends on:<br> a configured <code>EmailService</code></p></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_ErrorReportingService"><code>o.a.i.applib.</code><br> <code>services.error</code><br> <code>ErrorReportingService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_ErrorReportingService"><code>o.a.i.applib.</code><br> <code>services.error</code><br> <code>ErrorReportingService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -729,7 +729,7 @@
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_ExceptionRecognizer"><code>o.a.i.applib.</code><br> <code>services.exceprecog</code><br> <code>ExceptionRecognizer2</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_ExceptionRecognizer"><code>o.a.i.applib.</code><br> <code>services.exceprecog</code><br> <code>ExceptionRecognizer2</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -740,7 +740,7 @@
           <td class="tableblock halign-left valign-top"><p class="tableblock">Extensible using composite pattern if required</p></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_GridSystemService"><code>o.a.i.applib.</code><br> <code>services.grid</code><br> <code>GridSystemService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>o.a.i.applib.</code><br> <code>services.grid</code><br> <code>GridSystemService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -751,7 +751,7 @@
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_GridLoaderService"><code>o.a.i.applib.</code><br> <code>services.grid</code><br> <code>GridLoaderService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridLoaderService"><code>o.a.i.applib.</code><br> <code>services.grid</code><br> <code>GridLoaderService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -762,18 +762,18 @@
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_GridService"><code>o.a.i.applib.</code><br> <code>services.grid</code><br> <code>GridService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridService"><code>o.a.i.applib.</code><br> <code>services.grid</code><br> <code>GridService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
-             <p>A facade on top of both <a href="#_rgsvc_spi_GridLoaderService"><code>GridLoaderService</code></a> and <a href="#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>, thus being able to return normalized grids for any domain class.</p> 
+             <p>A facade on top of both <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridLoaderService"><code>GridLoaderService</code></a> and <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>, thus being able to return normalized grids for any domain class.</p> 
             </div>
            </div></td> 
           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>GridServiceDefault</code><br> <code>o.a.i.core</code><br> <code>isis-core-metamodel</code></p></td> 
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_HintStore"><code>o.a.i.applib.</code><br> <code>services.hint</code><br> <code>HintStore</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_HintStore"><code>o.a.i.applib.</code><br> <code>services.hint</code><br> <code>HintStore</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -784,18 +784,18 @@
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_LocaleProvider"><code>o.a.i.applib.</code><br> <code>services.i18n</code><br> <code>LocaleProvider</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_LocaleProvider"><code>o.a.i.applib.</code><br> <code>services.i18n</code><br> <code>LocaleProvider</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
-             <p>Request-scoped service to return the locale of the current user, in support of i18n (ie so that the app\u2019s UI, messages and exceptions can be translated to the required locale by the <a href="#_rgsvc_spi_TranslationService"><code>TranslationService</code></a>.</p> 
+             <p>Request-scoped service to return the locale of the current user, in support of i18n (ie so that the app\u2019s UI, messages and exceptions can be translated to the required locale by the <a href="../rgsvc/rgsvc.html#_rgsvc_spi_TranslationService"><code>TranslationService</code></a>.</p> 
             </div>
            </div></td> 
           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>LocaleProviderWicket</code><br> <code>o.a.i.viewer</code><br> <code>isis-viewer-wicket-impl</code></p></td> 
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_RoutingService"><code>o.a.i.applib.</code><br> <code>services.routing</code><br> <code>RoutingService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_RoutingService"><code>o.a.i.applib.</code><br> <code>services.routing</code><br> <code>RoutingService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -803,10 +803,10 @@
             </div>
            </div></td> 
           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>RoutingServiceDefault</code><br> <code>o.a.i.core</code><br> <code>isis-core-applib</code></p></td> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock">The default implementation will return the home page (per <a href="#_rgsvc_api_HomePageProviderService"><code>HomePageProviderService</code></a>) if a void or null is returned.<br> Used by the <a href="ugvw.html">Wicket viewer</a> only.</p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock">The default implementation will return the home page (per <a href="../rgsvc/rgsvc.html#_rgsvc_api_HomePageProviderService"><code>HomePageProviderService</code></a>) if a void or null is returned.<br> Used by the <a href="../ugvw/ugvw.html">Wicket viewer</a> only.</p></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_TableColumnOrderService"><code>o.a.i.applib.</code><br> <code>services.tablecol</code><br> <code>TableColumn-</code><br> <code>OrderService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_TableColumnOrderService"><code>o.a.i.applib.</code><br> <code>services.tablecol</code><br> <code>TableColumn-</code><br> <code>OrderService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -817,29 +817,29 @@
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_TranslationService"><code>o.a.i.applib.</code><br> <code>services.i18n</code><br> <code>TranslationService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_TranslationService"><code>o.a.i.applib.</code><br> <code>services.i18n</code><br> <code>TranslationService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
-             <p>Translate an app\u2019s UI, messages and exceptions for the current user (as per the locale provided by <a href="#_rgsvc_spi_LocaleProvider"><code>LocalProvider</code></a>.</p> 
+             <p>Translate an app\u2019s UI, messages and exceptions for the current user (as per the locale provided by <a href="../rgsvc/rgsvc.html#_rgsvc_spi_LocaleProvider"><code>LocalProvider</code></a>.</p> 
             </div>
            </div></td> 
           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>TranslationServicePo</code><br> <code>o.a.i.core</code><br> <code>isis-core-runtime</code></p></td> 
           <td class="tableblock halign-left valign-top"><p class="tableblock">related services: <code>TranslationServicePoMenu</code><br> depends on:<br> <code>TranslationsResolver</code>, <code>LocaleProvider</code></p></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_TranslationsResolver"><code>o.a.i.applib.</code><br> <code>services.i18n</code><br> <code>TranslationsResolver</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_TranslationsResolver"><code>o.a.i.applib.</code><br> <code>services.i18n</code><br> <code>TranslationsResolver</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
-             <p>Obtain translations for a particuar phrase and locale, in support of i18n (ie so that the app\u2019s UI, messages and exceptions can be translated to the required locale by the <a href="#_rgsvc_spi_TranslationService"><code>TranslationService</code></a></p> 
+             <p>Obtain translations for a particuar phrase and locale, in support of i18n (ie so that the app\u2019s UI, messages and exceptions can be translated to the required locale by the <a href="../rgsvc/rgsvc.html#_rgsvc_spi_TranslationService"><code>TranslationService</code></a></p> 
             </div>
            </div></td> 
           <td class="tableblock halign-left valign-top"><p class="tableblock"><code>TranslationsResolverWicket</code><br> <code>o.a.i.viewer</code><br> <code>isis-viewer-wicket-impl</code></p></td> 
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_UrlEncodingService"><code>o.a.i.applib.</code><br> <code>services.urlencoding</code><br> <code>UrlEncodingService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_UrlEncodingService"><code>o.a.i.applib.</code><br> <code>services.urlencoding</code><br> <code>UrlEncodingService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -850,7 +850,7 @@
           <td class="tableblock halign-left valign-top"></td> 
          </tr> 
          <tr> 
-          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgsvc_spi_UserProfileService"><code>o.a.i.applib.</code><br> <code>services.userprof</code><br> <code>UserProfileService</code></a></p></td> 
+          <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../rgsvc/rgsvc.html#_rgsvc_spi_UserProfileService"><code>o.a.i.applib.</code><br> <code>services.userprof</code><br> <code>UserProfileService</code></a></p></td> 
           <td class="tableblock halign-left valign-top">
            <div>
             <div class="paragraph"> 
@@ -876,10 +876,10 @@
        <div class="sect2"> 
         <h3 id="_rgsvc_spi_ContentMappingService">3.1. <code>ContentMappingService</code></h3> 
         <div class="paragraph"> 
-         <p>The <code>ContentMappingService</code> supports the (default implementation of the) <a href="rgfis.html#_rgfis_spi_ContentNegotiationService"><code>ContentNegotiationService</code></a> allowing the <a href="ugvro.html">RestfulObjects viewer</a> to allow domain objects to be transformed into some other format as specified by the HTTP <code>Accept</code> header.</p> 
+         <p>The <code>ContentMappingService</code> supports the (default implementation of the) <a href="../rgfis/rgfis.html#_rgfis_spi_ContentNegotiationService"><code>ContentNegotiationService</code></a> allowing the <a href="../ugvro/ugvro.html">RestfulObjects viewer</a> to allow domain objects to be transformed into some other format as specified by the HTTP <code>Accept</code> header.</p> 
         </div> 
         <div class="paragraph"> 
-         <p>See <a href="rgfis.html#_rgfis_spi_ContentNegotiationService"><code>ContentNegotiationService</code></a> for further discussion.</p> 
+         <p>See <a href="../rgfis/rgfis.html#_rgfis_spi_ContentNegotiationService"><code>ContentNegotiationService</code></a> for further discussion.</p> 
         </div> 
         <div class="admonitionblock note"> 
          <table> 
@@ -888,7 +888,7 @@
             <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
             <td class="content"> 
              <div class="paragraph"> 
-              <p>Unlike most other domain services, the framework (that is, <code>ContentNegotiationService</code>) will check <em>all</em> available implementations of <code>ContentMappingService</code> to convert the domain object to the requested media type, rather than merely the first implementation found; in other words it uses the chain-of-responsibility pattern. Services are checked in the ordering defined by <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>). The mapped object used will be the first non-<code>null</code> result returned by an implementation.</p> 
+              <p>Unlike most other domain services, the framework (that is, <code>ContentNegotiationService</code>) will check <em>all</em> available implementations of <code>ContentMappingService</code> to convert the domain object to the requested media type, rather than merely the first implementation found; in other words it uses the chain-of-responsibility pattern. Services are checked in the ordering defined by <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>). The mapped object used will be the first non-<code>null</code> result returned by an implementation.</p> 
              </div> </td> 
            </tr> 
           </tbody>
@@ -922,7 +922,7 @@
           </table> 
          </div> 
          <div class="paragraph"> 
-          <p>In versions prior to <code>v1.12.0</code>, this interface resided in a different package, internal to the <a href="#ugvro.adoc">Restful Objects</a> viewer, and defined a slightly different signature that used an internal enum:</p> 
+          <p>In versions prior to <code>v1.12.0</code>, this interface resided in a different package, internal to the <a href="../ugvro/ugvro.html">Restful Objects</a> viewer, and defined a slightly different signature that used an internal enum:</p> 
          </div> 
          <div class="listingblock"> 
           <div class="content"> 
@@ -987,23 +987,23 @@
         <div class="sect3"> 
          <h4 id="_related_services">3.1.3. Related Services</h4> 
          <div class="paragraph"> 
-          <p>This service is a companion to the default implementation of the <a href="rgfis.html#_rgfis_spi_ContentNegotiationService"><code>ContentNegotiationService</code></a>.</p> 
+          <p>This service is a companion to the default implementation of the <a href="../rgfis/rgfis.html#_rgfis_spi_ContentNegotiationService"><code>ContentNegotiationService</code></a>.</p> 
          </div> 
         </div> 
        </div> 
        <div class="sect2"> 
         <h3 id="_rgsvc_spi_EmailNotificationService">3.2. <code>EmailNotificationService</code></h3> 
         <div class="paragraph"> 
-         <p>The <code>EmailNotificationService</code> supports the <a href="ugvw.html#_ugvw_features_user-registration">user registration</a> (self sign-up) features of the <a href="ugvw.html">Wicket viewer</a> whereby a user can sign-up to access an application by providing a valid email address.</p> 
+         <p>The <code>EmailNotificationService</code> supports the <a href="../ugvw/ugvw.html#_ugvw_features_user-registration">user registration</a> (self sign-up) features of the <a href="../ugvw/ugvw.html">Wicket viewer</a> whereby a user can sign-up to access an application by providing a valid email address.</p> 
         </div> 
         <div class="paragraph"> 
-         <p>The Wicket viewer will check whether an implementation of this service (and also the <a href="#_rgsvc_spi_UserRegistrationService"><code>UserRegistrationService</code></a>) is available, and if so will (unless configured not to) expose a sign-up page where the user enters their email address. A verification email is sent using this service; the email includes a link back to the running application. The user then completes the registration process (choosing a user name, password and so on) and the Wicket viewer creates an account for them (using the aforementioned <code>UserRegistrationService</code>).</p> 
+         <p>The Wicket viewer will check whether an implementation of this service (and also the <a href="../rgsvc/rgsvc.html#_rgsvc_spi_UserRegistrationService"><code>UserRegistrationService</code></a>) is available, and if so will (unless configured not to) expose a sign-up page where the user enters their email address. A verification email is sent using this service; the email includes a link back to the running application. The user then completes the registration process (choosing a user name, password and so on) and the Wicket viewer creates an account for them (using the aforementioned <code>UserRegistrationService</code>).</p> 
         </div> 
         <div class="paragraph"> 
          <p>The role of this service in all of this is to format and send out emails for the initial registration, or for password resets.</p> 
         </div> 
         <div class="paragraph"> 
-         <p>The default implementation of this service uses the <a href="#_rgsvc_api_EmailService"><code>EmailService</code></a>, which must be configured in order for user registration to be enabled.</p> 
+         <p>The default implementation of this service uses the <a href="../rgsvc/rgsvc.html#_rgsvc_api_EmailService"><code>EmailService</code></a>, which must be configured in order for user registration to be enabled.</p> 
         </div> 
         <div class="sect3"> 
          <h4 id="_spi_2">3.2.1. SPI</h4> 
@@ -1058,7 +1058,7 @@
            <p>If you have configured an alternative email service implementation, it should process the message body as HTML.</p> 
           </div> 
           <div class="paragraph"> 
-           <p>If you wish to write an alternative implementation of this service, note that (unlike most Apache Isis domain services) the implementation is also instantiated and injected by Google Guice. This is because <code>EmailNotificationService</code> is used as part of the <a href="ugvw.html#_ugvw_features_user-registration">user registration</a> functionality and is used by Wicket pages that are accessed outside of the usual Apache Isis runtime.</p> 
+           <p>If you wish to write an alternative implementation of this service, note that (unlike most Apache Isis domain services) the implementation is also instantiated and injected by Google Guice. This is because <code>EmailNotificationService</code> is used as part of the <a href="../ugvw/ugvw.html#_ugvw_features_user-registration">user registration</a> functionality and is used by Wicket pages that are accessed outside of the usual Apache Isis runtime.</p> 
           </div> 
           <div class="paragraph"> 
            <p>This implies a couple of additional constraints:</p> 
@@ -1077,19 +1077,19 @@
         <div class="sect3"> 
          <h4 id="_registering_the_service">3.2.3. Registering the Service</h4> 
          <div class="paragraph"> 
-          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>) then Apache Isis' default implementation of <code>EmailNotificationService</code> service is automatically registered and injected (it is annotated with <code>@DomainService</code>) so no further configuration is required.</p> 
+          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>) then Apache Isis' default implementation of <code>EmailNotificationService</code> service is automatically registered and injected (it is annotated with <code>@DomainService</code>) so no further configuration is required.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>To use an alternative implementation, use <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
+          <p>To use an alternative implementation, use <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="../rgsvc/rgsvc.html#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
          </div> 
         </div> 
         <div class="sect3"> 
          <h4 id="_related_services_2">3.2.4. Related Services</h4> 
          <div class="paragraph"> 
-          <p>As noted elsewhere, the default implementation of this service uses <a href="#_rgsvc_api_EmailService"><code>EmailService</code></a>. This service has no specific configuration properties but does require that the <code>EmailService</code> has been configured.</p> 
+          <p>As noted elsewhere, the default implementation of this service uses <a href="../rgsvc/rgsvc.html#_rgsvc_api_EmailService"><code>EmailService</code></a>. This service has no specific configuration properties but does require that the <code>EmailService</code> has been configured.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>Conversely, this service is used by (Isis' default implementation of) <a href="#_rgsvc_spi_UserRegistrationService"><code>UserRegistrationService</code></a>.</p> 
+          <p>Conversely, this service is used by (Isis' default implementation of) <a href="../rgsvc/rgsvc.html#_rgsvc_spi_UserRegistrationService"><code>UserRegistrationService</code></a>.</p> 
          </div> 
         </div> 
        </div> 
@@ -1128,11 +1128,11 @@
            <tbody>
             <tr> 
              <td><i class="conum" data-value="1"></i><b>1</b></td> 
-             <td>the main message to be displayed to the end-user. The service is responsible for translating this into the language of the end-user (it can use <a href="#_rgsvc_spi_LocaleProvider"><code>LocaleProvider</code></a> if required).</td> 
+             <td>the main message to be displayed to the end-user. The service is responsible for translating this into the language of the end-user (it can use <a href="../rgsvc/rgsvc.html#_rgsvc_spi_LocaleProvider"><code>LocaleProvider</code></a> if required).</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="2"></i><b>2</b></td> 
-             <td>whether this message has already been recognized by an <a href="#_rgsvc_spi_ExceptionRecognizer"><code>ExceptionRecognizer</code></a> service. Generally this converts potentially non-recoverable (fatal) exceptions into recoverable exceptions (warnings) as well providing an alternative mechanism for generating user-friendly error messages.</td> 
+             <td>whether this message has already been recognized by an <a href="../rgsvc/rgsvc.html#_rgsvc_spi_ExceptionRecognizer"><code>ExceptionRecognizer</code></a> service. Generally this converts potentially non-recoverable (fatal) exceptions into recoverable exceptions (warnings) as well providing an alternative mechanism for generating user-friendly error messages.</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="3"></i><b>3</b></td> 
@@ -1217,7 +1217,7 @@
         <div class="sect3"> 
          <h4 id="_registering_the_services">3.3.3. Registering the Services</h4> 
          <div class="paragraph"> 
-          <p>There is no default implementation of this service. To register your own implementation (and assuming that an <code>AppManifest</code> is being used to <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), then just ensure that the implementation is on the classpath and the module containing the implementation is returned in <code>AppManifest#getModules()</code>.</p> 
+          <p>There is no default implementation of this service. To register your own implementation (and assuming that an <code>AppManifest</code> is being used to <a href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), then just ensure that the implementation is on the classpath and the module containing the implementation is returned in <code>AppManifest#getModules()</code>.</p> 
          </div> 
         </div> 
        </div> 
@@ -1329,7 +1329,7 @@
           </table> 
          </div> 
          <div class="paragraph"> 
-          <p>In essence, if an exception is recognized then it is also categorized. This lets the viewer act accordingly. For example, if an exception is raised from the loading of an individual object, then this is passed by the registered <code>ExceptionRecognizer</code>s. If any of these recognize the exception as representing a not-found exception, then an Apache Isis <code>ObjectNotFoundException</code> is raised. Both the viewers interprets this correctly (the <a href="ugvw.html">Wicket viewer</a> as a suitable error page, the <a href="ugvro.html">Restful Objects viewer</a> as a 404 status return code).</p> 
+          <p>In essence, if an exception is recognized then it is also categorized. This lets the viewer act accordingly. For example, if an exception is raised from the loading of an individual object, then this is passed by the registered <code>ExceptionRecognizer</code>s. If any of these recognize the exception as representing a not-found exception, then an Apache Isis <code>ObjectNotFoundException</code> is raised. Both the viewers interprets this correctly (the <a href="../ugvw/ugvw.html">Wicket viewer</a> as a suitable error page, the <a href="../ugvro/ugvro.html">Restful Objects viewer</a> as a 404 status return code).</p> 
          </div> 
          <div class="paragraph"> 
           <p>If the implementation recognizes the exception then it returns a user-friendly message to be rendered (by the viewer) back to the user; otherwise it returns <code>null</code>. There is no need for the implementation to check for exception causes; the casual chain is unwrapped by Apache Isis core and each exception in the chain will also be passed through to the recognizer (from most specific to least). The recognizer implementation can therefore be as fine-grained or as coarse-grained as it wishes.</p> 
@@ -1360,7 +1360,7 @@
         <div class="sect3"> 
          <h4 id="_registering_the_services_2">3.4.3. Registering the Services</h4> 
          <div class="paragraph"> 
-          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>) then the default implementations provided by the framework (<code>DomainObjectContainerDefault</code> and <code>ExceptionRecognizerCompositeForJdoObjectStore</code>) will be registered.</p> 
+          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>) then the default implementations provided by the framework (<code>DomainObjectContainerDefault</code> and <code>ExceptionRecognizerCompositeForJdoObjectStore</code>) will be registered.</p> 
          </div> 
          <div class="paragraph"> 
           <p>In addition, you can register any further exception recognizers in <code>isis.properties</code>:</p> 
@@ -1386,7 +1386,7 @@
           </table> 
          </div> 
          <div class="paragraph"> 
-          <p>If the JDO exception recognizers are not required (rather unlikely), then they can be disabled en-masse using the <a href="rgcfg.html#_rgcfg_configuring-core">configuration property</a> <code>isis.services.ExceptionRecognizerCompositeForJdoObjectStore.disable</code>.</p> 
+          <p>If the JDO exception recognizers are not required (rather unlikely), then they can be disabled en-masse using the <a href="../rgcfg/rgcfg.html#_rgcfg_configuring-core">configuration property</a> <code>isis.services.ExceptionRecognizerCompositeForJdoObjectStore.disable</code>.</p> 
          </div> 
         </div> 
        </div> 
@@ -1405,7 +1405,7 @@
             <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
             <td class="content"> 
              <div class="paragraph"> 
-              <p>Unlike most other domain services, the framework will check <em>all</em> available implementations of <code>GridSystemService</code> to obtain available grid systems, rather than merely the first implementation found; in other words it uses the chain-of-responsibility pattern. Services are called in the order defined by <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>).</p> 
+              <p>Unlike most other domain services, the framework will check <em>all</em> available implementations of <code>GridSystemService</code> to obtain available grid systems, rather than merely the first implementation found; in other words it uses the chain-of-responsibility pattern. Services are called in the order defined by <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>).</p> 
              </div> 
              <div class="paragraph"> 
               <p>Note though that each concrete implementation must also provide corresponding Wicket viewer components capable of interpreting the grid layout.</p> 
@@ -1437,7 +1437,7 @@
            <tbody>
             <tr> 
              <td><i class="conum" data-value="1"></i><b>1</b></td> 
-             <td>The concrete subclass of <code>Grid</code> supported by this implementation. As noted in the introduction, there can be multiple implementations of this service, but there can only be one implementation per concrete subclass. As is normal practice, the service with the lowest <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> takes precedence.</td> 
+             <td>The concrete subclass of <code>Grid</code> supported by this implementation. As noted in the introduction, there can be multiple implementations of this service, but there can only be one implementation per concrete subclass. As is normal practice, the service with the lowest <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> takes precedence.</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="2"></i><b>2</b></td> 
@@ -1453,15 +1453,15 @@
             </tr> 
             <tr> 
              <td><i class="conum" data-value="5"></i><b>5</b></td> 
-             <td>Validates and normalizes a grid, modifying the grid so that all of the domain object\u2019s members (properties, collections, actions) are bound to regions of the grid. This is done using existing metadata, most notably that of the <a href="rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a> annotation. Such a grid, if persisted as the layout XML file for the domain class, allows the <code>@MemberOrder</code> annotation to be removed from the source code of the domain class (but other annotations must be retained).</td> 
+             <td>Validates and normalizes a grid, modifying the grid so that all of the domain object\u2019s members (properties, collections, actions) are bound to regions of the grid. This is done using existing metadata, most notably that of the <a href="../rgant/rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a> annotation. Such a grid, if persisted as the layout XML file for the domain class, allows the <code>@MemberOrder</code> annotation to be removed from the source code of the domain class (but other annotations must be retained).</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="6"></i><b>6</b></td> 
-             <td>Takes a normalized grid and enriches it with additional metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML. Such a grid, if persisted as the layout XML file for the domain class, allows all layout annotations (<a href="rgant.html#_rgant-ActionLayout"><code>@ActionLayout</code></a>, <a href="rgant.html#_rgant-PropertyLayout"><code>@PropertyLayout</code></a> and <a href="rgant.html#_rgant-CollectionLayout"><code>@CollectionLayout</code></a>) to be removed from the source code of the domain class.</td> 
+             <td>Takes a normalized grid and enriches it with additional metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML. Such a grid, if persisted as the layout XML file for the domain class, allows all layout annotations (<a href="../rgant/rgant.html#_rgant-ActionLayout"><code>@ActionLayout</code></a>, <a href="../rgant/rgant.html#_rgant-PropertyLayout"><code>@PropertyLayout</code></a> and <a href="../rgant/rgant.html#_rgant-CollectionLayout"><code>@CollectionLayout</code></a>) to be removed from the source code of the domain class.</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="7"></i><b>7</b></td> 
-             <td>Takes a normalized grid and strips out removes all members, leaving only the grid structure. Such a grid, if persisted as the layout XML file for the domain class, requires that the <a href="rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a> annotation is retained in the source code of said class in order to bind members to the regions of the grid.</td> 
+             <td>Takes a normalized grid and strips out removes all members, leaving only the grid structure. Such a grid, if persisted as the layout XML file for the domain class, requires that the <a href="../rgant/rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a> annotation is retained in the source code of said class in order to bind members to the regions of the grid.</td> 
             </tr> 
            </tbody>
           </table> 
@@ -1470,22 +1470,22 @@
         <div class="sect3"> 
          <h4 id="_implementation_4">3.5.2. Implementation</h4> 
          <div class="paragraph"> 
-          <p>The framework provides <code>GridSystemServiceBS3</code>, an implementation that encodes the bootstrap3 grid system. (The framework also provides <a href="#ugvw.adoc">Wicket viewer</a> components that are capable of interpreting and rendering this metadata).</p> 
+          <p>The framework provides <code>GridSystemServiceBS3</code>, an implementation that encodes the bootstrap3 grid system. (The framework also provides <a href="../ugvw/ugvw.html">Wicket viewer</a> components that are capable of interpreting and rendering this metadata).</p> 
          </div> 
         </div> 
         <div class="sect3"> 
          <h4 id="_registering_the_services_3">3.5.3. Registering the Services</h4> 
          <div class="paragraph"> 
-          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), then the Bootstrap3 default implementation of <code>GridSystemService</code> is automatically registered and injected, and no further configuration is required.</p> 
+          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), then the Bootstrap3 default implementation of <code>GridSystemService</code> is automatically registered and injected, and no further configuration is required.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>To use an alternative implementation, use <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
+          <p>To use an alternative implementation, use <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="../rgsvc/rgsvc.html#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
          </div> 
         </div> 
         <div class="sect3"> 
          <h4 id="_related_services_3">3.5.4. Related Services</h4> 
          <div class="paragraph"> 
-          <p>This service is used by <a href="#_rgsvc_spi_GridService"><code>GridService</code></a>.</p> 
+          <p>This service is used by <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridService"><code>GridService</code></a>.</p> 
          </div> 
         </div> 
        </div> 
@@ -1518,7 +1518,7 @@
             </tr> 
             <tr> 
              <td><i class="conum" data-value="2"></i><b>2</b></td> 
-             <td>support metamodel invalidation/rebuilding of spec, eg as called by this <a href="rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel">Object mixin</a> action.</td> 
+             <td>support metamodel invalidation/rebuilding of spec, eg as called by this <a href="../rgcms/rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel">Object mixin</a> action.</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="3"></i><b>3</b></td> 
@@ -1526,7 +1526,7 @@
             </tr> 
             <tr> 
              <td><i class="conum" data-value="4"></i><b>4</b></td> 
-             <td>returns a new instance of a <a href="rgcms.html#__rgcms_classes_layout_component"><code>Grid</code></a> for the specified domain class, eg as loaded from a <code>layout.xml</code> file. If none exists, will return null (and the calling <a href="#_rgsvc_spi_GridService"><code>GridService</code></a> will use <a href="#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a> to obtain a default grid for the domain class).</td> 
+             <td>returns a new instance of a <a href="../rgcms/rgcms.html#__rgcms_classes_layout_component"><code>Grid</code></a> for the specified domain class, eg as loaded from a <code>layout.xml</code> file. If none exists, will return null (and the calling <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridService"><code>GridService</code></a> will use <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a> to obtain a default grid for the domain class).</td> 
             </tr> 
            </tbody>
           </table> 
@@ -1544,16 +1544,16 @@
         <div class="sect3"> 
          <h4 id="_registering_the_services_4">3.6.3. Registering the Services</h4> 
          <div class="paragraph"> 
-          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), then the default implementation of <code>GridLoaderService</code> is automatically registered and injected, and no further configuration is required.</p> 
+          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), then the default implementation of <code>GridLoaderService</code> is automatically registered and injected, and no further configuration is required.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>To use an alternative implementation, use <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
+          <p>To use an alternative implementation, use <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="../rgsvc/rgsvc.html#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
          </div> 
         </div> 
         <div class="sect3"> 
          <h4 id="_related_services_4">3.6.4. Related Services</h4> 
          <div class="paragraph"> 
-          <p>This service is used by <a href="#_rgsvc_spi_GridService"><code>GridService</code></a>.</p> 
+          <p>This service is used by <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridService"><code>GridService</code></a>.</p> 
          </div> 
         </div> 
        </div> 
@@ -1564,8 +1564,8 @@
         </div> 
         <div class="ulist"> 
          <ul> 
-          <li> <p>to <a href="#_rgsvc_spi_GridLoaderService"><code>GridLoaderService</code></a> to load a pre-existing layout for the domain class, if possible</p> </li> 
-          <li> <p>to <a href="#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a> to normalize the grid with respect to Apache Isis' internal metamodel, in other words to ensure that all of the domain objects' properties, collections and actions are associated with regions of the grid.</p> </li> 
+          <li> <p>to <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridLoaderService"><code>GridLoaderService</code></a> to load a pre-existing layout for the domain class, if possible</p> </li> 
+          <li> <p>to <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a> to normalize the grid with respect to Apache Isis' internal metamodel, in other words to ensure that all of the domain objects' properties, collections and actions are associated with regions of the grid.</p> </li> 
          </ul> 
         </div> 
         <div class="paragraph"> 
@@ -1599,15 +1599,15 @@
             </tr> 
             <tr> 
              <td><i class="conum" data-value="2"></i><b>2</b></td> 
-             <td>support metamodel invalidation/rebuilding of spec, eg as called by this <a href="rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel">Object mixin</a> action.</td> 
+             <td>support metamodel invalidation/rebuilding of spec, eg as called by this <a href="../rgcms/rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel">Object mixin</a> action.</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="3"></i><b>3</b></td> 
-             <td>whether any persisted layout metadata (eg a <code>.layout.xml</code> file) exists for this domain class. Just delegates to corresponding method in <a href="#_rgsvc_spi_GridLoaderService"><code>GridLoaderService</code></a>.</td> 
+             <td>whether any persisted layout metadata (eg a <code>.layout.xml</code> file) exists for this domain class. Just delegates to corresponding method in <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridLoaderService"><code>GridLoaderService</code></a>.</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="4"></i><b>4</b></td> 
-             <td>returns a new instance of a <a href="rgcms.html#__rgcms_classes_layout_component"><code>Grid</code></a> for the specified domain class, eg as loaded from a <code>layout.xml</code> file. If none exists, will return null (and the calling <a href="#_rgsvc_spi_GridService"><code>GridService</code></a> will use <a href="#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a> to obtain a default grid for the domain class).</td> 
+             <td>returns a new instance of a <a href="../rgcms/rgcms.html#__rgcms_classes_layout_component"><code>Grid</code></a> for the specified domain class, eg as loaded from a <code>layout.xml</code> file. If none exists, will return null (and the calling <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridService"><code>GridService</code></a> will use <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a> to obtain a default grid for the domain class).</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="5"></i><b>5</b></td> 
@@ -1615,21 +1615,21 @@
             </tr> 
             <tr> 
              <td><i class="conum" data-value="6"></i><b>6</b></td> 
-             <td>validates and normalizes a grid, modifying the grid so that all of the domain object\u2019s members (properties, collections, actions) are bound to regions of the grid. This is done using existing metadata, most notably that of the <a href="rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a> annotation. Such a grid, if persisted as the layout XML file for the domain class, allows the <code>@MemberOrder</code> annotation to be removed from the source code of the domain class (but other annotations must be retained).</td> 
+             <td>validates and normalizes a grid, modifying the grid so that all of the domain object\u2019s members (properties, collections, actions) are bound to regions of the grid. This is done using existing metadata, most notably that of the <a href="../rgant/rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a> annotation. Such a grid, if persisted as the layout XML file for the domain class, allows the <code>@MemberOrder</code> annotation to be removed from the source code of the domain class (but other annotations must be retained).</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="7"></i><b>7</b></td> 
-             <td>Takes a normalized grid and enriches it with additional metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML. Such a grid, if persisted as the layout XML file for the domain class, allows all layout annotations (<a href="rgant.html#_rgant-ActionLayout"><code>@ActionLayout</code></a>, <a href="rgant.html#_rgant-PropertyLayout"><code>@PropertyLayout</code></a> and <a href="rgant.html#_rgant-CollectionLayout"><code>@CollectionLayout</code></a>) to be removed from the source code of the domain class.</td> 
+             <td>Takes a normalized grid and enriches it with additional metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML. Such a grid, if persisted as the layout XML file for the domain class, allows all layout annotations (<a href="../rgant/rgant.html#_rgant-ActionLayout"><code>@ActionLayout</code></a>, <a href="../rgant/rgant.html#_rgant-PropertyLayout"><code>@PropertyLayout</code></a> and <a href="../rgant/rgant.html#_rgant-CollectionLayout"><code>@CollectionLayout</code></a>) to be removed from the source code of the domain class.</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="8"></i><b>8</b></td> 
-             <td>Takes a normalized grid and strips out removes all members, leaving only the grid structure. Such a grid, if persisted as the layout XML file for the domain class, requires that the <a href="rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a> annotation is retained in the source code of said class in order to bind members to the regions of the grid.</td> 
+             <td>Takes a normalized grid and strips out removes all members, leaving only the grid structure. Such a grid, if persisted as the layout XML file for the domain class, requires that the <a href="../rgant/rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a> annotation is retained in the source code of said class in order to bind members to the regions of the grid.</td> 
             </tr> 
            </tbody>
           </table> 
          </div> 
          <div class="paragraph"> 
-          <p>The first four methods just delegate to the corresponding methods in <a href="#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>, while the last four delegate to the corresponding method in <a href="#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>. The service inspects the <code>Grid</code>'s concrete class to determine which actual <code>GridSystemService</code> instance to delegate to.</p> 
+          <p>The first four methods just delegate to the corresponding methods in <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>, while the last four delegate to the corresponding method in <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>. The service inspects the <code>Grid</code>'s concrete class to determine which actual <code>GridSystemService</code> instance to delegate to.</p> 
          </div> 
         </div> 
         <div class="sect3"> 
@@ -1641,26 +1641,26 @@
         <div class="sect3"> 
          <h4 id="_registering_the_services_5">3.7.3. Registering the Services</h4> 
          <div class="paragraph"> 
-          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), then the default implementation of <code>GridLoaderService</code> is automatically registered and injected, and no further configuration is required.</p> 
+          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), then the default implementation of <code>GridLoaderService</code> is automatically registered and injected, and no further configuration is required.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>To use an alternative implementation, use <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="#__rgsvc_intro_overriding-the-services">introduction</a> to this guide). That said, there should be little reason to use a different implementation; if behaviour does need to be changed, it would also be possible to replace the implementation of either the <code>GridLoaderService</code> or the <code>GridSystemService</code>.</p> 
+          <p>To use an alternative implementation, use <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="../rgsvc/rgsvc.html#__rgsvc_intro_overriding-the-services">introduction</a> to this guide). That said, there should be little reason to use a different implementation; if behaviour does need to be changed, it would also be possible to replace the implementation of either the <code>GridLoaderService</code> or the <code>GridSystemService</code>.</p> 
          </div> 
         </div> 
         <div class="sect3"> 
          <h4 id="_related_services_5">3.7.4. Related Services</h4> 
          <div class="paragraph"> 
-          <p>This service calls <a href="#_rgsvc_spi_GridLoaderService"><code>GridLoaderService</code></a> and <a href="#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>.</p> 
+          <p>This service calls <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridLoaderService"><code>GridLoaderService</code></a> and <a href="../rgsvc/rgsvc.html#_rgsvc_spi_GridSystemService"><code>GridSystemService</code></a>.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>This service is called by <a href="#_rgsvc_api_LayoutService"><code>LayoutService</code></a>, exposed in the UI through <code>LayoutServiceMenu</code> (to download the layout XML as a zip file for all domain objects) and the <a href="rgcms.html#_rgcms_classes_mixins_Object"><code>downloadLayoutXml()</code></a> mixin (to download the layout XML for a single domain object).</p> 
+          <p>This service is called by <a href="../rgsvc/rgsvc.html#_rgsvc_api_LayoutService"><code>LayoutService</code></a>, exposed in the UI through <code>LayoutServiceMenu</code> (to download the layout XML as a zip file for all domain objects) and the <a href="../rgcms/rgcms.html#_rgcms_classes_mixins_Object"><code>downloadLayoutXml()</code></a> mixin (to download the layout XML for a single domain object).</p> 
          </div> 
         </div> 
        </div> 
        <div class="sect2"> 
         <h3 id="_rgsvc_spi_HintStore">3.8. <code>HintStore</code></h3> 
         <div class="paragraph"> 
-         <p>The <code>HintStore</code> service defines an SPI for the <a href="ugvw.html">Wicket viewer</a> to store UI hints on a per-object basis. For example, the viewer remembers which tabs are selected, and for collections which view is selected (eg table or hidden), which page of a table to render, or whether "show all" (rows) is toggled.</p> 
+         <p>The <code>HintStore</code> service defines an SPI for the <a href="../ugvw/ugvw.html">Wicket viewer</a> to store UI hints on a per-object basis. For example, the viewer remembers which tabs are selected, and for collections which view is selected (eg table or hidden), which page of a table to render, or whether "show all" (rows) is toggled.</p> 
         </div> 
         <div class="paragraph"> 
          <p>The default implementation of this service uses the HTTP session. The service is an SPI because the amount of data stored could potentially be quite large (for large numbers of users who use the app all day). An SPI makes it easy to plug in an alternative implementation that is more sophisticated than the default (eg implementing MRU/LRU queue, or using a NoSQL database, or simply to disabling the functionality altogether).</p> 
@@ -1686,7 +1686,7 @@
            <tbody>
             <tr> 
              <td><i class="conum" data-value="1"></i><b>1</b></td> 
-             <td>obtain a hint (eg which tab to open) for a particular object. Object identity is represented by <code>Bookmark</code>, as per the <a href="#_rgsvc_api_BookmarkService"><code>BookmarkService</code></a>, so that alternative implementations can easily serialize this state to a string.</td> 
+             <td>obtain a hint (eg which tab to open) for a particular object. Object identity is represented by <code>Bookmark</code>, as per the <a href="../rgsvc/rgsvc.html#_rgsvc_api_BookmarkService"><code>BookmarkService</code></a>, so that alternative implementations can easily serialize this state to a string.</td> 
             </tr> 
             <tr> 
              <td><i class="conum" data-value="2"></i><b>2</b></td> 
@@ -1717,23 +1717,23 @@
         <div class="sect3"> 
          <h4 id="_registering_the_service_2">3.8.3. Registering the Service</h4> 
          <div class="paragraph"> 
-          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>) then Apache Isis' core implementation of <code>HintStore</code> service is automatically registered and injected (it is annotated with <code>@DomainService</code>) so no further configuration is required.</p> 
+          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>) then Apache Isis' core implementation of <code>HintStore</code> service is automatically registered and injected (it is annotated with <code>@DomainService</code>) so no further configuration is required.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>To use an alternative implementation, use <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
+          <p>To use an alternative implementation, use <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="../rgsvc/rgsvc.html#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
          </div> 
         </div> 
         <div class="sect3"> 
          <h4 id="_related_services_6">3.8.4. Related Services</h4> 
          <div class="paragraph"> 
-          <p>The <a href="#ugvw.adoc">Wicket viewer</a> exposes the <a href="rgcms.html#__rgcms_classes_mixins_Object_clearHints">"clear hints"</a> mixin action that is for use by end-users of the application to clear any UI hints that have accumulated for a domain object.</p> 
+          <p>The <a href="../ugvw/ugvw.html">Wicket viewer</a> exposes the <a href="../rgcms/rgcms.html#__rgcms_classes_mixins_Object_clearHints">"clear hints"</a> mixin action that is for use by end-users of the application to clear any UI hints that have accumulated for a domain object.</p> 
          </div> 
         </div> 
        </div> 
        <div class="sect2"> 
         <h3 id="_rgsvc_spi_LocaleProvider">3.9. <code>LocaleProvider</code></h3> 
         <div class="paragraph"> 
-         <p>The <code>LocaleProvider</code> service is one of the services that work together to implement Apache Isis' support for i18n, being used by Isis' default implementation of <a href="#_rgsvc_spi_TranslationService"><code>TranslationService</code></a>.</p> 
+         <p>The <code>LocaleProvider</code> service is one of the services that work together to implement Apache Isis' support for i18n, being used by Isis' default implementation of <a href="../rgsvc/rgsvc.html#_rgsvc_spi_TranslationService"><code>TranslationService</code></a>.</p> 
         </div> 
         <div class="paragraph"> 
          <p>The role of the service itself is simply to return the <code>Locale</code> of the current user.</p> 
@@ -1745,7 +1745,7 @@
             <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
             <td class="content"> 
              <div class="paragraph"> 
-              <p>For the "big picture" and further details on Apache Isis' i18n support, see <a href="ugbtb.html#_ugbtb_i18n">here</a>.</p> 
+              <p>For the "big picture" and further details on Apache Isis' i18n support, see <a href="../ugbtb/ugbtb.html#_ugbtb_i18n">here</a>.</p> 
              </div> </td> 
            </tr> 
           </tbody>
@@ -1765,13 +1765,13 @@
           </div> 
          </div> 
          <div class="paragraph"> 
-          <p>This is notionally request-scoped, returning the <code>Locale</code> of the current user; <em>not</em> that of the server. (Note that the implementation is not required to actually be <a href="rgant.html#_rgant-RequestScoped"><code>@RequestScoped</code></a>, however).</p> 
+          <p>This is notionally request-scoped, returning the <code>Locale</code> of the current user; <em>not</em> that of the server. (Note that the implementation is not required to actually be <a href="../rgant/rgant.html#_rgant-RequestScoped"><code>@RequestScoped</code></a>, however).</p> 
          </div> 
         </div> 
         <div class="sect3"> 
          <h4 id="_implementation_8">3.9.2. Implementation</h4> 
          <div class="paragraph"> 
-          <p>Isis' <a href="ugvw.html">Wicket viewer</a> provides an implementation of this service (<code>LocaleProviderWicket</code>) which leverages Apache Wicket APIs.</p> 
+          <p>Isis' <a href="../ugvw/ugvw.html">Wicket viewer</a> provides an implementation of this service (<code>LocaleProviderWicket</code>) which leverages Apache Wicket APIs.</p> 
          </div> 
          <div class="admonitionblock note"> 
           <table> 
@@ -1780,7 +1780,7 @@
              <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
              <td class="content"> 
               <div class="paragraph"> 
-               <p>Currently there is no equivalent implementation for the <a href="ugvro.html">RestfulObjects viewer</a>.</p> 
+               <p>Currently there is no equivalent implementation for the <a href="../ugvro/ugvro.html">RestfulObjects viewer</a>.</p> 
               </div> </td> 
             </tr> 
            </tbody>
@@ -1790,16 +1790,16 @@
         <div class="sect3"> 
          <h4 id="_registering_the_services_6">3.9.3. Registering the Services</h4> 
          <div class="paragraph"> 
-          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), <em>and</em> that the <a href="ugvw.html">Wicket viewer</a> is being used, then an implementation of <code>LocaleProvider</code> is automatically registered and injected (it is annotated with <code>@DomainService</code>) so no further configuration is required.</p> 
+          <p>Assuming that the <code>configuration-and-annotation</code> services installer is configured (implicit if using the <code>AppManifest</code> to <a href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap the app</a>), <em>and</em> that the <a href="../ugvw/ugvw.html">Wicket viewer</a> is being used, then an implementation of <code>LocaleProvider</code> is automatically registered and injected (it is annotated with <code>@DomainService</code>) so no further configuration is required.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>To use an alternative implementation, use <a href="rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
+          <p>To use an alternative implementation, use <a href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a> (as explained in the <a href="../rgsvc/rgsvc.html#__rgsvc_intro_overriding-the-services">introduction</a> to this guide).</p> 
          </div> 
         </div> 
         <div class="sect3"> 
          <h4 id="_related_services_7">3.9.4. Related Services</h4> 
          <div class="paragraph"> 
-          <p>This service works in conjunction with <a href="#_rgsvc_spi_TranslationService"><code>TranslationService</code></a> and <a href="#_rgsvc_spi_TranslationsResolver"><code>TranslationsResolver</code></a> in order to provide i18n support.</p> 
+          <p>This service works in conjunction with <a href="../rgsvc/rgsvc.html#_rgsvc_spi_TranslationService"><code>TranslationService</code></a> and <a href="../rgsvc/rgsvc.html#_rgsvc_spi_TranslationsResolver"><code>TranslationsResolver</c

<TRUNCATED>