You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by rm...@apache.org on 2012/12/20 00:07:34 UTC
[3/5] git commit: ISIS-288 - improvements to configuration loading at
start up.
ISIS-288 - improvements to configuration loading at start up.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/18ab2b56
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/18ab2b56
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/18ab2b56
Branch: refs/heads/master
Commit: 18ab2b56accbe1654912e5e4af94731e6d79d44f
Parents: bb88aaf
Author: rmatthews <rm...@nakedobjects.org>
Authored: Wed Dec 12 23:26:57 2012 +0000
Committer: rmatthews <rm...@nakedobjects.org>
Committed: Wed Dec 19 18:50:41 2012 +0000
----------------------------------------------------------------------
.../apache/isis/viewer/bdd/common/Scenario.java | 10 +-
.../wicket/viewer/IsisWicketApplication.java | 35 ++--
.../viewer/IsisWicketUnsecuredApplication.java | 20 +-
.../core/commons/config/InstallerAbstract.java | 4 +-
.../commons/config/IsisConfigurationBuilder.java | 16 +-
.../IsisConfigurationBuilderResourceStreams.java | 130 ++--------
.../commons/config/IsisConfigurationDefault.java | 29 ++-
.../config/ConfigurationBuilderFileSystemTest.java | 11 +-
.../IsisConfigurationDefault_PropertNamesTest.java | 6 +-
.../actions/ActionMethodsFacetFactoryTest.java | 4 +-
.../java/org/apache/isis/core/runtime/Isis.java | 6 +-
.../exploration/ExplorationAuthenticator.java | 2 +-
.../isis/core/runtime/runner/IsisInjectModule.java | 173 +++++++++++++
.../isis/core/runtime/runner/IsisModule.java | 189 ---------------
.../isis/core/runtime/runner/IsisRunner.java | 35 +++-
.../isis/core/webapp/IsisWebAppBootstrapper.java | 18 +-
.../org/apache/isis/core/webserver/WebServer.java | 22 +-
.../isis/core/webserver/WebServerBootstrapper.java | 8 +-
.../OptionHandlerDeploymentTypeWebServer.java | 2 +-
19 files changed, 330 insertions(+), 390 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/component/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java
----------------------------------------------------------------------
diff --git a/component/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java b/component/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java
index a8ea681..4daaa3d 100644
--- a/component/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java
+++ b/component/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java
@@ -31,8 +31,6 @@ import java.util.Map;
import com.google.inject.Guice;
import com.google.inject.Injector;
-import org.apache.log4j.FileAppender;
-
import org.apache.isis.applib.fixtures.LogonFixture;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
@@ -45,6 +43,7 @@ import org.apache.isis.core.progmodel.facets.value.ValueSemanticsProviderAbstrac
import org.apache.isis.core.runtime.fixtures.FixturesInstallerNoop;
import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
import org.apache.isis.core.runtime.installers.InstallerLookupDefault;
+import org.apache.isis.core.runtime.runner.IsisInjectModule;
import org.apache.isis.core.runtime.runner.IsisModule;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.IsisSystem;
@@ -67,11 +66,11 @@ import org.apache.isis.viewer.bdd.common.story.registries.AliasRegistryHolder;
/**
* Holds the bootstrapped {@link IsisSystem} and provides access to the
* {@link AliasRegistry aliases}.
- *
+ *
* <p>
* Typically held in a thread-local by the test framework, acting as a context
* to the story.
- *
+ *
* <p>
* Implementation note: this class directly implements {@link AliasRegistrySpi},
* though delegates to an underlying {@link AliasRegistryDefault}. This is
@@ -149,6 +148,7 @@ public class Scenario implements AliasRegistryHolder {
}
private void defaultStoryComponentsInto(final IsisConfigurationBuilder isisConfigurationBuilder) {
+ isisConfigurationBuilder.addDefaultConfigurationResources();
isisConfigurationBuilder.add(SystemConstants.AUTHENTICATION_INSTALLER_KEY, BddAuthenticationManagerInstaller.class.getName());
isisConfigurationBuilder.add(SystemConstants.OBJECT_PERSISTOR_INSTALLER_KEY, BddInMemoryPersistenceMechanismInstaller.class.getName());
isisConfigurationBuilder.add(SystemConstants.PROFILE_PERSISTOR_INSTALLER_KEY, InMemoryUserProfileStoreInstaller.class.getName());
@@ -157,7 +157,7 @@ public class Scenario implements AliasRegistryHolder {
}
private Injector createGuiceInjector(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder, final InstallerLookup installerLookup) {
- final IsisModule isisModule = new IsisModule(deploymentType, isisConfigurationBuilder, installerLookup);
+ final IsisInjectModule isisModule = new IsisInjectModule(deploymentType, isisConfigurationBuilder, installerLookup);
return Guice.createInjector(isisModule);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 3a82ac3..d62d13e 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -28,7 +28,6 @@ import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Module;
-import com.google.inject.name.Named;
import org.apache.log4j.Logger;
import org.apache.wicket.Application;
@@ -53,7 +52,7 @@ import org.apache.isis.core.commons.resource.ResourceStreamSource;
import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
import org.apache.isis.core.commons.resource.ResourceStreamSourceCurrentClassClassPath;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.runtime.runner.IsisModule;
+import org.apache.isis.core.runtime.runner.IsisInjectModule;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.IsisSystem;
import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -81,14 +80,14 @@ import org.apache.isis.viewer.wicket.viewer.integration.wicket.WebRequestCycleFo
/**
* Main application, subclassing the Wicket {@link Application} and
* bootstrapping Isis.
- *
+ *
* <p>
* Its main responsibility is to allow the set of {@link ComponentFactory}s used
* to render the domain objects to be registered. This type of customisation is
* commonplace. At a more fundamental level, also allows the {@link Page}
* implementation for each {@link PageType page type} to be overridden. This is
* probably less common, because CSS can also be used for this purpose.
- *
+ *
* <p>
* New {@link ComponentFactory}s can be specified in two ways. The preferred
* approach is to use the {@link ServiceLoader} mechanism, whereby the
@@ -96,12 +95,12 @@ import org.apache.isis.viewer.wicket.viewer.integration.wicket.WebRequestCycleFo
* <tt>META-INF/services</tt>. See <tt>views-gmaps2</tt> for an example of this.
* Including a jar that uses this mechanism on the classpath will automatically
* make the {@link ComponentFactory} defined within it available.
- *
+ *
* <p>
* Alternatively, {@link ComponentFactory}s can be specified by overridding
* {@link #newComponentFactoryList()}. This offers more fine-grained control for
* the ordering, but is more fiddly.
- *
+ *
* <p>
* There are also a number of other pluggable hooks (similar way to other Wicket
* customizations)
@@ -173,12 +172,12 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
@Override
protected void init() {
super.init();
-
+
final RenderStrategy renderStrategy = RenderStrategy.REDIRECT_TO_RENDER;
-
+
getRequestCycleSettings().setRenderStrategy(renderStrategy);
-
- // 6.0.0 instead of subclassing newRequestCycle
+
+ // 6.0.0 instead of subclassing newRequestCycle
getRequestCycleListeners().add(new WebRequestCycleForIsis());
getResourceSettings().setParentFolderPlaceholder("$up$");
@@ -187,17 +186,17 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
final IsisConfigurationBuilder isisConfigurationBuilder = createConfigBuilder();
- final IsisModule isisModule = newIsisModule(deploymentType, isisConfigurationBuilder);
+ final IsisInjectModule isisModule = newIsisModule(deploymentType, isisConfigurationBuilder);
final Injector injector = Guice.createInjector(isisModule, newIsisWicketModule());
injector.injectMembers(this);
-
+
this.bookmarkedPagesModel = new BookmarkedPagesModel();
initWicketComponentInjection(injector);
}
- protected IsisModule newIsisModule(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder) {
- return new IsisModule(deploymentType, isisConfigurationBuilder);
+ protected IsisInjectModule newIsisModule(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder) {
+ return new IsisInjectModule(deploymentType, isisConfigurationBuilder);
}
private DeploymentType determineDeploymentType() {
@@ -247,7 +246,7 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
* Installs a {@link AuthenticatedWebSessionForIsis custom implementation}
* of Wicket's own {@link AuthenticatedWebSession}, effectively associating
* the Wicket session with the Isis's equivalent session object.
- *
+ *
* <p>
* In general, it shouldn't be necessary to override this method.
*/
@@ -287,7 +286,7 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
/**
* Access to other page types.
- *
+ *
* <p>
* Non-final only for testing purposes; should not typically be overridden.
*/
@@ -332,12 +331,12 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
public BookmarkedPagesModel getBookmarkedPagesModel() {
return bookmarkedPagesModel;
}
-
+
// /////////////////////////////////////////////////
// *Provider impl.
// /////////////////////////////////////////////////
-
+
@Override
public void injectInto(final Object candidate) {
if (AuthenticationSessionProviderAware.class.isAssignableFrom(candidate.getClass())) {
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java
index 1e9ea31..b478ffb 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java
@@ -48,7 +48,7 @@ import org.apache.isis.core.runtime.authentication.AuthenticationManager;
import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
import org.apache.isis.core.runtime.authentication.standard.AuthenticationManagerStandard;
import org.apache.isis.core.runtime.authentication.standard.AuthenticatorAbstract;
-import org.apache.isis.core.runtime.runner.IsisModule;
+import org.apache.isis.core.runtime.runner.IsisInjectModule;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.IsisSystem;
import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -121,17 +121,17 @@ public class IsisWicketUnsecuredApplication extends WebApplication implements Co
// 6.0.0 rather than overriding getRequestCycleSettings
// TODO: reinstate REDIRECT_TO_RENDER once WICKET-4773 implemented (Wicket 6.1.0)
getRequestCycleSettings().setRenderStrategy(RenderStrategy.REDIRECT_TO_BUFFER);
- // 6.0.0 instead of subclassing newRequestCycle
+ // 6.0.0 instead of subclassing newRequestCycle
getRequestCycleListeners().add(new WebRequestCycleForIsis());
-
-
+
+
getResourceSettings().setParentFolderPlaceholder("$up$");
final DeploymentType deploymentType = determineDeploymentType();
final IsisConfigurationBuilder isisConfigurationBuilder = createConfigBuilder();
- final IsisModule isisModule = new IsisModule(deploymentType, isisConfigurationBuilder);
+ final IsisInjectModule isisModule = new IsisInjectModule(deploymentType, isisConfigurationBuilder);
final Injector injector = Guice.createInjector(isisModule, newIsisWicketModule());
injector.injectMembers(this);
@@ -211,7 +211,7 @@ public class IsisWicketUnsecuredApplication extends WebApplication implements Co
// * Wicket's own {@link RequestCycle}, hooking in to provide session and
// * transaction management across potentially multiple concurrent requests
// * for the same Wicket session.
-// *
+// *
// * <p>
// * In general, it shouldn't be necessary to override this method.
// */
@@ -223,7 +223,7 @@ public class IsisWicketUnsecuredApplication extends WebApplication implements Co
/**
* Installs a {@link ConverterLocator} preconfigured with a number of
* implementations to support Isis specific objects.
- *
+ *
* <p>
* In general, it shouldn't be necessary to override this method.
*/
@@ -254,7 +254,7 @@ public class IsisWicketUnsecuredApplication extends WebApplication implements Co
/**
* Access to other page types.
- *
+ *
* <p>
* Non-final only for testing purposes; should not typically be overridden.
*/
@@ -281,11 +281,11 @@ public class IsisWicketUnsecuredApplication extends WebApplication implements Co
return IsisContext.getAuthenticationSession();
}
-
+
// /////////////////////////////////////////////////
// *Provider impl.
// /////////////////////////////////////////////////
-
+
@Override
public void injectInto(final Object candidate) {
if (AuthenticationSessionProviderAware.class.isAssignableFrom(candidate.getClass())) {
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
index a8558c3..74b740a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
@@ -72,10 +72,10 @@ public abstract class InstallerAbstract implements Installer, IsisConfigurationB
@Override
public List<String> getConfigurationResources() {
final List<String> resourceList = Lists.newArrayList();
- final String componentFile = getType() + ".properties";
- resourceList.add(componentFile);
final String componentImplementationFile = getType() + "_" + getName() + ".properties";
resourceList.add(componentImplementationFile);
+ final String componentFile = getType() + ".properties";
+ resourceList.add(componentFile);
addConfigurationResources(resourceList);
return Collections.unmodifiableList(resourceList);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
index ddfa5ea..3c3e64c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
@@ -19,8 +19,6 @@
package org.apache.isis.core.commons.config;
-import java.util.Properties;
-
import org.apache.isis.core.commons.components.Injectable;
import org.apache.isis.core.commons.resource.ResourceStreamSource;
import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
@@ -42,11 +40,11 @@ public interface IsisConfigurationBuilder extends Injectable {
*/
IsisConfiguration getConfiguration();
- public abstract void addConfigurationResource(final String installerName, final NotFoundPolicy notFoundPolicy);
-
- public abstract void add(final Properties properties);
+ void addDefaultConfigurationResources();
+
+ void addConfigurationResource(final String installerName, final NotFoundPolicy notFoundPolicy);
- public abstract void add(final String key, final String value);
+ void add(final String key, final String value);
/**
* The underlying {@link ResourceStreamSource} from which the configuration
@@ -55,10 +53,12 @@ public interface IsisConfigurationBuilder extends Injectable {
* <p>
* Note that this may be a {@link ResourceStreamSourceChainOfResponsibility composite}.
*/
- public ResourceStreamSource getResourceStreamSource();
+ ResourceStreamSource getResourceStreamSource();
/**
* Log a summary of resources found or not found.
*/
- public void dumpResourcesToLog();
+ void dumpResourcesToLog();
+
+ void lockConiguration();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
index bdab1a1..cf64c6d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
@@ -21,20 +21,17 @@ package org.apache.isis.core.commons.config;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Enumeration;
import java.util.List;
-import java.util.Properties;
import java.util.Set;
-import com.google.common.base.Objects;
-import com.google.common.collect.Sets;
-
-import org.apache.log4j.Logger;
-
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.resource.ResourceStreamSource;
import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
+import org.apache.log4j.Logger;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Sets;
/**
* Adapter for {@link IsisConfigurationBuilder}, loading the specified
@@ -47,9 +44,6 @@ import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
public class IsisConfigurationBuilderResourceStreams implements IsisConfigurationBuilder {
private static final Logger LOG = Logger.getLogger(IsisConfigurationBuilderResourceStreams.class);
-
- private final Set<String> configurationResourcesFound = Sets.newLinkedHashSet();
- private final Set<String> configurationResourcesNotFound = Sets.newLinkedHashSet();
static class ConfigurationResourceAndPolicy {
private final String configurationResource;
@@ -74,20 +68,12 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
}
}
+ private final Set<String> configurationResourcesFound = Sets.newLinkedHashSet();
+ private final Set<String> configurationResourcesNotFound = Sets.newLinkedHashSet();
private final ResourceStreamSource resourceStreamSource;
-
+ private final IsisConfigurationDefault configuration;
private final List<ConfigurationResourceAndPolicy> configurationResources = new ArrayList<ConfigurationResourceAndPolicy>();
- private final Properties additionalProperties = new Properties();
- private boolean includeSystemProperties = false;
-
- /**
- * Most recent snapshot of {@link IsisConfiguration} obtained from
- * {@link #configurationLoader}.
- *
- * <p>
- * Whenever further configuration is merged in, this cache is invalidated.
- */
- private IsisConfiguration cachedConfiguration;
+ private boolean locked;
// ////////////////////////////////////////////////////////////
// Constructor, initialization
@@ -114,13 +100,13 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
public IsisConfigurationBuilderResourceStreams(final ResourceStreamSource resourceStreamSource) {
this.resourceStreamSource = resourceStreamSource;
- addDefaultConfigurationResources();
+ configuration = new IsisConfigurationDefault(resourceStreamSource);
}
/**
* May be overridden by subclasses if required.
*/
- protected void addDefaultConfigurationResources() {
+ public void addDefaultConfigurationResources() {
addConfigurationResource(ConfigurationConstants.DEFAULT_CONFIG_FILE, NotFoundPolicy.FAIL_FAST);
addConfigurationResource(ConfigurationConstants.WEB_CONFIG_FILE, NotFoundPolicy.CONTINUE);
}
@@ -152,13 +138,9 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
*/
@Override
public synchronized void addConfigurationResource(final String configurationResource, final NotFoundPolicy notFoundPolicy) {
+ LOG.debug("looking for properties file " + configurationResource);
+ loadConfigurationResource(configuration, new ConfigurationResourceAndPolicy(configurationResource, notFoundPolicy));
configurationResources.add(new ConfigurationResourceAndPolicy(configurationResource, notFoundPolicy));
- invalidateCache();
- }
-
- public synchronized void setIncludeSystemProperties(final boolean includeSystemProperties) {
- this.includeSystemProperties = includeSystemProperties;
- invalidateCache();
}
/**
@@ -166,29 +148,16 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
*/
@Override
public synchronized void add(final String key, final String value) {
- if (key == null || value == null) {
- return;
- }
- additionalProperties.setProperty(key, value);
- if (LOG.isInfoEnabled()) {
- LOG.info("added " + key + "=" + value);
+ if (locked) {
+ throw new IsisException("Configuration has been locked and cannot be changed");
}
- invalidateCache();
+ configuration.add(key, value);
}
- /**
- * Adds additional properties.
- */
- @Override
- public synchronized void add(final Properties properties) {
- final Enumeration<?> keys = properties.propertyNames();
- while (keys.hasMoreElements()) {
- final String key = (String) keys.nextElement();
- add(key, properties.getProperty(key));
- }
- invalidateCache();
+ public void lockConiguration() {
+ locked = true;
}
-
+
// ////////////////////////////////////////////////////////////
// getConfiguration
// ////////////////////////////////////////////////////////////
@@ -198,32 +167,13 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
*/
@Override
public synchronized IsisConfiguration getConfiguration() {
- if (cachedConfiguration != null) {
- return cachedConfiguration;
- }
-
- final IsisConfigurationDefault configuration = new IsisConfigurationDefault(getResourceStreamSource());
- loadConfigurationResources(configuration);
- // TODO: this hack should move elsewhere, where the DeploymentType is
- // known.
- addShowExplorationOptionsIfNotSpecified(configuration);
- addSystemPropertiesIfRequested(configuration);
- addAdditionalProperties(configuration);
- return cachedConfiguration = configuration;
- }
-
- private void loadConfigurationResources(final IsisConfigurationDefault configuration) {
- for (final ConfigurationResourceAndPolicy configResourceAndPolicy : configurationResources) {
- loadConfigurationResource(configuration, configResourceAndPolicy);
- }
- }
+ return configuration;
+ }
private void loadConfigurationResource(final IsisConfigurationDefault configuration, final ConfigurationResourceAndPolicy configResourceAndPolicy) {
final String configurationResource = configResourceAndPolicy.getConfigurationResource();
final NotFoundPolicy notFoundPolicy = configResourceAndPolicy.getNotFoundPolicy();
- if (LOG.isDebugEnabled()) {
- LOG.debug("loading configuration resource: " + configurationResource + ", notFoundPolicy: " + notFoundPolicy);
- }
+ LOG.debug("checking availability of configuration resource: " + configurationResource + ", notFoundPolicy: " + notFoundPolicy);
loadConfigurationResource(configuration, configurationResource, notFoundPolicy);
}
@@ -238,22 +188,16 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
protected void loadConfigurationResource(final IsisConfigurationDefault configuration, final String configurationResource, final NotFoundPolicy notFoundPolicy) {
try {
final PropertiesReader propertiesReader = loadConfigurationResource(resourceStreamSource, configurationResource);
- addProperties(configuration, propertiesReader.getProperties());
+ LOG.info("loading properies from " + configurationResource);
+ configuration.add(propertiesReader.getProperties());
configurationResourcesFound.add(configurationResource);
- if (LOG.isDebugEnabled()) {
- LOG.debug("'" + configurationResource + "' FOUND");
- }
return;
- } catch (final IOException ex) {
- // keep going
- }
+ } catch (final IOException ignore) { }
if (notFoundPolicy == NotFoundPolicy.FAIL_FAST) {
throw new IsisException("failed to load '" + configurationResource + "'; tried using: " + resourceStreamSource.getName());
} else {
configurationResourcesNotFound.add(configurationResource);
- if (LOG.isDebugEnabled()) {
- LOG.debug("'" + configurationResource + "' not found, but not needed");
- }
+ LOG.debug("'" + configurationResource + "' not found, but not needed");
}
}
@@ -261,31 +205,13 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
return new PropertiesReader(resourceStreamSource, configurationResource);
}
+
+ // TODO review this, should this option default to yes?
private void addShowExplorationOptionsIfNotSpecified(final IsisConfigurationDefault configuration) {
if (configuration.getString(ConfigurationConstants.SHOW_EXPLORATION_OPTIONS) == null) {
configuration.add(ConfigurationConstants.SHOW_EXPLORATION_OPTIONS, "yes");
}
}
-
- private void addSystemPropertiesIfRequested(final IsisConfigurationDefault configuration) {
- if (includeSystemProperties) {
- addProperties(configuration, System.getProperties());
- }
- }
-
- private void addAdditionalProperties(final IsisConfigurationDefault configuration) {
- addProperties(configuration, additionalProperties);
- }
-
- protected void addProperties(final IsisConfigurationDefault configuration, final Properties properties) {
- configuration.add(properties);
- }
-
- private void invalidateCache() {
- cachedConfiguration = null;
- }
-
-
// ////////////////////////////////////////////////////////////
// Logging
@@ -298,8 +224,6 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
for (String resource : configurationResourcesFound) {
LOG.info("* " + resource);
}
- }
- if (LOG.isInfoEnabled()) {
LOG.info("Configuration resources NOT FOUND (but not needed):");
for (String resource : configurationResourcesNotFound) {
LOG.info("* " + resource);
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
index 351efba..46f257a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
@@ -21,21 +21,18 @@ package org.apache.isis.core.commons.config;
import java.awt.Color;
import java.awt.Font;
-import java.util.Collections;
import java.util.Enumeration;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
-import com.google.common.collect.Maps;
-
-import org.apache.log4j.Logger;
-
import org.apache.isis.core.commons.debug.DebugBuilder;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.resource.ResourceStreamSource;
+import org.apache.log4j.Logger;
+
+import com.google.common.collect.Maps;
public class IsisConfigurationDefault implements IsisConfiguration {
@@ -53,7 +50,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
public IsisConfigurationDefault(final ResourceStreamSource resourceStreamSource) {
this.resourceStreamSource = resourceStreamSource;
- LOG.debug("from :" + nameOf(resourceStreamSource));
+ LOG.debug("configuration intialised with streams: " + nameOf(resourceStreamSource));
}
private String nameOf(final ResourceStreamSource resourceStreamSource) {
@@ -82,18 +79,24 @@ public class IsisConfigurationDefault implements IsisConfiguration {
add((String)key, (String)value);
}
}
-
+
/**
* Adds a key-value pair to this set of properties
*/
public void add(final String key, final String value) {
+ if (value == null) {
+ LOG.debug("ignoring " + key + " as value is null");
+ return;
+ }
if (key == null) {
return;
}
if (properties.containsKey(key)) {
- LOG.info("replacing " + key + "=" + properties.get(key) + " with " + value);
+ LOG.info("skipping " + key + "=" + value + " as value already set (with " + properties.get(key) + ")" );
+ } else {
+ LOG.info("adding " + key + "=" + value);
+ properties.put(key, value);
}
- properties.put(key, value);
}
@Override
@@ -199,9 +202,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
final Enumeration<?> names = properties.propertyNames();
while (names.hasMoreElements()) {
final String name = (String) names.nextElement();
- str.append(name, 55);
- str.append(" = ");
- str.appendln(properties.getProperty(name));
+ str.appendln(name, properties.getProperty(name));
}
}
@@ -319,7 +320,7 @@ public class IsisConfigurationDefault implements IsisConfiguration {
}
String property = properties.getProperty(key, defaultValue);
property = property != null ? property.trim() : null;
- LOG.debug("property: '" + key + "' = '" + property + "'");
+ LOG.debug("get property: '" + key + "' = '" + property + "'");
return property;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java
index 78402d6..d02a09f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/commons/config/ConfigurationBuilderFileSystemTest.java
@@ -33,6 +33,7 @@ public class ConfigurationBuilderFileSystemTest extends TestCase {
protected void setUp() throws Exception {
Logger.getRootLogger().setLevel(Level.OFF);
loader = new IsisConfigurationBuilderFileSystem("src/test/config");
+ loader.addDefaultConfigurationResources();
}
public void testDefaultConfiguration() {
@@ -51,10 +52,10 @@ public class ConfigurationBuilderFileSystemTest extends TestCase {
assertEquals("added", configuration.getString("additional.example"));
}
- public void testAddedConfigurationOveridesEarlierProperties() {
+ public void testAddedConfigurationIsIgnoredWhenEarlierPropertyExists() {
loader.addConfigurationResource("another.properties", NotFoundPolicy.FAIL_FAST);
final IsisConfiguration configuration = loader.getConfiguration();
- assertEquals("two", configuration.getString("properties.example"));
+ assertEquals("one", configuration.getString("properties.example"));
}
public void testAddedConfigurationFailsWhenFileNotFound() {
@@ -76,10 +77,4 @@ public class ConfigurationBuilderFileSystemTest extends TestCase {
final IsisConfiguration configuration = loader.getConfiguration();
assertEquals("added by code", configuration.getString("added.property"));
}
-
- public void testIncludeSystemProperty() throws Exception {
- loader.setIncludeSystemProperties(true);
- final IsisConfiguration configuration = loader.getConfiguration();
- assertEquals(System.getProperty("os.name"), configuration.getString("os.name"));
- }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_PropertNamesTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_PropertNamesTest.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_PropertNamesTest.java
index f8eb879..1cfa45f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_PropertNamesTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_PropertNamesTest.java
@@ -44,7 +44,7 @@ public class IsisConfigurationDefault_PropertNamesTest extends TestCase {
final Properties p = new Properties();
p.put("isis.bool", "on");
- p.put("isis.str", "string");
+ p.put("isis.str", "original");
configuration.add(p);
final Properties p1 = new Properties();
@@ -53,8 +53,8 @@ public class IsisConfigurationDefault_PropertNamesTest extends TestCase {
configuration.add(p1);
}
- public void testDuplicatedPropertyName() {
- assertEquals("replacement", configuration.getString("isis.str"));
+ public void testDuplicatedPropertyIsNotReplaced() {
+ assertEquals("original", configuration.getString("isis.str"));
}
public void testUniqueEntries() {
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/ActionMethodsFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/ActionMethodsFacetFactoryTest.java
index 09fab0a..2ad8860 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -775,7 +775,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
}
@SuppressWarnings("unused")
- public String disableSomeAction() {
+ public String disableSomeAction(final int x, final long y) {
return null;
}
}
@@ -783,7 +783,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
final Method actionMethod = findMethod(CustomerEx.class, "someAction", new Class[] { int.class, long.class });
final Method choices0Method = findMethod(CustomerEx.class, "choices0SomeAction", new Class[] {});
final Method choices1Method = findMethod(CustomerEx.class, "choices1SomeAction", new Class[] {});
- final Method disableMethod = findMethod(CustomerEx.class, "disableSomeAction", new Class[] {});
+ final Method disableMethod = findMethod(CustomerEx.class, "disableSomeAction", new Class[] { int.class, long.class });
final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(CustomerEx.class, actionMethod);
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/runtime/src/main/java/org/apache/isis/core/runtime/Isis.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/Isis.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/Isis.java
index 6f16ba9..68d7bc3 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/Isis.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/Isis.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.runtime;
+import org.apache.isis.core.commons.config.IsisConfigurationBuilderDefault;
import org.apache.isis.core.runtime.runner.IsisRunner;
import org.apache.isis.core.runtime.runner.opts.OptionHandlerDeploymentTypeIsis;
import org.apache.isis.core.runtime.runner.opts.OptionHandlerPassword;
@@ -36,12 +37,13 @@ public class Isis {
private void run(final String[] args) {
final IsisRunner runner = new IsisRunner(args, new OptionHandlerDeploymentTypeIsis());
-
addOptionHandlersAndValidators(runner);
-
if (!runner.parseAndValidate()) {
return;
}
+ runner.setConfigurationBuilder(new IsisConfigurationBuilderDefault());
+ runner.primeConfigurationWithCommandLineOptions();
+ runner.loadInitialProperties();
runner.bootstrap(new RuntimeBootstrapper());
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/exploration/ExplorationAuthenticator.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/exploration/ExplorationAuthenticator.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/exploration/ExplorationAuthenticator.java
index e9d68d0..6b06faa 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/exploration/ExplorationAuthenticator.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/authentication/exploration/ExplorationAuthenticator.java
@@ -112,7 +112,7 @@ public class ExplorationAuthenticator extends AuthenticatorAbstractForDfltRuntim
}
/**
- * Valid providing running in {@link DeploymentType#isExploring()
+ * Valid providing running in {@link DeploymentType#isExploring()
* exploration} mode.
*/
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
new file mode 100644
index 0000000..88f9812
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
@@ -0,0 +1,173 @@
+/*
+ * 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.runtime.runner;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+
+import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.config.IsisConfigurationBuilderDefault;
+import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
+import org.apache.isis.core.runtime.installerregistry.installerapi.IsisViewerInstaller;
+import org.apache.isis.core.runtime.installers.InstallerLookupDefault;
+import org.apache.isis.core.runtime.system.DeploymentType;
+import org.apache.isis.core.runtime.system.IsisSystem;
+import org.apache.isis.core.runtime.system.IsisSystemFactory;
+import org.apache.isis.core.runtime.systemusinginstallers.IsisSystemThatUsesInstallersFactory;
+import org.apache.isis.core.runtime.viewer.IsisViewer;
+
+public class IsisInjectModule extends AbstractModule {
+
+ private final DeploymentType deploymentType;
+ private final InstallerLookup installerLookup;
+ private final IsisConfigurationBuilder isisConfigurationBuilder;
+
+ private final List<String> viewerNames = Lists.newArrayList();
+
+ private static InstallerLookupDefault defaultInstallerLookup() {
+ return new InstallerLookupDefault();
+ }
+
+ private static IsisConfigurationBuilderDefault defaultConfigurationBuider() {
+ return new IsisConfigurationBuilderDefault();
+ }
+
+ public IsisInjectModule(final DeploymentType deploymentType) {
+ this(deploymentType, defaultConfigurationBuider(), defaultInstallerLookup());
+ }
+
+ public IsisInjectModule(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder) {
+ this(deploymentType, isisConfigurationBuilder, defaultInstallerLookup());
+ }
+
+ public IsisInjectModule(final DeploymentType deploymentType, final InstallerLookup installerLookup) {
+ this(deploymentType, defaultConfigurationBuider(), installerLookup);
+ }
+
+ public IsisInjectModule(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder, final InstallerLookup installerLookup) {
+ this.installerLookup = installerLookup;
+ this.isisConfigurationBuilder = isisConfigurationBuilder;
+ this.deploymentType = deploymentType;
+ }
+
+ /**
+ * As passed in or defaulted by the constructors.
+ */
+ @SuppressWarnings("unused")
+ @Provides
+ @Singleton
+ private DeploymentType provideDeploymentsType() {
+ return deploymentType;
+ }
+
+ /**
+ * As passed in or defaulted by the constructors.
+ */
+ @SuppressWarnings("unused")
+ @Provides
+ @Singleton
+ private IsisConfigurationBuilder providesConfigurationBuilder() {
+ return isisConfigurationBuilder;
+ }
+
+ /**
+ * As passed in or defaulted by the constructors.
+ */
+ @SuppressWarnings("unused")
+ @Provides
+ @Singleton
+ @Inject
+ private InstallerLookup providesInstallerLookup(final IsisConfigurationBuilder configBuilder) {
+ // wire up and initialize installer lookup
+ configBuilder.injectInto(installerLookup);
+ installerLookup.init();
+ return installerLookup;
+ }
+
+ /**
+ * Adjustment (as per GOOS book)
+ */
+ public void addViewerNames(final List<String> viewerNames) {
+ this.viewerNames.addAll(viewerNames);
+ }
+
+ @Override
+ protected void configure() {
+ requireBinding(DeploymentType.class);
+ requireBinding(IsisConfigurationBuilder.class);
+ requireBinding(InstallerLookup.class);
+ }
+
+ @SuppressWarnings("unused")
+ @Provides
+ @Inject
+ @Singleton
+ private IsisSystemFactory provideIsisSystemFactory(final InstallerLookup installerLookup) {
+ final IsisSystemThatUsesInstallersFactory systemFactory = new IsisSystemThatUsesInstallersFactory(installerLookup);
+ systemFactory.init();
+ return systemFactory;
+ }
+
+ @Provides
+ @Inject
+ @Singleton
+ protected IsisSystem provideIsisSystem(final DeploymentType deploymentType, final IsisSystemFactory systemFactory) {
+ final IsisSystem system = systemFactory.createSystem(deploymentType);
+ system.init();
+ return system;
+ }
+
+ public static class ViewerList {
+ private final List<IsisViewer> viewers;
+
+ public ViewerList(final List<IsisViewer> viewers) {
+ this.viewers = Collections.unmodifiableList(viewers);
+ }
+
+ public List<IsisViewer> getViewers() {
+ return viewers;
+ }
+ }
+
+ @SuppressWarnings("unused")
+ @Provides
+ @Inject
+ @Singleton
+ private ViewerList lookupViewers(final InstallerLookup installerLookup, final DeploymentType deploymentType) {
+
+ final List<String> viewersToStart = Lists.newArrayList(viewerNames);
+ deploymentType.addDefaultViewer(viewersToStart);
+
+ final List<IsisViewer> viewers = Lists.newArrayList();
+ for (final String requestedViewer : viewersToStart) {
+ final IsisViewerInstaller viewerInstaller = installerLookup.viewerInstaller(requestedViewer);
+ final IsisViewer viewer = viewerInstaller.createViewer();
+ viewers.add(viewer);
+ }
+ return new ViewerList(viewers);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisModule.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisModule.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisModule.java
deleted file mode 100644
index 1326ccf..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisModule.java
+++ /dev/null
@@ -1,189 +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.runtime.runner;
-
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-import com.google.inject.Provides;
-import com.google.inject.Singleton;
-
-import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderDefault;
-import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
-import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
-import org.apache.isis.core.runtime.installerregistry.installerapi.IsisViewerInstaller;
-import org.apache.isis.core.runtime.installers.InstallerLookupDefault;
-import org.apache.isis.core.runtime.system.DeploymentType;
-import org.apache.isis.core.runtime.system.IsisSystem;
-import org.apache.isis.core.runtime.system.IsisSystemFactory;
-import org.apache.isis.core.runtime.systemusinginstallers.IsisSystemThatUsesInstallersFactory;
-import org.apache.isis.core.runtime.viewer.IsisViewer;
-
-public class IsisModule extends AbstractModule {
-
- private final DeploymentType deploymentType;
- private final InstallerLookup installerLookup;
- private final IsisConfigurationBuilder isisConfigurationBuilder;
-
- private final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers = Lists.newArrayList();
- private final List<String> viewerNames = Lists.newArrayList();
-
- private static InstallerLookupDefault defaultInstallerLookup() {
- return new InstallerLookupDefault();
- }
-
- private static IsisConfigurationBuilderDefault defaultConfigurationBuider() {
- return new IsisConfigurationBuilderDefault();
- }
-
- public IsisModule(final DeploymentType deploymentType) {
- this(deploymentType, defaultConfigurationBuider(), defaultInstallerLookup());
- }
-
- public IsisModule(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder) {
- this(deploymentType, isisConfigurationBuilder, defaultInstallerLookup());
- }
-
- public IsisModule(final DeploymentType deploymentType, final InstallerLookup installerLookup) {
- this(deploymentType, defaultConfigurationBuider(), installerLookup);
- }
-
- public IsisModule(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder, final InstallerLookup installerLookup) {
- this.installerLookup = installerLookup;
- this.isisConfigurationBuilder = isisConfigurationBuilder;
- this.deploymentType = deploymentType;
- }
-
- /**
- * As passed in or defaulted by the constructors.
- */
- @SuppressWarnings("unused")
- @Provides
- @Singleton
- private DeploymentType provideDeploymentsType() {
- return deploymentType;
- }
-
- /**
- * As passed in or defaulted by the constructors.
- */
- @SuppressWarnings("unused")
- @Provides
- @Singleton
- private IsisConfigurationBuilder providesConfigurationBuilder() {
- return primeConfiguration(isisConfigurationBuilder);
- }
-
- private IsisConfigurationBuilder primeConfiguration(final IsisConfigurationBuilder configBuilder) {
- for (final IsisConfigurationBuilderPrimer isisConfigurationBuilderPrimer : isisConfigurationBuilderPrimers) {
- isisConfigurationBuilderPrimer.primeConfigurationBuilder(configBuilder);
- }
- return configBuilder;
- }
-
- /**
- * As passed in or defaulted by the constructors.
- */
- @SuppressWarnings("unused")
- @Provides
- @Singleton
- @Inject
- private InstallerLookup providesInstallerLookup(final IsisConfigurationBuilder configBuilder) {
- // wire up and initialize installer lookup
- configBuilder.injectInto(installerLookup);
- installerLookup.init();
- return installerLookup;
- }
-
- /**
- * Adjustment (as per GOOS book)
- */
- public void addConfigurationPrimers(final List<? extends IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers) {
- this.isisConfigurationBuilderPrimers.addAll(isisConfigurationBuilderPrimers);
- }
-
- /**
- * Adjustment (as per GOOS book)
- */
- public void addViewerNames(final List<String> viewerNames) {
- this.viewerNames.addAll(viewerNames);
- }
-
- @Override
- protected void configure() {
- requireBinding(DeploymentType.class);
- requireBinding(IsisConfigurationBuilder.class);
- requireBinding(InstallerLookup.class);
- }
-
- @SuppressWarnings("unused")
- @Provides
- @Inject
- @Singleton
- private IsisSystemFactory provideIsisSystemFactory(final InstallerLookup installerLookup) {
- final IsisSystemThatUsesInstallersFactory systemFactory = new IsisSystemThatUsesInstallersFactory(installerLookup);
- systemFactory.init();
- return systemFactory;
- }
-
- @Provides
- @Inject
- @Singleton
- protected IsisSystem provideIsisSystem(final DeploymentType deploymentType, final IsisSystemFactory systemFactory) {
- final IsisSystem system = systemFactory.createSystem(deploymentType);
- system.init();
- return system;
- }
-
- public static class ViewerList {
- private final List<IsisViewer> viewers;
-
- public ViewerList(final List<IsisViewer> viewers) {
- this.viewers = Collections.unmodifiableList(viewers);
- }
-
- public List<IsisViewer> getViewers() {
- return viewers;
- }
- }
-
- @SuppressWarnings("unused")
- @Provides
- @Inject
- @Singleton
- private ViewerList lookupViewers(final InstallerLookup installerLookup, final DeploymentType deploymentType) {
-
- final List<String> viewersToStart = Lists.newArrayList(viewerNames);
- deploymentType.addDefaultViewer(viewersToStart);
-
- final List<IsisViewer> viewers = Lists.newArrayList();
- for (final String requestedViewer : viewersToStart) {
- final IsisViewerInstaller viewerInstaller = installerLookup.viewerInstaller(requestedViewer);
- final IsisViewer viewer = viewerInstaller.createViewer();
- viewers.add(viewer);
- }
- return new ViewerList(viewers);
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
index 33d0188..775457f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
@@ -31,6 +31,7 @@ import org.apache.commons.cli.ParseException;
import org.apache.isis.core.commons.config.ConfigurationConstants;
import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
import org.apache.isis.core.commons.config.IsisConfigurationBuilderDefault;
+import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
import org.apache.isis.core.runtime.installers.InstallerLookupDefault;
import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
@@ -55,6 +56,7 @@ import org.apache.isis.core.runtime.runner.opts.OptionValidator;
import org.apache.isis.core.runtime.runner.opts.OptionValidatorForPersistor;
import org.apache.isis.core.runtime.runner.opts.OptionValidatorForViewers;
import org.apache.isis.core.runtime.system.DeploymentType;
+import org.apache.log4j.Logger;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
@@ -63,6 +65,8 @@ import com.google.inject.Injector;
public class IsisRunner {
+ private static final Logger LOG = Logger.getLogger(IsisRunner.class);
+
private final IsisLoggingConfigurer loggingConfigurer = new IsisLoggingConfigurer();
private final String[] args;
@@ -73,7 +77,7 @@ public class IsisRunner {
private final List<OptionHandler> optionHandlers = Lists.newArrayList();
private final List<OptionValidator> validators = Lists.newArrayList();
- private IsisConfigurationBuilder isisConfigurationBuilder = new IsisConfigurationBuilderDefault();
+ private IsisConfigurationBuilder isisConfigurationBuilder;
private Injector globalInjector;;
@@ -82,19 +86,17 @@ public class IsisRunner {
// ///////////////////////////////////////////////////////////////////////////////////////
public IsisRunner(final String[] args, final OptionHandlerDeploymentType optionHandlerDeploymentType) {
-
this.args = args;
this.optionHandlerDeploymentType = optionHandlerDeploymentType;
// setup logging immediately
loggingConfigurer.configureLogging(determineConfigDirectory(), args);
-
this.installerLookup = new InstallerLookupDefault();
- addOptionHandler(optionHandlerDeploymentType);
this.optionHandlerViewer = addStandardOptionHandlersAndValidators(this.installerLookup);
}
+ // REVIEW is this something that IsisConfigBuilder should know about?
private String determineConfigDirectory() {
if (new File(ConfigurationConstants.WEBINF_FULL_DIRECTORY).exists()) {
return ConfigurationConstants.WEBINF_FULL_DIRECTORY;
@@ -197,10 +199,28 @@ public class IsisRunner {
return true;
}
+ public IsisConfigurationBuilder getStartupConfiguration() {
+ return isisConfigurationBuilder;
+ }
+
+ public void primeConfigurationWithCommandLineOptions() {
+ for (final IsisConfigurationBuilderPrimer isisConfigurationBuilderPrimer : optionHandlers) {
+ LOG.debug("priming configurations for " + isisConfigurationBuilderPrimer);
+ isisConfigurationBuilderPrimer.primeConfigurationBuilder(isisConfigurationBuilder);
+ }
+ }
+
+ public void loadInitialProperties() {
+ isisConfigurationBuilder.addDefaultConfigurationResources();
+ }
+
+
// ///////////////////////////////////////////////////////////////////////////////////////
// Bootstrapping
// ///////////////////////////////////////////////////////////////////////////////////////
+ // TODO remove and use is desktop runner
+
public final void bootstrap(final IsisBootstrapper bootstrapper) {
final DeploymentType deploymentType = optionHandlerDeploymentType.getDeploymentType();
@@ -208,11 +228,12 @@ public class IsisRunner {
this.globalInjector = createGuiceInjector(deploymentType, isisConfigurationBuilder, installerLookup, optionHandlers);
bootstrapper.bootstrap(globalInjector);
+ isisConfigurationBuilder.lockConiguration();
+ isisConfigurationBuilder.dumpResourcesToLog();
}
private Injector createGuiceInjector(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder, final InstallerLookup installerLookup, final List<OptionHandler> optionHandlers) {
- final IsisModule isisModule = new IsisModule(deploymentType, isisConfigurationBuilder, installerLookup);
- isisModule.addConfigurationPrimers(optionHandlers);
+ final IsisInjectModule isisModule = new IsisInjectModule(deploymentType, isisConfigurationBuilder, installerLookup);
isisModule.addViewerNames(optionHandlerViewer.getViewerNames());
return Guice.createInjector(isisModule);
}
@@ -226,7 +247,7 @@ public class IsisRunner {
}
private OptionHandlerViewer addStandardOptionHandlersAndValidators(final InstallerLookup installerLookup) {
-
+ addOptionHandler(optionHandlerDeploymentType);
addOptionHandler(new OptionHandlerConfiguration());
OptionHandlerPersistor optionHandlerPersistor;
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
----------------------------------------------------------------------
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
index 60a7460..2a3c668 100644
--- 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
@@ -41,7 +41,7 @@ import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
import org.apache.isis.core.runtime.installers.InstallerLookupDefault;
import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
-import org.apache.isis.core.runtime.runner.IsisModule;
+import org.apache.isis.core.runtime.runner.IsisInjectModule;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.IsisSystem;
import org.apache.isis.core.runtime.system.SystemConstants;
@@ -97,6 +97,8 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
primeConfigurationBuilder(isisConfigurationBuilder, servletContext);
+ isisConfigurationBuilder.addDefaultConfigurationResources();
+
final DeploymentType deploymentType = determineDeploymentType(isisConfigurationBuilder, servletContext);
addConfigurationResourcesForWebApps(isisConfigurationBuilder);
@@ -111,7 +113,8 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
injector = createGuiceInjector(isisConfigurationBuilder, deploymentType, installerLookup);
final IsisSystem system = injector.getInstance(IsisSystem.class);
-
+
+ isisConfigurationBuilder.lockConiguration();
isisConfigurationBuilder.dumpResourcesToLog();
servletContext.setAttribute(WebAppConstants.ISIS_SYSTEM_KEY, system);
@@ -123,17 +126,20 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
}
private Injector createGuiceInjector(final IsisConfigurationBuilder isisConfigurationBuilder, final DeploymentType deploymentType, final InstallerLookup installerLookup) {
- final IsisModule isisModule = new IsisModule(deploymentType, isisConfigurationBuilder, installerLookup);
+ final IsisInjectModule isisModule = new IsisInjectModule(deploymentType, isisConfigurationBuilder, installerLookup);
return Guice.createInjector(isisModule);
}
@SuppressWarnings("unchecked")
private void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder, final ServletContext servletContext) {
- final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers = (List<IsisConfigurationBuilderPrimer>) servletContext.getAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY);
+ LOG.info("loading properties from option handlers");
+ final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers =
+ (List<IsisConfigurationBuilderPrimer>) servletContext.getAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY);
if (isisConfigurationBuilderPrimers == null) {
return;
}
for (final IsisConfigurationBuilderPrimer isisConfigurationBuilderPrimer : isisConfigurationBuilderPrimers) {
+ LOG.debug("priming configurations for " + isisConfigurationBuilderPrimer);
isisConfigurationBuilderPrimer.primeConfigurationBuilder(isisConfigurationBuilder);
}
}
@@ -150,9 +156,7 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
*/
private DeploymentType determineDeploymentType(final IsisConfigurationBuilder isisConfigurationBuilder, final ServletContext servletContext) {
String deploymentTypeStr = null;
- if (deploymentTypeStr == null) {
- deploymentTypeStr = servletContext.getInitParameter(WebAppConstants.DEPLOYMENT_TYPE_KEY);
- }
+ deploymentTypeStr = servletContext.getInitParameter(WebAppConstants.DEPLOYMENT_TYPE_KEY);
if (deploymentTypeStr == null) {
deploymentTypeStr = servletContext.getInitParameter(SystemConstants.DEPLOYMENT_TYPE_KEY);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
index deb7b89..72e41dd 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
@@ -26,6 +26,7 @@ import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.webapp.WebAppContext;
+import org.apache.isis.core.commons.config.IsisConfigurationBuilderDefault;
import org.apache.isis.core.commons.lang.ArrayUtils;
import org.apache.isis.core.commons.lang.StringUtils;
import org.apache.isis.core.runtime.runner.Constants;
@@ -80,20 +81,25 @@ public class WebServer {
public void run(final String[] args) {
final IsisRunner runner = new IsisRunner(args, new OptionHandlerDeploymentTypeWebServer());
+ addOptionHandlersAndValidators(runner);
+ if (!runner.parseAndValidate()) {
+ return;
+ }
+ runner.setConfigurationBuilder(new IsisConfigurationBuilderDefault());
+ runner.primeConfigurationWithCommandLineOptions();
+ runner.loadInitialProperties();
+
+ final WebServerBootstrapper bootstrapper = new WebServerBootstrapper(runner);
+ bootstrapper.bootstrap(null);
+ jettyServer = bootstrapper.getJettyServer();
+ }
+ private void addOptionHandlersAndValidators(IsisRunner runner) {
// adjustments
runner.addOptionHandler(new OptionHandlerPort());
runner.addOptionHandler(new OptionHandlerAddress());
runner.addOptionHandler(new OptionHandlerResourceBase());
runner.addOptionHandler(new OptionHandlerStartupMode());
-
- if (!runner.parseAndValidate()) {
- return;
- }
-
- final WebServerBootstrapper bootstrapper = new WebServerBootstrapper(runner);
- runner.bootstrap(bootstrapper);
- jettyServer = bootstrapper.getJettyServer();
}
public void stop() {
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java
index 7b93799..d3bd971 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServerBootstrapper.java
@@ -44,9 +44,11 @@ import org.apache.isis.core.runtime.runner.IsisBootstrapper;
import org.apache.isis.core.runtime.runner.IsisRunner;
import org.apache.isis.core.webapp.WebAppConstants;
import org.apache.isis.core.webserver.WebServer.StartupMode;
+import org.apache.log4j.Logger;
final class WebServerBootstrapper implements IsisBootstrapper {
+ private static final Logger LOG = Logger.getLogger(WebServerBootstrapper.class);
private static final String SRC_MAIN_WEBAPP = "src/main/webapp";
private final IsisRunner runner;
@@ -63,7 +65,7 @@ final class WebServerBootstrapper implements IsisBootstrapper {
@Override
public void bootstrap(final Injector injector) {
- final IsisConfigurationBuilder isisConfigurationBuilder = injector.getInstance(IsisConfigurationBuilder.class);
+ final IsisConfigurationBuilder isisConfigurationBuilder = runner.getStartupConfiguration();
// we don't actually bootstrap the system here; instead we expect it to
// be bootstrapped
@@ -72,6 +74,7 @@ final class WebServerBootstrapper implements IsisBootstrapper {
final int port = configuration.getInteger(EMBEDDED_WEB_SERVER_PORT_KEY, EMBEDDED_WEB_SERVER_PORT_DEFAULT);
final String webappContextPath = configuration.getString(EMBEDDED_WEB_SERVER_RESOURCE_BASE_KEY, EMBEDDED_WEB_SERVER_RESOURCE_BASE_DEFAULT);
final StartupMode startupMode = StartupMode.lookup(configuration.getString(EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY, EMBEDDED_WEB_SERVER_STARTUP_MODE_DEFAULT));
+ // TODO get and use the address
jettyServer = new Server(port);
final WebAppContext context = new WebAppContext(SRC_MAIN_WEBAPP, webappContextPath);
@@ -80,6 +83,7 @@ final class WebServerBootstrapper implements IsisBootstrapper {
jettyServer.setHandler(context);
+ LOG.info("starting Jetty on port " + port + " to serve webapp");
try {
jettyServer.start();
if (startupMode.isForeground()) {
@@ -97,7 +101,7 @@ final class WebServerBootstrapper implements IsisBootstrapper {
/**
* Bound to the {@link WebAppContext} so that they can be used when
* bootstrapping.
- *
+ *
* @param context
*/
@SuppressWarnings("unchecked")
http://git-wip-us.apache.org/repos/asf/isis/blob/18ab2b56/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerDeploymentTypeWebServer.java
----------------------------------------------------------------------
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerDeploymentTypeWebServer.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerDeploymentTypeWebServer.java
index f543175..9bddfb8 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerDeploymentTypeWebServer.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/internal/OptionHandlerDeploymentTypeWebServer.java
@@ -31,6 +31,6 @@ public class OptionHandlerDeploymentTypeWebServer extends OptionHandlerDeploymen
private static final String TYPES = TYPE_SERVER_EXPLORATION + "; " + TYPE_SERVER_PROTOTYPE + " (default); " + TYPE_SERVER;
public OptionHandlerDeploymentTypeWebServer() {
- super(DeploymentType.SERVER, TYPES);
+ super(DeploymentType.SERVER_PROTOTYPE, TYPES);
}
}