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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new bc5e8c3276 CAUSEWAY-3619: SPI for the GridSystemServiceBootstrap to 
provide custom (fallback) layouts
bc5e8c3276 is described below

commit bc5e8c32766a67d8f45ca74eed4ccaeb845d82dc
Author: Andi Huber <[email protected]>
AuthorDate: Fri Sep 29 11:26:41 2023 +0200

    CAUSEWAY-3619: SPI for the GridSystemServiceBootstrap to provide custom
    (fallback) layouts
---
 .../AcceptHeaderService_010-implementation.adoc    |  2 +-
 ...cationFeatureRepository_010-implementation.adoc |  2 +-
 .../hooks/BookmarkService_010-implementation.adoc  |  2 +-
 .../BookmarkUiService_010-implementation.adoc      |  2 +-
 .../CommandExecutorService_010-implementation.adoc |  2 +-
 ...onfigurationViewService_010-implementation.adoc |  2 +-
 .../ContentMappingService_010-implementation.adoc  |  4 +-
 .../hooks/EventBusService_010-implementation.adoc  |  2 +-
 .../EventBusService_020-examples-and-usage.adoc    |  8 ++--
 ...eptionRecognizerService_010-implementation.adoc |  2 +-
 .../hooks/FactoryService_010-implementation.adoc   |  2 +-
 .../grid/hooks/GridService_010-implementation.adoc |  3 +-
 .../GridSystemService_010-implementation.adoc      | 36 +++++++++++++++-
 .../HealthCheckService_020-examples-and-usage.adoc |  2 +-
 .../hint/hooks/HintStore_010-implementation.adoc   |  2 +-
 ...HomePageResolverService_010-implementation.adoc |  2 +-
 .../TranslationService_010-implementation.adoc     |  2 +-
 .../InteractionContext_010-implementation.adoc     |  2 +-
 .../hooks/ServiceInjector_010-implementation.adoc  |  2 +-
 .../jaxb/hooks/JaxbService_010-implementation.adoc |  2 +-
 .../hooks/LayoutService_010-implementation.adoc    |  2 +-
 .../hooks/DeepLinkService_010-implementation.adoc  |  2 +-
 .../MenuBarsLoaderService_010-implementation.adoc  |  2 +-
 .../hooks/MenuBarsService_010-implementation.adoc  |  2 +-
 .../hooks/MessageService_010-implementation.adoc   |  2 +-
 .../hooks/MetaModelService_010-implementation.adoc |  2 +-
 .../hooks/MetricsService_010-implementation.adoc   |  2 +-
 .../CommandSubscriber_010-implementation.adoc      |  2 +-
 ...EntityChangesSubscriber_010-implementation.adoc |  2 +-
 ...ropertyChangeSubscriber_010-implementation.adoc |  2 +-
 .../ExecutionSubscriber_010-implementation.adoc    |  2 +-
 ...ueryResultsCacheControl_010-implementation.adoc |  2 +-
 .../QueryResultsCache_010-implementation.adoc      |  2 +-
 .../hooks/ServiceRegistry_010-implementation.adoc  |  2 +-
 .../RepositoryService_010-implementation.adoc      |  2 +-
 .../hooks/RoutingService_010-implementation.adoc   |  2 +-
 .../hooks/Scratchpad_010-implementation.adoc       |  2 +-
 .../SessionLoggingService_010-implementation.adoc  |  2 +-
 .../sudo/hooks/SudoService_010-implementation.adoc |  2 +-
 .../hooks/SwaggerService_010-implementation.adoc   |  2 +-
 ...TableColumnOrderService_010-implementation.adoc |  2 +-
 .../hooks/TitleService_010-implementation.adoc     |  2 +-
 .../UrlEncodingService_010-implementation.adoc     |  2 +-
 .../user/hooks/UserService_010-implementation.adoc |  2 +-
 ...mailNotificationService_010-implementation.adoc |  2 +-
 .../TransactionService_010-implementation.adoc     |  2 +-
 .../TransactionalProcessor_010-implementation.adoc |  2 +-
 .../xml/hooks/XmlService_010-implementation.adoc   |  2 +-
 .../XmlSnapshotService_010-implementation.adoc     |  2 +-
 .../UserProfileUiService_010-implementation.adoc   |  2 +-
 .../modules/applib-ant/partials/about/partial.adoc |  2 +-
 .../refguide/modules/applib-svc/pages/about.adoc   |  2 +-
 .../2018/2.0.0-M1/mignotes/moved-types.adoc        | 18 ++++----
 .../2018/2.0.0-M1/mignotes/other-changes.adoc      | 48 +++++++++++-----------
 .../_testing/MetaModelContext_forTesting.java      |  3 +-
 .../grid/bootstrap/GridSystemServiceBootstrap.java | 37 ++++++++++++++---
 starters/adoc/modules/parent-pom/pages/about.adoc  | 14 +++----
 57 files changed, 163 insertions(+), 104 deletions(-)

diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/acceptheader/hooks/AcceptHeaderService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/acceptheader/hooks/AcceptHeaderService_010-implementation.adoc
index 5f1ea7307f..b268c79b43 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/acceptheader/hooks/AcceptHeaderService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/acceptheader/hooks/AcceptHeaderService_010-implementation.adoc
@@ -3,6 +3,6 @@
 
 == Implementation
 
-The xref:vro:ROOT:about.adoc[Restful Objects] viewer provides an 
implementation of this API, 
`o.a.i.viewer.restfulobjects.rendering.service.acceptheader.AcceptHeaderServiceForRest`.
+The xref:vro:ROOT:about.adoc[Restful Objects] viewer provides an 
implementation of this API, 
`o.a.c.viewer.restfulobjects.rendering.service.acceptheader.AcceptHeaderServiceForRest`.
 
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/appfeat/hooks/ApplicationFeatureRepository_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/appfeat/hooks/ApplicationFeatureRepository_010-implementation.adoc
index d80740fa54..98b4861d1f 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/appfeat/hooks/ApplicationFeatureRepository_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/appfeat/hooks/ApplicationFeatureRepository_010-implementation.adoc
@@ -4,7 +4,7 @@
 
 == Implementation
 
-The core framework (xref:core:metamodel:about.adoc[MetaModel] module) provides 
a default implementation, 
`o.a.i.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault`.
+The core framework (xref:core:metamodel:about.adoc[MetaModel] module) provides 
a default implementation, 
`o.a.c.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault`.
 
 This implementation supports the following configuration properties:
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/hooks/BookmarkService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/hooks/BookmarkService_010-implementation.adoc
index a9946e42e4..f1640658be 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/hooks/BookmarkService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/hooks/BookmarkService_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 //== Implementation
 //
-//The core framework (xref:core:runtime-services:about.adoc[Runtime Services] 
module) provides a default implementation of this API, namely 
`o.a.i.core.runtimeservices.bookmarks.BookmarkServiceDefault`.
+//The core framework (xref:core:runtime-services:about.adoc[Runtime Services] 
module) provides a default implementation of this API, namely 
`o.a.c.core.runtimeservices.bookmarks.BookmarkServiceDefault`.
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/bookmarkui/hooks/BookmarkUiService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/bookmarkui/hooks/BookmarkUiService_010-implementation.adoc
index f67e3619fa..ce673f776b 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/bookmarkui/hooks/BookmarkUiService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/bookmarkui/hooks/BookmarkUiService_010-implementation.adoc
@@ -4,4 +4,4 @@
 
 == Implementation
 
-The xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)] provides an implementation 
of this service, `o.a.i.viewer.wicket.viewer.services.BookmarkUiServiceWicket`.
+The xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)] provides an implementation 
of this service, `o.a.c.viewer.wicket.viewer.services.BookmarkUiServiceWicket`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/command/hooks/CommandExecutorService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/command/hooks/CommandExecutorService_010-implementation.adoc
index 702c876d52..13359f4bfb 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/command/hooks/CommandExecutorService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/command/hooks/CommandExecutorService_010-implementation.adoc
@@ -5,5 +5,5 @@
 == Implementation
 
 The framework provides a default implementation of this service,
-`o.a.i.core.runtimeservices.command.CommandExecutorServiceDefault`
+`o.a.c.core.runtimeservices.command.CommandExecutorServiceDefault`
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/confview/hooks/ConfigurationViewService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/confview/hooks/ConfigurationViewService_010-implementation.adoc
index 120f00d6f4..64d8b632a8 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/confview/hooks/ConfigurationViewService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/confview/hooks/ConfigurationViewService_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 //== Implementation
 //
-//The core framework (xref:core:runtime-services:about.adoc[Runtime Services] 
module) provides a default implementation of this API, namely 
`o.a.i.core.runtimeservices.confmenu.ConfigurationViewServiceDefault`.
+//The core framework (xref:core:runtime-services:about.adoc[Runtime Services] 
module) provides a default implementation of this API, namely 
`o.a.c.core.runtimeservices.confmenu.ConfigurationViewServiceDefault`.
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/conmap/hooks/ContentMappingService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/conmap/hooks/ContentMappingService_010-implementation.adoc
index 235f2f23e2..5661b497f3 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/conmap/hooks/ContentMappingService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/conmap/hooks/ContentMappingService_010-implementation.adoc
@@ -11,8 +11,8 @@ The framework provides two implementations of this service, 
both to allow object
 
 The implementations are:
 
-* `o.a.i.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto` 
will map any single instance of a `HasCommandDto` into a `CommandDto` XML 
document
-* 
`o.a.i.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto` 
will map a list of ``HasCommandDto``s into a `CommandsDto` XML document, and 
will wrap any single instance of a `CommandWithDto` into a singleton list and 
thence into a `CommandsDto` XML document.
+* `o.a.c.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto` 
will map any single instance of a `HasCommandDto` into a `CommandDto` XML 
document
+* 
`o.a.c.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto` 
will map a list of ``HasCommandDto``s into a `CommandsDto` XML document, and 
will wrap any single instance of a `CommandWithDto` into a singleton list and 
thence into a `CommandsDto` XML document.
 
 If the action invocation or property edit represent provides an implementation 
of a `CommandDtoProcessor` (by way of 
xref:refguide:applib:index/annotation/Action.adoc#commandDtoProcessor[@Action#commandDtoProcessor()]
 or 
xref:refguide:applib:index/annotation/Property.adoc#commandDtoProcessor[@Property#commandDtoProcessor()])
 then this is also called to post-process the persisted `CommandDto` if 
required.
 A typical use case for this is to dynamically add in serialized ``Blob``s or 
``Clob``s, the values of which are not captured by default in `CommandDto`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/eventbus/hooks/EventBusService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/eventbus/hooks/EventBusService_010-implementation.adoc
index 9cbfd94f2a..e0b96cfd65 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/eventbus/hooks/EventBusService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/eventbus/hooks/EventBusService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a default implementation of the service, 
`o.a.i.core.runtimeservices.eventbus.EventBusServiceSpring`.
+The framework provides a default implementation of the service, 
`o.a.c.core.runtimeservices.eventbus.EventBusServiceSpring`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/eventbus/hooks/EventBusService_020-examples-and-usage.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/eventbus/hooks/EventBusService_020-examples-and-usage.adoc
index 9ae9345dc1..faba022e8e 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/eventbus/hooks/EventBusService_020-examples-and-usage.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/eventbus/hooks/EventBusService_020-examples-and-usage.adoc
@@ -36,7 +36,7 @@ public class Customer {
 }
 ----
 
-will propagate an instance of the default 
`o.a.i.applib.services.eventbus.ActionDomainEvent.Default` class, which can 
then be subscribed to:
+will propagate an instance of the default 
`o.a.c.applib.services.eventbus.ActionDomainEvent.Default` class, which can 
then be subscribed to:
 
 [source,java]
 ----
@@ -71,7 +71,7 @@ public class LibraryMember {
     ...
 }
 ----
-<1> `LibraryMemberLeaveEvent` is a subclass of 
`o.a.i.applib.eventbus.ActionDomainEvent`.The topic of subclassing is discussed 
in more detail 
xref:refguide:applib:index/services/eventbus/EventBusService.adoc#event-hierarchy[below].
+<1> `LibraryMemberLeaveEvent` is a subclass of 
`o.a.c.applib.eventbus.ActionDomainEvent`.The topic of subclassing is discussed 
in more detail 
xref:refguide:applib:index/services/eventbus/EventBusService.adoc#event-hierarchy[below].
 
 Meanwhile, in the `BookRepository` domain service, we subscribe to the event 
and act upon it.
 For example:
@@ -105,7 +105,7 @@ By creating domain event subtypes we can be more 
semantically precise and in tur
 
 We recommend that you define event classes at (up to) four scopes:
 
-* at the top "global" scope is the Apache Causeway-defined 
`o.a.i.applib.event.ActionDomainEvent`
+* at the top "global" scope is the Apache Causeway-defined 
`o.a.c.applib.event.ActionDomainEvent`
 * for the "module" scope, create a static class to represent the module 
itself, and creating nested classes within
 * for each "class" scope, create a nested static event class in the domain 
object's class for all of the domain object's actions
 * for each "action" scope, create a nested static event class for that action, 
inheriting from the "domain object" class.
@@ -207,7 +207,7 @@ public class LibraryMember {
     ...
 }
 ----
-<.> `LibraryMember.LeaveEvent` could be _any_ class, not just a subclass of 
`o.a.i.applib.event.ActionDomainEvent`.
+<.> `LibraryMember.LeaveEvent` could be _any_ class, not just a subclass of 
`o.a.c.applib.event.ActionDomainEvent`.
 
 In practice we suspect there will be few cases where the programmatic approach 
is required rather than the declarative approach afforded by 
xref:refguide:applib:index/annotation/Action.adoc#domainEvent[@Action#domainEvent()]
 et al.
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/hooks/ExceptionRecognizerService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/hooks/ExceptionRecognizerService_010-implementation.adoc
index e87afc69e5..cf8f354c7e 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/hooks/ExceptionRecognizerService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/hooks/ExceptionRecognizerService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a default implementation of this service, 
`o.a.i.core.runtimeservices.recognizer.ExceptionRecognizerServiceDefault`.
+The framework provides a default implementation of this service, 
`o.a.c.core.runtimeservices.recognizer.ExceptionRecognizerServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/factory/hooks/FactoryService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/factory/hooks/FactoryService_010-implementation.adoc
index 9755aa5379..42d419864b 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/factory/hooks/FactoryService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/factory/hooks/FactoryService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The core framework provides a default implementation of this service 
(`o.a.i.core.metamodel.services.factory.FactoryServiceDefault`).
+The core framework provides a default implementation of this service 
(`o.a.c.core.metamodel.services.factory.FactoryServiceDefault`).
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridService_010-implementation.adoc
index 6b8665ca8e..40cc3c069c 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridService_010-implementation.adoc
@@ -5,4 +5,5 @@
 
 == Implementation
 
-The framework provides a default implementation of this service, namely 
`o.a.i.core.metamodel.services.grid.GridServiceDefault`.
+The framework provides a default implementation of this service, 
+namely `o.a.c.core.metamodel.services.grid.GridServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridSystemService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridSystemService_010-implementation.adoc
index fc861c77a3..75ba1f57b8 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridSystemService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/grid/hooks/GridSystemService_010-implementation.adoc
@@ -1,10 +1,42 @@
 
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with this work 
for additional information regarding copyright ownership. The ASF licenses this 
file to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the License. You may obtain a copy of 
the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by 
applicable law or ag [...]
 
+== Implementation
 
+The framework provides a single grid implementation, 
`o.a.c.core.metamodel.services.grid.bootstrap.GridSystemServiceBootstrap`, 
+which supports Bootstrap3 
(https://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd).
 
-== Implementation
+A *SPI* is provided via nested _interface_ `FallbackLayoutDataSource`, 
+that allows to customize layout fallback behavior on a per class basis.
+(Without having to override the heavy weight `GridSystemServiceBootstrap`.)
+
+[source,java]
+.FallbackLayoutDataSource SPI
+----
+interface FallbackLayoutDataSource {
+    Try<String> tryLoadAsStringUtf8(Class<?> domainClass); <.>
+}
+----
+. Provides custom default for given `domainClass` 
+or return an `Try.empty()` if indifferent. 
+
+[source,java]
+.FallbackLayoutDataSource example  
+----
+@Service
+public class FallbackLayoutForManager implements FallbackLayoutDataSource {
+
+    @Override
+    public Try<String> tryLoadAsStringUtf8(final Class<?> domainClass) {
+        return domainClass.getSimpleName().endsWith("Manager")
+                ? DataSource.ofResource(getClass(), "ManagerLayout.xml") // <.>
+                    .tryReadAsStringUtf8() 
+                : Try.empty(); // <.> 
+    }
 
-The framework provides a single grid implementation, 
`o.a.i.core.metamodel.services.grid.bootstrap3.GridSystemServiceBS3`, which 
supports Bootstrap3.
+}
+----
+. Provides a custom layout for all domain classes that have a name ending with 
'Manager'.
+. Indifferent for given domain type. Tells the framework to fall through. 
 
 (The framework also provides xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)] 
components that are capable of interpreting and rendering this metadata.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/health/hooks/HealthCheckService_020-examples-and-usage.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/health/hooks/HealthCheckService_020-examples-and-usage.adoc
index a1eaee9412..0145cbd35c 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/health/hooks/HealthCheckService_020-examples-and-usage.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/health/hooks/HealthCheckService_020-examples-and-usage.adoc
@@ -4,5 +4,5 @@
 
 == Related Services
 
-The internal domain service 
`o.a.i.core.webapp.health.HealthIndicatorUsingHealthCheckService` acts as the 
bridge between Spring and the `HealthCheckService' SPI.
+The internal domain service 
`o.a.c.core.webapp.health.HealthIndicatorUsingHealthCheckService` acts as the 
bridge between Spring and the `HealthCheckService' SPI.
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/hint/hooks/HintStore_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/hint/hooks/HintStore_010-implementation.adoc
index 742adb539c..0903fbb79c 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/hint/hooks/HintStore_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/hint/hooks/HintStore_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The core framework provides a default implementation of this service 
(`o.a.i.viewer.wicket.viewer.services.HintStoreUsingWicketSession`).
+The core framework provides a default implementation of this service 
(`o.a.c.viewer.wicket.viewer.services.HintStoreUsingWicketSession`).
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/homepage/hooks/HomePageResolverService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/homepage/hooks/HomePageResolverService_010-implementation.adoc
index f7928262bb..3350fe1df1 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/homepage/hooks/HomePageResolverService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/homepage/hooks/HomePageResolverService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The default implementation is provided by 
`o.a.i.core.runtimeservices.homepage.HomePageResolverServiceDefault`.
+The default implementation is provided by 
`o.a.c.core.runtimeservices.homepage.HomePageResolverServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/hooks/TranslationService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/hooks/TranslationService_010-implementation.adoc
index a79b261196..0800231ef9 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/hooks/TranslationService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/hooks/TranslationService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The Apache Causeway framework provides a default implementation 
(`o.a.i.core.runtimeservices.i18n.po.TranslationServicePo`) that uses the GNU 
`.pot` and `.po` files for translations.
+The Apache Causeway framework provides a default implementation 
(`o.a.c.core.runtimeservices.i18n.po.TranslationServicePo`) that uses the GNU 
`.pot` and `.po` files for translations.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/hooks/InteractionContext_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/hooks/InteractionContext_010-implementation.adoc
index 15474c582a..68b59372a8 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/hooks/InteractionContext_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/hooks/InteractionContext_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 == Implementation
 
-This class (`o.a.i.applib.services.iactn.InteractionContext`) is also the 
default implementation.
+This class (`o.a.c.applib.services.iactn.InteractionContext`) is also the 
default implementation.
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/inject/hooks/ServiceInjector_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/inject/hooks/ServiceInjector_010-implementation.adoc
index 80ac57a46b..cd6a1d8b52 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/inject/hooks/ServiceInjector_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/inject/hooks/ServiceInjector_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 == Implementation
 
-The framework provides a default implementation of 
`o.a.i.core.metamodel.services.ServiceInjectorDefault`.
+The framework provides a default implementation of 
`o.a.c.core.metamodel.services.ServiceInjectorDefault`.
 Under the covers this delegates to Spring Framework's injection mechanism.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/jaxb/hooks/JaxbService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/jaxb/hooks/JaxbService_010-implementation.adoc
index a065dcd445..62b1295d80 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/jaxb/hooks/JaxbService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/jaxb/hooks/JaxbService_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 == Implementation
 
-Apache Causeway provides a default implementation of the service, 
`o.a.i.applib.services.jaxb.JaxbServiceDefault`.
+Apache Causeway provides a default implementation of the service, 
`o.a.c.applib.services.jaxb.JaxbServiceDefault`.
 This automatically caches ``JAXBContext``s for each domain class as requested.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/layout/hooks/LayoutService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/layout/hooks/LayoutService_010-implementation.adoc
index 24d88a872c..f350c5ada0 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/layout/hooks/LayoutService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/layout/hooks/LayoutService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a default implementation, 
`o.a.i.core.metamodel.services.layout.LayoutServiceDefault`.
+The framework provides a default implementation, 
`o.a.c.core.metamodel.services.layout.LayoutServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/linking/hooks/DeepLinkService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/linking/hooks/DeepLinkService_010-implementation.adoc
index 636b433198..809624dd40 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/linking/hooks/DeepLinkService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/linking/hooks/DeepLinkService_010-implementation.adoc
@@ -5,7 +5,7 @@
 
 == Implementation
 
-The xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)] provides an implementation 
of this service `o.a.i.viewer.wicket.viewer.services.DeepLinkServiceWicket`.
+The xref:vw:ROOT:about.adoc[Web UI (Wicket viewer)] provides an implementation 
of this service `o.a.c.viewer.wicket.viewer.services.DeepLinkServiceWicket`.
 
 There is no domain service to support deep links to the URLs of the 
xref:vro:ROOT:about.adoc[RestfulObjects viewer].
 However, a URL can be constructed easily enough according to the 
link:http://www.restfulobjects.org[Restful Objects spec] in conjunction with a 
`Bookmark` obtained via the 
xref:refguide:applib:index/services/bookmark/BookmarkService.adoc[BookmarkService].
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/menu/hooks/MenuBarsLoaderService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/menu/hooks/MenuBarsLoaderService_010-implementation.adoc
index ec7406bdc4..2402e3275e 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/menu/hooks/MenuBarsLoaderService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/menu/hooks/MenuBarsLoaderService_010-implementation.adoc
@@ -5,7 +5,7 @@
 
 == Implementation
 
-The framework provides a default implementation of this service, namely 
`o.a.i.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault`.
+The framework provides a default implementation of this service, namely 
`o.a.c.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault`.
 This searches for a classpath resource `menubars.layout.xml`, located ni the 
root package.
 
 If using the Wicket viewer, the location of this file (and its name) can be 
overridden using the `causeway.viewer.wicket.application.menubars-layout-file` 
configuration property.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/menu/hooks/MenuBarsService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/menu/hooks/MenuBarsService_010-implementation.adoc
index 8c8e0ca406..f20fa4281f 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/menu/hooks/MenuBarsService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/menu/hooks/MenuBarsService_010-implementation.adoc
@@ -5,6 +5,6 @@
 
 == Implementation
 
-The framework provides a default implementation of this service, namely 
`o.a.i.core.runtimeservices.menu.MenuBarsServiceDefault`.
+The framework provides a default implementation of this service, namely 
`o.a.c.core.runtimeservices.menu.MenuBarsServiceDefault`.
 
 This uses the 
xref:refguide:applib:index/services/menu/MenuBarsLoaderService.adoc[MenuBarsLoaderService]
 to load a serialized form of `MenuBars` instance, called 
`menubars.layout.xml`, from the classpath.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/message/hooks/MessageService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/message/hooks/MessageService_010-implementation.adoc
index 14fe2d2a5d..f969a9a860 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/message/hooks/MessageService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/message/hooks/MessageService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The core framework provides a default implementation of this service, 
`o.a.i.core.runtimeservices.message.MessageServiceDefault`.
+The core framework provides a default implementation of this service, 
`o.a.c.core.runtimeservices.message.MessageServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/hooks/MetaModelService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/hooks/MetaModelService_010-implementation.adoc
index e506cbc90e..93bc1f508f 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/hooks/MetaModelService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/hooks/MetaModelService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a default implementation of this service, 
`o.a.i.core.metamodel.services.metamodel.MetaModelServiceDefault`.
+The framework provides a default implementation of this service, 
`o.a.c.core.metamodel.services.metamodel.MetaModelServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/metrics/hooks/MetricsService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/metrics/hooks/MetricsService_010-implementation.adoc
index aab402ebd7..6ecf24c1d3 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/metrics/hooks/MetricsService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/metrics/hooks/MetricsService_010-implementation.adoc
@@ -5,6 +5,6 @@
 
 == Implementation
 
-The framework provides a default of this service, namely 
`o.a.i.core.transaction.changetracking.EntityChangeTrackerDefault`.
+The framework provides a default of this service, namely 
`o.a.c.core.transaction.changetracking.EntityChangeTrackerDefault`.
 
 This supports both JDO and JPA persistence mechanisms.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/CommandSubscriber_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/CommandSubscriber_010-implementation.adoc
index 55407bfddc..93895dd277 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/CommandSubscriber_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/CommandSubscriber_010-implementation.adoc
@@ -5,6 +5,6 @@
 
 == Implementation
 
-This is an SPI, but the framework provides a simple implementation, 
`o.a.i.applib.services.publishing.log.CommandLogger`, that just logs events as 
they are received.
+This is an SPI, but the framework provides a simple implementation, 
`o.a.c.applib.services.publishing.log.CommandLogger`, that just logs events as 
they are received.
 
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/EntityChangesSubscriber_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/EntityChangesSubscriber_010-implementation.adoc
index 07f34776ec..5302dfb9e8 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/EntityChangesSubscriber_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/EntityChangesSubscriber_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-This is an SPI, but the framework provides a simple implementation, 
`o.a.i.applib.services.publishing.log.EntityChangesLogger`, that just logs 
events as they are received.
+This is an SPI, but the framework provides a simple implementation, 
`o.a.c.applib.services.publishing.log.EntityChangesLogger`, that just logs 
events as they are received.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/EntityPropertyChangeSubscriber_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/EntityPropertyChangeSubscriber_010-implementation.adoc
index aa5e5c1b99..80164c9022 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/EntityPropertyChangeSubscriber_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/EntityPropertyChangeSubscriber_010-implementation.adoc
@@ -5,6 +5,6 @@
 
 == Implementation
 
-This is an SPI, but the framework provides a simple implementation, 
`o.a.i.applib.services.publishing.log.EntityPropertyChangeLogger`, that just 
logs events as they are received.
+This is an SPI, but the framework provides a simple implementation, 
`o.a.c.applib.services.publishing.log.EntityPropertyChangeLogger`, that just 
logs events as they are received.
 
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/ExecutionSubscriber_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/ExecutionSubscriber_010-implementation.adoc
index eea408f877..42e403f01a 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/ExecutionSubscriber_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/publishing/spi/hooks/ExecutionSubscriber_010-implementation.adoc
@@ -7,7 +7,7 @@
 
 The framework allows multiple implementations of this service to be 
registered; all will be called.
 
-This is an SPI, but the framework provides a simple implementation, 
`o.a.i.applib.services.publishing.log.ExecutionLogger`, that just logs events 
as they are received.
+This is an SPI, but the framework provides a simple implementation, 
`o.a.c.applib.services.publishing.log.ExecutionLogger`, that just logs events 
as they are received.
 
 It can be configured using:
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/hooks/QueryResultsCacheControl_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/hooks/QueryResultsCacheControl_010-implementation.adoc
index a1c096f681..3f6cb9dc76 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/hooks/QueryResultsCacheControl_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/hooks/QueryResultsCacheControl_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 == Implementation
 
-The xref:testing:fixtures:about.adoc[fixtures module] provides an 
implementation, 
`o.a.i.testing.fixtures.applib.queryresultscache.QueryResultsCacheControlDefault`.
+The xref:testing:fixtures:about.adoc[fixtures module] provides an 
implementation, 
`o.a.c.testing.fixtures.applib.queryresultscache.QueryResultsCacheControlDefault`.
 This will cause the cache to be ignored while fixtures are being installed.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/hooks/QueryResultsCache_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/hooks/QueryResultsCache_010-implementation.adoc
index 133c4d66f4..3884d20574 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/hooks/QueryResultsCache_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/hooks/QueryResultsCache_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a default implementation of 
`o.a.i.core.runtimeservices.queryresultscache.QueryResultsCacheDefault`.
+The framework provides a default implementation of 
`o.a.c.core.runtimeservices.queryresultscache.QueryResultsCacheDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/registry/hooks/ServiceRegistry_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/registry/hooks/ServiceRegistry_010-implementation.adoc
index eea324df3c..c7460fab72 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/registry/hooks/ServiceRegistry_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/registry/hooks/ServiceRegistry_010-implementation.adoc
@@ -6,4 +6,4 @@
 == Implementation
 
 
-The core framework provides a default implementation of this service 
(`o.a.i.core.metamodel.services.registry.ServiceRegistryDefault`).
+The core framework provides a default implementation of this service 
(`o.a.c.core.metamodel.services.registry.ServiceRegistryDefault`).
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_010-implementation.adoc
index 07f49cd591..1aab1f7f8a 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/repository/hooks/RepositoryService_010-implementation.adoc
@@ -5,7 +5,7 @@
 
 == Implementation
 
-The default implementation of this domain service is 
`o.a.i.core.runtimeservices.repository.RepositoryServiceDefault`.
+The default implementation of this domain service is 
`o.a.c.core.runtimeservices.repository.RepositoryServiceDefault`.
 
 === Configuration Properties
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/routing/hooks/RoutingService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/routing/hooks/RoutingService_010-implementation.adoc
index 11ed86d638..fc9c4ca8c6 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/routing/hooks/RoutingService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/routing/hooks/RoutingService_010-implementation.adoc
@@ -6,5 +6,5 @@
 == Implementation
 
 
-The framework provides a default implementation - 
`o.a.i.runtimeservices.routing.RoutingServiceDefault` - which will always 
return the original object provided, or the home page if a `null` or `void` was 
provided.
+The framework provides a default implementation - 
`o.a.c.runtimeservices.routing.RoutingServiceDefault` - which will always 
return the original object provided, or the home page if a `null` or `void` was 
provided.
 Under the covers this implementation uses the 
xref:refguide:applib:index/services/homepage/HomePageResolverService.adoc[HomePageResolverService].
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/scratchpad/hooks/Scratchpad_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/scratchpad/hooks/Scratchpad_010-implementation.adoc
index fbe4487e2f..92911d44b0 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/scratchpad/hooks/Scratchpad_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/scratchpad/hooks/Scratchpad_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 == Implementation
 
-This framework provides a default implementation of 
`o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault`.
+This framework provides a default implementation of 
`o.a.c.core.runtimeservices.scratchpad.ScratchpadDefault`.
 This is just an 
xref:refguide:applib:index/annotation/InteractionScope.adoc[@InteractionScope]'d
 wrapper around a `java.util.Map`
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/session/hooks/SessionLoggingService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/session/hooks/SessionLoggingService_010-implementation.adoc
index 13f11ee612..30d96eaeff 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/session/hooks/SessionLoggingService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/session/hooks/SessionLoggingService_010-implementation.adoc
@@ -6,6 +6,6 @@
 == Implementation
 
 
-The framework provides a default implementation, 
`o.a.i.applib.services.session.SessionLoggingServiceLogging` that logs using 
log4j2.
+The framework provides a default implementation, 
`o.a.c.applib.services.session.SessionLoggingServiceLogging` that logs using 
log4j2.
 
 //The (non-ASF) link:https://platform.incode.org[Incode Platform^]'s 
sessionlogger module provides an implementation that logs each session as a JDO 
entity.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/sudo/hooks/SudoService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/sudo/hooks/SudoService_010-implementation.adoc
index 053bd7201c..469c814eef 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/sudo/hooks/SudoService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/sudo/hooks/SudoService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The core framework provides a default implementation of this service 
(`o.a.i.core.runtimeservices.sudo.SudoServiceDefault`).
+The core framework provides a default implementation of this service 
(`o.a.c.core.runtimeservices.sudo.SudoServiceDefault`).
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/swagger/hooks/SwaggerService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/swagger/hooks/SwaggerService_010-implementation.adoc
index 083c8b81a8..e4c7c567db 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/swagger/hooks/SwaggerService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/swagger/hooks/SwaggerService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a default implementation of the service, 
`o.a.i.viewer.restfulobjects.rendering.service.swagger.SwaggerServiceDefault`.
+The framework provides a default implementation of the service, 
`o.a.c.viewer.restfulobjects.rendering.service.swagger.SwaggerServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/tablecol/hooks/TableColumnOrderService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/tablecol/hooks/TableColumnOrderService_010-implementation.adoc
index 65103461ca..c37e8f36c5 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/tablecol/hooks/TableColumnOrderService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/tablecol/hooks/TableColumnOrderService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a fallback implementation of this service, namely 
`o.a.i.core.metamodel.services.tablecol.TableColumnOrderServiceDefault`.
+The framework provides a fallback implementation of this service, namely 
`o.a.c.core.metamodel.services.tablecol.TableColumnOrderServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/title/hooks/TitleService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/title/hooks/TitleService_010-implementation.adoc
index 6b6e9a5e8b..df0704e69a 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/title/hooks/TitleService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/title/hooks/TitleService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The core framework provides a default implementation of this service 
(`o.a.i.core.metamodel.services.title.TitleServiceDefault`).
+The core framework provides a default implementation of this service 
(`o.a.c.core.metamodel.services.title.TitleServiceDefault`).
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/urlencoding/hooks/UrlEncodingService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/urlencoding/hooks/UrlEncodingService_010-implementation.adoc
index a0feaa9967..c82e0be7b4 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/urlencoding/hooks/UrlEncodingService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/urlencoding/hooks/UrlEncodingService_010-implementation.adoc
@@ -6,5 +6,5 @@
 == Implementation
 
 
-The framework provides a default implementation, 
`o.a.i.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompression`, 
that first (gzip) compresses the state and then uses `base-64` encoding of the 
resulting bytes.
+The framework provides a default implementation, 
`o.a.c.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompression`, 
that first (gzip) compresses the state and then uses `base-64` encoding of the 
resulting bytes.
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/user/hooks/UserService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/user/hooks/UserService_010-implementation.adoc
index 3d045a00d3..83ca2255b5 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/user/hooks/UserService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/user/hooks/UserService_010-implementation.adoc
@@ -5,7 +5,7 @@
 
 == Implementation
 
-The core framework provides a default implementation of this service 
(`o.a.i.core.runtime.services.user.UserServiceDefault`).
+The core framework provides a default implementation of this service 
(`o.a.c.core.runtime.services.user.UserServiceDefault`).
 
 
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/userreg/hooks/EmailNotificationService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/userreg/hooks/EmailNotificationService_010-implementation.adoc
index bf019c8063..8b17500900 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/userreg/hooks/EmailNotificationService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/userreg/hooks/EmailNotificationService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a default implementation, 
`o.a.i.core.runtimeservices.userreg.EmailNotificationServiceDefault`, that 
constructs the emails to send.
+The framework provides a default implementation, 
`o.a.c.core.runtimeservices.userreg.EmailNotificationServiceDefault`, that 
constructs the emails to send.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/xactn/hooks/TransactionService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/xactn/hooks/TransactionService_010-implementation.adoc
index 5c1418776e..f526986e83 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/xactn/hooks/TransactionService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/xactn/hooks/TransactionService_010-implementation.adoc
@@ -5,6 +5,6 @@
 
 == Implementation
 
-The core framework provides a default implementation of this service, 
`o.a.i.core.runtimeservices.transaction.TransactionServiceSpring`.
+The core framework provides a default implementation of this service, 
`o.a.c.core.runtimeservices.transaction.TransactionServiceSpring`.
 
 
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/xactn/hooks/TransactionalProcessor_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/xactn/hooks/TransactionalProcessor_010-implementation.adoc
index e77555415a..33547e1b38 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/xactn/hooks/TransactionalProcessor_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/xactn/hooks/TransactionalProcessor_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The core framework provides a default implementation of this service, 
`o.a.i.core.runtimeservices.transaction.TransactionServiceSpring`.
+The core framework provides a default implementation of this service, 
`o.a.c.core.runtimeservices.transaction.TransactionServiceSpring`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/xml/hooks/XmlService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/xml/hooks/XmlService_010-implementation.adoc
index 1bb92933c7..9f3f0616cc 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/xml/hooks/XmlService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/xml/hooks/XmlService_010-implementation.adoc
@@ -5,4 +5,4 @@
 
 == Implementation
 
-The framework provides a default implementation of this service, 
`o.a.i.core.runtimeservices.xml.XmlServiceDefault`.
+The framework provides a default implementation of this service, 
`o.a.c.core.runtimeservices.xml.XmlServiceDefault`.
diff --git 
a/antora/components/refguide-index/modules/applib/pages/index/services/xmlsnapshot/hooks/XmlSnapshotService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/applib/pages/index/services/xmlsnapshot/hooks/XmlSnapshotService_010-implementation.adoc
index 0b8e54da99..6ba4485d94 100644
--- 
a/antora/components/refguide-index/modules/applib/pages/index/services/xmlsnapshot/hooks/XmlSnapshotService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/applib/pages/index/services/xmlsnapshot/hooks/XmlSnapshotService_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 == Implementation
 
-The framework provides a default implementation of this service, 
`o.a.i.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefault`.
+The framework provides a default implementation of this service, 
`o.a.c.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefault`.
 
diff --git 
a/antora/components/refguide-index/modules/viewer/pages/index/common/applib/services/userprof/hooks/UserProfileUiService_010-implementation.adoc
 
b/antora/components/refguide-index/modules/viewer/pages/index/common/applib/services/userprof/hooks/UserProfileUiService_010-implementation.adoc
index d1b0975ffc..ed5770eb6f 100644
--- 
a/antora/components/refguide-index/modules/viewer/pages/index/common/applib/services/userprof/hooks/UserProfileUiService_010-implementation.adoc
+++ 
b/antora/components/refguide-index/modules/viewer/pages/index/common/applib/services/userprof/hooks/UserProfileUiService_010-implementation.adoc
@@ -5,5 +5,5 @@
 
 == Implementation
 
-The framework provides a default implementation of this service, 
`o.a.i.viewer.common.model.userprofile.UserProfileUiServiceDefault`.
+The framework provides a default implementation of this service, 
`o.a.c.viewer.common.model.userprofile.UserProfileUiServiceDefault`.
 This returns the user profile name based upon whether the real name is 
available, and whether the user is currently being impersonated.
diff --git 
a/antora/components/refguide/modules/applib-ant/partials/about/partial.adoc 
b/antora/components/refguide/modules/applib-ant/partials/about/partial.adoc
index 9e84c5d529..3d8ec21256 100644
--- a/antora/components/refguide/modules/applib-ant/partials/about/partial.adoc
+++ b/antora/components/refguide/modules/applib-ant/partials/about/partial.adoc
@@ -20,7 +20,7 @@ These annotations have only incomplete/partial support, 
primarily relating to th
 |`@Value`
 |Specify that a class has value-semantics. +
 
-The `@Value` annotation indicates that a class should be treated as a value 
type rather than as a reference (or entity) type. It does this providing an 
implementation of a `o.a.i.applib.adapters.ValueSemanticsProvider`. +
+The `@Value` annotation indicates that a class should be treated as a value 
type rather than as a reference (or entity) type. It does this providing an 
implementation of a `o.a.c.applib.adapters.ValueSemanticsProvider`. +
 
 For example: +
 
diff --git a/antora/components/refguide/modules/applib-svc/pages/about.adoc 
b/antora/components/refguide/modules/applib-svc/pages/about.adoc
index d09c7546af..3c56258664 100644
--- a/antora/components/refguide/modules/applib-svc/pages/about.adoc
+++ b/antora/components/refguide/modules/applib-svc/pages/about.adoc
@@ -50,7 +50,7 @@ include::applib-svc:partial$_security-spi.adoc[leveloffset=+2]
 
 == Public API vs Internal Services
 
-The vast majority of Apache Causeway' domain services are defined in Apache 
Causeway' applib (`o.a.i.core:causeway-applib` module) as stable, public 
classes.
+The vast majority of Apache Causeway' domain services are defined in Apache 
Causeway' applib (`o.a.c.core:causeway-applib` module) as stable, public 
classes.
 Importantly, this also minimizes the coupling between your code and Apache 
Causeway, allowing you to easily mock out these services in your unit tests.
 
 The framework also defines a number of "internal" services.
diff --git 
a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/moved-types.adoc
 
b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/moved-types.adoc
index e0f103caea..f64a15cd0a 100644
--- 
a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/moved-types.adoc
+++ 
b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/moved-types.adoc
@@ -20,9 +20,9 @@ The following applib types have been moved.
 
 | Events emitted by `WrapperFactory` when interactions occur.
 |`ActionUsabilityEvent`, `PropertyVisibilityEvent`, `CollectionAccessEvent` 
etc.
-|`o.a.i.applib.` +
+|`o.a.c.applib.` +
 `events`
-|`o.a.i.applib.` +
+|`o.a.c.applib.` +
 `services.wrapper.events`
 
 
@@ -30,16 +30,16 @@ The following applib types have been moved.
 |`Timestampable`
 `HoldsUpdatedAt`
 `HoldsUpdatedBy`
-|`o.a.i.applib.` +
+|`o.a.c.applib.` +
 `services.timestamp`
-|`o.a.i.applib.` +
+|`o.a.c.applib.` +
 `mixins.timestamp`
 
 
 |`Dto`
-|`o.a.i.applib.` +
+|`o.a.c.applib.` +
 `services.dto`
-|`o.a.i.applib.` +
+|`o.a.c.applib.` +
 `mixins.dto`
 
 |Lifecycle events, domain events & UI events
@@ -50,11 +50,11 @@ lifecycle events
 * `XxxUiEvent` +
 UI events
 |o.a.i.applib.services.eventbus
-|* `o.a.i.applib.` +
+|* `o.a.c.applib.` +
 `events.domain`
-* `o.a.i.applib.` +
+* `o.a.c.applib.` +
 `events.lifecycle`
-* `o.a.i.applib.` +
+* `o.a.c.applib.` +
 `events.ui`
 
 |===
diff --git 
a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/other-changes.adoc
 
b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/other-changes.adoc
index 85c8273802..f250d66eab 100644
--- 
a/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/other-changes.adoc
+++ 
b/antora/components/relnotes/modules/ROOT/partials/2018/2.0.0-M1/mignotes/other-changes.adoc
@@ -11,8 +11,8 @@
 
 The default implementation of `UrlEncodingService` provided by the framework 
has changed:
 
-* in 1.16.x the implementation is 
`o.a.i.applib.services.urlencoding.UrlEncodingServiceUsingBaseEncoding`
-* in 2.0.0-M1 this is changed to 
`o.a.i.applib.services.urlencoding.UrlEncodingServiceWithCompression`
+* in 1.16.x the implementation is 
`o.a.c.applib.services.urlencoding.UrlEncodingServiceUsingBaseEncoding`
+* in 2.0.0-M1 this is changed to 
`o.a.c.applib.services.urlencoding.UrlEncodingServiceWithCompression`
 
 This new implementation increases the state that can be encoded within the URL 
(approx 8000 characters) by first gzipping the state prior to base64 encoding 
the characters.
 
@@ -37,9 +37,9 @@ Wicket has been upgraded from Wicket 7.9 to Wicket 8.0.
 [__migration-notes_1.16.0-to-2.0.0-M1_other-changes_removed-dependencies]
 == Removed dependencies
 
-The Apache Isis applib (`o.a.i.core:isis-core-applib`) no longer depends on 
the google guava library.
+The Apache Isis applib (`o.a.c.core:isis-core-applib`) no longer depends on 
the google guava library.
 
-Likewise the Apache Isis Unit Test Support module 
(`o.a.i.core:isis-core-unittestsupport`) no longer depends on guava either.
+Likewise the Apache Isis Unit Test Support module 
(`o.a.c.core:isis-core-unittestsupport`) no longer depends on guava either.
 
 Do note however that the core framework _does_ still depend on guava (though 
the intention is to remove this over time).
 
@@ -58,7 +58,7 @@ To help prevent accidental usage:
 * the package is `org.apache.isis.core.commons.internal`
 * all of the types in this module are prefixed "_".
 
-For example, `o.a.i.commons.internal.resources._Resource` provides utilities 
for loading static resources from the classpath.
+For example, `o.a.c.commons.internal.resources._Resource` provides utilities 
for loading static resources from the classpath.
 
 [NOTE]
 ====
@@ -90,7 +90,7 @@ The plugin interface types themselves are defined in various 
of the Maven module
 | Implementations
 
 .3+|`isis-core-commons`
-|`o.a.i.core.plugins. +
+|`o.a.c.core.plugins. +
 classdiscovery. +
 ClassDiscoveryPlugin`
 
@@ -100,23 +100,23 @@ Include only one implementation on classpath.
 
 |`ClassDiscoveryPluginUsingReflections` uses the `org.reflections` open source 
library (which depends in turn on guava).
 
-|`o.a.i.core.plugins. +
+|`o.a.c.core.plugins. +
 codegen. +
 ProxyFactoryPlugin`
 |Obtain a plugin acting as a factory to proxy types (as used by the 
`WrapperFactory` domain service).
 
 Include only one implementation on classpath,
 
-|`o.a.i.core.plugins.codegen.
+|`o.a.c.core.plugins.codegen.
 ProxyFactoryPluginUsingByteBuddy` (using ByteBuddy)
 
-`o.a.i.core.plugins.codegen.
+`o.a.c.core.plugins.codegen.
 ProxyFactoryPluginUsingJavassist` (using Javassist).
 
 
 
 
-|`o.a.i.core.plugins. +
+|`o.a.c.core.plugins. +
 eventbus. +
 EventBusPlugin`
 
@@ -124,7 +124,7 @@ EventBusPlugin`
 
 This removes the need to explicitly specify the implementation using the 
`isis.services.eventbus.implementation` config property; it can be left as 
simply "auto".
 
-|`o.a.i.core.plugins.eventbus.
+|`o.a.c.core.plugins.eventbus.
 EventBusPluginForAxon` (using Axon Framework)
 
 `org.apache.isis.core.plugins.eventbus.
@@ -150,39 +150,39 @@ ValuePropertyPlugin`
 
 There can be multiple implementations on the classpath.
 
-|`o.a.i.core.metamodel.
+|`o.a.c.core.metamodel.
 services.swagger.plugins.
 IsisTimeValuePropertyPlugin` (in `metamodel-legacy`)
 contributes factories for the applib value types that have been moved to 
applib-legacy.
 
 
-|`o.a.i.core. +
+|`o.a.c.core. +
 metamodel. +
 IsisJdoMetamodelPlugin`
 |Decouples the metamodel module from a particular implementation of 
DataNucleus.
 
 Include only one implementation on classpath,
 
-|`o.a.i.plugins.jdo.dn4.IsisJdoSupportPlugin4`
+|`o.a.c.plugins.jdo.dn4.IsisJdoSupportPlugin4`
 
-`o.a.i.plugins.jdo.dn5.IsisJdoSupportPlugin5`
+`o.a.c.plugins.jdo.dn5.IsisJdoSupportPlugin5`
 
 
 |`isis-core-runtime`
-|`o.a.i.core. +
+|`o.a.c.core. +
 metamodel. +
 IsisJdoRuntimePlugin`
 |Decouples the runtime module from a particular implementation of DataNucleus.
 
 Include only one implementation on classpath,
 
-|`o.a.i.plugins.jdo.dn4.IsisJdoSupportPlugin4`
+|`o.a.c.plugins.jdo.dn4.IsisJdoSupportPlugin4`
 
-`o.a.i.plugins.jdo.dn5.IsisJdoSupportPlugin5`
+`o.a.c.plugins.jdo.dn5.IsisJdoSupportPlugin5`
 
 
 |`isis-core-viewer-restfulobjects-applib`
-|`o.a.i.viewer. +
+|`o.a.c.viewer. +
 restfulobjects. +
 applib.client. +
 UriBuilderPlugin`
@@ -190,18 +190,18 @@ UriBuilderPlugin`
 
 Include only one implementation on classpath,
 
-|`o.a.i.plugins. +
+|`o.a.c.plugins. +
 jaxrs.resteasy.IsisResteasy3Plugin`
 
 or
 
-`o.a.i.plugins. +
+`o.a.c.plugins. +
 jaxrs.resteasy.IsisResteasy4Plugin`
 
 
 
 |`isis-core-viewer-restfulobjects-server`
-|`o.a.i.viewer. +
+|`o.a.c.viewer. +
 restfulobjects. +
 server. +
 IsisJaxrsServerPlugin`
@@ -209,12 +209,12 @@ IsisJaxrsServerPlugin`
 
 Include only one implementation on classpath.
 
-|`o.a.i.plugins. +
+|`o.a.c.plugins. +
 jaxrs.resteasy.IsisResteasy3Plugin`
 
 or
 
-`o.a.i.plugins. +
+`o.a.c.plugins. +
 jaxrs.resteasy.IsisResteasy4Plugin`
 
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
index 5df334ec00..08ac3b7ce5 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -468,7 +468,8 @@ implements MetaModelContext {
                             getTranslationService(),
                             getJaxbService(),
                             getMessageService(),
-                            getSystemEnvironment())
+                            getSystemEnvironment(),
+                            List.of())
                             .setMarshaller(getGridMarshallerService())
                     )); // support reloading
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/GridSystemServiceBootstrap.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/GridSystemServiceBootstrap.java
index 7291589301..4bbfb40806 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/GridSystemServiceBootstrap.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/GridSystemServiceBootstrap.java
@@ -21,7 +21,6 @@ package 
org.apache.causeway.core.metamodel.services.grid.bootstrap;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
-import java.util.Optional;
 import java.util.Set;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
@@ -56,6 +55,8 @@ import 
org.apache.causeway.applib.services.i18n.TranslationService;
 import org.apache.causeway.applib.services.jaxb.JaxbService;
 import org.apache.causeway.applib.services.message.MessageService;
 import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.functional.Try;
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.commons.internal.collections._Maps;
@@ -96,18 +97,34 @@ extends GridSystemServiceAbstract<BSGrid> {
     public static final String TNS = 
"https://causeway.apache.org/applib/layout/grid/bootstrap3";;
     public static final String SCHEMA_LOCATION = 
"https://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd";;
 
+    /**
+     * SPI to customize layout fallback behavior on a per class basis.
+     */
+    public static interface FallbackLayoutDataSource {
+        /**
+         * Implementing beans may provide custom defaults (for specific types) 
if required.<br>
+         * Implementing beans may chose to be indifferent by returning an 
empty {@link Try}.
+         */
+        Try<String> tryLoadAsStringUtf8(Class<?> domainClass);
+    }
+
     @Inject @Lazy // circular dependency (late binding)
     @Setter @Accessors(chain = true) // JUnit support
     private GridMarshallerService<BSGrid> marshaller;
 
+    private final Can<FallbackLayoutDataSource> fallbackLayoutDataSources;
+
     @Inject
     public GridSystemServiceBootstrap(
             final SpecificationLoader specificationLoader,
             final TranslationService translationService,
             final JaxbService jaxbService,
             final MessageService messageService,
-            final CausewaySystemEnvironment causewaySystemEnvironment) {
+            final CausewaySystemEnvironment causewaySystemEnvironment,
+            final List<FallbackLayoutDataSource> fallbackLayoutDataSources) {
         super(specificationLoader, translationService, jaxbService, 
messageService, causewaySystemEnvironment);
+        this.fallbackLayoutDataSources = 
Can.ofCollection(fallbackLayoutDataSources)
+                .add(null);
     }
 
     @Override
@@ -125,13 +142,11 @@ extends GridSystemServiceAbstract<BSGrid> {
         return SCHEMA_LOCATION;
     }
 
-
     @Override
     public BSGrid defaultGrid(final Class<?> domainClass) {
-
+        final Try<String> content = 
loadFallbackLayoutAsStringUtf8(domainClass);
         try {
-            final String content = _Resources.loadAsStringUtf8(getClass(), 
"GridFallbackLayout.xml");
-            return Optional.ofNullable(content)
+            return content.getValue()
                     .map(xml -> marshaller.unmarshal(xml, 
CommonMimeType.XML).getValue().orElse(null))
                     .filter(BSGrid.class::isInstance)
                     .map(BSGrid.class::cast)
@@ -143,6 +158,16 @@ extends GridSystemServiceAbstract<BSGrid> {
         }
     }
 
+    private Try<String> loadFallbackLayoutAsStringUtf8(final Class<?> 
domainClass) {
+        return fallbackLayoutDataSources.stream()
+            .map(ds->ds.tryLoadAsStringUtf8(domainClass))
+            .filter(tried->tried.getValue().isPresent())
+            .findFirst()
+            .orElseGet(()->{
+                return 
Try.call(()->_Resources.loadAsStringUtf8(GridSystemServiceBootstrap.class, 
"GridFallbackLayout.xml"));
+            });
+    }
+
     //
     // only ever called if fail to load GridFallbackLayout.xml,
     // which *really* shouldn't happen
diff --git a/starters/adoc/modules/parent-pom/pages/about.adoc 
b/starters/adoc/modules/parent-pom/pages/about.adoc
index e0597070b0..c5c814d170 100644
--- a/starters/adoc/modules/parent-pom/pages/about.adoc
+++ b/starters/adoc/modules/parent-pom/pages/about.adoc
@@ -39,21 +39,21 @@ The parent POM also import (using `scope=import, type=pom`) 
each of the "bill of
 
 * `org.apache.causeway.core:causeway` -
 +
-The two core modules most commonly referenced by domain applications are 
`o.a.i.core:causeway-applib` and `o.a.i.core:causeway-schema`.
+The two core modules most commonly referenced by domain applications are 
`o.a.c.core:causeway-applib` and `o.a.c.core:causeway-schema`.
 
-* `o.a.i.testing:causeway-testing`
+* `o.a.c.testing:causeway-testing`
 +
 For the `causeway-testing-xxx` modules (fixture scripts, unit test support, 
integ test support etc)
 
-* `o.a.i.extensions:causeway-extensions`
+* `o.a.c.extensions:causeway-extensions`
 
-* `o.a.i.subdomains:causeway-subdomains`
+* `o.a.c.subdomains:causeway-subdomains`
 
-* `o.a.i.valuetypes:causeway-valuetypes`
+* `o.a.c.valuetypes:causeway-valuetypes`
 
-* `o.a.i.incubator:causeway-incubator`
+* `o.a.c.incubator:causeway-incubator`
 
-* `o.a.i.legacy:causeway-legacy`
+* `o.a.c.legacy:causeway-legacy`
 
 These all set up `<dependencyManagement>/<dependencies>` entries for all of 
the modules, meaning that there's only one place to update the version to 
Apache Causeway (the reference to the parent POM).
 

Reply via email to