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 <ahu...@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());