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 2020/02/16 23:18:35 UTC

[isis] branch master updated (ded0d0f -> 355dd8d)

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

danhaywood pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from ded0d0f  ISIS-2062: config guide
     new dfca746  ISIS-2062: update out-of-date examples
     new 355dd8d  ISIS-2062: config guide docs

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


Summary of changes:
 .../examples/util/schema/CommonDtoUtils.java       |  7 +-
 .../examples/services/iactn/Interaction.java       |  4 +-
 .../jaxb/CatalogingSchemaOutputResolver.java       |  9 +-
 .../examples/services/wrapper/AsyncWrap.java       |  4 +-
 .../examples/services/wrapper/WrapperFactory.java  |  6 +-
 .../examples/services/wrapper/WrappingObject.java  |  4 +-
 .../xmlsnapshot/XmlSnapshotServiceAbstract.java    |  7 +-
 .../modules/applib-svc/pages/core-domain-api.adoc  | 15 +++-
 .../pages/core-domain-api/IsisConfiguration.adoc}  |  5 +-
 .../src/main/adoc/modules/config/pages/about.adoc  | 97 ++++++++++++++++++++--
 scripts/ci/_build-site.sh                          |  2 +-
 .../adoc/modules/starters/pages/helloworld.adoc    |  2 +-
 .../adoc/modules/starters/pages/simpleapp.adoc     |  4 +-
 13 files changed, 132 insertions(+), 34 deletions(-)
 copy api/{adoc/userguide/modules/fun/pages/core-concepts/philosophy/dci.adoc => applib/src/main/adoc/modules/applib-svc/pages/core-domain-api/IsisConfiguration.adoc} (93%)


[isis] 01/02: ISIS-2062: update out-of-date examples

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

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

commit dfca74640d4516e1f22adc7e64651b47b9d739bb
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Feb 16 19:25:23 2020 +0000

    ISIS-2062: update out-of-date examples
---
 .../modules/applib-cm/examples/util/schema/CommonDtoUtils.java   | 7 ++++++-
 .../modules/applib-svc/examples/services/iactn/Interaction.java  | 4 +++-
 .../examples/services/jaxb/CatalogingSchemaOutputResolver.java   | 9 ++++-----
 .../modules/applib-svc/examples/services/wrapper/AsyncWrap.java  | 4 ++--
 .../applib-svc/examples/services/wrapper/WrapperFactory.java     | 6 +++---
 .../applib-svc/examples/services/wrapper/WrappingObject.java     | 4 +++-
 .../services/xmlsnapshot/XmlSnapshotServiceAbstract.java         | 7 ++++---
 scripts/ci/_build-site.sh                                        | 2 +-
 8 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/api/applib/src/main/adoc/modules/applib-cm/examples/util/schema/CommonDtoUtils.java b/api/applib/src/main/adoc/modules/applib-cm/examples/util/schema/CommonDtoUtils.java
index 76f0189..6880f1d 100644
--- a/api/applib/src/main/adoc/modules/applib-cm/examples/util/schema/CommonDtoUtils.java
+++ b/api/applib/src/main/adoc/modules/applib-cm/examples/util/schema/CommonDtoUtils.java
@@ -110,7 +110,7 @@ public final class CommonDtoUtils {
                     entry(Clob.class, ValueType.CLOB)
                     );
 
-    public static Set<Class<?>> VALUE_TYPES = valueTypeByClass.keySet();
+    private final static Set<Class<?>> VALUE_TYPES = valueTypeByClass.keySet();
 
     public static ValueType asValueType(final Class<?> type) {
         final ValueType valueType = valueTypeByClass.get(type);
@@ -548,4 +548,9 @@ public final class CommonDtoUtils {
                 .findFirst();
     }
 
+
+    public static boolean isValueType(Class<?> type) {
+        return VALUE_TYPES.contains(type);
+    }
+
 }
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/iactn/Interaction.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/iactn/Interaction.java
index 1f5b67c..67d5688 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/iactn/Interaction.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/iactn/Interaction.java
@@ -51,6 +51,7 @@ import org.apache.isis.schema.ixn.v2.PropertyEditDto;
 import org.apache.isis.schema.jaxbadapters.JavaSqlTimestampXmlGregorianCalendarAdapter;
 
 import lombok.val;
+import lombok.extern.log4j.Log4j2;
 
 /**
  * Represents an action invocation or property modification, resulting in some state change of the system.  It captures
@@ -77,6 +78,7 @@ import lombok.val;
  * </p>
  *
  */
+@Log4j2
 public class Interaction implements HasUniqueId {
 
     // -- transactionId (property)
@@ -181,7 +183,7 @@ public class Interaction implements HasUniqueId {
                 // we rather print all of them, no matter whether recognized or not later on
                 // examples are IllegalArgument- or NullPointer- exceptions being swallowed when using the
                 // WrapperFactory utilizing async calls
-                ex.printStackTrace();
+                log.error("failed to execute an interaction", ex);
                 
                 // just because an exception has thrown, does not mean it is that significant; 
                 // it could be that it is recognized by an ExceptionRecognizer and is not severe 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/jaxb/CatalogingSchemaOutputResolver.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/jaxb/CatalogingSchemaOutputResolver.java
index 820314c..c77d003 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/jaxb/CatalogingSchemaOutputResolver.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/jaxb/CatalogingSchemaOutputResolver.java
@@ -27,10 +27,8 @@ import java.util.Map;
 
 import javax.xml.bind.SchemaOutputResolver;
 import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.Result;
 import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
@@ -41,6 +39,7 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
+import org.apache.isis.core.commons.internal.codec._DocumentFactories;
 import org.apache.isis.core.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.internal.collections._Maps;
 
@@ -74,14 +73,14 @@ class CatalogingSchemaOutputResolver extends SchemaOutputResolver {
         String xsd = streamResult.asString();
 
         try {
-            final DocumentBuilderFactory docBuildFactory = DocumentBuilderFactory.newInstance();
-            final DocumentBuilder parser = docBuildFactory.newDocumentBuilder();
+            
+            final DocumentBuilder parser = _DocumentFactories.documentBuilder();
             final Document document = parser.parse(new InputSource(new StringReader(xsd)));
 
             final Element el = document.getDocumentElement();
             replaceCommonSchemaLocationIfAny(el);
 
-            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
+            final Transformer transformer = _DocumentFactories.transformer();
             final StringWriter writer = new StringWriter();
             transformer.transform(new DOMSource(document), new StreamResult(writer));
             xsd = writer.toString();
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/AsyncWrap.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/AsyncWrap.java
index 613c0cd..9b4bdd3 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/AsyncWrap.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/AsyncWrap.java
@@ -18,12 +18,12 @@
  */
 package org.apache.isis.applib.services.wrapper;
 
-import java.util.EnumSet;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.function.Consumer;
 
 import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
+import org.apache.isis.core.commons.collections.ImmutableEnumSet;
 
 /**
  * Binds to a domain object, to prepare for type-safe asynchronous action invocation.
@@ -97,7 +97,7 @@ public interface AsyncWrap<T> {
     Consumer<Exception> getExceptionHandler();
     AsyncWrap<T> withExceptionHandler(Consumer<Exception> handler);
     
-    EnumSet<ExecutionMode> getExecutionMode();
+    ImmutableEnumSet<ExecutionMode> getExecutionMode();
     
     // -- INVOCATION (WITH RETURN VALUE)
     
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/WrapperFactory.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/WrapperFactory.java
index d4b47ff..52ef06a 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/WrapperFactory.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/WrapperFactory.java
@@ -168,7 +168,7 @@ public interface WrapperFactory {
      * Otherwise, will do all the validations (raise exceptions as required
      * etc.), but doesn't modify the model.
      */
-    <T> T wrap(T domainObject, EnumSet<ExecutionMode> mode);
+    <T> T wrap(T domainObject, ImmutableEnumSet<ExecutionMode> mode);
 
 
     /**
@@ -203,7 +203,7 @@ public interface WrapperFactory {
      * 
      * @since 2.0
      */
-    <T> AsyncWrap<T> async(T domainObject, EnumSet<ExecutionMode> mode);
+    <T> AsyncWrap<T> async(T domainObject, ImmutableEnumSet<ExecutionMode> mode);
     
     /**
      * Shortcut for {@link #async(Object, EnumSet)} using execution mode 
@@ -228,7 +228,7 @@ public interface WrapperFactory {
      * 
      * @since 2.0
      */
-    <T> AsyncWrap<T> asyncMixin(Class<T> mixinClass, Object mixedIn, EnumSet<ExecutionMode> mode);
+    <T> AsyncWrap<T> asyncMixin(Class<T> mixinClass, Object mixedIn, ImmutableEnumSet<ExecutionMode> mode);
     
     /**
      * Shortcut for {@link #asyncMixin(Class, Object, EnumSet)} using execution mode 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/WrappingObject.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/WrappingObject.java
index d469eb1..6e12f63 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/WrappingObject.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/wrapper/WrappingObject.java
@@ -21,6 +21,8 @@ package org.apache.isis.applib.services.wrapper;
 
 import java.util.EnumSet;
 
+import org.apache.isis.core.commons.collections.ImmutableEnumSet;
+
 /**
  * Implemented by all objects that have been viewed as per
  * {@link org.apache.isis.applib.services.wrapper.WrapperFactory#wrap(Object)}.
@@ -66,5 +68,5 @@ public interface WrappingObject {
      * intended to reduce the risk of a collision.
      * </p>
      */
-    EnumSet<WrapperFactory.ExecutionMode> __isis_executionMode();
+    ImmutableEnumSet<WrapperFactory.ExecutionMode> __isis_executionMode();
 }
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/xmlsnapshot/XmlSnapshotServiceAbstract.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/xmlsnapshot/XmlSnapshotServiceAbstract.java
index 7003d18..4374127 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/xmlsnapshot/XmlSnapshotServiceAbstract.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/xmlsnapshot/XmlSnapshotServiceAbstract.java
@@ -28,7 +28,6 @@ import java.util.Locale;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.stream.StreamSource;
 
@@ -38,6 +37,8 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.w3c.dom.Text;
 
+import org.apache.isis.core.commons.internal.codec._DocumentFactories;
+
 public abstract class XmlSnapshotServiceAbstract implements XmlSnapshotService {
 
     @Override
@@ -46,8 +47,8 @@ public abstract class XmlSnapshotServiceAbstract implements XmlSnapshotService {
             final StringReader reader = new StringReader(xmlStr);
             final StreamSource streamSource = new StreamSource(reader);
             final DOMResult result = new DOMResult();
-            final TransformerFactory tf = TransformerFactory.newInstance();
-            final Transformer transformer = tf.newTransformer();
+            
+            final Transformer transformer = _DocumentFactories.transformer();
             transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
             transformer.setOutputProperty(OutputKeys.METHOD, "xml");
             transformer.setOutputProperty(OutputKeys.INDENT, "yes");
diff --git a/scripts/ci/_build-site.sh b/scripts/ci/_build-site.sh
index 1908d2a..f18f46d 100644
--- a/scripts/ci/_build-site.sh
+++ b/scripts/ci/_build-site.sh
@@ -32,7 +32,7 @@ else
   WC=$(git status --porcelain | grep examples | wc -l)
   if [ "$WC" -ne "0" ]; then
     git status --porcelain
-    echo "Some examples are out of date; run sync-adoc.sh and commit, then try again" >&2
+    echo "Some examples are out of date; commit changes and then try again" >&2
     exit 1
   fi
 fi


[isis] 02/02: ISIS-2062: config guide docs

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

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

commit 355dd8d642bdb66eb1ea2a954e3c2058aa9df71c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Feb 16 23:17:02 2020 +0000

    ISIS-2062: config guide docs
---
 .../modules/applib-svc/pages/core-domain-api.adoc  | 15 +++-
 .../pages/core-domain-api/IsisConfiguration.adoc   |  6 ++
 .../src/main/adoc/modules/config/pages/about.adoc  | 97 ++++++++++++++++++++--
 .../adoc/modules/starters/pages/helloworld.adoc    |  2 +-
 .../adoc/modules/starters/pages/simpleapp.adoc     |  4 +-
 5 files changed, 110 insertions(+), 14 deletions(-)

diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api.adoc
index 52a8336..9a8b198 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api.adoc
@@ -35,12 +35,13 @@ It also lists their corresponding implementation, either a default implementatio
 |xref:refguide:applib-svc:core-domain-api/ConfigurationService.adoc[`o.a.i.applib.` +
 `services.config` +
 `ConfigurationService`]
-|Access configuration properties (eg from `isis.properties` file)
+|Access configuration properties (eg from `application.properties` file)
 |`ConfigurationService-` +
 ``Default`` +
 ``o.a.i.core`` +
 ``isis-core-runtime``
-|The ``ConfigurationServiceMenu`` exposes the ``allConfigurationProperties`` action in the user interface. +
+|The ``ConfigurationServiceMenu`` exposes the ``allConfigurationProperties`` action in the user interface.
+
 
 
 |xref:refguide:applib-svc:core-domain-api/EventBusService.adoc[`o.a.i.applib.` +
@@ -68,6 +69,16 @@ It also lists their corresponding implementation, either a default implementatio
 
 
 
+|xref:refguide:applib-svc:core-domain-api/IsisConfiguration.adoc[`o.a.i.applib.` +
+`core.config` +
+`IsisConfiguration`]
+|Access configuration properties (eg from `application.properties` file)
+|`IsisConfiguration`
+``o.a.i.core`` +
+``isis-core-config``
+|A lower-level mechanism to obtain configuration properties.
+
+
 
 |xref:refguide:applib-svc:core-domain-api/Scratchpad.adoc[`o.a.i.applib.` +
 `services.scratchpad` +
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api/IsisConfiguration.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api/IsisConfiguration.adoc
new file mode 100644
index 0000000..d8ab997
--- /dev/null
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api/IsisConfiguration.adoc
@@ -0,0 +1,6 @@
+= `IsisConfiguration`
+: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 [...]
+:page-partial:
+
+
+WARNING: TODO: v2: to document.
diff --git a/core/config/src/main/adoc/modules/config/pages/about.adoc b/core/config/src/main/adoc/modules/config/pages/about.adoc
index 7d1f6ef..485d8d5 100644
--- a/core/config/src/main/adoc/modules/config/pages/about.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/about.adoc
@@ -16,14 +16,29 @@ This chapter describes the configuration properties available to configure an Ap
 Apache Isis distinguishes between the application being run in prototyping mode vs running in production mode.
 The framework calls this the "deployment type" (corresponding internally to the `DeploymentType` class).
 
-A similar concept appears in the link:https://wicket.apache.org[Wicket] framework (which is the library with which the xref:vw:ROOT:about.adoc[Wicket viewer] is implemented, of course).
+A similar concept appears in the link:https://wicket.apache.org[Apache Wicket] framework (which is the library with which the xref:vw:ROOT:about.adoc[Wicket viewer] is implemented, of course).
+Wicket's term is the "configuration".
 
-* the term "deployment type" is called the runtime "configuration" by Wicket
-* the _prototyping_ deployment type corresponds to Wicket's _development_ configuration
-* the _production_ deployment type corresponds to Wicket's _deployment_ configuration
+.Wicket equivalent concepts
+[cols="1a,1a", options="header"]
+|===
+
+| Apache Isis +
+deployment type
+| Apache Wicket library +
+configuration
+
+|_prototyping_
+|_development_
+
+|_production_
+|_deployment_
+
+
+|===
 
 By default Apache Isis runs in production mode.
-If running in prototyping mode, then any actions xref:refguide:applib-ant:Action.adoc#restrictto[restricted to] to prototype mode are visible.
+But if configured to run instead in prototyping mode, then any actions xref:refguide:applib-ant:Action.adoc#restrictto[restricted to] to prototype mode are visible.
 In particular, the "Prototyping" menu will appear, containing a number of framework-provided menu services - all restricted to prototyping mode.
 For example, menu items to run in xref:testing:fixtures:about.adoc[fixture scripts] are on this menu.
 
@@ -36,7 +51,7 @@ Prototyping mode can be enabled in a number of ways:
 export PROTOTYPING=true
 ----
 
-* `PRODUCTION` system property
+* `PROTOTYPING` system property
 +
 [source,bash]
 ----
@@ -69,7 +84,7 @@ It is also possible to explicitly specify production mode:
 If (by a combination of mechanisms) both prototyping and production modes are specified, then production mode wins.
 
 
-=== `IsisSystemEnvironment` service
+=== `IsisSystemEnvironment` domain service
 
 Applications can discover the prototyping mode by injecting the xref:refguide:applib-svc:testing/IsisSystemEnvironment.adoc[IsisSystemEnvironment] service.
 
@@ -77,10 +92,74 @@ Applications can discover the prototyping mode by injecting the xref:refguide:ap
 
 == Specifying components
 
-WARNING: TODO: v2 - discuss the Spring bootstrap and IsisModuleXxx.  Perhaps just copy similar material already in the starter apps.
+Components are pluggable parts of the Apache Isis framework that are responsible for the presentation layer, for security, or for persistence.
+Each component corresponds to one or more Maven module(s), and are specified using the Spring link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Import.html[@Import] statements from a top-level class annotated with Spring's link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html[@Configuration] annotation.
+These are then bootstrapped from a link:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html[@SpringBootApplication] or link:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html[@SpringBootTest].
+
+For example, the xref:docs:starters:simpleapp.adoc[simpleapp starter app] project is bootstrapped using `SimpleApp`, annotated with `@SpringBootApplication`:
+
+[source,java]
+----
+@SpringBootApplication
+@Import({
+    AppManifest.class,                                          //<!--1-->
+})
+public class SimpleApp
+            extends SpringBootServletInitializer {
+
+    public static void main(String[] args) {
+        IsisPresets.prototyping();                              //<!--2-->
+        SpringApplication.run(
+                new Class[] { SimpleApp.class }, args);
+    }
+}
+----
+<1> references the `AppManifest`, discussed below.
+<2> specifies prototyping mode.
+This enables actions marked for prototyping to become available, useful during the early stages of development.
+
+In turn, the "app manifest" (the name has been retained from Apache Isis v1.x) is the top-level Spring `@Configuration`.
+It looks like this:
+
+[source,java]
+.AppManifest.java
+----
+@Configuration
+@Import({
+        IsisModuleCoreRuntimeServices.class,                    //<!--1-->
+        IsisModuleSecurityShiro.class,                          //<!--2-->
+        IsisModuleJdoDataNucleus5.class,                        //<!--3-->
+        IsisModuleViewerRestfulObjectsJaxrsResteasy4.class,     //<!--4-->
+        IsisModuleViewerWicketViewer.class,                     //<!--5-->
+        ...
+        ApplicationModule.class,                                //<!--6-->
+        ...
+})
+public class AppManifest {
+}
+----
+<1> Mandatory - specifies the core of the Apache Isis framework
+<2> Enables the Shiro security mechanism.
+There are several security implementations, precisely one must be selected
+<3> Enables JDO/DataNucleus for persistence.
+Optional (though if omitted then only xref:userguide:fun:building-blocks/types-of-domain-objects.adoc[view models] may be used, with hand-rolled persistence).
+<4> Enables the xref:vro:ROOT:about.adoc[Restful Objects viewer] (ie REST API).
+<5> Enables the xref:vw:ROOT:about.adoc[Wicket viewer]
+<6> References the application's module(s), in this case just the one, `ApplicationModule`. +
 
+All of the components available are named in the form`IsisModuleXxx`, so they are easy to discover.
+
+NOTE: Components currently do _not_ use Spring Boot's auto-configuration capabilities.
+That means that it's not enough to just add the appropriate Maven module to the classpath; its corresponding `IsisModuleXxx` must be referenced using an `@Import`.
 
 
 == Configuration Properties
 
-WARNING: TODO: v2 - quick intro to the subsections that follow...
+The core framework has a large number of configuration properties, as do the various xref:about.adoc#specifying-components[components].
+For that matter, so do some of the xref:subdomains:ROOT:about.adoc[subdomain] libraries, bounded context xref:mappings:ROOT:about.adoc[mapping] libraries and xref:valuetypes:ROOT:about.adoc[value type] libraries.
+
+The remainder of this guide lists the various configuration properties available, broken out into logical sections.
+
+=== `IsisConfiguration` domain service
+
+Applications can discover the current configuration properties by injecting the xref:refguide:applib-svc:core-domain-api/IsisConfiguration.adoc[`IsisConfiguration`] domain service.
diff --git a/starters/adoc/modules/starters/pages/helloworld.adoc b/starters/adoc/modules/starters/pages/helloworld.adoc
index 14967ba..2906ec4 100644
--- a/starters/adoc/modules/starters/pages/helloworld.adoc
+++ b/starters/adoc/modules/starters/pages/helloworld.adoc
@@ -327,7 +327,7 @@ public class AppManifest {
 ----
 <1> Mandatory - specifies the core of the Apache Isis framework
 <2> Enables the Shiro security mechanism.
-There are several implementations, precisely one must be selected
+There are several security implementations, precisely one must be selected
 <3> Enables JDO/DataNucleus for persistence.
 Optional (though if omitted then only xref:userguide:fun:building-blocks/types-of-domain-objects.adoc[view models] may be used, with hand-rolled persistence).
 <4> Enables the xref:vro:ROOT:about.adoc[Restful Objects viewer] (ie REST API).
diff --git a/starters/adoc/modules/starters/pages/simpleapp.adoc b/starters/adoc/modules/starters/pages/simpleapp.adoc
index bf1541d..7fa6963 100644
--- a/starters/adoc/modules/starters/pages/simpleapp.adoc
+++ b/starters/adoc/modules/starters/pages/simpleapp.adoc
@@ -333,7 +333,7 @@ There will be several of these app manifests, typically one for the webapp itsel
 The link:{attachmentsdir}/simpleapp-modules-dependencies.pptx[diagram] below shows how classes fit together:
 
 .Module Dependencies
-image::simpleapp-modules-dependencies.png[width="800px",link="{imagesdir}/simpleapp/simpleapp-modules-dependencies.png"]
+image::simpleapp/simpleapp-modules-dependencies.png[width="800px",link="{imagesdir}/simpleapp/simpleapp-modules-dependencies.png"]
 
 
 
@@ -638,7 +638,7 @@ public class AppManifest {
 ----
 <1> Mandatory - specifies the core of the Apache Isis framework
 <2> Enables the Shiro security mechanism.
-There are several implementations, precisely one must be selected
+There are several security implementations, precisely one must be selected
 <3> Enables JDO/DataNucleus for persistence.
 Optional (though if omitted then only xref:userguide:fun:building-blocks/types-of-domain-objects.adoc[view models] may be used, with hand-rolled persistence).
 <4> Enables the xref:vro:ROOT:about.adoc[Restful Objects viewer] (ie REST API).