JAMES-2388 create the configuration before starting injection

  This will allow to create different injection profiles based on the
  configuration


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5883efbf
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5883efbf
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5883efbf

Branch: refs/heads/master
Commit: 5883efbfd8d2f1ff282d1f12e27f2b64fe6c71a5
Parents: e440858
Author: Matthieu Baechler <matth...@apache.org>
Authored: Fri Apr 27 16:01:28 2018 +0200
Committer: benwa <btell...@linagora.com>
Committed: Fri May 4 13:47:46 2018 +0700

----------------------------------------------------------------------
 .../smtp/host/CassandraJamesSmtpHostSystem.java |  12 ++-
 .../cli/SieveQuotaCommandsIntegrationTest.java  |   4 +-
 .../server/core/MissingArgumentException.java   |  28 +++++
 .../core/configuration/Configuration.java       | 101 ++++++++++++++++++
 .../configuration/ConfigurationProvider.java    |  30 ++++++
 .../FileConfigurationProvider.java              |  98 ++++++++++++++++++
 .../server/core/filesystem/FileSystemImpl.java  |   3 -
 .../apache/james/CassandraJamesServerMain.java  |   4 +-
 .../modules/data/CassandraDomainListModule.java |   2 +-
 .../CassandraRecipientRewriteTableModule.java   |   2 +-
 .../data/CassandraUsersRepositoryModule.java    |   2 +-
 .../apache/james/CassandraJamesServerTest.java  |   4 +-
 .../org/apache/james/CassandraJmapTestRule.java |  21 +++-
 .../org/apache/james/CassandraWithTikaTest.java |   4 +-
 .../james/DefaultCassandraJamesServerTest.java  |   6 +-
 .../james/JamesCapabilitiesServerTest.java      |  14 ++-
 .../apache/james/TempFilesystemTestRule.java    |   7 +-
 .../modules/CassandraJmapServerModule.java      |  14 +--
 .../james/CassandraLdapJamesServerMain.java     |   4 +-
 .../james/data/LdapUsersRepositoryModule.java   |   2 +-
 .../james/CassandraLdapJamesServerTest.java     |   2 +-
 .../apache/james/CassandraLdapJmapTestRule.java |  24 +++--
 server/container/guice/configuration/pom.xml    |   4 +
 .../james/utils/ConfigurationProvider.java      |  30 ------
 .../java/org/apache/james/GuiceJamesServer.java |   5 +-
 .../james/modules/CommonServicesModule.java     |  32 +++---
 .../james/modules/MissingArgumentException.java |  28 -----
 .../server/ConfigurationProviderModule.java     |  34 ------
 .../james/modules/server/DNSServiceModule.java  |   2 +-
 ...ltProcessorsConfigurationProviderModule.java |   2 +-
 .../server/MailStoreRepositoryModule.java       |   2 +-
 .../james/utils/FileConfigurationProvider.java  | 103 -------------------
 .../apache/james/AbstractJamesServerTest.java   |   2 +-
 .../james/modules/TestFilesystemModule.java     |  61 -----------
 .../utils/FileConfigurationProviderTest.java    |  12 ++-
 .../utils/InMemoryMailRepositoryStoreTest.java  |  15 ++-
 .../james/modules/data/JPADomainListModule.java |   2 +-
 .../data/JPARecipientRewriteTableModule.java    |   2 +-
 .../modules/data/JPAUsersRepositoryModule.java  |   2 +-
 .../org/apache/james/JPAJamesServerMain.java    |   4 +-
 .../org/apache/james/JPAJamesServerTest.java    |  16 ++-
 .../james/JamesCapabilitiesServerTest.java      |  14 ++-
 .../org/apache/james/JPAJamesServerMain.java    |   4 +-
 .../org/apache/james/JPAJamesServerTest.java    |  12 ++-
 .../modules/mailbox/DefaultEventModule.java     |   2 +-
 .../server/CamelMailetContainerModule.java      |   2 +-
 .../org/apache/james/MemoryJamesServerMain.java |   4 +-
 .../james/modules/data/MemoryDataModule.java    |   2 +-
 .../james/DefaultMemoryJamesServerTest.java     |   6 +-
 .../org/apache/james/GuiceJamesServerTest.java  |   3 +-
 .../org/apache/james/MemoryJamesServerTest.java |   4 +-
 .../org/apache/james/MemoryJmapTestRule.java    |  15 ++-
 .../modules/protocols/IMAPServerModule.java     |   2 +-
 .../java/org/apache/james/jmap/JMAPModule.java  |   2 +-
 .../james/AbstractJmapJamesServerTest.java      |   2 +-
 .../modules/protocols/LMTPServerModule.java     |   2 +-
 .../protocols/ManageSieveServerModule.java      |   2 +-
 .../modules/protocols/POP3ServerModule.java     |   2 +-
 .../modules/protocols/SMTPServerModule.java     |   2 +-
 .../mailets/TemporaryFilesystemModule.java      |  95 -----------------
 .../james/mailets/TemporaryJamesServer.java     |  37 ++++++-
 .../CassandraForwardIntegrationTest.java        |   4 +-
 .../CassandraGetMailboxesMethodTest.java        |   4 +-
 .../CassandraGetMessageListMethodTest.java      |   4 +-
 .../CassandraGetVacationResponseTest.java       |   4 +-
 .../CassandraJmapAuthenticationTest.java        |   4 +-
 .../jmap/cassandra/CassandraJmapExtension.java  |  13 ++-
 .../cassandra/CassandraProvisioningTest.java    |   4 +-
 .../cassandra/CassandraSendMDNMethodTest.java   |   4 +-
 .../CassandraSetMailboxesMethodTest.java        |   4 +-
 .../CassandraSetMessagesMethodTest.java         |   4 +-
 .../CassandraSetVacationResponseTest.java       |   4 +-
 .../CassandraVacationIntegrationTest.java       |   4 +-
 .../CassandraVacationRelayIntegrationTest.java  |   4 +-
 .../cassandra/cucumber/CassandraStepdefs.java   |  10 +-
 .../james/jmap/JMAPAuthenticationTest.java      |   3 +-
 .../org/apache/james/jmap/ProvisioningTest.java |   3 +-
 .../james/jmap/VacationIntegrationTest.java     |   3 +-
 .../jmap/VacationRelayIntegrationTest.java      |   3 +-
 .../integration/ForwardIntegrationTest.java     |   3 +-
 .../integration/GetMailboxesMethodTest.java     |   3 +-
 .../integration/GetMessageListMethodTest.java   |   3 +-
 .../integration/GetVacationResponseTest.java    |   3 +-
 .../methods/integration/SendMDNMethodTest.java  |   3 +-
 .../integration/SetMailboxesMethodTest.java     |   4 +-
 .../integration/SetMessagesMethodTest.java      |   2 +-
 .../integration/SetVacationResponseTest.java    |   3 +-
 .../memory/MemoryForwardIntegrationTest.java    |   4 +-
 .../memory/MemoryGetMailboxesMethodTest.java    |   4 +-
 .../memory/MemoryGetMessageListMethodTest.java  |   4 +-
 .../MemoryGetVacationResponseMethodTest.java    |   4 +-
 .../memory/MemoryJmapAuthenticationTest.java    |   4 +-
 .../james/jmap/memory/MemoryJmapExtension.java  |  19 ++--
 .../jmap/memory/MemoryProvisioningTest.java     |   4 +-
 .../jmap/memory/MemorySendMDNMethodTest.java    |   3 +-
 .../memory/MemorySetMailboxesMethodTest.java    |   4 +-
 .../memory/MemorySetMessagesMethodTest.java     |   3 +-
 .../MemorySetVacationResponseMethodTest.java    |   4 +-
 .../memory/MemoryVacationIntegrationTest.java   |   4 +-
 .../MemoryVacationRelayIntegrationTest.java     |   4 +-
 .../jmap/memory/cucumber/MemoryStepdefs.java    |  13 ++-
 .../jmap/servers/MemoryJmapServerModule.java    |  43 --------
 102 files changed, 621 insertions(+), 567 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
 
b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
index 51c942a..ac10a8f 100644
--- 
a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
+++ 
b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
@@ -32,6 +32,7 @@ import 
org.apache.james.modules.protocols.ProtocolHandlerModule;
 import org.apache.james.mpt.monitor.SystemLoggingMonitor;
 import org.apache.james.mpt.session.ExternalSessionFactory;
 import org.apache.james.mpt.smtp.SmtpHostSystem;
+import org.apache.james.server.core.configuration.Configuration;
 import org.apache.james.utils.DataProbeImpl;
 import org.junit.rules.TemporaryFolder;
 
@@ -101,10 +102,15 @@ public class CassandraJamesSmtpHostSystem extends 
ExternalSessionFactory impleme
         return inMemoryDNSService;
     }
 
-    protected GuiceJamesServer createJamesServer() {
-        return new GuiceJamesServer()
+    protected GuiceJamesServer createJamesServer() throws Exception {
+        Configuration configuration = Configuration.builder()
+            .workingDirectory(folder.newFolder())
+            .configurationFromClasspath()
+            .build();
+
+        return new GuiceJamesServer(configuration)
             .combineWith(CassandraJamesServerMain.CASSANDRA_SERVER_MODULE, 
CassandraJamesServerMain.PROTOCOLS, new ProtocolHandlerModule())
-            .overrideWith(new CassandraJmapServerModule(folder::getRoot, 
embeddedElasticSearch, cassandraHost, cassandraPort),
+            .overrideWith(new CassandraJmapServerModule(embeddedElasticSearch, 
cassandraHost, cassandraPort),
                 (binder) -> 
binder.bind(DNSService.class).toInstance(inMemoryDNSService));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
 
b/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
index 4e086ab..ac7d5b4 100644
--- 
a/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
+++ 
b/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
@@ -26,7 +26,6 @@ import org.apache.james.GuiceJamesServer;
 import org.apache.james.MemoryJmapTestRule;
 import org.apache.james.cli.util.OutputCapture;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
-import org.apache.james.modules.TestFilesystemModule;
 import org.apache.james.modules.protocols.SieveProbeImpl;
 import org.apache.james.modules.server.JMXServerModule;
 import org.apache.james.sieverepository.api.exception.QuotaNotFoundException;
@@ -53,8 +52,7 @@ public class SieveQuotaCommandsIntegrationTest {
     @Before
     public void setUp() throws Exception {
         guiceJamesServer = memoryJmap.jmapServer(new JMXServerModule(),
-            binder -> 
binder.bind(ListeningMessageSearchIndex.class).toInstance(mock(ListeningMessageSearchIndex.class)))
-            .overrideWith(new TestFilesystemModule(temporaryFolder));
+            binder -> 
binder.bind(ListeningMessageSearchIndex.class).toInstance(mock(ListeningMessageSearchIndex.class)));
         guiceJamesServer.start();
         outputCapture = new OutputCapture();
         sieveProbe = guiceJamesServer.getProbe(SieveProbeImpl.class);

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/core/src/main/java/org/apache/james/server/core/MissingArgumentException.java
----------------------------------------------------------------------
diff --git 
a/server/container/core/src/main/java/org/apache/james/server/core/MissingArgumentException.java
 
b/server/container/core/src/main/java/org/apache/james/server/core/MissingArgumentException.java
new file mode 100644
index 0000000..ccff818
--- /dev/null
+++ 
b/server/container/core/src/main/java/org/apache/james/server/core/MissingArgumentException.java
@@ -0,0 +1,28 @@
+/****************************************************************
+ * 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.james.server.core;
+
+public class MissingArgumentException extends RuntimeException {
+
+    public MissingArgumentException(String message) {
+        super(message);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/core/src/main/java/org/apache/james/server/core/configuration/Configuration.java
----------------------------------------------------------------------
diff --git 
a/server/container/core/src/main/java/org/apache/james/server/core/configuration/Configuration.java
 
b/server/container/core/src/main/java/org/apache/james/server/core/configuration/Configuration.java
new file mode 100644
index 0000000..233913c
--- /dev/null
+++ 
b/server/container/core/src/main/java/org/apache/james/server/core/configuration/Configuration.java
@@ -0,0 +1,101 @@
+/****************************************************************
+ * 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.james.server.core.configuration;
+
+import java.io.File;
+import java.util.Optional;
+
+import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.filesystem.api.JamesDirectoriesProvider;
+import org.apache.james.server.core.JamesServerResourceLoader;
+import org.apache.james.server.core.MissingArgumentException;
+
+public class Configuration {
+
+    public static final String WORKING_DIRECTORY = "working.directory";
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static class Builder {
+
+        private Optional<String> rootDirectory;
+        private Optional<String> configurationPath;
+
+        private Builder() {
+            rootDirectory = Optional.empty();
+            configurationPath = Optional.empty();
+        }
+
+        public Builder workingDirectory(String path) {
+            rootDirectory = Optional.of(path);
+            return this;
+        }
+
+        public Builder workingDirectory(File file) {
+            rootDirectory = Optional.of(file.getAbsolutePath());
+            return this;
+        }
+
+        public Builder useWorkingDirectoryEnvProperty() {
+            rootDirectory = Optional
+                .ofNullable(System.getProperty(WORKING_DIRECTORY));
+            if (!rootDirectory.isPresent()) {
+                throw new MissingArgumentException("Server needs a 
working.directory env entry");
+            }
+            return this;
+        }
+
+        public Builder configurationPath(String path) {
+            configurationPath = Optional.of(path);
+            return this;
+        }
+
+        public Builder configurationFromClasspath() {
+            configurationPath = Optional.of(FileSystem.CLASSPATH_PROTOCOL);
+            return this;
+        }
+
+        public Configuration build() {
+            return new Configuration(
+                rootDirectory
+                    .orElseThrow(() -> new MissingArgumentException("Server 
needs a working.directory env entry")),
+                configurationPath.orElse(FileSystem.FILE_PROTOCOL_AND_CONF));
+        }
+    }
+
+    private final String configurationPath;
+    private final JamesDirectoriesProvider directoriesProvider;
+
+    private Configuration(String rootDirectory, String configurationPath) {
+        this.configurationPath = configurationPath;
+        this.directoriesProvider = new 
JamesServerResourceLoader(rootDirectory);
+    }
+
+    public String configurationPath() {
+        return configurationPath;
+    }
+
+    public JamesDirectoriesProvider directories() {
+        return directoriesProvider;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/core/src/main/java/org/apache/james/server/core/configuration/ConfigurationProvider.java
----------------------------------------------------------------------
diff --git 
a/server/container/core/src/main/java/org/apache/james/server/core/configuration/ConfigurationProvider.java
 
b/server/container/core/src/main/java/org/apache/james/server/core/configuration/ConfigurationProvider.java
new file mode 100644
index 0000000..c1f5539
--- /dev/null
+++ 
b/server/container/core/src/main/java/org/apache/james/server/core/configuration/ConfigurationProvider.java
@@ -0,0 +1,30 @@
+/****************************************************************
+ * 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.james.server.core.configuration;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+
+public interface ConfigurationProvider {
+
+    HierarchicalConfiguration getConfiguration(String component)
+            throws ConfigurationException;
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
----------------------------------------------------------------------
diff --git 
a/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
 
b/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
new file mode 100644
index 0000000..bf818cf
--- /dev/null
+++ 
b/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
@@ -0,0 +1,98 @@
+/****************************************************************
+ * 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.james.server.core.configuration;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Optional;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.james.filesystem.api.FileSystem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
+import com.google.common.collect.Iterables;
+
+public class FileConfigurationProvider implements ConfigurationProvider {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(FileConfigurationProvider.class);
+    private static final String CONFIGURATION_FILE_SUFFIX = ".xml";
+    public static final HierarchicalConfiguration EMTY_CONFIGURATION = new 
HierarchicalConfiguration();
+
+    public static XMLConfiguration getConfig(InputStream configStream) throws 
ConfigurationException {
+        XMLConfiguration config = new XMLConfiguration();
+        config.setDelimiterParsingDisabled(true);
+        config.setAttributeSplittingDisabled(true);
+        config.load(configStream);
+        return config;
+    }
+    
+    private final FileSystem fileSystem;
+    private final String configurationPrefix;
+
+    public FileConfigurationProvider(FileSystem fileSystem, Configuration 
configuration) {
+        this.fileSystem = fileSystem;
+        this.configurationPrefix = configuration.configurationPath();
+    }
+    
+    @Override
+    public HierarchicalConfiguration getConfiguration(String component) throws 
ConfigurationException {
+        Preconditions.checkNotNull(component);
+        List<String> configPathParts = Splitter.on(".").splitToList(component);
+        Preconditions.checkArgument(!configPathParts.isEmpty());
+
+        Optional<InputStream> inputStream = 
retrieveConfigInputStream(configPathParts.get(0));
+        if (inputStream.isPresent()) {
+            return selectConfigurationPart(configPathParts,
+                getConfig(inputStream.get()));
+        }
+        return EMTY_CONFIGURATION;
+    }
+
+    private HierarchicalConfiguration selectConfigurationPart(List<String> 
configPathParts, HierarchicalConfiguration config) {
+        return selectHierarchicalConfigPart(config, 
Iterables.skip(configPathParts, 1));
+    }
+
+    private Optional<InputStream> retrieveConfigInputStream(String 
configurationFileWithoutExtension) throws ConfigurationException {
+        
Preconditions.checkArgument(!Strings.isNullOrEmpty(configurationFileWithoutExtension),
 "The configuration file name should not be empty or null");
+        try {
+            return Optional.of(
+                fileSystem.getResource(configurationPrefix + 
configurationFileWithoutExtension + CONFIGURATION_FILE_SUFFIX));
+        } catch (IOException e) {
+            LOGGER.warn("Unable to locate configuration file {}" + 
CONFIGURATION_FILE_SUFFIX + ", assuming empty configuration", 
configurationFileWithoutExtension);
+            return Optional.empty();
+        }
+    }
+
+    private HierarchicalConfiguration 
selectHierarchicalConfigPart(HierarchicalConfiguration config, Iterable<String> 
configsPathParts) {
+        HierarchicalConfiguration currentConfig = config;
+        for (String nextPathPart : configsPathParts) {
+            currentConfig = currentConfig.configurationAt(nextPathPart);
+        }
+        return currentConfig;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemImpl.java
----------------------------------------------------------------------
diff --git 
a/server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemImpl.java
 
b/server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemImpl.java
index a068f86..8416c0e 100644
--- 
a/server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemImpl.java
+++ 
b/server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemImpl.java
@@ -23,8 +23,6 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 
-import javax.inject.Inject;
-
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.filesystem.api.JamesDirectoriesProvider;
 
@@ -33,7 +31,6 @@ public class FileSystemImpl implements FileSystem {
     private final JamesDirectoriesProvider directoryProvider;
     private final ResourceFactory resourceLoader;
 
-    @Inject
     public FileSystemImpl(JamesDirectoriesProvider directoryProvider) {
         this.directoryProvider = directoryProvider;
         this.resourceLoader = new ResourceFactory(directoryProvider);

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
index d9d5a1e..b51bef7 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -49,6 +49,7 @@ import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.SwaggerRoutesModule;
 import org.apache.james.modules.server.WebAdminServerModule;
 import org.apache.james.modules.spamassassin.SpamAssassinListenerModule;
+import org.apache.james.server.core.configuration.Configuration;
 
 import com.google.inject.Module;
 import com.google.inject.util.Modules;
@@ -92,7 +93,8 @@ public class CassandraJamesServerMain {
         new SpamAssassinListenerModule());
 
     public static void main(String[] args) throws Exception {
-        GuiceJamesServer server = new GuiceJamesServer()
+        Configuration configuration = 
Configuration.builder().useWorkingDirectoryEnvProperty().build();
+        GuiceJamesServer server = new GuiceJamesServer(configuration)
                     .combineWith(CASSANDRA_SERVER_MODULE, PROTOCOLS, new 
JMXServerModule());
         server.start();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
index 1b3c912..9830600 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
@@ -25,8 +25,8 @@ import 
org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.cassandra.CassandraDomainList;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
index 4efd0cb..7943220 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
@@ -26,8 +26,8 @@ import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.cassandra.CassandraRRTModule;
 import org.apache.james.rrt.cassandra.CassandraRecipientRewriteTable;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
index f5bb2b4..b031118 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
@@ -23,10 +23,10 @@ import java.util.List;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.cassandra.CassandraUsersRepository;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
index 5b4dbd6..50b5cbe 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james;
 
+import java.io.IOException;
+
 import org.junit.ClassRule;
 import org.junit.Rule;
 
@@ -31,7 +33,7 @@ public class CassandraJamesServerTest extends 
AbstractJmapJamesServerTest {
     public CassandraJmapTestRule cassandraJmap = 
CassandraJmapTestRule.defaultTestRule();
 
     @Override
-    protected GuiceJamesServer createJamesServer() {
+    protected GuiceJamesServer createJamesServer() throws IOException {
         return cassandraJmap.jmapServer(cassandra.getModule());
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapTestRule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapTestRule.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapTestRule.java
index 36eae85..e5fe99a 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapTestRule.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapTestRule.java
@@ -18,10 +18,15 @@
  ****************************************************************/
 
 package org.apache.james;
+
+import java.io.IOException;
+
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.PDFTextExtractor;
 import org.apache.james.modules.TestESMetricReporterModule;
 import org.apache.james.modules.TestJMAPServerModule;
+import org.apache.james.server.core.configuration.Configuration;
+import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
@@ -32,22 +37,30 @@ import com.google.inject.Module;
 public class CassandraJmapTestRule implements TestRule {
 
     private static final int LIMIT_TO_3_MESSAGES = 3;
+    private final TemporaryFolder temporaryFolder;
 
     public static CassandraJmapTestRule defaultTestRule() {
         return new CassandraJmapTestRule(new EmbeddedElasticSearchRule());
     }
 
-    private GuiceModuleTestRule guiceModuleTestRule;
+    private final GuiceModuleTestRule guiceModuleTestRule;
 
     public CassandraJmapTestRule(GuiceModuleTestRule... guiceModuleTestRule) {
+        TempFilesystemTestRule tempFilesystemTestRule = new 
TempFilesystemTestRule();
+        this.temporaryFolder = tempFilesystemTestRule.getTemporaryFolder();
         this.guiceModuleTestRule =
                 AggregateGuiceModuleTestRule
                     .of(guiceModuleTestRule)
-                    .aggregate(new TempFilesystemTestRule());
+                    .aggregate(tempFilesystemTestRule);
     }
 
-    public GuiceJamesServer jmapServer(Module... additionals) {
-        return new GuiceJamesServer()
+    public GuiceJamesServer jmapServer(Module... additionals) throws 
IOException {
+        Configuration configuration = Configuration.builder()
+            .workingDirectory(temporaryFolder.newFolder())
+            .configurationFromClasspath()
+            .build();
+
+        return new GuiceJamesServer(configuration)
             .combineWith(CassandraJamesServerMain.CASSANDRA_SERVER_MODULE, 
CassandraJamesServerMain.PROTOCOLS)
             .overrideWith(binder -> 
binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
             .overrideWith(new TestJMAPServerModule(LIMIT_TO_3_MESSAGES))

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
index 479a82d..54b5bbf 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james;
 
+import java.io.IOException;
+
 import org.junit.Rule;
 
 public class CassandraWithTikaTest extends AbstractJmapJamesServerTest {
@@ -33,7 +35,7 @@ public class CassandraWithTikaTest extends 
AbstractJmapJamesServerTest {
             guiceTikaRule));
 
     @Override
-    protected GuiceJamesServer createJamesServer() {
+    protected GuiceJamesServer createJamesServer() throws IOException {
         return cassandraJmap.jmapServer(binder -> guiceTikaRule.getModule());
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java
index c2960e4..d4b2b75 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java
@@ -21,8 +21,10 @@ package org.apache.james;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import java.io.IOException;
+
 import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.utils.ConfigurationProvider;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.FailingPropertiesProvider;
 import org.apache.james.utils.PropertiesProvider;
 import org.junit.After;
@@ -42,7 +44,7 @@ public class DefaultCassandraJamesServerTest {
     private GuiceJamesServer guiceJamesServer;
 
     @Before
-    public void setUp() {
+    public void setUp() throws IOException {
         guiceJamesServer = cassandraJmap.jmapServer(cassandra.getModule())
             .overrideWith(binder -> 
binder.bind(PropertiesProvider.class).to(FailingPropertiesProvider.class))
             .overrideWith(binder -> 
binder.bind(ConfigurationProvider.class).toInstance(s -> new 
HierarchicalConfiguration()));

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
index 8572be6..fd1173b 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
@@ -22,6 +22,7 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.io.IOException;
 import java.util.EnumSet;
 
 import org.apache.activemq.store.PersistenceAdapter;
@@ -31,8 +32,8 @@ import org.apache.james.jmap.methods.GetMessageListMethod;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.modules.TestElasticSearchModule;
-import org.apache.james.modules.TestFilesystemModule;
 import org.apache.james.modules.TestJMAPServerModule;
+import org.apache.james.server.core.configuration.Configuration;
 import org.junit.After;
 import org.junit.Rule;
 import org.junit.Test;
@@ -57,14 +58,17 @@ public class JamesCapabilitiesServerTest {
         
     }
     
-    private GuiceJamesServer createCassandraJamesServer(final MailboxManager 
mailboxManager) {
+    private GuiceJamesServer createCassandraJamesServer(final MailboxManager 
mailboxManager) throws IOException {
         Module mockMailboxManager = (binder) -> 
binder.bind(MailboxManager.class).toInstance(mailboxManager);
-        
-        return new GuiceJamesServer()
+        Configuration configuration = Configuration.builder()
+            .workingDirectory(temporaryFolder.newFolder())
+            .configurationFromClasspath()
+            .build();
+
+        return new GuiceJamesServer(configuration)
             .combineWith(CassandraJamesServerMain.CASSANDRA_SERVER_MODULE, 
CassandraJamesServerMain.PROTOCOLS)
             .overrideWith((binder) -> 
binder.bind(PersistenceAdapter.class).to(MemoryPersistenceAdapter.class))
             .overrideWith(new TestElasticSearchModule(embeddedElasticSearch),
-                new TestFilesystemModule(temporaryFolder),
                 cassandraServer.getModule(),
                 new 
TestJMAPServerModule(GetMessageListMethod.DEFAULT_MAXIMUM_LIMIT),
                 mockMailboxManager);

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/test/java/org/apache/james/TempFilesystemTestRule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/TempFilesystemTestRule.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/TempFilesystemTestRule.java
index 4037f0c..54d5c12 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/TempFilesystemTestRule.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/TempFilesystemTestRule.java
@@ -19,7 +19,6 @@
 
 package org.apache.james;
 
-import org.apache.james.modules.TestFilesystemModule;
 import org.junit.rules.TemporaryFolder;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
@@ -34,6 +33,10 @@ public class TempFilesystemTestRule implements 
GuiceModuleTestRule {
         this.temporaryFolder = new TemporaryFolder();
     }
 
+    public TemporaryFolder getTemporaryFolder() {
+        return temporaryFolder;
+    }
+
     @Override
     public Statement apply(Statement base, Description description) {
         return temporaryFolder.apply(base, description);
@@ -41,7 +44,7 @@ public class TempFilesystemTestRule implements 
GuiceModuleTestRule {
 
     @Override
     public Module getModule() {
-        return new TestFilesystemModule(temporaryFolder::getRoot);
+        return binder -> { };
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
index 29434d5..ee72ccd 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
@@ -19,16 +19,12 @@
 
 package org.apache.james.modules;
 
-import java.io.File;
-import java.util.function.Supplier;
-
 import javax.inject.Singleton;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
-import org.junit.rules.TemporaryFolder;
 
 import com.datastax.driver.core.Session;
 import com.google.inject.AbstractModule;
@@ -38,27 +34,19 @@ import com.google.inject.name.Names;
 public class CassandraJmapServerModule extends AbstractModule {
 
     private static final int LIMIT_TO_3_MESSAGES = 3;
-    private final Supplier<File> fileSupplier;
     private final EmbeddedElasticSearch embeddedElasticSearch;
     private final String cassandraHost;
     private final int cassandraPort;
 
-    public CassandraJmapServerModule(Supplier<File> fileSupplier, 
EmbeddedElasticSearch embeddedElasticSearch, String cassandraHost, int 
cassandraPort) {
-        this.fileSupplier = fileSupplier;
+    public CassandraJmapServerModule(EmbeddedElasticSearch 
embeddedElasticSearch, String cassandraHost, int cassandraPort) {
         this.embeddedElasticSearch = embeddedElasticSearch;
         this.cassandraHost = cassandraHost;
         this.cassandraPort = cassandraPort;
     }
 
-    public CassandraJmapServerModule(TemporaryFolder temporaryFolder, 
EmbeddedElasticSearch embeddedElasticSearch, String cassandraHost, int 
cassandraPort) {
-        this(temporaryFolder::getRoot, embeddedElasticSearch, cassandraHost, 
cassandraPort);
-    }
-
-
     @Override
     protected void configure() {
         install(new TestElasticSearchModule(embeddedElasticSearch));
-        install(new TestFilesystemModule(fileSupplier));
         install(new TestJMAPServerModule(LIMIT_TO_3_MESSAGES));
         install(binder -> 
binder.bind(TextExtractor.class).to(DefaultTextExtractor.class));
         install(binder -> 
binder.bindConstant().annotatedWith(Names.named("cassandraHost")).to(cassandraHost));

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java
 
b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java
index 042cb2b..61230f8 100644
--- 
a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java
+++ 
b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java
@@ -21,6 +21,7 @@ package org.apache.james;
 
 import org.apache.james.data.LdapUsersRepositoryModule;
 import org.apache.james.modules.server.JMXServerModule;
+import org.apache.james.server.core.configuration.Configuration;
 
 import com.google.inject.Module;
 import com.google.inject.util.Modules;
@@ -31,7 +32,8 @@ public class CassandraLdapJamesServerMain {
         .with(new LdapUsersRepositoryModule());
 
     public static void main(String[] args) throws Exception {
-        GuiceJamesServer server = new GuiceJamesServer()
+        Configuration configuration = 
Configuration.builder().useWorkingDirectoryEnvProperty().build();
+        GuiceJamesServer server = new GuiceJamesServer(configuration)
             .combineWith(cassandraLdapServerModule, new JMXServerModule());
 
         server.start();

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
 
b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
index adfa373..3ef84fc 100644
--- 
a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
+++ 
b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
@@ -21,10 +21,10 @@ package org.apache.james.data;
 import java.util.List;
 
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
 
b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
index de2ac6c..9e7150f 100644
--- 
a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
+++ 
b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
@@ -48,7 +48,7 @@ public class CassandraLdapJamesServerTest extends 
AbstractJmapJamesServerTest {
     public RuleChain ruleChain = 
RuleChain.outerRule(ldapContainer).around(cassandraLdapJmap);
 
     @Override
-    protected GuiceJamesServer createJamesServer() {
+    protected GuiceJamesServer createJamesServer() throws IOException {
         ldapContainer.start();
         return cassandraLdapJmap.jmapServer(ldapContainer.getLdapHost());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
 
b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
index 25a7dca..3a81da6 100644
--- 
a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
+++ 
b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
@@ -19,12 +19,16 @@
 
 package org.apache.james;
 
+import java.io.IOException;
+
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.plist.PropertyListConfiguration;
 import org.apache.james.http.jetty.ConfigurationException;
 import org.apache.james.modules.TestJMAPServerModule;
-import org.apache.james.utils.ConfigurationProvider;
-import org.apache.james.utils.FileConfigurationProvider;
+import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
+import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
@@ -42,17 +46,25 @@ public class CassandraLdapJmapTestRule implements TestRule {
             AggregateGuiceModuleTestRule.of(new EmbeddedElasticSearchRule(), 
new DockerCassandraRule()));
     }
 
-    private GuiceModuleTestRule guiceModuleTestRule;
+    private final TemporaryFolder temporaryFolder;
+    private final GuiceModuleTestRule guiceModuleTestRule;
 
     public CassandraLdapJmapTestRule(GuiceModuleTestRule... 
guiceModuleTestRule) {
+        TempFilesystemTestRule tempFilesystemTestRule = new 
TempFilesystemTestRule();
+        temporaryFolder = tempFilesystemTestRule.getTemporaryFolder();
         this.guiceModuleTestRule =
             AggregateGuiceModuleTestRule
                 .of(guiceModuleTestRule)
-                .aggregate(new TempFilesystemTestRule());
+                .aggregate(tempFilesystemTestRule);
     }
 
-    public GuiceJamesServer jmapServer(String ldapIp, Module... additionals) {
-        return new GuiceJamesServer()
+    public GuiceJamesServer jmapServer(String ldapIp, Module... additionals) 
throws IOException {
+        Configuration configuration = Configuration.builder()
+            .workingDirectory(temporaryFolder.newFolder())
+            .configurationFromClasspath()
+            .build();
+
+        return new GuiceJamesServer(configuration)
             
.combineWith(CassandraLdapJamesServerMain.cassandraLdapServerModule,
                 binder -> 
binder.bind(String.class).annotatedWith(Names.named("ldapIp")).toInstance(ldapIp))
             .overrideWith(new TestJMAPServerModule(LIMIT_TO_3_MESSAGES))

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/configuration/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/configuration/pom.xml 
b/server/container/guice/configuration/pom.xml
index 51a505b..52cbf2f 100644
--- a/server/container/guice/configuration/pom.xml
+++ b/server/container/guice/configuration/pom.xml
@@ -34,6 +34,10 @@
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-filesystem-api</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationProvider.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationProvider.java
 
b/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationProvider.java
deleted file mode 100644
index cf3126e..0000000
--- 
a/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationProvider.java
+++ /dev/null
@@ -1,30 +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.james.utils;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-
-public interface ConfigurationProvider {
-
-    HierarchicalConfiguration getConfiguration(String component)
-            throws ConfigurationException;
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java
index 510a85b..6b774c5 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java
@@ -26,6 +26,7 @@ import javax.annotation.PreDestroy;
 import org.apache.james.modules.CommonServicesModule;
 import org.apache.james.modules.MailetProcessingModule;
 import org.apache.james.onami.lifecycle.Stager;
+import org.apache.james.server.core.configuration.Configuration;
 import org.apache.james.utils.ConfigurationsPerformer;
 import org.apache.james.utils.GuiceProbe;
 import org.apache.james.utils.GuiceProbeProvider;
@@ -45,9 +46,9 @@ public class GuiceJamesServer {
     private GuiceProbeProvider guiceProbeProvider;
     private boolean isStarted = false;
 
-    public GuiceJamesServer() {
+    public GuiceJamesServer(Configuration configuration) {
         this(Modules.combine(
-                        new CommonServicesModule(),
+                        new CommonServicesModule(configuration),
                         new MailetProcessingModule()));
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
index aa44802..986a65a 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
@@ -19,49 +19,52 @@
 
 package org.apache.james.modules;
 
-import java.util.Optional;
-
 import javax.inject.Named;
 import javax.inject.Singleton;
 
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.filesystem.api.JamesDirectoriesProvider;
 import org.apache.james.modules.server.AsyncTasksExecutorModule;
-import org.apache.james.modules.server.ConfigurationProviderModule;
 import org.apache.james.modules.server.DNSServiceModule;
 import org.apache.james.modules.server.DropWizardMetricsModule;
 import org.apache.james.modules.server.TaskManagerModule;
 import org.apache.james.onami.lifecycle.PreDestroyModule;
-import org.apache.james.server.core.JamesServerResourceLoader;
+import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.GuiceProbe;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
-import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
 
 public class CommonServicesModule extends AbstractModule {
     
     public static final String CONFIGURATION_PATH = "configurationPath";
-    
-    public CommonServicesModule() {
+    private final Configuration configuration;
+    private final FileSystemImpl fileSystem;
+
+    public CommonServicesModule(Configuration configuration) {
+        this.configuration = configuration;
+        this.fileSystem = new FileSystemImpl(configuration.directories());
+
     }
     
     @Override
     protected void configure() {
         install(new ConfigurablesModule());
-        install(new ConfigurationProviderModule());
         install(new PreDestroyModule());
         install(new DNSServiceModule());
         install(new AsyncTasksExecutorModule());
         install(new DropWizardMetricsModule());
         install(new TaskManagerModule());
 
-        bind(FileSystemImpl.class).in(Scopes.SINGLETON);
+        bind(FileSystem.class).toInstance(fileSystem);
+
+        bind(ConfigurationProvider.class).toInstance(new 
FileConfigurationProvider(fileSystem, configuration));
 
-        bind(FileSystem.class).to(FileSystemImpl.class);
         Multibinder.newSetBinder(binder(), 
GuiceProbe.class).addBinding().to(DataProbeImpl.class);
     }
 
@@ -69,16 +72,13 @@ public class CommonServicesModule extends AbstractModule {
     @Singleton
     @Named(CONFIGURATION_PATH)
     public String configurationPath() {
-        return FileSystem.FILE_PROTOCOL_AND_CONF;
+        return configuration.configurationPath();
     }
 
     @Provides
     @Singleton
-    public JamesDirectoriesProvider directories() throws 
MissingArgumentException {
-        String rootDirectory = Optional
-                .ofNullable(System.getProperty("working.directory"))
-                .orElseThrow(() -> new MissingArgumentException("Server needs 
a working.directory env entry"));
-        return new JamesServerResourceLoader(rootDirectory);
+    public JamesDirectoriesProvider directories() {
+        return configuration.directories();
     }
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/main/java/org/apache/james/modules/MissingArgumentException.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/MissingArgumentException.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/MissingArgumentException.java
deleted file mode 100644
index 737ccc5..0000000
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/MissingArgumentException.java
+++ /dev/null
@@ -1,28 +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.james.modules;
-
-public class MissingArgumentException extends RuntimeException {
-
-    public MissingArgumentException(String message) {
-        super(message);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ConfigurationProviderModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ConfigurationProviderModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ConfigurationProviderModule.java
deleted file mode 100644
index dff1a1e..0000000
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ConfigurationProviderModule.java
+++ /dev/null
@@ -1,34 +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.james.modules.server;
-
-import org.apache.james.utils.ConfigurationProvider;
-import org.apache.james.utils.FileConfigurationProvider;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Scopes;
-
-public class ConfigurationProviderModule extends AbstractModule {
-
-    @Override
-    public void configure() {
-        
bind(ConfigurationProvider.class).to(FileConfigurationProvider.class).in(Scopes.SINGLETON);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
index 0f36425..abae17b 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
@@ -23,8 +23,8 @@ import java.util.List;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.dnsservice.dnsjava.DNSJavaService;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DefaultProcessorsConfigurationProviderModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DefaultProcessorsConfigurationProviderModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DefaultProcessorsConfigurationProviderModule.java
index a3e27bf..6f31961 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DefaultProcessorsConfigurationProviderModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DefaultProcessorsConfigurationProviderModule.java
@@ -20,7 +20,7 @@
 package org.apache.james.modules.server;
 
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.utils.FileConfigurationProvider;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.inject.AbstractModule;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
index 0c3aa5a..5ad0c61 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
@@ -26,8 +26,8 @@ import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.file.FileMailRepository;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 import org.apache.james.utils.GuiceProbe;
 import org.apache.james.utils.InMemoryMailRepositoryStore;
 import org.apache.james.utils.MailRepositoryProbeImpl;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/main/java/org/apache/james/utils/FileConfigurationProvider.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/FileConfigurationProvider.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/FileConfigurationProvider.java
deleted file mode 100644
index 23e58d5..0000000
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/FileConfigurationProvider.java
+++ /dev/null
@@ -1,103 +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.james.utils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Optional;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.modules.CommonServicesModule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
-import com.google.common.collect.Iterables;
-
-public class FileConfigurationProvider implements ConfigurationProvider {
-
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(FileConfigurationProvider.class);
-    private static final String CONFIGURATION_FILE_SUFFIX = ".xml";
-    public static final HierarchicalConfiguration EMTY_CONFIGURATION = new 
HierarchicalConfiguration();
-
-    public static XMLConfiguration getConfig(InputStream configStream) throws 
ConfigurationException {
-        XMLConfiguration config = new XMLConfiguration();
-        config.setDelimiterParsingDisabled(true);
-        config.setAttributeSplittingDisabled(true);
-        config.load(configStream);
-        return config;
-    }
-    
-    private final FileSystem fileSystem;
-    private final String configurationPrefix;
-
-    @Inject
-    public FileConfigurationProvider(FileSystem fileSystem, 
@Named(CommonServicesModule.CONFIGURATION_PATH) String configurationPrefix) {
-        this.fileSystem = fileSystem;
-        this.configurationPrefix = configurationPrefix;
-    }
-    
-    @Override
-    public HierarchicalConfiguration getConfiguration(String component) throws 
ConfigurationException {
-        Preconditions.checkNotNull(component);
-        List<String> configPathParts = Splitter.on(".").splitToList(component);
-        Preconditions.checkArgument(!configPathParts.isEmpty());
-
-        Optional<InputStream> inputStream = 
retrieveConfigInputStream(configPathParts.get(0));
-        if (inputStream.isPresent()) {
-            return selectConfigurationPart(configPathParts,
-                getConfig(inputStream.get()));
-        }
-        return EMTY_CONFIGURATION;
-    }
-
-    private HierarchicalConfiguration selectConfigurationPart(List<String> 
configPathParts, HierarchicalConfiguration config) {
-        return selectHierarchicalConfigPart(config, 
Iterables.skip(configPathParts, 1));
-    }
-
-    private Optional<InputStream> retrieveConfigInputStream(String 
configurationFileWithoutExtension) throws ConfigurationException {
-        
Preconditions.checkArgument(!Strings.isNullOrEmpty(configurationFileWithoutExtension),
 "The configuration file name should not be empty or null");
-        try {
-            return Optional.of(
-                fileSystem.getResource(configurationPrefix + 
configurationFileWithoutExtension + CONFIGURATION_FILE_SUFFIX));
-        } catch (IOException e) {
-            LOGGER.warn("Unable to locate configuration file {}" + 
CONFIGURATION_FILE_SUFFIX + ", assuming empty configuration", 
configurationFileWithoutExtension);
-            return Optional.empty();
-        }
-    }
-
-    private HierarchicalConfiguration 
selectHierarchicalConfigPart(HierarchicalConfiguration config, Iterable<String> 
configsPathParts) {
-        HierarchicalConfiguration currentConfig = config;
-        for (String nextPathPart : configsPathParts) {
-            currentConfig = currentConfig.configurationAt(nextPathPart);
-        }
-        return currentConfig;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
index b2dd541..c0ffb7b 100644
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
+++ 
b/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
@@ -50,7 +50,7 @@ public abstract class AbstractJamesServerTest {
         server.start();
     }
 
-    protected abstract GuiceJamesServer createJamesServer();
+    protected abstract GuiceJamesServer createJamesServer() throws IOException;
 
     protected abstract void clean();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/test/java/org/apache/james/modules/TestFilesystemModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/modules/TestFilesystemModule.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/modules/TestFilesystemModule.java
deleted file mode 100644
index 78e1e6d..0000000
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/modules/TestFilesystemModule.java
+++ /dev/null
@@ -1,61 +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.james.modules;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.function.Supplier;
-
-import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.filesystem.api.JamesDirectoriesProvider;
-import org.apache.james.server.core.JamesServerResourceLoader;
-import org.junit.rules.TemporaryFolder;
-
-import com.google.common.base.Throwables;
-import com.google.inject.AbstractModule;
-import com.google.inject.name.Names;
-
-public class TestFilesystemModule extends AbstractModule {
-    
-    private final Supplier<File> workingDirectory;
-
-    private static File createTempDir(TemporaryFolder temporaryFolder) {
-        try {
-            return temporaryFolder.newFolder();
-        } catch (IOException e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    public TestFilesystemModule(TemporaryFolder temporaryFolder) {
-        this(() -> TestFilesystemModule.createTempDir(temporaryFolder));
-    }
-
-    public TestFilesystemModule(Supplier<File> workingDirectory) {
-        this.workingDirectory = workingDirectory;
-    }
-
-    @Override
-    protected void configure() {
-        bind(JamesDirectoriesProvider.class).toInstance(new 
JamesServerResourceLoader(workingDirectory.get().getAbsolutePath()));
-        
bindConstant().annotatedWith(Names.named(CommonServicesModule.CONFIGURATION_PATH)).to(FileSystem.CLASSPATH_PROTOCOL);
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
index 70bb9d6..6120ff7 100644
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
+++ 
b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
@@ -22,8 +22,8 @@ package org.apache.james.utils;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.server.core.JamesServerResourceLoader;
+import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.junit.Before;
 import org.junit.Test;
@@ -45,8 +45,12 @@ public class FileConfigurationProviderTest {
 
     @Before
     public void setUp() {
-        FileSystemImpl fileSystem = new FileSystemImpl(new 
JamesServerResourceLoader("../"));
-        configurationProvider = new FileConfigurationProvider(fileSystem, 
FileSystem.CLASSPATH_PROTOCOL);
+        Configuration configuration = Configuration.builder()
+            .workingDirectory("../")
+            .configurationFromClasspath()
+            .build();
+        FileSystemImpl fileSystem = new 
FileSystemImpl(configuration.directories());
+        configurationProvider = new FileConfigurationProvider(fileSystem, 
configuration);
     }
 
     @Test(expected = IllegalArgumentException.class)

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
index ceec2cd..38f4b9b 100644
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
+++ 
b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
@@ -24,12 +24,12 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.file.FileMailRepository;
 import org.apache.james.modules.server.MailStoreRepositoryModule;
-import org.apache.james.server.core.JamesServerResourceLoader;
+import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,14 +40,19 @@ public class InMemoryMailRepositoryStoreTest {
 
     private InMemoryMailRepositoryStore repositoryStore;
     private FileSystemImpl fileSystem;
+    private Configuration configuration;
 
     @Before
     public void setUp() throws Exception {
-        fileSystem = new FileSystemImpl(new JamesServerResourceLoader("../"));
+        configuration = Configuration.builder()
+            .workingDirectory("../")
+            .configurationFromClasspath()
+            .build();
+        fileSystem = new FileSystemImpl(configuration.directories());
         repositoryStore = new InMemoryMailRepositoryStore(Sets.newHashSet(
                 new MailStoreRepositoryModule.FileMailRepositoryProvider(
                         fileSystem)));
-        repositoryStore.configure(new FileConfigurationProvider(fileSystem, 
FileSystem.CLASSPATH_PROTOCOL)
+        repositoryStore.configure(new FileConfigurationProvider(fileSystem, 
configuration)
             .getConfiguration("mailrepositorystore"));
         repositoryStore.init();
     }
@@ -77,7 +82,7 @@ public class InMemoryMailRepositoryStoreTest {
         repositoryStore = new InMemoryMailRepositoryStore(Sets.newHashSet(
             new MailStoreRepositoryModule.FileMailRepositoryProvider(
                 fileSystem)));
-        repositoryStore.configure(new FileConfigurationProvider(fileSystem, 
FileSystem.CLASSPATH_PROTOCOL).getConfiguration("fakemailrepositorystore"));
+        repositoryStore.configure(new FileConfigurationProvider(fileSystem, 
configuration).getConfiguration("fakemailrepositorystore"));
 
         assertThatThrownBy(() -> repositoryStore.init())
             .isInstanceOf(ConfigurationException.class);

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
index 1761e3a..ba9c312 100644
--- 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
+++ 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
@@ -24,8 +24,8 @@ import 
org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.jpa.JPADomainList;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
index 3741b91..719c105 100644
--- 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
+++ 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
@@ -24,8 +24,8 @@ import 
org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.jpa.JPARecipientRewriteTable;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/5883efbf/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
index 061acd3..eac4aaf 100644
--- 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
+++ 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
@@ -22,10 +22,10 @@ import java.util.List;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.jpa.JPAUsersRepository;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.apache.james.utils.ConfigurationProvider;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to