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