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/29 13:00:21 UTC

[isis] branch 2039-Redesign_of_Config updated: ISIS-2039: allow ServiceLoader lookup for AppConfig to fallback ...

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


The following commit(s) were added to refs/heads/2039-Redesign_of_Config by this push:
     new 887fb62  ISIS-2039: allow ServiceLoader lookup for AppConfig to fallback ...
887fb62 is described below

commit 887fb62a20ddc84cd1a59a2cb424738627ee4bbf
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Nov 29 13:58:24 2018 +0100

    ISIS-2039: allow ServiceLoader lookup for AppConfig to fallback ...
    
    to previous behavior, that is to lookup the AppManifest from config
    property 'isis.appManifest'
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
---
 .../isis/core/commons/config/AppConfigLocator.java | 38 +++++++++++++++++++++-
 .../core/commons/config/IsisConfiguration.java     | 14 ++------
 .../configbuilder/IsisConfigurationBuilder.java    |  4 +--
 .../IsisConfigurationBuilderDefault.java           |  5 ++-
 .../configbuilder/IsisConfigurationDefault.java    | 11 ++++---
 .../commons/configbuilder/ModulePackageHelper.java | 13 +++++++-
 .../configbuilder/PrimerForServletContext.java     |  5 ++-
 .../runtime/headless/IsisSystemBootstrapper.java   |  2 +-
 .../application/HelloWorldAppManifest.java         |  2 +-
 9 files changed, 67 insertions(+), 27 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/commons/config/AppConfigLocator.java b/core/config/src/main/java/org/apache/isis/core/commons/config/AppConfigLocator.java
index 600997b..efea5e6 100644
--- a/core/config/src/main/java/org/apache/isis/core/commons/config/AppConfigLocator.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/config/AppConfigLocator.java
@@ -1,10 +1,19 @@
 package org.apache.isis.core.commons.config;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.context._Plugin;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.exceptions.IsisException;
 
 public final class AppConfigLocator {
     
+    private static final Logger LOG = LoggerFactory.getLogger(AppConfigLocator.class);
+    
     private AppConfigLocator() { }
     
     public static AppConfig getAppConfig() {
@@ -19,9 +28,36 @@ public final class AppConfigLocator {
                     throw _Plugin.ambiguityNonRecoverable(AppConfig.class, ambiguousPlugins);
                 },
                 ()->{
-                    return IsisConfiguration::loadDefault;
+                    LOG.warn("Failed to locate AppConfig via ServiceLoader, falling back to "
+                            + "search utilizing config properties.");
+                    return lookupAppConfig_UsingConfigProperties();
                 });
     }
     
+    // to support pre 2.0.0-M2 behavior    
+    private static AppConfig lookupAppConfig_UsingConfigProperties() {
+        
+        IsisConfigurationBuilder builder = IsisConfigurationBuilder.getDefault();
+        String appManifestClassName =  builder.peekAtString("isis.appManifest");
+        
+        final Class<AppManifest> appManifestClass;
+        try {
+            appManifestClass = _Casts.uncheckedCast(_Context.loadClassAndInitialize(appManifestClassName));
+        } catch (ClassNotFoundException e) {
+            throw new IsisException("Failed to locate the AppManifest using config properties.", e);
+        }
+        
+        AppManifest appManifest;
+        try {
+            appManifest = appManifestClass.newInstance();
+        } catch (InstantiationException | IllegalAccessException e) {
+            throw new IsisException(
+                    String.format("Failed to create instance of AppManifest '%s'.", appManifestClass), e);
+        }
+        
+        return ()->IsisConfiguration.buildFromAppManifest(appManifest);
+        
+    }
+    
 
 }
diff --git a/core/config/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
index 0afd092..3caa753 100644
--- a/core/config/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
@@ -22,10 +22,9 @@ package org.apache.isis.core.commons.config;
 import java.awt.Color;
 import java.awt.Font;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 
-import org.apache.isis.applib.AppManifest2;
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.Module;
 import org.apache.isis.applib.PropertyResource;
 import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
@@ -94,7 +93,7 @@ public interface IsisConfiguration {
      * @return
      * @since 2.0.0-M2
      */
-    static IsisConfiguration buildFromAppManifest(AppManifest2 appManifest) {
+    static IsisConfiguration buildFromAppManifest(AppManifest appManifest) {
         clear();
         acceptBuilder(builder->{
             builder.addAppManifest(appManifest);
@@ -105,7 +104,7 @@ public interface IsisConfiguration {
     /**
      * @since 2.0.0-M2
      */
-    public AppManifest2 getAppManifest();
+    public AppManifest getAppManifest();
 
     /**
      * Creates a new IsisConfiguration containing the properties starting with
@@ -262,13 +261,6 @@ public interface IsisConfiguration {
     default boolean explicitAnnotationsForActions() {
         return getBoolean("isis.reflector.explicitAnnotations.action");
     }
-
-    @Deprecated /* experimental */
-    static IsisConfiguration loadDefault() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
     
 
 }
diff --git a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
index 7aeedab..eb321bf 100644
--- a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
@@ -20,7 +20,7 @@ package org.apache.isis.core.commons.configbuilder;
 
 import java.util.List;
 
-import org.apache.isis.applib.AppManifest2;
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.Module;
 import org.apache.isis.applib.PropertyResource;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -78,7 +78,7 @@ public interface IsisConfigurationBuilder {
      * @param appManifest
      * @since 2.0.0-M2
      */
-    void addAppManifest(AppManifest2 appManifest);
+    void addAppManifest(AppManifest appManifest);
 
     /** internal only **/
     IsisConfiguration build();
diff --git a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilderDefault.java b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilderDefault.java
index 9a1d4d3..25e892d 100644
--- a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilderDefault.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilderDefault.java
@@ -28,7 +28,7 @@ import java.util.Set;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.applib.AppManifest2;
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.AppManifestAbstract2;
 import org.apache.isis.applib.Module;
 import org.apache.isis.applib.PropertyResource;
@@ -100,7 +100,6 @@ final class IsisConfigurationBuilderDefault implements IsisConfigurationBuilder
         IsisConfigurationBuilderDefault builder = new IsisConfigurationBuilderDefault(chain);
         
         builder.addDefaultPrimers();
-        
         builder.addDefaultConfigurationResources();
         
         return builder;
@@ -297,7 +296,7 @@ final class IsisConfigurationBuilderDefault implements IsisConfigurationBuilder
     }
     
     @Override
-    public void addAppManifest(AppManifest2 appManifest) {
+    public void addAppManifest(AppManifest appManifest) {
         configuration.setAppManifest(appManifest);
         appManifest.getConfigurationProperties().forEach((k, v)->{
             put(k, v);
diff --git a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationDefault.java b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationDefault.java
index 25c20f98..69b5484 100644
--- a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationDefault.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationDefault.java
@@ -31,7 +31,7 @@ import java.util.StringTokenizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.applib.AppManifest2;
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
@@ -42,6 +42,8 @@ import org.apache.isis.core.commons.config.IsisConfigurationException;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.resource.ResourceStreamSource;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 
 /**
  * This object will typically be registered as the implementation of the {@link ConfigurationServiceInternal}
@@ -61,7 +63,7 @@ class IsisConfigurationDefault implements IsisConfiguration {
      * derived lazily from {@link #properties}.
      */
     private Properties applicationProperties;
-    private AppManifest2 appManifest;
+    private AppManifest appManifest;
 
     // ////////////////////////////////////////////////
     // Constructor
@@ -85,11 +87,12 @@ class IsisConfigurationDefault implements IsisConfiguration {
     // ////////////////////////////////////////////////
     
     @Override
-    public AppManifest2 getAppManifest() {
+    public AppManifest getAppManifest() {
         return appManifest;
     }
     
-    public void setAppManifest(AppManifest2 appManifest) {
+    public void setAppManifest(AppManifest appManifest) {
+        requires(appManifest, "appManifest");
         this.appManifest = appManifest;
     }
     
diff --git a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/ModulePackageHelper.java b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/ModulePackageHelper.java
index 53a391b..bdb9946 100644
--- a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/ModulePackageHelper.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/ModulePackageHelper.java
@@ -27,6 +27,9 @@ import java.util.stream.Stream;
 
 import javax.xml.bind.annotation.XmlElement;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
@@ -45,10 +48,14 @@ import org.apache.isis.commons.internal.reflection._Reflect;
 import org.apache.isis.core.plugins.classdiscovery.ClassDiscovery;
 import org.apache.isis.core.plugins.classdiscovery.ClassDiscoveryPlugin;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 /**
  * @since 2.0.0-M2
  */
 class ModulePackageHelper {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ModulePackageHelper.class);
 
     public static int runTypeDiscovery(final AppManifest appManifest) {
         
@@ -77,7 +84,11 @@ class ModulePackageHelper {
     
     private static List<String> findAndRegisterTypes(final AppManifest appManifest) {
         
-        System.out.println("!!!!!!!!!!!!!! findAndRegisterTypes");
+        requires(appManifest, "appManifest");
+        
+        LOG.info(String.format(
+                "Discover the application's domain and register all types using manifest '%s' ...",
+                appManifest.getClass().getName()) );
         
         final AppManifest.Registry registry = AppManifest.Registry.instance();
 
diff --git a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForServletContext.java b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForServletContext.java
index cbbdd60..011d507 100644
--- a/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForServletContext.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForServletContext.java
@@ -41,15 +41,14 @@ class PrimerForServletContext implements IsisConfigurationBuilder.Primer {
 
     private static final Logger LOG = LoggerFactory.getLogger(PrimerForServletContext.class);
     
-    
     @Override
     public void prime(final IsisConfigurationBuilder builder) {
         final ServletContext servletContext  = _Context.getIfAny(ServletContext.class);
         if(servletContext==null) {
-            System.out.println("!!!! no servlet context to prime from");
+            LOG.info("No servlet context found to prime configuration from.");
             return;
         }
-        System.out.println("!!!! priming from servlet context");
+        LOG.info("Priming configuration from servlet context ...");
         
         asMap(servletContext).forEach((k, v)->builder.put(k, v));
         addServletContextConstants(servletContext, builder);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
index 4bc5ef7..dc84bb6 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
@@ -47,7 +47,7 @@ public class IsisSystemBootstrapper {
     /**
      * The {@link AppManifest2} used to bootstrap the {@link IsisSystem} (on the thread-local)
      */
-    private static ThreadLocal<AppManifest2> isftAppManifest = new ThreadLocal<>();
+    private static ThreadLocal<AppManifest> isftAppManifest = new ThreadLocal<>();
 
     private final IsisConfiguration isisConfiguration;
     private final LeveledLogger logger;
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 622cd18..af9668d 100644
--- a/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
+++ b/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
@@ -38,7 +38,7 @@ public class HelloWorldAppManifest extends AppManifestAbstract2 implements AppCo
         super(BUILDER);
     }
 
-    // Tells the ServiceLoader which AppManifest to use to bootstrap the Configuration.
+    // Tells the ServiceLoader which AppManifest to use to bootstrap the IsisConfiguration.
     @Override
     public IsisConfiguration isisConfiguration () {
         return IsisConfiguration.buildFromAppManifest(new HelloWorldAppManifest());