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/25 16:04:47 UTC
[isis] branch 2039-Redesign_of_Config updated: ISIS-2039: on
web-context: move the config bootstrapping from wicket module to the main
ServletContextListener
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 d95dc8a ISIS-2039: on web-context: move the config bootstrapping from wicket module to the main ServletContextListener
d95dc8a is described below
commit d95dc8a07351770bd74165c5d918e2d8ead5c289
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Nov 25 17:04:42 2018 +0100
ISIS-2039: on web-context: move the config bootstrapping from wicket
module to the main ServletContextListener
such that the wicket module is no longer responsible for initiating the
framework
Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
---
.../java/org/apache/isis/applib/AppManifest.java | 1 -
core/config/pom.xml | 8 +
.../core/commons/config/IsisConfiguration.java | 7 -
.../isis/core/commons/config}/WebAppConstants.java | 3 +-
.../IsisConfigurationBuilderDefault.java | 27 +--
.../configbuilder/IsisConfigurationDefault.java | 6 +-
.../commons/configbuilder/ModulePackageHelper.java | 6 +-
.../configbuilder/PrimerForServletContext.java} | 78 +++++----
.../IsisSystemEnvironmentPluginForTesting.java | 45 -----
.../core/metamodel/progmodel/FacetFactorySet.java | 23 ---
.../runtime/headless/IsisSystemBootstrapper.java | 30 ----
.../services/ServicesInstallerFromAnnotation.java | 2 +-
.../core/runtime/system/context/IsisContext.java | 104 ++++++------
.../IsisComponentProvider.java | 188 ---------------------
.../isis/core/webapp/IsisWebAppBootstrapper.java | 100 -----------
.../core/webapp/IsisWebAppContextListener.java | 10 +-
.../auth/AuthenticationSessionStrategyDefault.java | 2 +-
.../apache/isis/core/webapp/modules/WebModule.java | 4 +-
.../isis/core/webapp/modules/WebModuleContext.java | 28 +--
.../modules/WebModule_FallbackBootstrapper.java | 50 ------
.../core/webapp/modules/WebModule_RestEasy.java | 5 +-
.../isis/core/webapp/modules/WebModule_Wicket.java | 7 +-
.../wicket/viewer/IsisWicketApplication.java | 49 ------
.../viewer/integration/isis/IsisInjectModule.java | 9 +-
.../services/TranslationsResolverWicket.java | 3 +-
25 files changed, 160 insertions(+), 635 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 972f5c0..a30dc03 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
@@ -339,7 +339,6 @@ public interface AppManifest {
// automatically install any fixtures that might have been registered
map.put(ISIS_PERSISTOR_DATANUCLEUS + "install-fixtures", "true");
map.put(ISIS_PERSISTOR + "enforceSafeSemantics", "false");
- map.put("isis.deploymentType", "server_prototype");
map.put("isis.services.eventbus.allowLateRegistration", "true");
return map;
diff --git a/core/config/pom.xml b/core/config/pom.xml
index f7b2241..415e0cd 100644
--- a/core/config/pom.xml
+++ b/core/config/pom.xml
@@ -72,6 +72,13 @@
<version>${jdo-api.version}</version>
<scope>provided</scope>
</dependency>
+
+ <!-- [2039] only to configure log4j from servlet context resources -->
+ <dependency>
+ <groupId>org.apache.isis.core</groupId>
+ <artifactId>isis-core-log4j</artifactId>
+ <scope>provided</scope>
+ </dependency>
<!-- TESTS -->
<dependency>
@@ -97,6 +104,7 @@
<type>test-jar</type>
</dependency>
+
</dependencies>
<profiles>
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 f63b470..0afd092 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
@@ -108,13 +108,6 @@ public interface IsisConfiguration {
public AppManifest2 getAppManifest();
/**
- * @since 2.0.0-M2
- * @deprecated [2039] only used to trigger type discovery with registration
- */
- public void triggerTypeDiscovery();
-
-
- /**
* Creates a new IsisConfiguration containing the properties starting with
* the specified prefix. The names of the new properties will have the
* prefixed stripped. This is similar to the {@link #getProperties(String)}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java b/core/config/src/main/java/org/apache/isis/core/commons/config/WebAppConstants.java
similarity index 95%
rename from core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java
rename to core/config/src/main/java/org/apache/isis/core/commons/config/WebAppConstants.java
index f3bf67b..1de4c3b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/config/WebAppConstants.java
@@ -17,10 +17,9 @@
* under the License.
*/
-package org.apache.isis.core.webapp;
+package org.apache.isis.core.commons.config;
import org.apache.isis.applib.fixtures.LogonFixture;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
public final class WebAppConstants {
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 b346843..50c9b02 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
@@ -151,6 +151,7 @@ final class IsisConfigurationBuilderDefault implements IsisConfigurationBuilder
primeWith(new PrimerForSystemProperties());
primeWith(new PrimerForEnvironmentVariablesIsisPrefix());
primeWith(new PrimerForEnvironmentVariableISIS_OPTS());
+ primeWith(new PrimerForServletContext());
}
// -- addResourceStreamSource, addResourceStreamSources
@@ -324,19 +325,15 @@ final class IsisConfigurationBuilderDefault implements IsisConfigurationBuilder
@Override
public IsisConfiguration build() {
+
+ configuration.triggerTypeDiscovery();
if (LOG.isDebugEnabled()) {
dumpResourcesToLog();
}
final IsisConfigurationDefault ref = configuration;
-
-//TODO[2039] no need to copy
-// final IsisConfigurationDefault copy = new IsisConfigurationDefault(resourceStreamSourceChain);
-// final Properties props = new Properties();
-// props.putAll(configuration.asMap());
-// copy.add(props, ContainsPolicy.OVERWRITE);
-
+
configuration = null; // once built this builder is no longer usable
return ref;
@@ -359,16 +356,10 @@ final class IsisConfigurationBuilderDefault implements IsisConfigurationBuilder
}
}
- //TODO[2039]
- // private final static ToString<IsisConfigurationBuilder> toString =
- // ToString.<IsisConfigurationBuilder>
- // toString("resourceStream", x->x.resourceStreamSourceChain)
- // .thenToString("configResources", x->x.configurationResourcesFound)
- // ;
- //
- // @Override
- // public String toString() {
- // return toString.toString(this);
- // }
+ @Override
+ public String toString() {
+ return String.format("IsisConfigurationBuilder {resourceStream=%s, configResources=%s}",
+ resourceStreamSourceChain, configurationResourcesFound);
+ }
}
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 a5e8ff6..25c20f98 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
@@ -94,17 +94,15 @@ class IsisConfigurationDefault implements IsisConfiguration {
}
// ////////////////////////////////////////////////
- // Module Package Names
+ // Type Discovery
// ////////////////////////////////////////////////
- _Lazy<Integer> typeDiscovery = _Lazy.threadSafe(ModulePackageHelper::triggerTypeDiscovery);
+ _Lazy<Integer> typeDiscovery = _Lazy.threadSafe(()->ModulePackageHelper.runTypeDiscovery(this.getAppManifest()));
- @Override
public void triggerTypeDiscovery() {
typeDiscovery.get();
}
-
// ////////////////////////////////////////////////
// ResourceStreamSource
// ////////////////////////////////////////////////
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 6c47d39..53a391b 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
@@ -25,7 +25,6 @@ import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Nullable;
import javax.xml.bind.annotation.XmlElement;
import org.apache.isis.applib.AppManifest;
@@ -43,7 +42,6 @@ import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.reflection._Reflect;
-import org.apache.isis.config.internal._Config;
import org.apache.isis.core.plugins.classdiscovery.ClassDiscovery;
import org.apache.isis.core.plugins.classdiscovery.ClassDiscoveryPlugin;
@@ -52,10 +50,10 @@ import org.apache.isis.core.plugins.classdiscovery.ClassDiscoveryPlugin;
*/
class ModulePackageHelper {
- public static int triggerTypeDiscovery() {
+ public static int runTypeDiscovery(final AppManifest appManifest) {
final List<String> moduleAndFrameworkPackages =
- findAndRegisterTypes(_Config.getConfiguration().getAppManifest());
+ findAndRegisterTypes(appManifest);
return moduleAndFrameworkPackages.size();
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigHelper.java b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForServletContext.java
similarity index 55%
rename from core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigHelper.java
rename to core/config/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForServletContext.java
index 048c7de..9b1a1e2 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigHelper.java
+++ b/core/config/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForServletContext.java
@@ -16,56 +16,77 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.webapp;
+package org.apache.isis.core.commons.configbuilder;
+
+import java.util.Enumeration;
+import java.util.Map;
import javax.servlet.ServletContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.isis.config.internal._Config;
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
+import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.core.commons.config.WebAppConstants;
import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
import org.apache.isis.core.commons.resource.ResourceStreamSourceCurrentClassClassPath;
import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
import org.apache.isis.core.commons.resource.ResourceStreamSourceForWebInf;
-import org.apache.isis.core.runtime.runner.opts.OptionHandlerInitParameters;
+import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
-/**
- *
- * @since 2.0.0-M2
- */
-public final class IsisWebAppConfigHelper {
+import static org.apache.isis.commons.internal.base._With.ifPresentElseGet;
+
+class PrimerForServletContext implements IsisConfigurationBuilder.Primer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(PrimerForServletContext.class);
- private static final Logger LOG = LoggerFactory.getLogger(IsisWebAppConfigHelper.class);
- private IsisWebAppConfigHelper() {}
- /**
- * Initializes the IsisConfiguration subsystem with all currently available configuration values.
- * @param servletContext
- * @return
- */
- public static void initConfigurationFrom(final ServletContext servletContext) {
- _Config.acceptBuilder(builder->{
- builder.primeWith(new OptionHandlerInitParameters(servletContext));
-// additionalConfig.forEach((k, v)->builder.put(k, v));
- addServletContextConstants(servletContext, builder);
- addResourceStreamSources(servletContext, builder);
- builder.addDefaultConfigurationResourcesAndPrimers();
- });
- }
+ @Override
+ public void prime(final IsisConfigurationBuilder builder) {
+ final ServletContext servletContext = _Context.getIfAny(ServletContext.class);
+ if(servletContext==null) {
+ return;
+ }
+
+ asMap(servletContext).forEach((k, v)->builder.put(k, v));
+ addServletContextConstants(servletContext, builder);
+ addResourceStreamSources(servletContext, builder);
+ builder.addDefaultConfigurationResourcesAndPrimers();
+
+ final String loggingPropertiesDir =
+ ifPresentElseGet(
+ servletContext.getInitParameter("isis.config.dir"),
+ ()->servletContext.getRealPath("/WEB-INF"));
-
+ final IsisLoggingConfigurer loggingConfigurer = new IsisLoggingConfigurer();
+ loggingConfigurer.configureLogging(loggingPropertiesDir, new String[0]);
+
+ }
+
// -- HELPER
+ private static Map<String, String> asMap(ServletContext servletContext) {
+ Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
+ final Map<String,String> map = _Maps.newTreeMap();
+ while(initParameterNames.hasMoreElements()) {
+ final String initParameterName = initParameterNames.nextElement();
+ final String initParameterValue = servletContext.getInitParameter(initParameterName);
+ if (initParameterName.startsWith("isis.")) {
+ map.put(initParameterName, initParameterValue);
+ }
+ }
+ return map;
+ }
+
private static void addServletContextConstants(
final ServletContext servletContext,
final IsisConfigurationBuilder isisConfigurationBuilder) {
-
+
final String webappDir = servletContext.getRealPath("/");
isisConfigurationBuilder.add(WebAppConstants.WEB_APP_DIR, webappDir);
}
-
+
private static void addResourceStreamSources(
final ServletContext servletContext,
final IsisConfigurationBuilder builder) {
@@ -84,5 +105,4 @@ public final class IsisWebAppConfigHelper {
}
}
-
}
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/IsisSystemEnvironmentPluginForTesting.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/IsisSystemEnvironmentPluginForTesting.java
deleted file mode 100644
index 7241f24..0000000
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/IsisSystemEnvironmentPluginForTesting.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.isis.core.integtestsupport.components;
-
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.plugins.environment.DeploymentType;
-import org.apache.isis.core.plugins.environment.IsisSystemEnvironment;
-import org.apache.isis.core.plugins.environment.IsisSystemEnvironmentPlugin;
-
-/**
- * To enable this plugin add a META-INF entry to your application as specified by the
- * Java 7 ServiceLoader mechanism.
- *
- * @since 2.0.0-M2
- * @deprecated [2039] experimental
- */
-public class IsisSystemEnvironmentPluginForTesting implements IsisSystemEnvironmentPlugin {
-
- @Override
- public IsisSystemEnvironment getIsisSystemEnvironment() {
-
- final IsisConfiguration config = getConfiguration();
-
- final String deploymentTypeLiteral = config.getString("isis.deploymentType");
- if(_Strings.isNullOrEmpty(deploymentTypeLiteral)) {
- return IsisSystemEnvironment.getDefault();
- }
-
- // at this point, the deploymentType seem explicitly set via config, so we override any
- // environment variables that might be present
-
- // throws if type can not be parsed
- final DeploymentType deploymentType = DeploymentType.valueOf(deploymentTypeLiteral);
-
- return IsisSystemEnvironment.of(deploymentType);
-
- }
-
- // HELPER
-
- private IsisConfiguration getConfiguration() {
- IsisConfiguration configuration = IsisConfiguration.loadDefault();
- return configuration;
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
index 6a9a994..0f8a38c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
@@ -66,29 +66,6 @@ public interface FacetFactorySet {
class Util {
private Util(){}
-//[2039]
-// public static void includeFacetFactories(final FacetFactorySet programmingModel) {
-//
-// final String[] facetFactoriesIncludeClassNames = configurationBuilder.peekAtList(ReflectorConstants.FACET_FACTORY_INCLUDE_CLASS_NAME_LIST);
-// if (facetFactoriesIncludeClassNames != null) {
-// for (final String facetFactoryClassName : facetFactoriesIncludeClassNames) {
-// final Class<? extends FacetFactory> facetFactory = InstanceUtil.loadClass(facetFactoryClassName, FacetFactory.class);
-// programmingModel.addFactory(facetFactory);
-// }
-// }
-// }
-//
-// public static void excludeFacetFactories(
-// final IsisConfigurationBuilder configurationBuilder,
-// final FacetFactorySet programmingModel) {
-//
-// final String[] facetFactoriesExcludeClassNames = configurationBuilder.peekAtList(ReflectorConstants.FACET_FACTORY_EXCLUDE_CLASS_NAME_LIST);
-// for (final String facetFactoryClassName : facetFactoriesExcludeClassNames) {
-// final Class<? extends FacetFactory> facetFactory = InstanceUtil.loadClass(facetFactoryClassName, FacetFactory.class);
-// programmingModel.removeFactory(facetFactory);
-// }
-// }
-
public static void includeFacetFactories(final IsisConfiguration configuration, final FacetFactorySet programmingModel) {
final String[] facetFactoriesIncludeClassNames = configuration.getList(ReflectorConstants.FACET_FACTORY_INCLUDE_CLASS_NAME_LIST);
if (facetFactoriesIncludeClassNames != null) {
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 983e4d2..4bc5ef7 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
@@ -50,28 +50,12 @@ public class IsisSystemBootstrapper {
private static ThreadLocal<AppManifest2> isftAppManifest = new ThreadLocal<>();
private final IsisConfiguration isisConfiguration;
-// private final AppManifest2 appManifest2;
private final LeveledLogger logger;
public static IsisSystemBootstrapper of(LogConfig logConfig, IsisConfiguration isisConfiguration) {
return new IsisSystemBootstrapper(logConfig, isisConfiguration);
}
-//[2039]
-// public IsisSystemBootstrapper(
-// final LogConfig logConfig,
-// final Module module) {
-// this(logConfig, AppManifestAbstract2.Builder.forModule(module).build());
-// }
-//
-// public IsisSystemBootstrapper(
-// final LogConfig logConfig,
-// final AppManifest2 appManifest2) {
-//
-// this.appManifest2 = appManifest2;
-// this.logger = new LeveledLogger(LOG, logConfig.getTestLoggingLevel());
-// }
-
private IsisSystemBootstrapper(
final LogConfig logConfig,
final IsisConfiguration isisConfiguration) {
@@ -79,23 +63,9 @@ public class IsisSystemBootstrapper {
Ensure.ensure("Should have an IsisConfiguration!", isisConfiguration!=null);
Ensure.ensure("Should have an AppManifest!", isisConfiguration.getAppManifest()!=null);
-// this.appManifest2 = isisConfiguration.getAppManifest();
this.isisConfiguration = isisConfiguration;
this.logger = new LeveledLogger(LOG, logConfig.getTestLoggingLevel());
}
-
-//
-// public AppManifest2 getAppManifest2() {
-// return appManifest2;
-// }
-//
-// /**
-// * Corresponding to {@link AppManifest2} provided in {@link #IsisSystemBootstrapper(LogConfig, AppManifest2)}, or
-// * (equivalently) the {@link Module} provided directly in {@link #IsisSystemBootstrapper(LogConfig, Module)}.
-// */
-// public Module getModule() {
-// return appManifest2.getModule();
-// }
public IsisSystem bootstrapIfRequired() {
bootstrapUsingConfig();
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
index ee65e58..5a3570a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
@@ -75,7 +75,7 @@ public class ServicesInstallerFromAnnotation extends ServicesInstallerAbstract {
try {
- _Config.getConfiguration().triggerTypeDiscovery(); // registers types in registry
+// _Config.getConfiguration().triggerTypeDiscovery(); // registers types in registry
} finally {
initialized = true;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
index 85c7c39..a79c0ae 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
@@ -28,13 +28,10 @@ import java.util.function.Supplier;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
-import org.apache.isis.core.plugins.environment.DeploymentType;
import org.apache.isis.core.plugins.environment.IsisSystemEnvironment;
-import org.apache.isis.core.plugins.environment.IsisSystemEnvironmentPlugin;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.session.IsisSession;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
@@ -96,56 +93,57 @@ public interface IsisContext {
return _Context.getEnvironment();
}
- /**
- * @deprecated use the {@link IsisSystemEnvironmentPlugin} SPI instead
- */
- @Deprecated
- public static class EnvironmentPrimer {
-
- /**
- * For integration testing allows to prime the environment via provided parameters. Will not override
- * any IsisSystemEnvironment instance, that is already registered with the current context, because the
- * IsisSystemEnvironment is expected to be an immutable singleton within an application's life-cycle.
- * @deprecated use the {@link IsisSystemEnvironmentPlugin} SPI instead
- */
- @Deprecated
- public static void primeEnvironment(DeploymentType deploymentType) {
- _Context.computeIfAbsent(IsisSystemEnvironment.class, __->IsisSystemEnvironment.of(deploymentType));
- }
-
- @Deprecated
- public static void primeEnvironment(IsisConfigurationBuilder configurationBuilder) {
-
- final String deploymentTypeLiteral = configurationBuilder.peekAtString("isis.deploymentType");
- if(_Strings.isNullOrEmpty(deploymentTypeLiteral)) {
- return; // do nothing
- }
-
- // at this point, the deploymentType seems explicitly set via config
-
- // throws if type can not be parsed
- final DeploymentType deploymentType =
- parseDeploymentType(deploymentTypeLiteral.toLowerCase());
- primeEnvironment(deploymentType);
- }
-
- private static DeploymentType parseDeploymentType(String deploymentTypeLiteral) {
-
- switch(deploymentTypeLiteral) {
- case "server_prototype":
- case "prototyping":
- return DeploymentType.PROTOTYPING;
- case "server":
- case "production":
- return DeploymentType.PROTOTYPING;
- default:
- throw new IllegalArgumentException(
- String.format("unknown deployment type '%s' in config property '%s'",
- deploymentTypeLiteral, "isis.deploymentType"));
- }
-
- }
- }
+//[2039]
+// /**
+// * @deprecated use the {@link IsisSystemEnvironmentPlugin} SPI instead
+// */
+// @Deprecated
+// public static class EnvironmentPrimer {
+//
+// /**
+// * For integration testing allows to prime the environment via provided parameters. Will not override
+// * any IsisSystemEnvironment instance, that is already registered with the current context, because the
+// * IsisSystemEnvironment is expected to be an immutable singleton within an application's life-cycle.
+// * @deprecated use the {@link IsisSystemEnvironmentPlugin} SPI instead
+// */
+// @Deprecated
+// public static void primeEnvironment(DeploymentType deploymentType) {
+// _Context.computeIfAbsent(IsisSystemEnvironment.class, __->IsisSystemEnvironment.of(deploymentType));
+// }
+//
+// @Deprecated
+// public static void primeEnvironment(IsisConfigurationBuilder configurationBuilder) {
+//
+// final String deploymentTypeLiteral = configurationBuilder.peekAtString("isis.deploymentType");
+// if(_Strings.isNullOrEmpty(deploymentTypeLiteral)) {
+// return; // do nothing
+// }
+//
+// // at this point, the deploymentType seems explicitly set via config
+//
+// // throws if type can not be parsed
+// final DeploymentType deploymentType =
+// parseDeploymentType(deploymentTypeLiteral.toLowerCase());
+// primeEnvironment(deploymentType);
+// }
+//
+// private static DeploymentType parseDeploymentType(String deploymentTypeLiteral) {
+//
+// switch(deploymentTypeLiteral) {
+// case "server_prototype":
+// case "prototyping":
+// return DeploymentType.PROTOTYPING;
+// case "server":
+// case "production":
+// return DeploymentType.PROTOTYPING;
+// default:
+// throw new IllegalArgumentException(
+// String.format("unknown deployment type '%s' in config property '%s'",
+// deploymentTypeLiteral, "isis.deploymentType"));
+// }
+//
+// }
+// }
// -- LIFE-CYCLING
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 3393fb9..f1bcc24 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@ -80,18 +80,9 @@ public final class IsisComponentProvider {
final AuthorizationManager authorizationManager) {
this.appManifest = requires(appManifest, "appManifest");
-
-//[2039] putAppManifestKey(appManifest);
-// findAndRegisterTypes(appManifest);
-// specifyServicesAndRegisteredEntitiesUsing(appManifest);
-// addToConfigurationUsing(appManifest);
this.services = new ServicesInstallerFromConfigurationAndAnnotation().getServices();
- //[2039]using configuration directly instead
- //final String fixtureClassNamesCsv = classNamesFrom(getAppManifest().getFixtures());
- //_Config.put(FixturesInstallerFromConfiguration.FIXTURES, fixtureClassNamesCsv);
-
this.authenticationManager = authenticationManager;
this.authorizationManager = authorizationManager;
}
@@ -100,185 +91,6 @@ public final class IsisComponentProvider {
return appManifest;
}
- // -- helpers (appManifest)
-//[2039] moved to config module
-// private void putAppManifestKey(final AppManifest appManifest) {
-// // required to prevent RegisterEntities validation from complaining
-// // if it can't find any @PersistenceCapable entities in a module
-// // that contains only services.
-// _Config.put(ConfigurationConstants.APP_MANIFEST_KEY, appManifest.getClass().getName() );
-// }
-//
-// private void findAndRegisterTypes(final AppManifest appManifest) {
-// final Stream<String> modulePackages = modulePackageNamesFrom(appManifest);
-// final AppManifest.Registry registry = AppManifest.Registry.instance();
-//
-// final List<String> moduleAndFrameworkPackages = _Lists.newArrayList();
-// moduleAndFrameworkPackages.addAll(AppManifest.Registry.FRAMEWORK_PROVIDED_SERVICES);
-//
-// modulePackages.forEach(moduleAndFrameworkPackages::add);
-//
-// final ClassDiscovery discovery = ClassDiscoveryPlugin.get().discover(moduleAndFrameworkPackages);
-//
-// final Set<Class<?>> domainServiceTypes = _Sets.newLinkedHashSet();
-// domainServiceTypes.addAll(discovery.getTypesAnnotatedWith(DomainService.class));
-// domainServiceTypes.addAll(discovery.getTypesAnnotatedWith(DomainServiceLayout.class));
-//
-// final Set<Class<?>> persistenceCapableTypes = PersistenceCapableTypeFinder.find(discovery);
-//
-// final Set<Class<? extends FixtureScript>> fixtureScriptTypes = discovery.getSubTypesOf(FixtureScript.class)
-// .stream()
-// .filter(aClass -> {
-// // the fixtureScript types are introspected just to provide a drop-down when running fixture scripts
-// // in prototyping mode (though they may be introspected lazily if actually run).
-// // we therefore try to limit the set of fixture types eagerly introspected at startup
-// //
-// // specifically, we ignore as a fixture script if annotated with @Programmatic
-// // (though directly implementing DiscoverableFixtureScript takes precedence and will NOT ignore)
-// return DiscoverableFixtureScript.class.isAssignableFrom(aClass) ||
-// Annotations.getAnnotation(aClass, Programmatic.class) == null;
-// })
-// .collect(Collectors.toSet());
-//
-// final Set<Class<?>> domainObjectTypes = _Sets.newLinkedHashSet();
-// domainObjectTypes.addAll(discovery.getTypesAnnotatedWith(DomainObject.class));
-// domainObjectTypes.addAll(discovery.getTypesAnnotatedWith(DomainObjectLayout.class));
-//
-// final Set<Class<?>> mixinTypes = _Sets.newHashSet();
-// mixinTypes.addAll(discovery.getTypesAnnotatedWith(Mixin.class));
-// domainObjectTypes.stream()
-// .filter(input -> {
-// final DomainObject annotation = input.getAnnotation(DomainObject.class);
-// return annotation != null && annotation.nature() == Nature.MIXIN;
-// })
-// .forEach(mixinTypes::add);
-//
-// final Set<Class<?>> viewModelTypes = _Sets.newLinkedHashSet();
-// viewModelTypes.addAll(discovery.getTypesAnnotatedWith(ViewModel.class));
-// viewModelTypes.addAll(discovery.getTypesAnnotatedWith(ViewModelLayout.class));
-//
-// final Set<Class<?>> xmlElementTypes = _Sets.newLinkedHashSet();
-// xmlElementTypes.addAll(discovery.getTypesAnnotatedWith(XmlElement.class));
-//
-// // add in any explicitly registered services...
-// domainServiceTypes.addAll(appManifest.getAdditionalServices());
-//
-// // Reflections seems to have a bug whereby it will return some classes outside the
-// // set of packages that we want (think this is to do with the fact that it matches based on
-// // the prefix and gets it wrong); so we double check and filter out types outside our
-// // required set of packages.
-//
-// // for a tiny bit of efficiency, we append a '.' to each package name here, outside the loops
-// List<String> packagesWithDotSuffix =
-// _Lists.map(moduleAndFrameworkPackages, (@Nullable final String s) -> {
-// return s != null ? s + "." : null;
-// });
-//
-// registry.setDomainServiceTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, domainServiceTypes));
-// registry.setPersistenceCapableTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, persistenceCapableTypes));
-// registry.setFixtureScriptTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, fixtureScriptTypes));
-// registry.setMixinTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, mixinTypes));
-// registry.setDomainObjectTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, domainObjectTypes));
-// registry.setViewModelTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, viewModelTypes));
-// registry.setXmlElementTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, xmlElementTypes));
-// }
-//
-// static <T> Set<Class<? extends T>> withinPackageAndNotAnonymous(
-// final List<String> packagesWithDotSuffix,
-// final Set<Class<? extends T>> classes) {
-// Set<Class<? extends T>> classesWithin = _Sets.newLinkedHashSet();
-// for (Class<? extends T> clz : classes) {
-// final String className = clz.getName();
-// if(containedWithin(packagesWithDotSuffix, className) && notAnonymous(clz)) {
-// classesWithin.add(clz);
-// }
-// }
-// return classesWithin;
-// }
-//
-// static private boolean containedWithin(final List<String> packagesWithDotSuffix, final String className) {
-// for (String packageWithDotSuffix : packagesWithDotSuffix) {
-// if (className.startsWith(packageWithDotSuffix)) {
-// return true;
-// }
-// }
-// return false;
-// }
-//
-// private static <T> boolean notAnonymous(final Class<? extends T> clz) {
-// try {
-// return !clz.isAnonymousClass();
-// } catch(NoClassDefFoundError error) {
-// return false; // ignore, assume anonymous
-// }
-// }
-//
-//
-// private void specifyServicesAndRegisteredEntitiesUsing(final AppManifest appManifest) {
-// final Stream<String> packageNames = modulePackageNamesFrom(appManifest);
-// final String packageNamesCsv = packageNames.collect(Collectors.joining(","));
-//
-// final List<Class<?>> additionalServices = appManifest.getAdditionalServices();
-// if(additionalServices != null) {
-// final String additionalServicesCsv = classNamesFrom(additionalServices);
-// appendToPropertyCsvValue(ServicesInstallerFromConfiguration.SERVICES_KEY, additionalServicesCsv);
-// }
-// }
-//
-// private void appendToPropertyCsvValue(final String servicesKey, final String additionalServicesCsv) {
-// final String existingServicesCsv = _Config.peekAtString(servicesKey);
-// final String servicesCsv = join(existingServicesCsv, additionalServicesCsv);
-// _Config.put(servicesKey, servicesCsv);
-// }
-//
-// private static String join(final String csv1, final String csv2) {
-// if (csv1 == null) {
-// return csv2;
-// }
-// if (csv2 == null) {
-// return csv1;
-// }
-// return csv1 + "," + csv2;
-// }
-//
-// protected String classNamesFrom(final List<?> objectsOrClasses) {
-// if (objectsOrClasses == null) {
-// return null;
-// }
-//
-// final Stream<String> fixtureClassNames = _NullSafe.stream(objectsOrClasses)
-// .map(classNameOf());
-//
-// return fixtureClassNames.collect(Collectors.joining(","));
-//
-// }
-//
-// private static Function<Object, String> classNameOf() {
-// return new Function<Object, String>() {
-// @Nullable @Override
-// public String apply(final Object input) {
-// Class<?> aClass = input instanceof Class ? (Class<?>) input : input.getClass();
-// return aClass.getName();
-// }
-// };
-// }
-//
-// private void addToConfigurationUsing(final AppManifest appManifest) {
-// final Map<String, String> configurationProperties = appManifest.getConfigurationProperties();
-//
-// if (configurationProperties == null) {
-// return;
-// }
-//
-// acceptBuilder(builder->{
-//
-// for (Map.Entry<String, String> configProp : configurationProperties.entrySet()) {
-// builder.add(configProp.getKey(), configProp.getValue());
-// }
-//
-// });
-// }
-
// -- provideAuth*
public AuthenticationManager provideAuthenticationManager() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
deleted file mode 100644
index 478fb52..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.webapp;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.config.internal._Config;
-import org.apache.isis.core.commons.config.IsisConfiguration.ContainsPolicy;
-import org.apache.isis.core.commons.config.NotFoundPolicy;
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
-import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
-
-import static org.apache.isis.commons.internal._Constants.emptyStringArray;
-
-/**
- * Initialize the {@link IsisSessionFactoryBuilder} when the web application starts, and
- * destroys it when it ends.
- * <p>
- * Implementation note: we use a number of helper builders to keep this class as
- * small and focused as possible. The builders are available for reuse by other
- * bootstrappers.
- *
- * TODO: this is now defunct, I think ... replaced by IsisWebAppContextListener, which is always used. Note that _ugbtb_web-xml.adoc also needs to be updated.
- */
-public final class IsisWebAppBootstrapper implements ServletContextListener {
-
- private static final Logger LOG = LoggerFactory.getLogger(IsisWebAppBootstrapper.class);
-
- private final IsisLoggingConfigurer loggingConfigurer = new IsisLoggingConfigurer();
-
- // /////////////////////////////////////////////////////
- // Initialization
- // /////////////////////////////////////////////////////
-
- @Override
- public void contextInitialized(final ServletContextEvent servletContextEvent) {
- try {
- final ServletContext servletContext = servletContextEvent.getServletContext();
-
- final String webInfDir = servletContext.getRealPath("/WEB-INF");
- loggingConfigurer.configureLogging(webInfDir, emptyStringArray);
-
- IsisWebAppConfigHelper.initConfigurationFrom(servletContext);
- _Config.acceptBuilder(this::addConfigurationResourcesForDeploymentType);
-
- } catch (final RuntimeException e) {
- LOG.error("startup failed", e);
- throw e;
- }
- LOG.info("server started");
- }
-
- protected void addConfigurationResourcesForDeploymentType(
- final IsisConfigurationBuilder isisConfigurationBuilder) {
- final String resourceName =
- IsisContext.getEnvironment().getDeploymentType().name().toLowerCase() + ".properties";
- isisConfigurationBuilder.addConfigurationResource(resourceName, NotFoundPolicy.CONTINUE, ContainsPolicy.IGNORE);
- }
-
-
- // /////////////////////////////////////////////////////
- // Destroy
- // /////////////////////////////////////////////////////
-
- @Override
- public void contextDestroyed(final ServletContextEvent ev) {
- LOG.info("server shutting down");
- try {
- _Context.clear();
- } finally {
- LOG.info("server shut down");
- }
- }
-
-}
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 0b2f222..5d42dff 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
@@ -31,7 +31,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.config.internal._Config;
+import org.apache.isis.core.commons.config.AppConfigLocator;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfiguration.ContainsPolicy;
import org.apache.isis.core.commons.config.NotFoundPolicy;
import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
@@ -76,10 +77,13 @@ public class IsisWebAppContextListener implements ServletContextListener {
// IsisWicketApplication#init() or others that better know what ClassLoader to use as application default.
_Context.setDefaultClassLoader(Thread.currentThread().getContextClassLoader(), false);
+ _Context.putSingleton(ServletContext.class, servletContext);
+
putContextPathIfPresent(servletContext.getContextPath());
- IsisWebAppConfigHelper.initConfigurationFrom(servletContext);
- _Config.acceptBuilder(IsisContext.EnvironmentPrimer::primeEnvironment);
+ IsisConfiguration isisConfiguration = AppConfigLocator.getAppConfig().isisConfiguration();
+
+ //[2039]_Config.acceptBuilder(IsisContext.EnvironmentPrimer::primeEnvironment);
final WebModuleContext webModuleContext = new WebModuleContext(servletContext);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/auth/AuthenticationSessionStrategyDefault.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/auth/AuthenticationSessionStrategyDefault.java
index 5b24925..9a64826 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/auth/AuthenticationSessionStrategyDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/auth/AuthenticationSessionStrategyDefault.java
@@ -25,11 +25,11 @@ import javax.servlet.http.HttpSession;
import org.apache.isis.applib.fixtures.LogonFixture;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.WebAppConstants;
import org.apache.isis.core.runtime.authentication.AuthenticationManager;
import org.apache.isis.core.runtime.fixtures.authentication.AuthenticationRequestLogonFixture;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
-import org.apache.isis.core.webapp.WebAppConstants;
/**
* Returns a valid {@link AuthenticationSession} through a number of mechanisms;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule.java
index 231930e..6c1e703 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule.java
@@ -79,7 +79,8 @@ public interface WebModule {
static Stream<WebModule> discoverWebModules() {
//TODO [ahuber] instead of providing a static list of modules, modules could be discovered on
- // the class-path (in case we have plugins that provide such modules).
+ // the class-path (in case we have plugins that provide such modules).
+ // We could use the AppManifest instead.
// We need yet to decide a mechanism, that enforces a certain ordering of these modules, since
// this influences the order in which filters are processed.
@@ -87,7 +88,6 @@ public interface WebModule {
new WebModule_Shiro(), // filters before all others
new WebModule_StaticResources(),
new WebModule_Wicket(),
- new WebModule_FallbackBootstrapper(), // not required if the Wicket module is in use
new WebModule_RestEasy(), // default REST provider
new WebModule_LogOnExceptionLogger() // log any logon exceptions, filters after all others
);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModuleContext.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModuleContext.java
index b41d116..0c2e4ec 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModuleContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModuleContext.java
@@ -24,6 +24,7 @@ import javax.servlet.ServletContext;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.config.internal._Config;
+import org.apache.isis.core.commons.config.IsisConfiguration;
/**
*
@@ -32,26 +33,32 @@ import org.apache.isis.config.internal._Config;
*/
public class WebModuleContext {
- /**
- * This key was deprecated from config, but we still use it for reference. It is auto-populated
- * such that it can be looked up, to see what viewers have been discovered by the framework.
- */
- private final static String ISIS_VIEWERS = "isis.viewers";
- private final static String ISIS_PROTECTED = "isis.protected";
+// /**
+// * This key was deprecated from config, but we still use it for reference. It is auto-populated
+// * such that it can be looked up, to see what viewers have been discovered by the framework.
+// */
+// private final static String ISIS_VIEWERS = "isis.viewers";
+// private final static String ISIS_PROTECTED = "isis.protected";
private boolean hasBootstrapper = false;
private final StringBuilder viewers = new StringBuilder();
private final StringBuilder protectedPath = new StringBuilder();
private final ServletContext servletContext;
+ private final IsisConfiguration isisConfiguration;
public WebModuleContext(ServletContext servletContext) {
this.servletContext = servletContext;
+ this.isisConfiguration = _Config.getConfiguration();
}
public ServletContext getServletContext() {
return servletContext;
}
+
+ public IsisConfiguration getConfiguration() {
+ return isisConfiguration;
+ }
/**
* Tell other modules that a bootstrapper is present.
@@ -102,10 +109,11 @@ public class WebModuleContext {
* Commits all properties to current life-cycle's config.
*/
public void commit() {
- _Config.acceptBuilder(builder->{
- builder.add(ISIS_VIEWERS, viewers.toString());
- builder.add(ISIS_PROTECTED, protectedPath.toString());
- });
+//[2039] can no longer write to config
+// _Config.acceptBuilder(builder->{
+// builder.add(ISIS_VIEWERS, viewers.toString());
+// builder.add(ISIS_PROTECTED, protectedPath.toString());
+// });
}
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_FallbackBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_FallbackBootstrapper.java
deleted file mode 100644
index dc925b7..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_FallbackBootstrapper.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.core.webapp.modules;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextListener;
-import javax.servlet.ServletException;
-
-import org.apache.isis.core.webapp.IsisWebAppBootstrapper;
-
-/**
- * Package private mixin for WebModule implementing WebModule.
- * @since 2.0.0
- */
-final class WebModule_FallbackBootstrapper implements WebModule {
-
- @Override
- public String getName() {
- return "Fallback Bootstrapper";
- }
-
- @Override
- public ServletContextListener init(ServletContext ctx) throws ServletException {
- return ctx.createListener(IsisWebAppBootstrapper.class);
- }
-
- @Override
- public boolean isApplicable(WebModuleContext ctx) {
- // not required if another bootstrapper module is on the context
- // e.g. the Wicket module
- return !ctx.hasBootstrapper();
- }
-
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_RestEasy.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_RestEasy.java
index 4926ca1..4436f77 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_RestEasy.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_RestEasy.java
@@ -23,7 +23,6 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
-import org.apache.isis.config.internal._Config;
import org.apache.isis.core.webapp.IsisSessionFilter;
import static java.util.Objects.requireNonNull;
@@ -64,8 +63,8 @@ final class WebModule_RestEasy implements WebModule {
}
// try to fetch restfulPath from config else fallback to default
- final String restfulPath = _Config
- .peekAtString(KEY_RESTFUL_BASE_PATH, KEY_RESTFUL_BASE_PATH_DEFAULT);
+ final String restfulPath = ctx.getConfiguration()
+ .getString(KEY_RESTFUL_BASE_PATH, KEY_RESTFUL_BASE_PATH_DEFAULT);
putRestfulPath(restfulPath);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_Wicket.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_Wicket.java
index 8bcf82f..c1cc32f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_Wicket.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_Wicket.java
@@ -25,7 +25,6 @@ import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.config.internal._Config;
import static java.util.Objects.requireNonNull;
import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
@@ -36,7 +35,7 @@ import static org.apache.isis.commons.internal.exceptions._Exceptions.unexpected
/**
* Package private mixin for WebModule implementing WebModule.
- * @since 2.0.0
+ * @since 2.0.0-M2
*/
final class WebModule_Wicket implements WebModule {
@@ -62,14 +61,14 @@ final class WebModule_Wicket implements WebModule {
}
pathConfigValue =
- _Config.peekAtString("isis.viewer.wicket.basePath", "/wicket");
+ ctx.getConfiguration().getString("isis.viewer.wicket.basePath", "/wicket");
deploymentMode = _Context.isPrototyping()
? "development"
: "deployment";
appConfigValue =
- _Config.peekAtString("isis.viewer.wicket.app",
+ ctx.getConfiguration().getString("isis.viewer.wicket.app",
"org.apache.isis.viewer.wicket.viewer.IsisWicketApplication");
ctx.setHasBootstrapper();
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index bd169aa..a853a12 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -29,8 +29,6 @@ import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.function.Function;
-import javax.servlet.ServletContext;
-
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
import com.google.inject.Guice;
@@ -79,11 +77,9 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.ensure.Ensure;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
-import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
-import org.apache.isis.core.webapp.IsisWebAppConfigHelper;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettingsAccessor;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
@@ -174,8 +170,6 @@ implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, WicketVi
public static final boolean ENABLE_DEVELOPMENT_UTILITIES_DEFAULT = false;
public static final BootswatchTheme BOOTSWATCH_THEME_DEFAULT = BootswatchTheme.Flatly;
- private final IsisLoggingConfigurer loggingConfigurer = new IsisLoggingConfigurer();
-
/**
* Convenience locator, down-casts inherited functionality.
*/
@@ -244,27 +238,16 @@ implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, WicketVi
// this doesn't seem to accomplish anything
// experimental.addListenerToStripRemovedComponentsFromAjaxTargetResponse();
-
- // --- prepare the configuration prior to init()
-
- prepareConfigurationBuilder(getServletContext()); // FIXME[2039] do this in the ServletContextListener
super.internalInit();
}
- private void prepareConfigurationBuilder(ServletContext ctx) {
- final String isisConfigDir = ctx.getInitParameter("isis.config.dir");
- configureLogging(isisConfigDir);
- IsisWebAppConfigHelper.initConfigurationFrom(ctx);
- }
-
private static AjaxRequestTarget decorate(final AjaxRequestTarget ajaxRequestTarget) {
ajaxRequestTarget.registerRespondListener( new TargetRespondListenerToResetQueryResultCache() );
return ajaxRequestTarget;
}
-
@Override
public Application setAjaxRequestTargetProvider(Function<Page, AjaxRequestTarget> ajaxRequestTargetProvider) {
final Application application = super.setAjaxRequestTargetProvider(
@@ -280,10 +263,6 @@ implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, WicketVi
@Override
protected void init() {
- //[ahuber] the implementing class is assumed to be loaded be a class-loader
- // that's suitable for the entire web-application to use as default.
- _Context.setDefaultClassLoader(this.getClass().getClassLoader(), true);
-
final IsisConfiguration configuration = _Config.getConfiguration();
List<Future<Object>> futures = null;
@@ -519,22 +498,6 @@ implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, WicketVi
/**
* Factored out for easy (informal) pluggability.
*/
- protected void configureLogging(String isisConfigDir) {
- final String loggingPropertiesDir;
- if(isisConfigDir != null) {
- loggingPropertiesDir = isisConfigDir;
- } else {
- loggingPropertiesDir = getServletContext().getRealPath("/WEB-INF");
- }
-
- loggingConfigurer.configureLogging(loggingPropertiesDir, new String[0]);
- }
-
- // //////////////////////////////////////
-
- /**
- * Factored out for easy (informal) pluggability.
- */
protected IRequestCycleListener newWebRequestCycleForIsis() {
return new WebRequestCycleForIsis();
}
@@ -607,18 +570,6 @@ implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, WicketVi
setHeaderResponseDecorator(response -> {
return new ResourceAggregator(new JavaScriptFilteredIntoFooterHeaderResponse(response, "footerJS"));
});
-
- //[ahuber] no longer supported since wicket 8
- // setHeaderResponseDecorator(new IHeaderResponseDecorator()
- // {
- // @Override
- // public IHeaderResponse decorate(IHeaderResponse response)
- // {
- // // use this header resource decorator to load all JavaScript resources in the page
- // // footer (after </body>)
- // return new JavaScriptFilteredIntoFooterHeaderResponse(response, "footerJS");
- // }
- // });
}
// //////////////////////////////////////
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 d4a3541..3ebaefb 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
@@ -24,7 +24,7 @@ import com.google.inject.Provides;
import com.google.inject.Singleton;
import org.apache.isis.applib.AppManifest;
-import org.apache.isis.core.commons.config.AppConfigLocator;
+import org.apache.isis.config.internal._Config;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
@@ -35,11 +35,7 @@ public class IsisInjectModule extends AbstractModule {
@Override
protected void configure() {
-
- System.err.println("!!!!!!!!!! IsisInjectModule.configure "+Thread.currentThread().getName());
-
- IsisConfiguration isisConfiguration = AppConfigLocator.getAppConfig().isisConfiguration();
- bind(IsisConfiguration.class).toInstance(isisConfiguration);
+ bind(IsisConfiguration.class).toProvider(_Config::getConfiguration);
}
@Provides
@@ -49,7 +45,6 @@ public class IsisInjectModule extends AbstractModule {
AppManifest appManifest = isisConfiguration.getAppManifest();
-
System.err.println("!!!!!!!!!! provideIsisSessionFactory STAGE 1 "+Thread.currentThread().getName());
final IsisComponentProvider componentProvider = IsisComponentProvider
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
index 5f14b04..1099282 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
@@ -31,6 +31,8 @@ import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.core.commons.config.WebAppConstants;
+
import com.google.common.io.CharSource;
import com.google.common.io.Files;
import com.google.common.io.Resources;
@@ -40,7 +42,6 @@ import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.i18n.TranslationsResolver;
-import org.apache.isis.core.webapp.WebAppConstants;
import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;