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/10/16 23:22:26 UTC
[isis] branch v2 updated: ISIS-1895: allow 'WebServer' to prime
config properties
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new fc0e1a6 ISIS-1895: allow 'WebServer' to prime config properties
fc0e1a6 is described below
commit fc0e1a6fe7cd1671a34e439d7c02c87a2dfdf6e4
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 17 01:21:30 2018 +0200
ISIS-1895: allow 'WebServer' to prime config properties
Task-Url: https://issues.apache.org/jira/browse/ISIS-1895
---
.../isis/core/webapp/IsisWebAppConfigProvider.java | 32 ++++++++++++++++------
.../core/webapp/IsisWebAppContextListener.java | 3 +-
.../org/apache/isis/core/webserver/WebServer.java | 4 +++
3 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
index 2bb2bca..f2b19d1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
@@ -20,14 +20,17 @@ package org.apache.isis.core.webapp;
import static org.apache.isis.commons.internal.base._With.ifPresentElse;
import static org.apache.isis.commons.internal.base._With.requires;
+import static org.apache.isis.commons.internal.context._Context.computeIfAbsent;
import static org.apache.isis.commons.internal.context._Context.getOrThrow;
-import static org.apache.isis.commons.internal.context._Context.putSingleton;
+
+import java.util.Map;
import javax.servlet.ServletContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
import org.apache.isis.core.commons.resource.ResourceStreamSourceCurrentClassClassPath;
@@ -45,6 +48,11 @@ public class IsisWebAppConfigProvider {
private static final Logger LOG = LoggerFactory.getLogger(IsisWebAppConfigProvider.class);
private IsisConfigurationBuilder cfgBuilder;
+ private final Map<String, String> additionalConfig = _Maps.newHashMap();
+
+ private IsisWebAppConfigProvider() {
+ // private constructor
+ }
/**
* Removes any cached IsisConfigurationBuilder instance from this provider.
@@ -75,11 +83,18 @@ public class IsisWebAppConfigProvider {
protected IsisConfigurationBuilder newIsisConfigurationBuilder(final ServletContext servletContext) {
IsisConfigurationBuilder isisConfigurationBuilder = new IsisConfigurationBuilder();
isisConfigurationBuilder.primeWith(new OptionHandlerInitParameters(servletContext));
+ additionalConfig.forEach((k, v)->isisConfigurationBuilder.put(k, v));
addServletContextConstants(servletContext, isisConfigurationBuilder);
addResourceStreamSources(servletContext, isisConfigurationBuilder);
return isisConfigurationBuilder;
}
+ // -- CONFIG OVERRIDING
+
+ public void addConfig(Map<String, String> map) {
+ this.additionalConfig.putAll(map);
+ }
+
// -- PEEKING
/**
@@ -101,14 +116,6 @@ public class IsisWebAppConfigProvider {
// -- LOOKUP
/**
- * Register an instance of IsisWebAppConfigProvider as an application-scoped singleton.
- * @param configProvider
- */
- public static void register(IsisWebAppConfigProvider configProvider) {
- putSingleton(IsisWebAppConfigProvider.class, configProvider);
- }
-
- /**
* @return the application-scoped singleton instance of IsisWebAppConfigProvider
* @throws IllegalStateException if no such singleton was registered
*/
@@ -117,6 +124,12 @@ public class IsisWebAppConfigProvider {
()->new IllegalStateException("No config provider registered on this context."));
}
+ public static IsisWebAppConfigProvider registerInstanceIfAbsent() {
+ final IsisWebAppConfigProvider configProvider =
+ computeIfAbsent(IsisWebAppConfigProvider.class, __->new IsisWebAppConfigProvider());
+ return configProvider;
+ }
+
// -- HELPER
private static void addServletContextConstants(
@@ -144,5 +157,6 @@ public class IsisWebAppConfigProvider {
isisConfigurationBuilder.addResourceStreamSource(new ResourceStreamSourceForWebInf(servletContext));
}
}
+
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
index 2267032..3f27993 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
@@ -72,8 +72,7 @@ public class IsisWebAppContextListener implements ServletContextListener {
putContextPathIfPresent(servletContext.getContextPath());
- final IsisWebAppConfigProvider configProvider = new IsisWebAppConfigProvider();
- IsisWebAppConfigProvider.register(configProvider);
+ final IsisWebAppConfigProvider configProvider = IsisWebAppConfigProvider.registerInstanceIfAbsent();
final List<WebModule> webModules =
WebModule.discoverWebModules()
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
index ad14852..d536f11 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
@@ -58,6 +58,7 @@ import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixture;
import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixtureFromEnvironmentVariable;
import org.apache.isis.core.runtime.runner.opts.OptionHandlerHelp;
import org.apache.isis.core.runtime.runner.opts.OptionHandlerSystemProperties;
+import org.apache.isis.core.webapp.IsisWebAppConfigProvider;
import org.apache.isis.core.webserver.internal.OptionHandlerPort;
import org.apache.isis.core.webserver.internal.OptionHandlerStartupMode;
@@ -164,6 +165,9 @@ public class WebServer {
final WebAppContext context = new WebAppContext(SRC_MAIN_WEBAPP, webappContextPath);
jettyServer.setHandler(context);
+ final IsisWebAppConfigProvider configProvider = IsisWebAppConfigProvider.registerInstanceIfAbsent();
+ configProvider.addConfig(configurationBuilder.peekConfiguration().asMap());
+
return jettyServer;
}