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());