You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/11/24 16:53:00 UTC

[isis] branch 2039-Redesign_of_Config updated (78b6c7b -> 3a99e67)

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

ahuber pushed a change to branch 2039-Redesign_of_Config
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from 78b6c7b  ISIS-2039: more test fixes
     new ccafeb8  ISIS-2039: experimenting with AppConfig managed by Guice
     add 61ba00e  ISIS-1974: moves further metamodel validation to be evaluated later
     add b9adf68  ISIS-2043: adds domainEvents for @DomainObject
     add cab9e46  ISIS-2043: adds ActionDomainEvent#getSubject() as a convenience
     add c568147  ISIS-2043: adds support for @DomainObject(xxxDomainEvent=...) for mixins
     add 901b63e  ISIS-2043: updates docs for @DomainObject#xxxDomainEvent
     add 972218a  Merge branch 'master' into v2
     add e85504a  ISIS-2043: removes accidentally committed test class
     add 7c06c1a  Merge branch 'master' into v2
     new 3a99e67  merging 'v2' into '2039-Redesign_of_Config'

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:
 .../guides/rgant/_rgant-Action_domainEvent.adoc    |  72 +++++++----
 .../rgant/_rgant-Collection_domainEvent.adoc       |  37 +++---
 .../_rgant-DomainObjectLayout_bookmarking.adoc     |   6 +-
 .../_rgant-DomainObjectLayout_cssClassFa.adoc      |   8 +-
 .../_rgant-DomainObjectLayout_describedAs.adoc     |   4 +-
 .../_rgant-DomainObjectLayout_iconUiEvent.adoc     |   6 +-
 .../rgant/_rgant-DomainObjectLayout_named.adoc     |   3 +-
 .../rgant/_rgant-DomainObjectLayout_paged.adoc     |   6 +-
 .../rgant/_rgant-DomainObjectLayout_plural.adoc    |   3 +-
 .../_rgant-DomainObjectLayout_titleUiEvent.adoc    |  34 +++---
 .../_rgant-DomainObject_actionDomainEvent.adoc     |  45 +++++++
 .../_rgant-DomainObject_collectionDomainEvent.adoc |  62 ++++++++++
 ...rgant-DomainObject_persistedLifecycleEvent.adoc |  18 ++-
 ...gant-DomainObject_persistingLifecycleEvent.adoc |  15 +--
 .../_rgant-DomainObject_propertyDomainEvent.adoc   |  62 ++++++++++
 ..._rgant-DomainObject_removingLifecycleEvent.adoc |  24 ++--
 .../_rgant-DomainObject_updatedLifecycleEvent.adoc |  25 ++--
 ..._rgant-DomainObject_updatingLifecycleEvent.adoc |  30 ++---
 .../guides/rgant/_rgant-Property_domainEvent.adoc  |  37 +++---
 .../_rgsvc_core-domain-api_EventBusService.adoc    |   5 +-
 ...ng-model_domain-services_event-subscribers.adoc |  12 +-
 .../_ugfun_ui-hints_object-titles-and-icons.adoc   |  12 +-
 ..._ugvw_hints-and-tips_highlight-current-row.adoc |   4 +-
 .../java/org/apache/isis/applib/AppManifest.java   |  33 ++++++
 .../org/apache/isis/applib/annotation/Action.java  |   6 -
 .../apache/isis/applib/annotation/Collection.java  |   6 -
 .../isis/applib/annotation/DomainObject.java       |  81 +++++++++++++
 .../apache/isis/applib/annotation/Property.java    |   6 -
 .../applib/events/domain/AbstractDomainEvent.java  |  32 +++++
 .../config/internal/_Config_LifecycleResource.java |   4 +-
 .../services/eventbus/ActionDomainEvent.java       |  16 ---
 .../core/metamodel/facets/DomainEventHelper.java   |  17 ++-
 .../facets/SingleClassValueFacetAbstract.java      |   2 +-
 .../action/ActionAnnotationFacetFactory.java       |  18 ++-
 .../invocation/ActionDomainEventFacetAbstract.java |  23 +++-
 .../CollectionAnnotationFacetFactory.java          |  29 ++++-
 ...ectionAddToFacetForDomainEventFromAbstract.java |   8 +-
 .../modify/CollectionDomainEventFacetAbstract.java |  29 ++++-
 ...nRemoveFromFacetForDomainEventFromAbstract.java |   7 +-
 .../autocomplete/AutoCompleteFacetAbstract.java    |   4 +
 .../DomainObjectAnnotationFacetFactory.java        |  86 +++++++++++---
 ...AutoCompleteFacetForDomainObjectAnnotation.java |   8 --
 ...ventDefaultFacetForDomainObjectAnnotation.java} |  33 ++++--
 ...ventDefaultFacetForDomainObjectAnnotation.java} |  32 +++--
 ...ventDefaultFacetForDomainObjectAnnotation.java} |  32 +++--
 .../property/PropertyAnnotationFacetFactory.java   |  27 ++++-
 .../modify/PropertyDomainEventFacetAbstract.java   |  71 +++++++----
 .../modify/PropertyDomainEventFacetDefault.java    |   8 +-
 ...pertyDomainEventFacetForPropertyAnnotation.java |   8 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |  16 +--
 .../param/DeriveFacetsPostProcessor.java           | 132 +++++++++++++++++++++
 .../action/ActionAnnotationFacetFactoryTest.java   |   5 +
 ...ollectionAnnotationFacetFactoryTest_typeOf.java |  22 ++++
 .../PropertyAnnotationFacetFactoryTest.java        |  13 ++
 .../shiro/ShiroAuthenticatorOrAuthorizor.java      |   5 +-
 .../apache/isis/core/runtime/startup-objects.ucls  | 111 -----------------
 .../viewer/integration/isis/IsisInjectModule.java  |  77 ++++++------
 .../domainapp/application/HelloWorldAppConfig.java |  40 ++++---
 .../application/HelloWorldAppManifest.java         |   3 +
 .../application/isis-non-changing.properties       |  12 --
 .../integtests/smoke/Smoke_IntegTest.java          |   1 +
 61 files changed, 1067 insertions(+), 526 deletions(-)
 create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_actionDomainEvent.adoc
 create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_collectionDomainEvent.adoc
 create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_propertyDomainEvent.adoc
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/{callbacks/RemovingLifecycleEventFacetForDomainObjectAnnotation.java => domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java} (55%)
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/{callbacks/UpdatedLifecycleEventFacetForDomainObjectAnnotation.java => domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java} (55%)
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/{callbacks/RemovingLifecycleEventFacetForDomainObjectAnnotation.java => domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java} (55%)
 delete mode 100644 core/runtime/src/main/java/org/apache/isis/core/runtime/startup-objects.ucls
 copy core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisClobPanelFactory.java => example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppConfig.java (52%)


[isis] 02/02: merging 'v2' into '2039-Redesign_of_Config'

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

ahuber pushed a commit to branch 2039-Redesign_of_Config
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 3a99e677ae812103e85e355c1c588fd7bf324a39
Merge: ccafeb8 7c06c1a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Nov 24 17:52:24 2018 +0100

    merging 'v2' into '2039-Redesign_of_Config'

 .../guides/rgant/_rgant-Action_domainEvent.adoc    |  72 +++++++----
 .../rgant/_rgant-Collection_domainEvent.adoc       |  37 +++---
 .../_rgant-DomainObjectLayout_bookmarking.adoc     |   6 +-
 .../_rgant-DomainObjectLayout_cssClassFa.adoc      |   8 +-
 .../_rgant-DomainObjectLayout_describedAs.adoc     |   4 +-
 .../_rgant-DomainObjectLayout_iconUiEvent.adoc     |   6 +-
 .../rgant/_rgant-DomainObjectLayout_named.adoc     |   3 +-
 .../rgant/_rgant-DomainObjectLayout_paged.adoc     |   6 +-
 .../rgant/_rgant-DomainObjectLayout_plural.adoc    |   3 +-
 .../_rgant-DomainObjectLayout_titleUiEvent.adoc    |  34 +++---
 .../_rgant-DomainObject_actionDomainEvent.adoc     |  45 +++++++
 .../_rgant-DomainObject_collectionDomainEvent.adoc |  62 ++++++++++
 ...rgant-DomainObject_persistedLifecycleEvent.adoc |  18 ++-
 ...gant-DomainObject_persistingLifecycleEvent.adoc |  15 +--
 .../_rgant-DomainObject_propertyDomainEvent.adoc   |  62 ++++++++++
 ..._rgant-DomainObject_removingLifecycleEvent.adoc |  24 ++--
 .../_rgant-DomainObject_updatedLifecycleEvent.adoc |  25 ++--
 ..._rgant-DomainObject_updatingLifecycleEvent.adoc |  30 ++---
 .../guides/rgant/_rgant-Property_domainEvent.adoc  |  37 +++---
 .../_rgsvc_core-domain-api_EventBusService.adoc    |   5 +-
 ...ng-model_domain-services_event-subscribers.adoc |  12 +-
 .../_ugfun_ui-hints_object-titles-and-icons.adoc   |  12 +-
 ..._ugvw_hints-and-tips_highlight-current-row.adoc |   4 +-
 .../org/apache/isis/applib/annotation/Action.java  |   6 -
 .../apache/isis/applib/annotation/Collection.java  |   6 -
 .../isis/applib/annotation/DomainObject.java       |  81 +++++++++++++
 .../apache/isis/applib/annotation/Property.java    |   6 -
 .../applib/events/domain/AbstractDomainEvent.java  |  32 +++++
 .../services/eventbus/ActionDomainEvent.java       |  16 ---
 .../core/metamodel/facets/DomainEventHelper.java   |  17 ++-
 .../facets/SingleClassValueFacetAbstract.java      |   2 +-
 .../action/ActionAnnotationFacetFactory.java       |  18 ++-
 .../invocation/ActionDomainEventFacetAbstract.java |  23 +++-
 .../CollectionAnnotationFacetFactory.java          |  29 ++++-
 ...ectionAddToFacetForDomainEventFromAbstract.java |   8 +-
 .../modify/CollectionDomainEventFacetAbstract.java |  29 ++++-
 ...nRemoveFromFacetForDomainEventFromAbstract.java |   7 +-
 .../autocomplete/AutoCompleteFacetAbstract.java    |   4 +
 .../DomainObjectAnnotationFacetFactory.java        |  86 +++++++++++---
 ...AutoCompleteFacetForDomainObjectAnnotation.java |   8 --
 ...EventDefaultFacetForDomainObjectAnnotation.java |  54 +++++++++
 ...EventDefaultFacetForDomainObjectAnnotation.java |  53 +++++++++
 ...EventDefaultFacetForDomainObjectAnnotation.java |  53 +++++++++
 .../property/PropertyAnnotationFacetFactory.java   |  27 ++++-
 .../modify/PropertyDomainEventFacetAbstract.java   |  71 +++++++----
 .../modify/PropertyDomainEventFacetDefault.java    |   8 +-
 ...pertyDomainEventFacetForPropertyAnnotation.java |   8 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |  16 +--
 .../param/DeriveFacetsPostProcessor.java           | 132 +++++++++++++++++++++
 .../action/ActionAnnotationFacetFactoryTest.java   |   5 +
 ...ollectionAnnotationFacetFactoryTest_typeOf.java |  22 ++++
 .../PropertyAnnotationFacetFactoryTest.java        |  13 ++
 .../integtests/smoke/Smoke_IntegTest.java          |   1 +
 53 files changed, 1071 insertions(+), 300 deletions(-)

diff --cc core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
index f9b477f,fdd281e..8831b55
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
@@@ -114,6 -112,13 +115,10 @@@ public class ActionAnnotationFacetFacto
          context.checking(new Expectations() {{
              allowing(mockServicesInjector).lookupServiceElseFail(AuthenticationSessionProvider.class);
              will(returnValue(mockAuthenticationSessionProvider));
 -
 -            allowing(mockServicesInjector).getConfigurationServiceInternal();
 -            will(returnValue(mockConfiguration));
 -
++            
+             allowing(mockTypeSpec).getFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class);
+             will(returnValue(null));
+ 
          }});
  
          actionMethod = findMethod(Customer.class, "someAction");


[isis] 01/02: ISIS-2039: experimenting with AppConfig managed by Guice

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

ahuber pushed a commit to branch 2039-Redesign_of_Config
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ccafeb8b7032343a58c112e7750fe5986d37ff56
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Nov 23 21:09:12 2018 +0100

    ISIS-2039: experimenting with AppConfig managed by Guice
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
---
 .../java/org/apache/isis/applib/AppManifest.java   |  33 ++++++
 .../config/internal/_Config_LifecycleResource.java |   4 +-
 .../shiro/ShiroAuthenticatorOrAuthorizor.java      |   5 +-
 .../apache/isis/core/runtime/startup-objects.ucls  | 111 ---------------------
 .../viewer/integration/isis/IsisInjectModule.java  |  77 ++++++--------
 ...ldAppManifest.java => HelloWorldAppConfig.java} |  31 ++++--
 .../application/HelloWorldAppManifest.java         |   3 +
 .../application/isis-non-changing.properties       |  12 ---
 8 files changed, 96 insertions(+), 180 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
index b834758..9bc437e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
@@ -256,6 +256,39 @@ public interface AppManifest {
         //endregion
 
     }
+    
+    // -- NOOP
+    
+    static final AppManifest NOOP = new AppManifest() {
+        @Override public List<Class<?>> getModules() {
+            return null;
+        }
+        @Override public List<Class<?>> getAdditionalServices() {
+            return null;
+        }
+
+        @Override public String getAuthenticationMechanism() {
+            return null;
+        }
+
+        @Override public String getAuthorizationMechanism() {
+            return null;
+        }
+
+        @Override public List<Class<? extends FixtureScript>> getFixtures() {
+            return null;
+        }
+
+        @Override public Map<String, String> getConfigurationProperties() {
+            return null;
+        }
+    };
+    
+    public static AppManifest noop() {
+        return NOOP;
+    }
+    
+    // -- UTIL
 
     public static class Util {
 
diff --git a/core/config/src/main/java/org/apache/isis/config/internal/_Config_LifecycleResource.java b/core/config/src/main/java/org/apache/isis/config/internal/_Config_LifecycleResource.java
index ce6543a..1aeeca0 100644
--- a/core/config/src/main/java/org/apache/isis/config/internal/_Config_LifecycleResource.java
+++ b/core/config/src/main/java/org/apache/isis/config/internal/_Config_LifecycleResource.java
@@ -54,11 +54,13 @@ class _Config_LifecycleResource {
         // causal information, in case the builder is accessed after it already
         // built the configuration
         try {
-            throw new IllegalStateException("Configuration Build Event");
+            throw new IllegalStateException("IsisConfiguration Build (previously already triggered by ...)");
         } catch(IllegalStateException e) {
             this.configurationBuildStacktrace = e;
         }
         
+        System.err.println("!!!!!!! IsisConfiguration BUILT");
+        
         return builder.build();
         
     }
diff --git a/core/plugins/security-shiro/src/main/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizor.java b/core/plugins/security-shiro/src/main/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizor.java
index 5df10b2..c07d344 100644
--- a/core/plugins/security-shiro/src/main/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizor.java
+++ b/core/plugins/security-shiro/src/main/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizor.java
@@ -45,7 +45,6 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
 import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
@@ -56,6 +55,8 @@ import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
 import org.apache.isis.core.runtime.authorization.standard.Authorizor;
 import org.apache.isis.security.shiro.authorization.IsisPermission;
 
+import static org.apache.isis.config.internal._Config.getConfiguration;
+
 /**
  * If Shiro is configured for both {@link AuthenticationManagerInstaller authentication} and
  * {@link AuthorizationManagerInstaller authorization} (as recommended), then this class is
@@ -76,7 +77,7 @@ public class ShiroAuthenticatorOrAuthorizor implements Authenticator, Authorizor
     private final boolean autoLogout;
 
     public ShiroAuthenticatorOrAuthorizor() {
-        autoLogout = _Config.getConfiguration().getBoolean(
+        autoLogout = getConfiguration().getBoolean(
                 ISIS_AUTHENTICATION_SHIRO_AUTO_LOGOUT_KEY,
                 ISIS_AUTHENTICATION_SHIRO_AUTO_LOGOUT_DEFAULT);
     }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/startup-objects.ucls b/core/runtime/src/main/java/org/apache/isis/core/runtime/startup-objects.ucls
deleted file mode 100644
index 7af5a5f..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/startup-objects.ucls
+++ /dev/null
@@ -1,111 +0,0 @@
-<class-diagram version="0.9.86" icons="true" always-add-relationships="false" generalizations="true" realizations="true" 
-  associations="true" dependencies="false" nesting-relationships="true">  
-  <class corner="BOTTOM_RIGHT" language="java" name="org.apache.isis.core.runtime.Isis" project="runtime" 
-    file="/runtime/src/main/java/org/apache/isis/core/runtime/Isis.java" binary="false">    
-    <position x="438" y="251" width="-1" height="-1"/>    
-    <display autosize="true" package="true" initial-value="false" signature="true" visibility="true">      
-      <attributes public="false" package="false" protected="false" private="false"/>      
-      <operations public="false" package="false" protected="false" private="false"/>    
-    </display>  
-  </class>  
-  <class corner="BOTTOM_RIGHT" language="java" name="org.apache.isis.core.runtime.IsisAbstract" project="runtime" 
-    file="/runtime/src/main/java/org/apache/isis/core/runtime/IsisAbstract.java" binary="false">    
-    <position x="442" y="154" width="-1" height="-1"/>    
-    <display autosize="true" package="true" initial-value="false" signature="true" visibility="true">      
-      <attributes public="false" package="false" protected="false" private="false"/>      
-      <operations public="false" package="false" protected="false" private="false"/>    
-    </display>  
-  </class>  
-  <class corner="BOTTOM_RIGHT" language="java" name="org.apache.isis.core.runtime.logging.IsisLoggingConfigurer" 
-    project="runtime" file="/runtime/src/main/java/org/apache/isis/core/runtime/logging/IsisLoggingConfigurer.java" 
-    binary="false">    
-    <position x="712" y="152" width="-1" height="-1"/>    
-    <display autosize="true" package="true" initial-value="false" signature="true" visibility="true">      
-      <attributes public="false" package="false" protected="false" private="false"/>      
-      <operations public="false" package="false" protected="false" private="false"/>    
-    </display>  
-  </class>  
-  <interface corner="BOTTOM_RIGHT" language="java" name="org.apache.isis.core.runtime.installers.InstallerLookup" 
-    project="runtime" file="/runtime/src/main/java/org/apache/isis/core/runtime/installers/InstallerLookup.java" 
-    binary="false">    
-    <position x="196" y="154" width="-1" height="-1"/>    
-    <display autosize="true" package="true" initial-value="false" signature="true" visibility="true">      
-      <attributes public="false" package="false" protected="false" private="false"/>      
-      <operations public="false" package="false" protected="false" private="false"/>    
-    </display>  
-  </interface>  
-  <class corner="BOTTOM_RIGHT" language="java" name="org.apache.isis.core.runtime.installers.InstallerLookupDefault" 
-    project="runtime" file="/runtime/src/main/java/org/apache/isis/core/runtime/installers/InstallerLookupDefault.java" 
-    binary="false">    
-    <position x="196" y="272" width="-1" height="-1"/>    
-    <display autosize="true" package="true" initial-value="false" signature="true" visibility="true">      
-      <attributes public="false" package="false" protected="false" private="false"/>      
-      <operations public="false" package="false" protected="false" private="false"/>    
-    </display>  
-  </class>  
-  <interface corner="BOTTOM_RIGHT" language="java" name="org.apache.isis.metamodel.commons.component.Installer" 
-    project="metamodel" file="/metamodel/src/main/java/org/apache/isis/metamodel/commons/component/Installer.java" 
-    binary="false">    
-    <position x="-41" y="340" width="-1" height="-1"/>    
-    <display autosize="true" package="true" initial-value="false" signature="true" visibility="true">      
-      <attributes public="false" package="false" protected="false" private="false"/>      
-      <operations public="false" package="false" protected="false" private="false"/>    
-    </display>  
-  </interface>  
-  <interface corner="BOTTOM_RIGHT" language="java" name="org.apache.isis.metamodel.config.ConfigurationBuilder" 
-    project="metamodel" file="/metamodel/src/main/java/org/apache/isis/metamodel/config/ConfigurationBuilder.java" 
-    binary="false">    
-    <position x="-21" y="248" width="-1" height="-1"/>    
-    <display autosize="true" package="true" initial-value="false" signature="true" visibility="true">      
-      <attributes public="false" package="false" protected="false" private="false"/>      
-      <operations public="false" package="false" protected="false" private="false"/>    
-    </display>  
-  </interface>  
-  <association>    
-    <source project="runtime" name="org.apache.isis.core.runtime.installers.InstallerLookupDefault" 
-      file="/runtime/src/main/java/org/apache/isis/core/runtime/installers/InstallerLookupDefault.java" binary="false" 
-      navigable="false">      
-      <attribute name="installerList"/>      
-      <multiplicity minimum="0" maximum="2147483647"/>    
-    </source>    
-    <target project="metamodel" name="org.apache.isis.metamodel.commons.component.Installer" 
-      file="/metamodel/src/main/java/org/apache/isis/metamodel/commons/component/Installer.java" binary="false" 
-      navigable="true"/>    
-    <display labels="true" multiplicity="true"/>  
-  </association>  
-  <realization>    
-    <source project="runtime" name="org.apache.isis.core.runtime.installers.InstallerLookupDefault" 
-      file="/runtime/src/main/java/org/apache/isis/core/runtime/installers/InstallerLookupDefault.java" binary="false"/>    
-    <target project="runtime" name="org.apache.isis.core.runtime.installers.InstallerLookup" 
-      file="/runtime/src/main/java/org/apache/isis/core/runtime/installers/InstallerLookup.java" binary="false"/>  
-  </realization>  
-  <association>    
-    <source project="runtime" name="org.apache.isis.core.runtime.installers.InstallerLookupDefault" 
-      file="/runtime/src/main/java/org/apache/isis/core/runtime/installers/InstallerLookupDefault.java" binary="false" 
-      navigable="false">      
-      <attribute name="configurationBuilder"/>      
-      <multiplicity minimum="0" maximum="1"/>    
-    </source>    
-    <target project="metamodel" name="org.apache.isis.metamodel.config.ConfigurationBuilder" 
-      file="/metamodel/src/main/java/org/apache/isis/metamodel/config/ConfigurationBuilder.java" binary="false" 
-      navigable="true"/>    
-    <display labels="true" multiplicity="true"/>  
-  </association>  
-  <generalization>    
-    <source project="runtime" name="org.apache.isis.core.runtime.Isis" 
-      file="/runtime/src/main/java/org/apache/isis/core/runtime/Isis.java" binary="false"/>    
-    <target project="runtime" name="org.apache.isis.core.runtime.IsisAbstract" 
-      file="/runtime/src/main/java/org/apache/isis/core/runtime/IsisAbstract.java" binary="false"/>  
-  </generalization>  
-  <dependency>    
-    <source project="runtime" name="org.apache.isis.core.runtime.IsisAbstract" 
-      file="/runtime/src/main/java/org/apache/isis/core/runtime/IsisAbstract.java" binary="false"/>    
-    <target project="runtime" name="org.apache.isis.core.runtime.installers.InstallerLookup" 
-      file="/runtime/src/main/java/org/apache/isis/runtime/installers/InstallerLookup.java" binary="false"/>  
-  </dependency>  
-  <classifier-display autosize="true" package="true" initial-value="false" signature="true" visibility="true">    
-    <attributes public="false" package="false" protected="false" private="false"/>    
-    <operations public="false" package="false" protected="false" private="false"/>  
-  </classifier-display>  
-  <association-display labels="true" multiplicity="true"/>
-</class-diagram>
\ No newline at end of file
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/isis/IsisInjectModule.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/isis/IsisInjectModule.java
index 7026c11..c1e3b79 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/isis/IsisInjectModule.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/isis/IsisInjectModule.java
@@ -28,6 +28,7 @@ import com.google.inject.Singleton;
 
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.commons.internal.base._With;
 import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
@@ -36,6 +37,8 @@ import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
 import org.apache.isis.core.runtime.systemusinginstallers.IsisComponentProvider;
 
+import static org.apache.isis.commons.internal.base._With.computeIfAbsent;
+
 public class IsisInjectModule extends AbstractModule {
 
     /**
@@ -46,30 +49,7 @@ public class IsisInjectModule extends AbstractModule {
      *     {@link #provideIsisSessionFactory(AppManifest)} created} .
      * </p>
      */
-    private static final AppManifest APP_MANIFEST_NOOP = new AppManifest() {
-        @Override public List<Class<?>> getModules() {
-            return null;
-        }
-        @Override public List<Class<?>> getAdditionalServices() {
-            return null;
-        }
-
-        @Override public String getAuthenticationMechanism() {
-            return null;
-        }
-
-        @Override public String getAuthorizationMechanism() {
-            return null;
-        }
-
-        @Override public List<Class<? extends FixtureScript>> getFixtures() {
-            return null;
-        }
-
-        @Override public Map<String, String> getConfigurationProperties() {
-            return null;
-        }
-    };
+    private static final AppManifest APP_MANIFEST_NOOP = AppManifest.noop();
 
     /**
      * Allows the {@link AppManifest} to be programmatically bound in.
@@ -87,21 +67,32 @@ public class IsisInjectModule extends AbstractModule {
     @Provides
     @com.google.inject.Inject
     @Singleton
-    protected IsisSessionFactory provideIsisSessionFactory(
-            final AppManifest appManifestIfExplicitlyBound) {
+    protected IsisSessionFactory provideIsisSessionFactory(final AppManifest boundAppManifest) {
+        
+        System.err.println("!!!!!!!!!! provideIsisSessionFactory STAGE 1 "+Thread.currentThread().getName());
         
-        final AppManifest appManifestToUse = determineAppManifest(appManifestIfExplicitlyBound);
+        final AppManifest appManifestToUse = determineAppManifest(boundAppManifest);
 
+        System.err.println("!!!!!!!!!! provideIsisSessionFactory STAGE 2 "+Thread.currentThread().getName());
+        
         final IsisComponentProvider componentProvider = IsisComponentProvider
                 .builderUsingInstallers(appManifestToUse)
                 .build();
+        
+        System.err.println("!!!!!!!!!! provideIsisSessionFactory STAGE 3 "+Thread.currentThread().getName());
 
         final IsisSessionFactoryBuilder builder =
                 new IsisSessionFactoryBuilder(componentProvider, componentProvider.getAppManifest());
+        
+        System.err.println("!!!!!!!!!! provideIsisSessionFactory STAGE 4 "+Thread.currentThread().getName());
 
         // as a side-effect, if the metamodel turns out to be invalid, then
         // this will push the MetaModelInvalidException into IsisContext.
-        return builder.buildSessionFactory();
+        IsisSessionFactory sessionFactory = builder.buildSessionFactory();
+        
+        System.err.println("!!!!!!!!!! ............. provideIsisSessionFactory DONE "+Thread.currentThread().getName());
+        
+        return sessionFactory;
     }
 
     @Provides
@@ -111,28 +102,26 @@ public class IsisInjectModule extends AbstractModule {
         return isisSessionFactory.getServicesInjector();
     }
 
-
-    private AppManifest determineAppManifest(final AppManifest appManifestIfExplicitlyBound) {
+    // -- HELPER
+    
+    /**
+     * If an {@link AppManifest} was explicitly provided (eg from the Guice <tt>IsisWicketModule</tt> when running
+     * unde the Wicket viewer) then use that; otherwise read the <tt>isis.properties</tt> config file and look
+     * for an <tt>isis.appManifest</tt> entry instead.
+     */
+    private AppManifest determineAppManifest(final AppManifest boundAppManifest) {
         final AppManifest appManifest =
-                appManifestIfExplicitlyBound != APP_MANIFEST_NOOP
-                ? appManifestIfExplicitlyBound
+                boundAppManifest != APP_MANIFEST_NOOP
+                ? boundAppManifest
                         : null;
 
-        return appManifestFrom(appManifest);
+        return computeIfAbsent(appManifest, IsisInjectModule::getAppManifestFromConfig);
     }
 
+    private static AppManifest getAppManifestFromConfig() {
 
-    /**
-     * If an {@link AppManifest} was explicitly provided (eg from the Guice <tt>IsisWicketModule</tt> when running
-     * unde the Wicket viewer) then use that; otherwise read the <tt>isis.properties</tt> config file and look
-     * for an <tt>isis.appManifest</tt> entry instead.
-     */
-    private static AppManifest appManifestFrom(
-            final AppManifest appManifestFromConstructor) {
-        if(appManifestFromConstructor != null) {
-            return appManifestFromConstructor;
-        }
-        final String appManifestFromConfiguration = _Config.getConfiguration().getString(SystemConstants.APP_MANIFEST_KEY);
+        System.err.println("WARNING: accessing Configuration prior to it being built"); //TODO[2039] ... use logger 
+        final String appManifestFromConfiguration = _Config.peekAtString(SystemConstants.APP_MANIFEST_KEY);
         return appManifestFromConfiguration != null
                 ? InstanceUtil.createInstance(appManifestFromConfiguration, AppManifest.class)
                         : null;
diff --git a/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java b/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppConfig.java
similarity index 52%
copy from example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
copy to example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppConfig.java
index 1e5baa9..4f00a90 100644
--- a/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
+++ b/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppConfig.java
@@ -18,22 +18,33 @@
  */
 package domainapp.application;
 
-import org.apache.isis.applib.AppManifestAbstract2;
+import javax.enterprise.inject.Produces;
 
-import domainapp.dom.HelloWorldModule;
+import org.apache.isis.applib.Module;
+import org.apache.isis.config.internal._Config;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 
 /**
  * Bootstrap the application.
  */
-public class HelloWorldAppManifest extends AppManifestAbstract2 {
+public class HelloWorldAppConfig {  // <<< managed and discovered by IoC container
 
-    public static final Builder BUILDER = Builder
-            .forModule(new HelloWorldModule())
-            .withConfigurationPropertiesFile(HelloWorldAppManifest.class, "isis-non-changing.properties")
-            .withAuthMechanism("shiro");
-
-    public HelloWorldAppManifest() {
-        super(BUILDER);
+    @Produces
+    public IsisConfiguration isisConfiguration () {
+        
+     // code contributed by user ...
+        
+        //ResourceStreamSource resourceStreamSource = ResourceStreamSourceCurrentClassClassPath
+        //_Config.acceptBuilder(builder->builder.addResourceStreamSource(resourceStreamSource));
+        return _Config.getConfiguration();        
+                //. FromConfig("isis.properties");
     }
 
+
+    @Produces
+    public Module appModule() {
+        // code contributed by user ...
+        return new HelloWorldAppManifest().getModule(); 
+    }
 }
+
diff --git a/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java b/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
index 1e5baa9..e18f930 100644
--- a/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
+++ b/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
@@ -19,6 +19,7 @@
 package domainapp.application;
 
 import org.apache.isis.applib.AppManifestAbstract2;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 import domainapp.dom.HelloWorldModule;
 
@@ -34,6 +35,8 @@ public class HelloWorldAppManifest extends AppManifestAbstract2 {
 
     public HelloWorldAppManifest() {
         super(BUILDER);
+        System.err.println("!!!!!!! HelloWorldAppManifest");
+        _Exceptions.dumpStackTrace(System.err, 0, 1000);
     }
 
 }
diff --git a/example/application/helloworld/src/main/java/domainapp/application/isis-non-changing.properties b/example/application/helloworld/src/main/java/domainapp/application/isis-non-changing.properties
index a4a9792..3aa8dd8 100644
--- a/example/application/helloworld/src/main/java/domainapp/application/isis-non-changing.properties
+++ b/example/application/helloworld/src/main/java/domainapp/application/isis-non-changing.properties
@@ -46,18 +46,6 @@ isis.reflector.explicitAnnotations.action=true
 
 isis.objects.editing=false
 
-
-bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("Hello World App");
-bind(String.class).annotatedWith(Names.named("applicationCss")).toInstance("css/application.css");
-bind(String.class).annotatedWith(Names.named("applicationJs")).toInstance("scripts/application.js");
-bind(String.class).annotatedWith(Names.named("welcomeMessage")).toInstance(readLines(getClass(), "welcome.html",
-"This is the hello world app"));
-bind(String.class).annotatedWith(Names.named("aboutMessage")).toInstance("Hello World App");
-bind(InputStream.class).annotatedWith(Names.named("metaInfManifest")).toProvider(
-Providers.of(getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF")));
-
-
-
 isis.viewer.wicket.application.name=Hello World App
 isis.viewer.wicket.application.css=css/application.css
 isis.viewer.wicket.application.js=scripts/application.js