You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/08/21 10:17:27 UTC

[01/17] james-project git commit: JAMES-2524 Update com.google.inject:guice to 4.2.0

Repository: james-project
Updated Branches:
  refs/heads/master 0a8e0a9dd -> 0084a26ee


JAMES-2524 Update com.google.inject:guice to 4.2.0


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

Branch: refs/heads/master
Commit: 97078c82ee9a1361cf5fc722e9d53d94eb694cb4
Parents: 0a8e0a9
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 14:24:15 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:12:45 2018 +0700

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/97078c82/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 888b7f3..f5c2c9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -659,7 +659,7 @@
         <xml-apis.version>1.4.01</xml-apis.version>
         <geronimo-activation-spec.version>1.1</geronimo-activation-spec.version>
         <jasypt.version>1.9.2</jasypt.version>
-        <guice.version>4.1.0</guice.version>
+        <guice.version>4.2.0</guice.version>
         <jackrabbit-core.version>2.5.2</jackrabbit-core.version>
         <jackson1.version>1.9.2</jackson1.version>
         <logback.version>1.2.3</logback.version>


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


[15/17] james-project git commit: JAMES-2523 Terminate threads for asynchronous tasks

Posted by bt...@apache.org.
JAMES-2523 Terminate threads for asynchronous tasks

They are used for ES DeleteByQuery operations


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

Branch: refs/heads/master
Commit: c8cd20d823474632d5eb01d6e098a34011c8faaa
Parents: b7cd375
Author: Benoit Tellier <bt...@linagora.com>
Authored: Mon Aug 20 16:01:20 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:15:05 2018 +0700

----------------------------------------------------------------------
 .../server/AsyncTasksExecutorModule.java        | 33 ++++++++++++++------
 1 file changed, 23 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c8cd20d8/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
index 5b49d8b..b8e42fe 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
@@ -21,25 +21,38 @@ package org.apache.james.modules.server;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-import javax.inject.Named;
+import javax.annotation.PreDestroy;
 
 import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
-import com.google.inject.Singleton;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
 
 public class AsyncTasksExecutorModule extends AbstractModule {
 
-    public static final int THREAD_POOL_SIZE = 8;
+    private static final int THREAD_POOL_SIZE = 8;
 
     @Override
     protected void configure() {
-
+        bind(ExecutorService.class).annotatedWith(Names.named("AsyncExecutor"))
+            .toProvider(new LifecycleAwareExecutorServiceProvider(
+                Executors.newFixedThreadPool(THREAD_POOL_SIZE)));
     }
 
-    @Provides
-    @Singleton
-    @Named("AsyncExecutor")
-    public ExecutorService provideAsyncExecutorService() {
-        return Executors.newFixedThreadPool(THREAD_POOL_SIZE);
+    public static class LifecycleAwareExecutorServiceProvider implements Provider<ExecutorService> {
+        private final ExecutorService executorService;
+
+        LifecycleAwareExecutorServiceProvider(ExecutorService executorService) {
+            this.executorService = executorService;
+        }
+
+        @Override
+        public ExecutorService get() {
+            return executorService;
+        }
+
+        @PreDestroy
+        public void stop() {
+            executorService.shutdownNow();
+        }
     }
 }


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


[05/17] james-project git commit: JAMES-2524 Update org.apache.jackrabbit to 2.17.5

Posted by bt...@apache.org.
JAMES-2524 Update org.apache.jackrabbit to 2.17.5


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

Branch: refs/heads/master
Commit: c6622086ef10c95668fdb48fe5028d995eb99b15
Parents: 5d0ba58
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:09:19 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c6622086/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 778c5e7..39c9bb1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -594,7 +594,7 @@
         <javax.inject.version>1</javax.inject.version>
         <javax.activation.groupId>javax.activation</javax.activation.groupId>
         <javax.activation.artifactId>activation</javax.activation.artifactId>
-        <jackrabbit.version>2.17.4</jackrabbit.version>
+        <jackrabbit.version>2.17.5</jackrabbit.version>
         <jsieve.version>0.7</jsieve.version>
         <spring.version>3.2.18.RELEASE</spring.version>
         <geronimo-jms-spec.version>1.1.1</geronimo-jms-spec.version>


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


[14/17] james-project git commit: JAMES-2523 Fix GuiceJamesServer RemoteDelivery/DeliveryRunnable thread leak

Posted by bt...@apache.org.
JAMES-2523 Fix GuiceJamesServer RemoteDelivery/DeliveryRunnable thread leak


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

Branch: refs/heads/master
Commit: 9f6e768833b435100671b2f3585d05025509ac8d
Parents: e4eddb3
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 13:41:00 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:15:05 2018 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/transport/mailets/RemoteDelivery.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9f6e7688/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
index 17e2ce8..238fed8 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
@@ -259,7 +259,7 @@ public class RemoteDelivery extends GenericMailet {
     public synchronized void destroy() {
         if (startThreads == ThreadState.START_THREADS) {
             isDestroyed.set(true);
-            executor.shutdown();
+            executor.shutdownNow();
             notifyAll();
         }
     }


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


[12/17] james-project git commit: MAILBOX-349 Maildir mailbox cache is not thread safe

Posted by bt...@apache.org.
MAILBOX-349 Maildir mailbox cache is not thread safe


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

Branch: refs/heads/master
Commit: e4eddb372a4789e13814917fb239bcd0aee09e61
Parents: ecee101
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Aug 17 16:16:46 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:14:37 2018 +0700

----------------------------------------------------------------------
 .../mailbox/maildir/mail/MailboxCache.java      | 68 ++++++++++++++++++++
 .../maildir/mail/MaildirMailboxMapper.java      | 46 +++----------
 2 files changed, 76 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e4eddb37/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MailboxCache.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MailboxCache.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MailboxCache.java
new file mode 100644
index 0000000..cf04c1e
--- /dev/null
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MailboxCache.java
@@ -0,0 +1,68 @@
+/****************************************************************
+ * 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.mailbox.maildir.mail;
+
+import java.util.ArrayList;
+
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.maildir.MaildirId;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
+
+public class MailboxCache {
+    /**
+     * A request-scoped list of mailboxes in order to refer to them via id
+     */
+    private final ArrayList<Mailbox> mailboxCache = new ArrayList<>();
+
+    /**
+     * Stores a copy of a mailbox in a cache valid for one request. This is to enable
+     * referring to renamed mailboxes via id.
+     * @param mailbox The mailbox to cache
+     * @return the cached mailbox
+     */
+    public synchronized Mailbox cacheMailbox(Mailbox mailbox) {
+        mailboxCache.add(new SimpleMailbox(mailbox));
+        int id = mailboxCache.size() - 1;
+        mailbox.setMailboxId(MaildirId.of(id));
+        return mailbox;
+    }
+
+    /**
+     * Retrieves a mailbox from the cache
+     * @param mailboxId The id of the mailbox to retrieve
+     * @return The mailbox
+     * @throws MailboxNotFoundException If the mailboxId is not in the cache
+     */
+    public synchronized Mailbox getCachedMailbox(MaildirId mailboxId) throws MailboxNotFoundException {
+        if (mailboxId == null) {
+            throw new MailboxNotFoundException("null");
+        }
+        try {
+            return mailboxCache.get(mailboxId.getRawId());
+        } catch (IndexOutOfBoundsException e) {
+            throw new MailboxNotFoundException(mailboxId);
+        }
+    }
+
+    public synchronized void clear() {
+        mailboxCache.clear();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e4eddb37/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
index 55092c9..b1b83f9 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
@@ -42,7 +42,6 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,13 +59,14 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
     /**
      * A request-scoped list of mailboxes in order to refer to them via id
      */
-    private final ArrayList<Mailbox> mailboxCache = new ArrayList<>();
+    private final MailboxCache mailboxCache;
 
     private final MailboxSession session;
     
     public MaildirMailboxMapper(MaildirStore maildirStore, MailboxSession session) {
         this.maildirStore = maildirStore;
         this.session = session;
+        this.mailboxCache = new MailboxCache();
     }
 
     @Override
@@ -110,13 +110,13 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
     public Mailbox findMailboxByPath(MailboxPath mailboxPath)
             throws MailboxException, MailboxNotFoundException {      
         Mailbox mailbox = maildirStore.loadMailbox(session, mailboxPath);
-        return cacheMailbox(mailbox);
+        return mailboxCache.cacheMailbox(mailbox);
     }
     
     @Override
     public Mailbox findMailboxById(MailboxId id) throws MailboxException, MailboxNotFoundException {
         MaildirId mailboxId = (MaildirId)id;
-        return getCachedMailbox(mailboxId);
+        return mailboxCache.getCachedMailbox(mailboxId);
     }
     
     @Override
@@ -131,13 +131,13 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
         for (File folder : folders) {
             if (folder.isDirectory()) {
                 Mailbox mailbox = maildirStore.loadMailbox(session, root, mailboxPath.getNamespace(), mailboxPath.getUser(), folder.getName());
-                mailboxList.add(cacheMailbox(mailbox));
+                mailboxList.add(mailboxCache.cacheMailbox(mailbox));
             }
         }
         // INBOX is in the root of the folder
         if (Pattern.matches(mailboxPath.getName().replace(MaildirStore.WILDCARD, ".*"), MailboxConstants.INBOX)) {
             Mailbox mailbox = maildirStore.loadMailbox(session, root, mailboxPath.getNamespace(), mailboxPath.getUser(), "");
-            mailboxList.add(0, cacheMailbox(mailbox));
+            mailboxList.add(0, mailboxCache.cacheMailbox(mailbox));
         }
         return mailboxList;
     }
@@ -153,7 +153,7 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
     @Override
     public MailboxId save(Mailbox mailbox) throws MailboxException {
         try {
-            Mailbox originalMailbox = getCachedMailbox((MaildirId) mailbox.getMailboxId());
+            Mailbox originalMailbox = mailboxCache.getCachedMailbox((MaildirId) mailbox.getMailboxId());
             MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
             // equals with null check
             if (originalMailbox.getName() == null ? mailbox.getName() != null : !originalMailbox.getName().equals(mailbox.getName())) {
@@ -230,7 +230,7 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
             }
             folder.setACL(session, mailbox.getACL());
         }
-        cacheMailbox(mailbox);
+        mailboxCache.cacheMailbox(mailbox);
         return mailbox.getMailboxId();
     }
 
@@ -260,36 +260,6 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
         mailboxCache.clear();
     }
     
-    /**
-     * Stores a copy of a mailbox in a cache valid for one request. This is to enable
-     * referring to renamed mailboxes via id.
-     * @param mailbox The mailbox to cache
-     * @return The id of the cached mailbox
-     */
-    private Mailbox cacheMailbox(Mailbox mailbox) {
-        mailboxCache.add(new SimpleMailbox(mailbox));
-        int id = mailboxCache.size() - 1;
-        ((SimpleMailbox) mailbox).setMailboxId(MaildirId.of(id));
-        return mailbox;
-    }
-    
-    /**
-     * Retrieves a mailbox from the cache
-     * @param mailboxId The id of the mailbox to retrieve
-     * @return The mailbox
-     * @throws MailboxNotFoundException If the mailboxId is not in the cache
-     */
-    private Mailbox getCachedMailbox(MaildirId mailboxId) throws MailboxNotFoundException {
-        if (mailboxId == null) {
-            throw new MailboxNotFoundException("null");
-        }
-        try {
-            return mailboxCache.get(mailboxId.getRawId());
-        } catch (IndexOutOfBoundsException e) {
-            throw new MailboxNotFoundException(mailboxId);
-        }
-    }
-    
     private void visitUsersForMailboxList(File domain, File[] users, List<Mailbox> mailboxList) throws MailboxException {
         
         String userName = null;


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


[08/17] james-project git commit: JAMES-2524 Drop org.hdrhistogram:HdrHistogram

Posted by bt...@apache.org.
JAMES-2524 Drop org.hdrhistogram:HdrHistogram


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

Branch: refs/heads/master
Commit: d319a48519224e9ac63f74995decdca25e411a34
Parents: d94966a
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:24:48 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 server/container/guice/cassandra-guice/pom.xml | 5 -----
 1 file changed, 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d319a485/server/container/guice/cassandra-guice/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/pom.xml b/server/container/guice/cassandra-guice/pom.xml
index 5035f68..e17a41d 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -260,11 +260,6 @@
             <artifactId>awaitility</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.hdrhistogram</groupId>
-            <artifactId>HdrHistogram</artifactId>
-            <version>2.1.4</version>
-        </dependency>
-        <dependency>
             <groupId>org.junit.platform</groupId>
             <artifactId>junit-platform-launcher</artifactId>
             <scope>test</scope>


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


[11/17] james-project git commit: JAMES-2524 Update org.testcontainers to 1.8.3

Posted by bt...@apache.org.
JAMES-2524 Update org.testcontainers to 1.8.3


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

Branch: refs/heads/master
Commit: ecee101472986cef9d8af7b49fecf569c6edbc67
Parents: 9a5cb2e
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:44:36 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:14:01 2018 +0700

----------------------------------------------------------------------
 pom.xml                                         | 2 +-
 server/container/guice/jpa-smtp-mariadb/pom.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ecee1014/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f31d0e2..93f3497 100644
--- a/pom.xml
+++ b/pom.xml
@@ -631,8 +631,8 @@
         <pax-logging-api.version>1.6.4</pax-logging-api.version>
         <jackson.version>2.9.6</jackson.version>
         <jetty.version>9.4.7.v20170914</jetty.version>
-        <testcontainers.version>1.8.1</testcontainers.version>
         <metrics.version>3.2.6</metrics.version>
+        <testcontainers.version>1.8.3</testcontainers.version>
         <assertj.version>3.3.0</assertj.version>
         <es.version>2.2.1</es.version>
         <es-reporter.version>2.2.0</es-reporter.version>

http://git-wip-us.apache.org/repos/asf/james-project/blob/ecee1014/server/container/guice/jpa-smtp-mariadb/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp-mariadb/pom.xml b/server/container/guice/jpa-smtp-mariadb/pom.xml
index 88fb888..96a79ce 100644
--- a/server/container/guice/jpa-smtp-mariadb/pom.xml
+++ b/server/container/guice/jpa-smtp-mariadb/pom.xml
@@ -70,7 +70,7 @@
         <dependency>
             <groupId>org.testcontainers</groupId>
             <artifactId>mariadb</artifactId>
-            <version>1.8.1</version>
+            <version>1.8.3</version>
             <scope>test</scope>
         </dependency>
     </dependencies>


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


[02/17] james-project git commit: JAMES-2524 Update org.awaitility:awaitility to 3.1.2

Posted by bt...@apache.org.
JAMES-2524 Update org.awaitility:awaitility to 3.1.2


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

Branch: refs/heads/master
Commit: d94966a5799c3571d56adee957631df50d146e13
Parents: c662208
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:15:07 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d94966a5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 39c9bb1..c65c271 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2283,7 +2283,7 @@
             <dependency>
                 <groupId>org.awaitility</groupId>
                 <artifactId>awaitility</artifactId>
-                <version>3.1.1</version>
+                <version>3.1.2</version>
             </dependency>
             <dependency>
                 <groupId>org.bouncycastle</groupId>


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


[06/17] james-project git commit: JAMES-2524 Update org.mockito:mockito-core to 2.21.0

Posted by bt...@apache.org.
JAMES-2524 Update org.mockito:mockito-core to 2.21.0


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

Branch: refs/heads/master
Commit: 9a5cb2ef34d1294a8fb0b794967ac8dc6508f7e0
Parents: b5e7d37
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:37:42 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9a5cb2ef/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5e4f9d8..f31d0e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2377,7 +2377,7 @@
             <dependency>
                 <groupId>org.mockito</groupId>
                 <artifactId>mockito-core</artifactId>
-                <version>2.20.1</version>
+                <version>2.21.0</version>
             </dependency>
             <dependency>
                 <groupId>org.ops4j.pax.exam</groupId>


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


[17/17] james-project git commit: JAMES-2522 Moving and renaming classes

Posted by bt...@apache.org.
JAMES-2522 Moving and renaming classes

- Moving InMemoryMailRepositoryStore from guice-common -> MailRepositoryStoreImpl in data-lib
- Moving MailRepositoryProvider from guice-common -> mailrepository-api
- Moving CassandraMailRepositoryProvider, FileMailRepositoryProvider, MemoryMailRepositoryProvider from inner classes(CassandraMailRepositoryModule, MailStoreRepositoryModule, InMemoryMailRepositoryStoreTest) to mailrepository-cassandra, mailrepository-memory, data-file... modules


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

Branch: refs/heads/master
Commit: 0084a26eed364bfb2f445aaa549d649b4ebcc9ca
Parents: c8cd20d
Author: duc <dt...@linagora.com>
Authored: Fri Aug 17 00:56:56 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:16:27 2018 +0700

----------------------------------------------------------------------
 .../data/CassandraMailRepositoryModule.java     |  33 +--
 server/container/guice/guice-common/pom.xml     |   9 -
 .../server/MailStoreRepositoryModule.java       |  42 +--
 .../utils/InMemoryMailRepositoryStore.java      | 183 ------------
 .../james/utils/MailRepositoryProvider.java     |  30 --
 .../utils/InMemoryMailRepositoryStoreTest.java  | 276 -------------------
 .../test/resources/fakemailrepositorystore.xml  |  31 ---
 .../src/test/resources/mailrepositorystore.xml  |  36 ---
 .../file/FileMailRepositoryProvider.java        |  49 ++++
 .../mock/MockMailRepositoryStore.java           |  64 -----
 server/data/data-memory/pom.xml                 |  10 +
 .../memory/MemoryMailRepositoryStore.java       | 185 +++++++++++++
 .../memory/MemoryMailRepositoryStoreTest.java   | 257 +++++++++++++++++
 .../test/resources/fakemailrepositorystore.xml  |  30 ++
 .../src/test/resources/mailrepositorystore.xml  |  35 +++
 .../mailets/ToSenderDomainRepositoryTest.java   |  32 ++-
 .../src/test/resources/mailrepositorystore.xml  |  30 ++
 .../api/MailRepositoryProvider.java             |  27 ++
 .../CassandraMailRepositoryProvider.java        |  52 ++++
 .../memory/MemoryMailRepositoryProvider.java    |  36 +++
 server/protocols/protocols-smtp/pom.xml         |  16 +-
 .../apache/james/smtpserver/SMTPServerTest.java |  36 ++-
 .../james/smtpserver/SMTPTestConfiguration.java |   2 +-
 .../src/test/resources/mailrepositorystore.xml  |  30 ++
 .../webadmin/webadmin-mailrepository/pom.xml    |   5 +
 .../routes/MailRepositoriesRoutesTest.java      | 238 +++++++---------
 .../src/test/resources/mailrepositorystore.xml  |  30 ++
 27 files changed, 943 insertions(+), 861 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
index 2f3769b..176c39b 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
@@ -20,20 +20,16 @@
 package org.apache.james.modules.data;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.blob.api.ObjectStore;
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
 import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
-import org.apache.james.mailrepository.cassandra.CassandraMailRepository;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryCountDAO;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryKeysDAO;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryMailDAO;
+import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryProvider;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlModule;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlStore;
-import org.apache.james.utils.MailRepositoryProvider;
 
 import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
 import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
 
@@ -54,29 +50,4 @@ public class CassandraMailRepositoryModule extends AbstractModule {
         cassandraModuleBinder.addBinding().toInstance(org.apache.james.mailrepository.cassandra.CassandraMailRepositoryModule.MODULE);
         cassandraModuleBinder.addBinding().toInstance(CassandraMailRepositoryUrlModule.MODULE);
     }
-
-    public static class CassandraMailRepositoryProvider implements MailRepositoryProvider {
-        private final CassandraMailRepositoryKeysDAO keysDAO;
-        private final CassandraMailRepositoryCountDAO countDAO;
-        private final CassandraMailRepositoryMailDAO mailDAO;
-        private final ObjectStore objectStore;
-
-        @Inject
-        public CassandraMailRepositoryProvider(CassandraMailRepositoryKeysDAO keysDAO, CassandraMailRepositoryCountDAO countDAO, CassandraMailRepositoryMailDAO mailDAO, ObjectStore objectStore) {
-            this.keysDAO = keysDAO;
-            this.countDAO = countDAO;
-            this.mailDAO = mailDAO;
-            this.objectStore = objectStore;
-        }
-
-        @Override
-        public String canonicalName() {
-            return CassandraMailRepository.class.getCanonicalName();
-        }
-
-        @Override
-        public MailRepository provide(MailRepositoryUrl url) {
-            return new CassandraMailRepository(url, keysDAO, countDAO, mailDAO, objectStore);
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/pom.xml b/server/container/guice/guice-common/pom.xml
index 6d33d6d..e449699 100644
--- a/server/container/guice/guice-common/pom.xml
+++ b/server/container/guice/guice-common/pom.xml
@@ -52,15 +52,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-data-library</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-data-memory</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-dnsservice-api</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/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 0365beb..cc973a5 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
@@ -21,18 +21,15 @@ package org.apache.james.modules.server;
 
 import java.util.List;
 
-import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.lifecycle.api.Configurable;
-import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.apache.james.mailrepository.file.FileMailRepository;
+import org.apache.james.mailrepository.file.FileMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
-import org.apache.james.utils.InMemoryMailRepositoryStore;
 import org.apache.james.utils.MailRepositoryProbeImpl;
-import org.apache.james.utils.MailRepositoryProvider;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
@@ -45,8 +42,8 @@ public class MailStoreRepositoryModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        bind(InMemoryMailRepositoryStore.class).in(Scopes.SINGLETON);
-        bind(MailRepositoryStore.class).to(InMemoryMailRepositoryStore.class);
+        bind(MemoryMailRepositoryStore.class).in(Scopes.SINGLETON);
+        bind(MailRepositoryStore.class).to(MemoryMailRepositoryStore.class);
 
         Multibinder<MailRepositoryProvider> multibinder = Multibinder.newSetBinder(binder(), MailRepositoryProvider.class);
         multibinder.addBinding().to(FileMailRepositoryProvider.class);
@@ -54,38 +51,15 @@ public class MailStoreRepositoryModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(MailRepositoryProbeImpl.class);
     }
 
-    public static class FileMailRepositoryProvider implements MailRepositoryProvider {
-
-        private final FileSystem fileSystem;
-
-        @Inject
-        public FileMailRepositoryProvider(FileSystem fileSystem) {
-            this.fileSystem = fileSystem;
-        }
-
-
-        @Override
-        public String canonicalName() {
-            return FileMailRepository.class.getCanonicalName();
-        }
-
-        @Override
-        public MailRepository provide(MailRepositoryUrl url) {
-            FileMailRepository fileMailRepository = new FileMailRepository();
-            fileMailRepository.setFileSystem(fileSystem);
-            return fileMailRepository;
-        }
-    }
-
     @Singleton
     public static class MailRepositoryStoreModuleConfigurationPerformer implements ConfigurationPerformer {
 
         private final ConfigurationProvider configurationProvider;
-        private final InMemoryMailRepositoryStore javaMailRepositoryStore;
+        private final MemoryMailRepositoryStore javaMailRepositoryStore;
 
         @Inject
         public MailRepositoryStoreModuleConfigurationPerformer(ConfigurationProvider configurationProvider,
-                InMemoryMailRepositoryStore javaMailRepositoryStore) {
+                                                               MemoryMailRepositoryStore javaMailRepositoryStore) {
             this.configurationProvider = configurationProvider;
             this.javaMailRepositoryStore = javaMailRepositoryStore;
         }
@@ -102,7 +76,7 @@ public class MailStoreRepositoryModule extends AbstractModule {
 
         @Override
         public List<Class<? extends Configurable>> forClasses() {
-            return ImmutableList.of(InMemoryMailRepositoryStore.class);
+            return ImmutableList.of(MemoryMailRepositoryStore.class);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
deleted file mode 100644
index 6bf875d..0000000
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
+++ /dev/null
@@ -1,183 +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.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.stream.Stream;
-
-import org.apache.commons.configuration.CombinedConfiguration;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.lifecycle.api.Configurable;
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
-import org.apache.james.mailrepository.api.Protocol;
-import org.apache.james.repository.api.Initializable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.github.fge.lambdas.Throwing;
-import com.google.common.collect.ImmutableList;
-import com.google.inject.Inject;
-
-public class InMemoryMailRepositoryStore implements MailRepositoryStore, Configurable {
-    private static final Logger LOGGER = LoggerFactory.getLogger(InMemoryMailRepositoryStore.class);
-
-    private final MailRepositoryUrlStore urlStore;
-    private final Set<MailRepositoryProvider> mailRepositories;
-    private final ConcurrentMap<MailRepositoryUrl, MailRepository> destinationToRepositoryAssociations;
-    private final Map<Protocol, MailRepositoryProvider> protocolToRepositoryProvider;
-    private final Map<Protocol, HierarchicalConfiguration> perProtocolMailRepositoryDefaultConfiguration;
-    private HierarchicalConfiguration configuration;
-
-    @Inject
-    public InMemoryMailRepositoryStore(MailRepositoryUrlStore urlStore, Set<MailRepositoryProvider> mailRepositories) {
-        this.urlStore = urlStore;
-        this.mailRepositories = mailRepositories;
-        this.destinationToRepositoryAssociations = new ConcurrentHashMap<>();
-        this.protocolToRepositoryProvider = new HashMap<>();
-        this.perProtocolMailRepositoryDefaultConfiguration = new HashMap<>();
-    }
-
-    @Override
-    public Stream<MailRepositoryUrl> getUrls() {
-        return urlStore.listDistinct();
-    }
-
-    @Override
-    public void configure(HierarchicalConfiguration configuration) {
-        this.configuration = configuration;
-    }
-
-    public void init() throws Exception {
-        LOGGER.info("JamesMailStore init... {}", this);
-        List<HierarchicalConfiguration> registeredClasses = retrieveRegisteredClassConfiguration();
-        for (HierarchicalConfiguration registeredClass : registeredClasses) {
-            readConfigurationEntry(registeredClass);
-        }
-    }
-
-    private List<HierarchicalConfiguration> retrieveRegisteredClassConfiguration() {
-        try {
-            return configuration.configurationsAt("mailrepositories.mailrepository");
-        } catch (Exception e) {
-            LOGGER.warn("Could not process configuration. Skipping Mail Repository initialization.", e);
-            return ImmutableList.of();
-        }
-    }
-
-    @Override
-    public Optional<MailRepository> get(MailRepositoryUrl url) {
-        if (urlStore.contains(url)) {
-            return Optional.of(select(url));
-        }
-        return Optional.empty();
-    }
-
-    @Override
-    public Stream<MailRepository> getByPath(MailRepositoryPath path) {
-        return urlStore.listDistinct()
-            .filter(url -> url.getPath().equals(path))
-            .map(this::select);
-    }
-
-    @Override
-    public MailRepository select(MailRepositoryUrl mailRepositoryUrl) {
-        return Optional.ofNullable(destinationToRepositoryAssociations.get(mailRepositoryUrl))
-            .orElseGet(Throwing.supplier(
-                () -> createNewMailRepository(mailRepositoryUrl))
-                .sneakyThrow());
-    }
-
-    private MailRepository createNewMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
-        MailRepository newMailRepository = retrieveMailRepository(mailRepositoryUrl);
-        urlStore.add(mailRepositoryUrl);
-        newMailRepository = initializeNewRepository(newMailRepository, createRepositoryCombinedConfig(mailRepositoryUrl));
-        MailRepository previousRepository = destinationToRepositoryAssociations.putIfAbsent(mailRepositoryUrl, newMailRepository);
-        return Optional.ofNullable(previousRepository)
-            .orElse(newMailRepository);
-    }
-
-    private void readConfigurationEntry(HierarchicalConfiguration repositoryConfiguration) throws ConfigurationException {
-        String className = repositoryConfiguration.getString("[@class]");
-        MailRepositoryProvider usedMailRepository = mailRepositories.stream()
-            .filter(mailRepositoryProvider -> mailRepositoryProvider.canonicalName().equals(className))
-            .findAny()
-            .orElseThrow(() -> new ConfigurationException("MailRepository " + className + " has not been registered"));
-        for (String protocol : repositoryConfiguration.getStringArray("protocols.protocol")) {
-            protocolToRepositoryProvider.put(new Protocol(protocol), usedMailRepository);
-            registerRepositoryDefaultConfiguration(repositoryConfiguration, new Protocol(protocol));
-        }
-    }
-
-    private void registerRepositoryDefaultConfiguration(HierarchicalConfiguration repositoryConfiguration, Protocol protocol) {
-        HierarchicalConfiguration defConf = null;
-        if (repositoryConfiguration.getKeys("config").hasNext()) {
-            defConf = repositoryConfiguration.configurationAt("config");
-        }
-        if (defConf != null) {
-            perProtocolMailRepositoryDefaultConfiguration.put(protocol, defConf);
-        }
-    }
-
-    private CombinedConfiguration createRepositoryCombinedConfig(MailRepositoryUrl mailRepositoryUrl) {
-        CombinedConfiguration config = new CombinedConfiguration();
-        HierarchicalConfiguration defaultProtocolConfig = perProtocolMailRepositoryDefaultConfiguration.get(mailRepositoryUrl.getProtocol());
-        if (defaultProtocolConfig != null) {
-            config.addConfiguration(defaultProtocolConfig);
-        }
-        DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
-        builder.addProperty("[@destinationURL]", mailRepositoryUrl.asString());
-        config.addConfiguration(builder);
-        return config;
-    }
-
-    private MailRepository initializeNewRepository(MailRepository mailRepository, CombinedConfiguration config) throws MailRepositoryStoreException {
-        try {
-            if (mailRepository instanceof Configurable) {
-                ((Configurable) mailRepository).configure(config);
-            }
-            if (mailRepository instanceof Initializable) {
-                ((Initializable) mailRepository).init();
-            }
-            return mailRepository;
-        } catch (Exception e) {
-            throw new MailRepositoryStoreException("Cannot init mail repository", e);
-        }
-    }
-
-    private MailRepository retrieveMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
-        Protocol protocol = mailRepositoryUrl.getProtocol();
-        return Optional.ofNullable(protocolToRepositoryProvider.get(protocol))
-            .orElseThrow(() -> new MailRepositoryStoreException("No Mail Repository associated with " + protocol.getValue()))
-            .provide(mailRepositoryUrl);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
deleted file mode 100644
index 2338616..0000000
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.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.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-
-public interface MailRepositoryProvider {
-
-    String canonicalName();
-
-    MailRepository provide(MailRepositoryUrl url);
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/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
deleted file mode 100644
index 04e6950..0000000
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
+++ /dev/null
@@ -1,276 +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 static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.core.builder.MimeMessageBuilder;
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.apache.james.mailrepository.file.FileMailRepository;
-import org.apache.james.mailrepository.memory.MemoryMailRepository;
-import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
-import org.apache.james.modules.server.MailStoreRepositoryModule;
-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.apache.james.util.concurrency.ConcurrentTestRunner;
-import org.apache.mailet.base.test.FakeMail;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.collect.Sets;
-
-public class InMemoryMailRepositoryStoreTest {
-    private static final MailRepositoryUrl FILE_REPO = MailRepositoryUrl.from("file://repo");
-    private static final MailRepositoryUrl UNKNOWN_PROTOCOL_REPO = MailRepositoryUrl.from("toto://repo");
-    private static final MailRepositoryUrl MEMORY_REPO = MailRepositoryUrl.from("memory://repo");
-    private static final MailRepositoryPath PATH_REPO = MailRepositoryPath.from("repo");
-
-    private MemoryMailRepositoryUrlStore urlStore;
-
-    private static class MemoryMailRepositoryProvider implements MailRepositoryProvider {
-        @Override
-        public String canonicalName() {
-            return MemoryMailRepository.class.getCanonicalName();
-        }
-
-        @Override
-        public MailRepository provide(MailRepositoryUrl url) {
-            return new MemoryMailRepository();
-        }
-    }
-
-    private InMemoryMailRepositoryStore repositoryStore;
-    private FileSystemImpl fileSystem;
-    private Configuration configuration;
-
-    @Before
-    public void setUp() throws Exception {
-        configuration = Configuration.builder()
-            .workingDirectory("../")
-            .configurationFromClasspath()
-            .build();
-        fileSystem = new FileSystemImpl(configuration.directories());
-        urlStore = new MemoryMailRepositoryUrlStore();
-        MailStoreRepositoryModule.FileMailRepositoryProvider fileProvider = new MailStoreRepositoryModule.FileMailRepositoryProvider(fileSystem);
-        repositoryStore = new InMemoryMailRepositoryStore(urlStore, Sets.newHashSet(
-            fileProvider,
-                new MemoryMailRepositoryProvider()));
-        repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
-            .getConfiguration("mailrepositorystore"));
-        repositoryStore.init();
-    }
-
-    @Test(expected = MailRepositoryStore.MailRepositoryStoreException.class)
-    public void selectingANonRegisteredProtocolShouldFail() {
-        repositoryStore.select(MailRepositoryUrl.from("proto://repo"));
-    }
-
-    @Test
-    public void selectingARegisteredProtocolShouldWork() {
-        assertThat(repositoryStore.select(FILE_REPO))
-            .isInstanceOf(FileMailRepository.class);
-    }
-
-    @Test
-    public void selectingTwiceARegisteredProtocolWithSameDestinationShouldReturnTheSameResult() {
-        assertThat(repositoryStore.select(FILE_REPO))
-            .isEqualTo(repositoryStore.select(FILE_REPO));
-    }
-
-    @Test
-    public void selectingTwiceARegisteredProtocolWithDifferentDestinationShouldReturnDifferentResults() {
-        assertThat(repositoryStore.select(FILE_REPO))
-            .isNotEqualTo(repositoryStore.select(MailRepositoryUrl.from("file://repo1")));
-    }
-
-    @Test
-    public void configureShouldThrowWhenNonValidClassesAreProvided() throws Exception {
-        repositoryStore = new InMemoryMailRepositoryStore(urlStore, Sets.newHashSet(
-            new MailStoreRepositoryModule.FileMailRepositoryProvider(
-                fileSystem)));
-        repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration).getConfiguration("fakemailrepositorystore"));
-
-        assertThatThrownBy(() -> repositoryStore.init())
-            .isInstanceOf(ConfigurationException.class);
-    }
-
-    @Test
-    public void configureShouldNotThrowOnEmptyConfiguration() throws Exception {
-        repositoryStore = new InMemoryMailRepositoryStore(urlStore, Sets.newHashSet(
-            new MailStoreRepositoryModule.FileMailRepositoryProvider(
-                fileSystem)));
-        repositoryStore.configure(new HierarchicalConfiguration());
-
-        repositoryStore.init();
-    }
-
-    @Test
-    public void getUrlsShouldBeEmptyIfNoSelectWerePerformed() {
-        assertThat(repositoryStore.getUrls()).isEmpty();
-    }
-
-    @Test
-    public void getUrlsShouldReturnUsedUrls() {
-        MailRepositoryUrl url1 = MailRepositoryUrl.from("file://repo1");
-        MailRepositoryUrl url2 = MailRepositoryUrl.from("file://repo2");
-        MailRepositoryUrl url3 = MailRepositoryUrl.from("file://repo3");
-        repositoryStore.select(url1);
-        repositoryStore.select(url2);
-        repositoryStore.select(url3);
-        assertThat(repositoryStore.getUrls()).containsOnly(url1, url2, url3);
-    }
-
-    @Test
-    public void getUrlsResultsShouldNotBeDuplicated() {
-        repositoryStore.select(FILE_REPO);
-        repositoryStore.select(FILE_REPO);
-        assertThat(repositoryStore.getUrls()).containsExactly(FILE_REPO);
-    }
-
-    @Test
-    public void getPathsShouldBeEmptyIfNoSelectWerePerformed() {
-        assertThat(repositoryStore.getPaths()).isEmpty();
-    }
-
-    @Test
-    public void getPathsShouldReturnUsedUrls() {
-        MailRepositoryPath path1 = MailRepositoryPath.from("repo1");
-        MailRepositoryPath path2 = MailRepositoryPath.from("repo1");
-        MailRepositoryPath path3 = MailRepositoryPath.from("repo1");
-        repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path1, "file"));
-        repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path2, "file"));
-        repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path3, "file"));
-        assertThat(repositoryStore.getPaths()).containsOnly(path1, path2, path3);
-    }
-
-    @Test
-    public void getPathsResultsShouldNotBeDuplicatedWithTheSameProtocol() {
-        repositoryStore.select(FILE_REPO);
-        repositoryStore.select(FILE_REPO);
-        assertThat(repositoryStore.getPaths()).containsExactly(PATH_REPO);
-    }
-
-    @Test
-    public void getPathsResultsShouldNotBeDuplicatedWithDifferentProtocols() {
-        repositoryStore.select(FILE_REPO);
-        repositoryStore.select(MEMORY_REPO);
-        assertThat(repositoryStore.getPaths()).containsExactly(PATH_REPO);
-    }
-
-    @Test
-    public void getShouldReturnEmptyWhenUrlNotInUse() {
-        assertThat(repositoryStore.get(FILE_REPO))
-            .isEmpty();
-    }
-
-    @Test
-    public void getShouldReturnRepositoryWhenUrlExists() {
-        urlStore.add(FILE_REPO);
-
-        assertThat(repositoryStore.get(FILE_REPO))
-            .isNotEmpty();
-    }
-
-    @Test
-    public void getByPathShouldReturnRepositoryWhenUrlExists() {
-        urlStore.add(FILE_REPO);
-
-        assertThat(repositoryStore.getByPath(FILE_REPO.getPath()))
-            .isNotEmpty();
-    }
-
-    @Test
-    public void getShouldReturnPreviouslyCreatedMailRepository() {
-        MailRepository mailRepository = repositoryStore.select(FILE_REPO);
-
-        assertThat(repositoryStore.get(FILE_REPO))
-            .contains(mailRepository);
-    }
-
-    @Test
-    public void getByPathShouldReturnEmptyWhenUrlNotInUse() {
-        assertThat(repositoryStore.getByPath(PATH_REPO))
-            .isEmpty();
-    }
-
-    @Test
-    public void getByPathShouldReturnPreviouslyCreatedMatchingMailRepository() {
-        MailRepository mailRepository = repositoryStore.select(FILE_REPO);
-
-        assertThat(repositoryStore.getByPath(PATH_REPO))
-            .contains(mailRepository);
-    }
-
-    @Test
-    public void getByPathShouldReturnPreviouslyCreatedMatchingMailRepositories() {
-        MailRepository mailRepositoryFile = repositoryStore.select(FILE_REPO);
-        MailRepository mailRepositoryArbitrary = repositoryStore.select(MEMORY_REPO);
-
-        assertThat(repositoryStore.getByPath(PATH_REPO))
-            .contains(mailRepositoryFile)
-            .contains(mailRepositoryArbitrary);
-    }
-
-    @Test
-    public void getByPathShouldReturnEmptyWhenNoMailRepositoriesAreMatching() {
-        repositoryStore.select(FILE_REPO);
-
-        assertThat(repositoryStore.getByPath(MailRepositoryPath.from("unknown")))
-            .isEmpty();
-    }
-
-    @Test
-    public void selectShouldNotReturnDifferentResultsWhenUsedInAConcurrentEnvironment() throws Exception {
-        MailRepositoryUrl url = MailRepositoryUrl.from("memory://repo");
-        int threadCount = 10;
-
-        ConcurrentTestRunner concurrentTestRunner = ConcurrentTestRunner.builder()
-            .threadCount(10)
-            .build((threadNb, operationNb) -> repositoryStore.select(url)
-                .store(FakeMail.builder()
-                    .name("name" + threadNb)
-                    .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
-                        .setText("Any body"))
-                    .build()));
-        concurrentTestRunner.run().awaitTermination(1, TimeUnit.MINUTES);
-        concurrentTestRunner.assertNoException();
-
-        long actualSize = repositoryStore.get(url).get().size();
-
-        assertThat(actualSize).isEqualTo(threadCount);
-    }
-
-    @Test
-    public void selectShouldNotAddUrlWhenProtocolDoNotExist() {
-        assertThatThrownBy(() -> repositoryStore.select(UNKNOWN_PROTOCOL_REPO));
-
-        assertThat(urlStore.listDistinct()).isEmpty();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/src/test/resources/fakemailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/resources/fakemailrepositorystore.xml b/server/container/guice/guice-common/src/test/resources/fakemailrepositorystore.xml
deleted file mode 100644
index 2d19a80..0000000
--- a/server/container/guice/guice-common/src/test/resources/fakemailrepositorystore.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.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.
- -->
-
-<mailrepositorystore>
-    <mailrepositories>
-        <mailrepository class="org.apache.james.mailrepository.None">
-            <protocols>
-                <protocol>file</protocol>
-            </protocols>
-            <config FIFO="false" CACHEKEYS="true"/>
-        </mailrepository>
-    </mailrepositories>
-</mailrepositorystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/resources/mailrepositorystore.xml b/server/container/guice/guice-common/src/test/resources/mailrepositorystore.xml
deleted file mode 100644
index 736c1c6..0000000
--- a/server/container/guice/guice-common/src/test/resources/mailrepositorystore.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.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.
- -->
-
-<mailrepositorystore>
-    <mailrepositories>
-        <mailrepository class="org.apache.james.mailrepository.file.FileMailRepository">
-            <protocols>
-                <protocol>file</protocol>
-            </protocols>
-            <config FIFO="false" CACHEKEYS="true"/>
-        </mailrepository>
-        <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
-            <protocols>
-                <protocol>memory</protocol>
-            </protocols>
-        </mailrepository>
-    </mailrepositories>
-</mailrepositorystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepositoryProvider.java b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepositoryProvider.java
new file mode 100644
index 0000000..b8d52ed
--- /dev/null
+++ b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepositoryProvider.java
@@ -0,0 +1,49 @@
+/****************************************************************
+ * 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.mailrepository.file;
+
+import javax.inject.Inject;
+
+import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+
+public class FileMailRepositoryProvider implements MailRepositoryProvider {
+
+    private final FileSystem fileSystem;
+
+    @Inject
+    public FileMailRepositoryProvider(FileSystem fileSystem) {
+        this.fileSystem = fileSystem;
+    }
+
+    @Override
+    public String canonicalName() {
+        return FileMailRepository.class.getCanonicalName();
+    }
+
+    @Override
+    public MailRepository provide(MailRepositoryUrl url) {
+        FileMailRepository fileMailRepository = new FileMailRepository();
+        fileMailRepository.setFileSystem(fileSystem);
+        return fileMailRepository;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java b/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
deleted file mode 100644
index 6cd742e..0000000
--- a/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
+++ /dev/null
@@ -1,64 +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.mailrepository.mock;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-
-public class MockMailRepositoryStore implements MailRepositoryStore {
-
-    private final Map<MailRepositoryUrl, MailRepository> storedObjectMap = new HashMap<>();
-
-    public void add(MailRepositoryUrl url, MailRepository obj) {
-        storedObjectMap.put(url, obj);
-    }
-
-    @Override
-    public MailRepository select(MailRepositoryUrl url) {
-        return storedObjectMap.get(url);
-    }
-
-    @Override
-    public Optional<MailRepository> get(MailRepositoryUrl url) {
-        return Optional.ofNullable(storedObjectMap.get(url));
-    }
-
-    @Override
-    public Stream<MailRepository> getByPath(MailRepositoryPath path) {
-        return storedObjectMap
-                .keySet()
-                .stream()
-                .filter((MailRepositoryUrl key) -> key.getPath().equals(path))
-                .map(storedObjectMap::get);
-    }
-
-    @Override
-    public Stream<MailRepositoryUrl> getUrls() {
-        return storedObjectMap.keySet().stream();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-memory/pom.xml b/server/data/data-memory/pom.xml
index b2f2b5a..45fac4d 100644
--- a/server/data/data-memory/pom.xml
+++ b/server/data/data-memory/pom.xml
@@ -35,6 +35,11 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-mailet-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>event-sourcing-event-store-memory</artifactId>
             <scope>test</scope>
         </dependency>
@@ -64,6 +69,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
new file mode 100644
index 0000000..8da1b20
--- /dev/null
+++ b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
@@ -0,0 +1,185 @@
+/****************************************************************
+ * 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.mailrepository.memory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.apache.commons.configuration.CombinedConfiguration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryPath;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
+import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
+import org.apache.james.mailrepository.api.Protocol;
+import org.apache.james.repository.api.Initializable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableList;
+
+public class MemoryMailRepositoryStore implements MailRepositoryStore, Configurable {
+    private static final Logger LOGGER = LoggerFactory.getLogger(MemoryMailRepositoryStore.class);
+
+    private final MailRepositoryUrlStore urlStore;
+    private final Set<MailRepositoryProvider> mailRepositories;
+    private final ConcurrentMap<MailRepositoryUrl, MailRepository> destinationToRepositoryAssociations;
+    private final Map<Protocol, MailRepositoryProvider> protocolToRepositoryProvider;
+    private final Map<Protocol, HierarchicalConfiguration> perProtocolMailRepositoryDefaultConfiguration;
+    private HierarchicalConfiguration configuration;
+
+    @Inject
+    public MemoryMailRepositoryStore(MailRepositoryUrlStore urlStore, Set<MailRepositoryProvider> mailRepositories) {
+        this.urlStore = urlStore;
+        this.mailRepositories = mailRepositories;
+        this.destinationToRepositoryAssociations = new ConcurrentHashMap<>();
+        this.protocolToRepositoryProvider = new HashMap<>();
+        this.perProtocolMailRepositoryDefaultConfiguration = new HashMap<>();
+    }
+
+    @Override
+    public Stream<MailRepositoryUrl> getUrls() {
+        return urlStore.listDistinct();
+    }
+
+    @Override
+    public void configure(HierarchicalConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    public void init() throws Exception {
+        LOGGER.info("JamesMailStore init... {}", this);
+        List<HierarchicalConfiguration> registeredClasses = retrieveRegisteredClassConfiguration();
+        for (HierarchicalConfiguration registeredClass : registeredClasses) {
+            readConfigurationEntry(registeredClass);
+        }
+    }
+
+    private List<HierarchicalConfiguration> retrieveRegisteredClassConfiguration() {
+        try {
+            return configuration.configurationsAt("mailrepositories.mailrepository");
+        } catch (Exception e) {
+            LOGGER.warn("Could not process configuration. Skipping Mail Repository initialization.", e);
+            return ImmutableList.of();
+        }
+    }
+
+    @Override
+    public Optional<MailRepository> get(MailRepositoryUrl url) {
+        if (urlStore.contains(url)) {
+            return Optional.of(select(url));
+        }
+        return Optional.empty();
+    }
+
+    @Override
+    public Stream<MailRepository> getByPath(MailRepositoryPath path) {
+        return urlStore.listDistinct()
+            .filter(url -> url.getPath().equals(path))
+            .map(this::select);
+    }
+
+    @Override
+    public MailRepository select(MailRepositoryUrl mailRepositoryUrl) {
+        return Optional.ofNullable(destinationToRepositoryAssociations.get(mailRepositoryUrl))
+            .orElseGet(Throwing.supplier(
+                () -> createNewMailRepository(mailRepositoryUrl))
+                .sneakyThrow());
+    }
+
+    private MailRepository createNewMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
+        MailRepository newMailRepository = retrieveMailRepository(mailRepositoryUrl);
+        urlStore.add(mailRepositoryUrl);
+        newMailRepository = initializeNewRepository(newMailRepository, createRepositoryCombinedConfig(mailRepositoryUrl));
+        MailRepository previousRepository = destinationToRepositoryAssociations.putIfAbsent(mailRepositoryUrl, newMailRepository);
+        return Optional.ofNullable(previousRepository)
+            .orElse(newMailRepository);
+    }
+
+    private void readConfigurationEntry(HierarchicalConfiguration repositoryConfiguration) throws ConfigurationException {
+        String className = repositoryConfiguration.getString("[@class]");
+        MailRepositoryProvider usedMailRepository = mailRepositories.stream()
+            .filter(mailRepositoryProvider -> mailRepositoryProvider.canonicalName().equals(className))
+            .findAny()
+            .orElseThrow(() -> new ConfigurationException("MailRepository " + className + " has not been registered"));
+        for (String protocol : repositoryConfiguration.getStringArray("protocols.protocol")) {
+            protocolToRepositoryProvider.put(new Protocol(protocol), usedMailRepository);
+            registerRepositoryDefaultConfiguration(repositoryConfiguration, new Protocol(protocol));
+        }
+    }
+
+    private void registerRepositoryDefaultConfiguration(HierarchicalConfiguration repositoryConfiguration, Protocol protocol) {
+        HierarchicalConfiguration defConf = null;
+        if (repositoryConfiguration.getKeys("config").hasNext()) {
+            defConf = repositoryConfiguration.configurationAt("config");
+        }
+        if (defConf != null) {
+            perProtocolMailRepositoryDefaultConfiguration.put(protocol, defConf);
+        }
+    }
+
+    private CombinedConfiguration createRepositoryCombinedConfig(MailRepositoryUrl mailRepositoryUrl) {
+        CombinedConfiguration config = new CombinedConfiguration();
+        HierarchicalConfiguration defaultProtocolConfig = perProtocolMailRepositoryDefaultConfiguration.get(mailRepositoryUrl.getProtocol());
+        if (defaultProtocolConfig != null) {
+            config.addConfiguration(defaultProtocolConfig);
+        }
+        DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
+        builder.addProperty("[@destinationURL]", mailRepositoryUrl.asString());
+        config.addConfiguration(builder);
+        return config;
+    }
+
+    private MailRepository initializeNewRepository(MailRepository mailRepository, CombinedConfiguration config) throws MailRepositoryStoreException {
+        try {
+            if (mailRepository instanceof Configurable) {
+                ((Configurable) mailRepository).configure(config);
+            }
+            if (mailRepository instanceof Initializable) {
+                ((Initializable) mailRepository).init();
+            }
+            return mailRepository;
+        } catch (Exception e) {
+            throw new MailRepositoryStoreException("Cannot init mail repository", e);
+        }
+    }
+
+    private MailRepository retrieveMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
+        Protocol protocol = mailRepositoryUrl.getProtocol();
+        return Optional.ofNullable(protocolToRepositoryProvider.get(protocol))
+            .orElseThrow(() -> new MailRepositoryStoreException("No Mail Repository associated with " + protocol.getValue()))
+            .provide(mailRepositoryUrl);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
new file mode 100644
index 0000000..bf2d55a
--- /dev/null
+++ b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
@@ -0,0 +1,257 @@
+/****************************************************************
+ * 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.mailrepository.memory;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryPath;
+import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+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.apache.james.util.concurrency.ConcurrentTestRunner;
+import org.apache.mailet.base.test.FakeMail;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.Sets;
+
+public class MemoryMailRepositoryStoreTest {
+    private static final MailRepositoryUrl MEMORY1_REPO = MailRepositoryUrl.from("memory1://repo");
+    private static final MailRepositoryUrl UNKNOWN_PROTOCOL_REPO = MailRepositoryUrl.from("toto://repo");
+    private static final MailRepositoryUrl MEMORY2_REPO = MailRepositoryUrl.from("memory2://repo");
+    private static final MailRepositoryPath PATH_REPO = MailRepositoryPath.from("repo");
+
+    private MemoryMailRepositoryUrlStore urlStore;
+
+    private MemoryMailRepositoryStore repositoryStore;
+    private FileSystemImpl fileSystem;
+    private Configuration configuration;
+
+    @Before
+    public void setUp() throws Exception {
+        configuration = Configuration.builder()
+            .workingDirectory("../")
+            .configurationFromClasspath()
+            .build();
+        fileSystem = new FileSystemImpl(configuration.directories());
+        urlStore = new MemoryMailRepositoryUrlStore();
+        repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
+                new MemoryMailRepositoryProvider(),
+                new MemoryMailRepositoryProvider()));
+        repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
+            .getConfiguration("mailrepositorystore"));
+        repositoryStore.init();
+    }
+
+    @Test(expected = MailRepositoryStore.MailRepositoryStoreException.class)
+    public void selectingANonRegisteredProtocolShouldFail() {
+        repositoryStore.select(MailRepositoryUrl.from("proto://repo"));
+    }
+
+    @Test
+    public void selectingARegisteredProtocolShouldWork() {
+        assertThat(repositoryStore.select(MEMORY1_REPO))
+            .isInstanceOf(MemoryMailRepository.class);
+    }
+
+    @Test
+    public void selectingTwiceARegisteredProtocolWithSameDestinationShouldReturnTheSameResult() {
+        assertThat(repositoryStore.select(MEMORY1_REPO))
+            .isEqualTo(repositoryStore.select(MEMORY1_REPO));
+    }
+
+    @Test
+    public void selectingTwiceARegisteredProtocolWithDifferentDestinationShouldReturnDifferentResults() {
+        assertThat(repositoryStore.select(MEMORY1_REPO))
+            .isNotEqualTo(repositoryStore.select(MailRepositoryUrl.from("memory1://repo1")));
+    }
+
+    @Test
+    public void configureShouldThrowWhenNonValidClassesAreProvided() throws Exception {
+        repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
+            new MemoryMailRepositoryProvider()));
+        repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration).getConfiguration("fakemailrepositorystore"));
+
+        assertThatThrownBy(() -> repositoryStore.init())
+            .isInstanceOf(ConfigurationException.class);
+    }
+
+    @Test
+    public void configureShouldNotThrowOnEmptyConfiguration() throws Exception {
+        repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
+            new MemoryMailRepositoryProvider()));
+        repositoryStore.configure(new HierarchicalConfiguration());
+
+        repositoryStore.init();
+    }
+
+    @Test
+    public void getUrlsShouldBeEmptyIfNoSelectWerePerformed() {
+        assertThat(repositoryStore.getUrls()).isEmpty();
+    }
+
+    @Test
+    public void getUrlsShouldReturnUsedUrls() {
+        MailRepositoryUrl url1 = MailRepositoryUrl.from("memory1://repo1");
+        MailRepositoryUrl url2 = MailRepositoryUrl.from("memory1://repo2");
+        MailRepositoryUrl url3 = MailRepositoryUrl.from("memory1://repo3");
+        repositoryStore.select(url1);
+        repositoryStore.select(url2);
+        repositoryStore.select(url3);
+        assertThat(repositoryStore.getUrls()).containsOnly(url1, url2, url3);
+    }
+
+    @Test
+    public void getUrlsResultsShouldNotBeDuplicated() {
+        repositoryStore.select(MEMORY1_REPO);
+        repositoryStore.select(MEMORY1_REPO);
+        assertThat(repositoryStore.getUrls()).containsExactly(MEMORY1_REPO);
+    }
+
+    @Test
+    public void getPathsShouldBeEmptyIfNoSelectWerePerformed() {
+        assertThat(repositoryStore.getPaths()).isEmpty();
+    }
+
+    @Test
+    public void getPathsShouldReturnUsedUrls() {
+        MailRepositoryPath path1 = MailRepositoryPath.from("repo1");
+        MailRepositoryPath path2 = MailRepositoryPath.from("repo1");
+        MailRepositoryPath path3 = MailRepositoryPath.from("repo1");
+        repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path1, "memory1"));
+        repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path2, "memory1"));
+        repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path3, "memory1"));
+        assertThat(repositoryStore.getPaths()).containsOnly(path1, path2, path3);
+    }
+
+    @Test
+    public void getPathsResultsShouldNotBeDuplicatedWithTheSameProtocol() {
+        repositoryStore.select(MEMORY1_REPO);
+        repositoryStore.select(MEMORY1_REPO);
+        assertThat(repositoryStore.getPaths()).containsExactly(PATH_REPO);
+    }
+
+    @Test
+    public void getPathsResultsShouldNotBeDuplicatedWithDifferentProtocols() {
+        repositoryStore.select(MEMORY1_REPO);
+        repositoryStore.select(MEMORY2_REPO);
+        assertThat(repositoryStore.getPaths()).containsExactly(PATH_REPO);
+    }
+
+    @Test
+    public void getShouldReturnEmptyWhenUrlNotInUse() {
+        assertThat(repositoryStore.get(MEMORY1_REPO))
+            .isEmpty();
+    }
+
+    @Test
+    public void getShouldReturnRepositoryWhenUrlExists() {
+        urlStore.add(MEMORY1_REPO);
+
+        assertThat(repositoryStore.get(MEMORY1_REPO))
+            .isNotEmpty();
+    }
+
+    @Test
+    public void getByPathShouldReturnRepositoryWhenUrlExists() {
+        urlStore.add(MEMORY1_REPO);
+
+        assertThat(repositoryStore.getByPath(MEMORY1_REPO.getPath()))
+            .isNotEmpty();
+    }
+
+    @Test
+    public void getShouldReturnPreviouslyCreatedMailRepository() {
+        MailRepository mailRepository = repositoryStore.select(MEMORY1_REPO);
+
+        assertThat(repositoryStore.get(MEMORY1_REPO))
+            .contains(mailRepository);
+    }
+
+    @Test
+    public void getByPathShouldReturnEmptyWhenUrlNotInUse() {
+        assertThat(repositoryStore.getByPath(PATH_REPO))
+            .isEmpty();
+    }
+
+    @Test
+    public void getByPathShouldReturnPreviouslyCreatedMatchingMailRepository() {
+        MailRepository mailRepository = repositoryStore.select(MEMORY1_REPO);
+
+        assertThat(repositoryStore.getByPath(PATH_REPO))
+            .contains(mailRepository);
+    }
+
+    @Test
+    public void getByPathShouldReturnPreviouslyCreatedMatchingMailRepositories() {
+        MailRepository mailRepositoryFile = repositoryStore.select(MEMORY1_REPO);
+        MailRepository mailRepositoryArbitrary = repositoryStore.select(MEMORY2_REPO);
+
+        assertThat(repositoryStore.getByPath(PATH_REPO))
+            .contains(mailRepositoryFile)
+            .contains(mailRepositoryArbitrary);
+    }
+
+    @Test
+    public void getByPathShouldReturnEmptyWhenNoMailRepositoriesAreMatching() {
+        repositoryStore.select(MEMORY1_REPO);
+
+        assertThat(repositoryStore.getByPath(MailRepositoryPath.from("unknown")))
+            .isEmpty();
+    }
+
+    @Test
+    public void selectShouldNotReturnDifferentResultsWhenUsedInAConcurrentEnvironment() throws Exception {
+        MailRepositoryUrl url = MailRepositoryUrl.from("memory1://repo");
+        int threadCount = 10;
+
+        ConcurrentTestRunner concurrentTestRunner = ConcurrentTestRunner.builder()
+            .threadCount(10)
+            .build((threadNb, operationNb) -> repositoryStore.select(url)
+                .store(FakeMail.builder()
+                    .name("name" + threadNb)
+                    .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                        .setText("Any body"))
+                    .build()));
+        concurrentTestRunner.run().awaitTermination(1, TimeUnit.MINUTES);
+        concurrentTestRunner.assertNoException();
+
+        long actualSize = repositoryStore.get(url).get().size();
+
+        assertThat(actualSize).isEqualTo(threadCount);
+    }
+
+    @Test
+    public void selectShouldNotAddUrlWhenProtocolDoNotExist() {
+        assertThatThrownBy(() -> repositoryStore.select(UNKNOWN_PROTOCOL_REPO));
+
+        assertThat(urlStore.listDistinct()).isEmpty();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/src/test/resources/fakemailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/test/resources/fakemailrepositorystore.xml b/server/data/data-memory/src/test/resources/fakemailrepositorystore.xml
new file mode 100644
index 0000000..8894f8d
--- /dev/null
+++ b/server/data/data-memory/src/test/resources/fakemailrepositorystore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+    <mailrepositories>
+        <mailrepository class="org.apache.james.mailrepository.memory.None">
+            <protocols>
+                <protocol>memory</protocol>
+            </protocols>
+        </mailrepository>
+    </mailrepositories>
+</mailrepositorystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/test/resources/mailrepositorystore.xml b/server/data/data-memory/src/test/resources/mailrepositorystore.xml
new file mode 100644
index 0000000..8e47947
--- /dev/null
+++ b/server/data/data-memory/src/test/resources/mailrepositorystore.xml
@@ -0,0 +1,35 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+    <mailrepositories>
+        <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+            <protocols>
+                <protocol>memory1</protocol>
+            </protocols>
+        </mailrepository>
+        <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+            <protocols>
+                <protocol>memory2</protocol>
+            </protocols>
+        </mailrepository>
+    </mailrepositories>
+</mailrepositorystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
index 55c704a..37f7282 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
@@ -32,8 +32,12 @@ import javax.mail.MessagingException;
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.apache.james.mailrepository.memory.MemoryMailRepository;
-import org.apache.james.mailrepository.mock.MockMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
+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.apache.mailet.Mail;
 import org.apache.mailet.base.MailAddressFixture;
 import org.apache.mailet.base.test.FakeMail;
@@ -41,6 +45,8 @@ import org.apache.mailet.base.test.FakeMailetConfig;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import com.google.common.collect.Sets;
+
 class ToSenderDomainRepositoryTest {
 
     private static final String MEMORY_URL_PREFIX = "memory://var/mail/dlp/";
@@ -51,15 +57,29 @@ class ToSenderDomainRepositoryTest {
         .build();
 
     private ToSenderDomainRepository mailet;
-    private MockMailRepositoryStore mailRepositoryStore;
+    private MemoryMailRepositoryStore mailRepositoryStore;
+    private FileSystemImpl fileSystem;
+    private Configuration configuration;
 
     @BeforeEach
-    void setup() {
-        mailRepositoryStore = new MockMailRepositoryStore();
-        mailRepositoryStore.add(JAMES_LOCAL_REPOSITORY_URL, new MemoryMailRepository());
+    void setup() throws Exception {
+        createMailRepositoryStore();
         mailet = new ToSenderDomainRepository(mailRepositoryStore);
     }
 
+    private void createMailRepositoryStore() throws Exception {
+        configuration = Configuration.builder()
+                .workingDirectory("../")
+                .configurationFromClasspath()
+                .build();
+        fileSystem = new FileSystemImpl(configuration.directories());
+        MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
+        mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
+        mailRepositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
+                .getConfiguration("mailrepositorystore"));
+        mailRepositoryStore.init();
+    }
+
     @Test
     void initShouldThrowExceptionWhenUrlPrefixIsAbsent() {
         FakeMailetConfig mailetConfig = FakeMailetConfig.builder()

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailet/mailets/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/resources/mailrepositorystore.xml b/server/mailet/mailets/src/test/resources/mailrepositorystore.xml
new file mode 100644
index 0000000..ed3e003
--- /dev/null
+++ b/server/mailet/mailets/src/test/resources/mailrepositorystore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+    <mailrepositories>
+        <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+            <protocols>
+                <protocol>memory</protocol>
+            </protocols>
+        </mailrepository>
+    </mailrepositories>
+</mailrepositorystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryProvider.java b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryProvider.java
new file mode 100644
index 0000000..18ffa96
--- /dev/null
+++ b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryProvider.java
@@ -0,0 +1,27 @@
+/****************************************************************
+ * 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.mailrepository.api;
+
+public interface MailRepositoryProvider {
+
+    String canonicalName();
+
+    MailRepository provide(MailRepositoryUrl url);
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java
new file mode 100644
index 0000000..ddbd1ba
--- /dev/null
+++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java
@@ -0,0 +1,52 @@
+/****************************************************************
+ * 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.mailrepository.cassandra;
+
+import javax.inject.Inject;
+
+import org.apache.james.blob.api.ObjectStore;
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+
+public class CassandraMailRepositoryProvider implements MailRepositoryProvider {
+    private final CassandraMailRepositoryKeysDAO keysDAO;
+    private final CassandraMailRepositoryCountDAO countDAO;
+    private final CassandraMailRepositoryMailDAO mailDAO;
+    private final ObjectStore objectStore;
+
+    @Inject
+    public CassandraMailRepositoryProvider(CassandraMailRepositoryKeysDAO keysDAO, CassandraMailRepositoryCountDAO countDAO, CassandraMailRepositoryMailDAO mailDAO, ObjectStore objectStore) {
+        this.keysDAO = keysDAO;
+        this.countDAO = countDAO;
+        this.mailDAO = mailDAO;
+        this.objectStore = objectStore;
+    }
+
+    @Override
+    public String canonicalName() {
+        return CassandraMailRepository.class.getCanonicalName();
+    }
+
+    @Override
+    public MailRepository provide(MailRepositoryUrl url) {
+        return new CassandraMailRepository(url, keysDAO, countDAO, mailDAO, objectStore);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryProvider.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryProvider.java
new file mode 100644
index 0000000..cdde19d
--- /dev/null
+++ b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryProvider.java
@@ -0,0 +1,36 @@
+/****************************************************************
+ * 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.mailrepository.memory;
+
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+
+public class MemoryMailRepositoryProvider implements MailRepositoryProvider {
+    @Override
+    public String canonicalName() {
+        return MemoryMailRepository.class.getCanonicalName();
+    }
+
+    @Override
+    public MailRepository provide(MailRepositoryUrl url) {
+        return new MemoryMailRepository();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/protocols-smtp/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/pom.xml b/server/protocols/protocols-smtp/pom.xml
index 3a4f615..be02458 100644
--- a/server/protocols/protocols-smtp/pom.xml
+++ b/server/protocols/protocols-smtp/pom.xml
@@ -74,17 +74,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-data-library</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-data-library</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-memory</artifactId>
         </dependency>
         <dependency>
@@ -116,6 +105,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-protocols-library</artifactId>
         </dependency>
         <dependency>


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


[09/17] james-project git commit: JAMES-2524 Update org.mnode.ical4j:ical4j to 3.0.1

Posted by bt...@apache.org.
JAMES-2524 Update org.mnode.ical4j:ical4j to 3.0.1


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

Branch: refs/heads/master
Commit: b5e7d3744ad9c53054b0a266785746b23c3ad50e
Parents: 9648a6a
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:33:09 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 mailet/icalendar/pom.xml | 2 +-
 pom.xml                  | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b5e7d374/mailet/icalendar/pom.xml
----------------------------------------------------------------------
diff --git a/mailet/icalendar/pom.xml b/mailet/icalendar/pom.xml
index 767e9fb..40dd824 100644
--- a/mailet/icalendar/pom.xml
+++ b/mailet/icalendar/pom.xml
@@ -102,7 +102,7 @@
         <dependency>
             <groupId>org.mnode.ical4j</groupId>
             <artifactId>ical4j</artifactId>
-            <version>3.0.0</version>
+            <version>3.0.1</version>
         </dependency>
         <dependency>
             <groupId>javax.cache</groupId>

http://git-wip-us.apache.org/repos/asf/james-project/blob/b5e7d374/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c65c271..5e4f9d8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -649,7 +649,6 @@
         <maven-reporting-impl.version>2.2</maven-reporting-impl.version>
         <maven-reporting-api.version>3.0</maven-reporting-api.version>
         <qdox.version>2.0-M9</qdox.version>
-        <ical4j.version>2.0.2</ical4j.version>
         <guavate.version>1.0.0</guavate.version>
         <javax.activation.groupId>javax.activation</javax.activation.groupId>
         <javax.activation.artifactId>activation</javax.activation.artifactId>


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


[03/17] james-project git commit: JAMES-2524 Update nl.jqno.equalsverifier:equalsverifier to 2.5.1

Posted by bt...@apache.org.
JAMES-2524 Update nl.jqno.equalsverifier:equalsverifier to 2.5.1


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

Branch: refs/heads/master
Commit: 5d0ba58fb9d48b8c6953153542457b2d81e5d758
Parents: d4ad007
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:04:26 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5d0ba58f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f5c2c9d..778c5e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1952,7 +1952,7 @@
             <dependency>
                 <groupId>nl.jqno.equalsverifier</groupId>
                 <artifactId>equalsverifier</artifactId>
-                <version>2.4.8</version>
+                <version>2.5.1</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.activemq</groupId>


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


[16/17] james-project git commit: JAMES-2522 Moving and renaming classes

Posted by bt...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
index 26acc87..4f492a5 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
@@ -49,9 +49,10 @@ import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.filesystem.api.mock.MockFileSystem;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.mock.MockMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
 import org.apache.james.metrics.api.Metric;
 import org.apache.james.protocols.api.utils.ProtocolServerUtils;
 import org.apache.james.protocols.lib.mock.MockProtocolHandlerLoader;
@@ -61,6 +62,9 @@ import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
 import org.apache.james.queue.memory.MemoryMailQueueFactory;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.memory.MemoryRecipientRewriteTable;
+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.apache.james.smtpserver.netty.SMTPServer;
 import org.apache.james.smtpserver.netty.SmtpMetricsImpl;
 import org.apache.james.user.api.UsersRepository;
@@ -75,6 +79,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
 
 public class SMTPServerTest {
 
@@ -167,9 +172,9 @@ public class SMTPServerTest {
     protected HashedWheelTimer hashedWheelTimer;
     protected final MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
     protected AlterableDNSServer dnsServer;
-    protected MockMailRepositoryStore store;
-    protected MockFileSystem fileSystem;
-    protected DNSService dnsService;
+    protected MemoryMailRepositoryStore mailRepositoryStore;
+    protected FileSystemImpl fileSystem;
+    protected Configuration configuration;
     protected MockProtocolHandlerLoader chain;
     protected MemoryMailQueueFactory queueFactory;
     protected MemoryMailQueueFactory.MemoryMailQueue queue;
@@ -178,6 +183,8 @@ public class SMTPServerTest {
 
     @Before
     public void setUp() throws Exception {
+        createMailRepositoryStore();
+
         setUpFakeLoader();
         // slf4j can't set programmatically any log level. It's just a facade
         // log.setLevel(SimpleLog.LOG_LEVEL_ALL);
@@ -186,6 +193,19 @@ public class SMTPServerTest {
         setUpSMTPServer();
     }
 
+    protected void createMailRepositoryStore() throws Exception {
+        configuration = Configuration.builder()
+                .workingDirectory("../")
+                .configurationFromClasspath()
+                .build();
+        fileSystem = new FileSystemImpl(configuration.directories());
+        MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
+        mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
+        mailRepositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
+                .getConfiguration("mailrepositorystore"));
+        mailRepositoryStore.init();
+    }
+
     protected SMTPServer createSMTPServer(SmtpMetricsImpl smtpMetrics) {
         return new SMTPServer(smtpMetrics);
     }
@@ -221,10 +241,8 @@ public class SMTPServerTest {
         dnsServer = new AlterableDNSServer();
         chain.put("dnsservice", DNSService.class, dnsServer);
     
-        store = new MockMailRepositoryStore();
-        chain.put("mailStore", MailRepositoryStore.class, store);
-        fileSystem = new MockFileSystem();
-    
+        chain.put("mailStore", MailRepositoryStore.class, mailRepositoryStore);
+
         chain.put("fileSystem", FileSystem.class, fileSystem);
 
         MemoryRecipientRewriteTable rewriteTable = new MemoryRecipientRewriteTable();

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
index 565d550..fa2831d 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
@@ -150,7 +150,7 @@ public class SMTPTestConfiguration extends DefaultConfigurationBuilder {
         addProperty("addressBracketsEnforcement", addressBracketsEnforcement);
 
         addProperty("tls.[@startTLS]", startTLS);
-        addProperty("tls.keystore", "file://conf/test_keystore");
+        addProperty("tls.keystore", "test_keystore");
         addProperty("tls.secret", "jamestest");
         if (verifyIdentity) {
             addProperty("verifyIdentity", verifyIdentity);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/protocols-smtp/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/resources/mailrepositorystore.xml b/server/protocols/protocols-smtp/src/test/resources/mailrepositorystore.xml
new file mode 100644
index 0000000..ed3e003
--- /dev/null
+++ b/server/protocols/protocols-smtp/src/test/resources/mailrepositorystore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+    <mailrepositories>
+        <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+            <protocols>
+                <protocol>memory</protocol>
+            </protocols>
+        </mailrepository>
+    </mailrepositories>
+</mailrepositorystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/webadmin/webadmin-mailrepository/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/pom.xml b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
index 4d120ec..9c43eec 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
@@ -44,6 +44,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-data-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-mailrepository-api</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 77b16b3..6cee9b7 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -29,19 +29,12 @@ import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.isEmptyOrNullString;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
 
 import java.nio.charset.StandardCharsets;
 import java.time.ZoneId;
@@ -50,8 +43,6 @@ import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
-import java.util.Optional;
-import java.util.stream.Stream;
 
 import javax.mail.internet.MimeMessage;
 
@@ -59,15 +50,21 @@ import org.apache.james.core.MailAddress;
 import org.apache.james.core.builder.MimeMessageBuilder;
 import org.apache.james.core.builder.MimeMessageBuilder.BodyPartBuilder;
 import org.apache.james.mailrepository.api.MailKey;
+import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.api.ManageableMailQueue;
 import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
 import org.apache.james.queue.memory.MemoryMailQueueFactory;
+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.apache.james.task.MemoryTaskManager;
 import org.apache.james.util.ClassLoaderUtils;
 import org.apache.james.webadmin.Constants;
@@ -87,10 +84,8 @@ import org.eclipse.jetty.http.HttpStatus;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.stubbing.Answer;
 
-import com.github.steveash.guavate.Guavate;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
 
 import io.restassured.RestAssured;
 import io.restassured.builder.RequestSpecBuilder;
@@ -99,26 +94,24 @@ import io.restassured.parsing.Parser;
 
 public class MailRepositoriesRoutesTest {
 
-    private static final MailRepositoryUrl URL_MY_REPO = MailRepositoryUrl.from("url://myRepo");
+    private static final MailRepositoryUrl URL_MY_REPO = MailRepositoryUrl.from("memory://myRepo");
     private static final MailRepositoryPath PATH_MY_REPO = MailRepositoryPath.from("myRepo");
     private static final String PATH_ESCAPED_MY_REPO = "myRepo";
     private static final String MY_REPO_MAILS = "myRepo/mails";
     private static final String CUSTOM_QUEUE = "customQueue";
     private static final String NAME_1 = "name1";
     private static final String NAME_2 = "name2";
-    private static final Answer<?> RETURN_NO_MAIL_REPOSITORY = (invocation) -> Stream.empty();
     private WebAdminServer webAdminServer;
-    private MailRepositoryStore mailRepositoryStore;
-    private MemoryMailRepository mailRepository;
-    private Answer<?> returnMailRepository;
+    private MemoryMailRepositoryStore mailRepositoryStore;
     private ManageableMailQueue spoolQueue;
     private ManageableMailQueue customQueue;
 
+    private FileSystemImpl fileSystem;
+    private Configuration configuration;
+
     @Before
     public void setUp() throws Exception {
-        mailRepositoryStore = mock(MailRepositoryStore.class);
-        mailRepository = new MemoryMailRepository();
-        returnMailRepository = (invocation) -> Stream.of(mailRepository);
+        createMailRepositoryStore();
 
         MemoryTaskManager taskManager = new MemoryTaskManager();
         JsonTransformer jsonTransformer = new JsonTransformer();
@@ -150,59 +143,45 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void putMailRepositoryShouldReturnOkWhenRepositoryIsCreated() throws Exception {
+    public void putMailRepositoryShouldReturnOkWhenRepositoryIsCreated() {
         given()
-            .params("protocol", "url")
+            .params("protocol", "memory")
         .when()
             .put(PATH_ESCAPED_MY_REPO)
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204);
 
-        verify(mailRepositoryStore).create(URL_MY_REPO);
-        verifyNoMoreInteractions(mailRepositoryStore);
+        assertThat(mailRepositoryStore.get(URL_MY_REPO))
+            .isNotEmpty()
+            .containsInstanceOf(MemoryMailRepository.class);
     }
 
     @Test
     public void putMailRepositoryShouldReturnOkWhenRepositoryAlreadyExists() throws Exception {
         given()
-            .params("protocol", "url")
+            .params("protocol", "memory")
         .when()
             .put(PATH_ESCAPED_MY_REPO)
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204);
 
         given()
-            .params("protocol", "url")
+            .params("protocol", "memory")
         .when()
             .put(PATH_ESCAPED_MY_REPO)
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204);
 
-        verify(mailRepositoryStore, times(2)).create(URL_MY_REPO);
-        verifyNoMoreInteractions(mailRepositoryStore);
-    }
-
-    @Test
-    public void putMailRepositoryShouldReturnServerErrorWhenCannotCreateRepository() throws Exception {
-        when(mailRepositoryStore.create(any()))
-            .thenThrow(new MailRepositoryStore.MailRepositoryStoreException("Error while selecting repository url://myRepo"));
+        assertThat(mailRepositoryStore.get(URL_MY_REPO))
+            .isNotEmpty()
+            .containsInstanceOf(MemoryMailRepository.class);
 
-        given()
-            .params("protocol", "url")
-        .when()
-            .put(PATH_ESCAPED_MY_REPO)
-        .then()
-            .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
-            .body("statusCode", is(500))
-            .body("type", is(ErrorResponder.ErrorType.SERVER_ERROR.getType()))
-            .body("message", is("Error while creating a mail repository with path 'myRepo' and protocol 'url'"))
-            .body("details", is("Error while selecting repository url://myRepo"));
+        assertThat(mailRepositoryStore.getByPath(PATH_MY_REPO))
+            .hasSize(1);
     }
 
     @Test
     public void getMailRepositoriesShouldReturnEmptyWhenEmpty() {
-        when(mailRepositoryStore.getPaths()).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
         List<Object> mailRepositories =
             when()
                 .get()
@@ -218,9 +197,8 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void getMailRepositoriesShouldReturnRepositoryWhenOne() {
-        when(mailRepositoryStore.getPaths())
-            .thenAnswer((invocation) -> Stream.of(PATH_MY_REPO));
+    public void getMailRepositoriesShouldReturnRepositoryWhenOne() throws Exception {
+        mailRepositoryStore.create(URL_MY_REPO);
 
         when()
             .get()
@@ -232,10 +210,9 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void getMailRepositoriesShouldReturnTwoRepositoriesWhenTwo() {
-        ImmutableList<MailRepositoryPath> myRepositories = ImmutableList.of(PATH_MY_REPO, MailRepositoryPath.from("mySecondRepo"));
-        when(mailRepositoryStore.getPaths())
-            .thenReturn(myRepositories.stream());
+    public void getMailRepositoriesShouldReturnTwoRepositoriesWhenTwo() throws Exception {
+        mailRepositoryStore.create(URL_MY_REPO);
+        mailRepositoryStore.create(MailRepositoryUrl.from("memory://mySecondRepo"));
 
         List<String> mailRepositories =
             when()
@@ -249,15 +226,11 @@ public class MailRepositoriesRoutesTest {
                 .getList("repository");
 
         assertThat(mailRepositories)
-            .containsOnlyElementsOf(myRepositories.stream()
-                .map(MailRepositoryPath::asString)
-                .collect(Guavate.toImmutableList()));
+            .containsOnly(PATH_ESCAPED_MY_REPO, "mySecondRepo");
     }
 
     @Test
-    public void listingKeysShouldReturnNotFoundWhenNoRepository() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
+    public void listingKeysShouldReturnNotFoundWhenNoRepository() {
         when()
             .get(MY_REPO_MAILS)
         .then()
@@ -267,7 +240,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnEmptyWhenNoMail() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        mailRepositoryStore.create(URL_MY_REPO);
 
         when()
             .get(MY_REPO_MAILS)
@@ -278,7 +251,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnContainedKeys() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -297,7 +270,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldApplyLimitAndOffset() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -321,21 +294,6 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void listingKeysShouldHandleErrorGracefully() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO))
-            .thenThrow(new MailRepositoryStore.MailRepositoryStoreException("message"));
-
-        when()
-            .get(MY_REPO_MAILS)
-        .then()
-            .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
-            .body("statusCode", is(500))
-            .body("type", is(ErrorResponder.ErrorType.SERVER_ERROR.getType()))
-            .body("message", is("Error while listing keys"))
-            .body("details", containsString("message"));
-    }
-
-    @Test
     public void listingKeysShouldReturnErrorOnInvalidOffset() {
         given()
             .param("offset", "invalid")
@@ -363,7 +321,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnEmptyWhenOffsetExceedsSize() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -412,7 +370,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldIgnoreZeroedOffset() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
@@ -445,9 +403,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void retrievingRepositoryShouldReturnNotFoundWhenNone() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
+    public void retrievingRepositoryShouldReturnNotFoundWhenNone() {
         given()
             .get(PATH_ESCAPED_MY_REPO)
         .then()
@@ -456,7 +412,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositoryShouldReturnBasicInformation() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        mailRepositoryStore.create(URL_MY_REPO);
 
         given()
             .get(PATH_ESCAPED_MY_REPO)
@@ -469,7 +425,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositorySizeShouldReturnZeroWhenEmpty() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        mailRepositoryStore.create(URL_MY_REPO);
 
         given()
             .get(PATH_ESCAPED_MY_REPO)
@@ -481,7 +437,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositorySizeShouldReturnNumberOfContainedMails() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
@@ -497,7 +453,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldDisplayItsInformation() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         String name = NAME_1;
         String sender = "sender@domain";
@@ -536,7 +492,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldDisplayAllAdditionalFieldsWhenRequested() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name = NAME_1;
 
         BodyPartBuilder textMessage = MimeMessageBuilder.bodyPartBuilder()
@@ -639,7 +595,8 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldDisplayAllValidAdditionalFieldsWhenRequested() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
+
         String name = NAME_1;
         String sender = "sender@domain";
         String recipient1 = "recipient1@domain";
@@ -669,7 +626,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldDisplayCorrectlyEncodedHeadersInValidAdditionalFieldsWhenRequested() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name = NAME_1;
         String sender = "sender@domain";
         String recipient1 = "recipient1@domain";
@@ -697,7 +654,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldDisplayAllValidAdditionalFieldsEvenTheDuplicatedOnesWhenRequested() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name = NAME_1;
         String sender = "sender@domain";
         String recipient1 = "recipient1@domain";
@@ -727,7 +684,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldFailWhenAnUnknownFieldIsRequested() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name = NAME_1;
         String sender = "sender@domain";
         String recipient1 = "recipient1@domain";
@@ -752,7 +709,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldNotFailWhenOnlyNameProperty() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
@@ -770,8 +727,8 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void retrievingAMailShouldFailWhenUnknown() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+    public void retrievingAMailShouldFailWhenUnknown() throws Exception{
+        mailRepositoryStore.create(URL_MY_REPO);
 
         String name = "name";
         when()
@@ -790,7 +747,7 @@ public class MailRepositoriesRoutesTest {
                 .build();
         RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.TEXT);
 
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         String name = NAME_1;
         FakeMail mail = FakeMail.builder()
@@ -818,13 +775,13 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void downloadingAMailShouldFailWhenUnknown() throws Exception {
+        mailRepositoryStore.create(URL_MY_REPO);
+
         RestAssured.requestSpecification = new RequestSpecBuilder().setPort(webAdminServer.getPort().getValue())
             .setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
             .build();
         RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.TEXT);
 
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
-
         String name = "name";
         given()
             .accept(Constants.RFC822_CONTENT_TYPE)
@@ -839,7 +796,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldRemoveIt() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
@@ -861,7 +818,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldReturnOkWhenExist() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
@@ -875,7 +832,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldReturnOkWhenNotExist() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        mailRepositoryStore.create(URL_MY_REPO);
 
         when()
             .delete(PATH_ESCAPED_MY_REPO + "/mails/name")
@@ -885,7 +842,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAllMailsShouldCreateATask() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        mailRepositoryStore.create(URL_MY_REPO);
 
         when()
             .delete(PATH_ESCAPED_MY_REPO + "/mails")
@@ -897,7 +854,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void clearTaskShouldHaveDetails() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
@@ -929,7 +886,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void clearTaskShouldRemoveAllTheMailsFromTheMailRepository() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
 
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
@@ -955,9 +912,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void patchShouldReturnNotFoundWhenNoMailRepository() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
+    public void patchShouldReturnNotFoundWhenNoMailRepository() {
         when()
             .delete(PATH_ESCAPED_MY_REPO + "/mails")
         .then()
@@ -968,9 +923,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void deleteShouldReturnNotFoundWhenNoMailRepository() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
+    public void deleteShouldReturnNotFoundWhenNoMailRepository() {
         when()
             .delete(PATH_ESCAPED_MY_REPO + "/mails/any")
         .then()
@@ -982,7 +935,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingAllTaskShouldCreateATask() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        mailRepositoryStore.create(URL_MY_REPO);
 
         given()
             .param("action", "reprocess")
@@ -995,9 +948,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void reprocessingAllTaskShouldRejectInvalidActions() throws Exception {
-        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+    public void reprocessingAllTaskShouldRejectInvalidActions() {
         given()
             .param("action", "invalid")
         .when()
@@ -1010,9 +961,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void reprocessingAllTaskShouldRequireAction() throws Exception {
-        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+    public void reprocessingAllTaskShouldRequireAction() {
         when()
             .patch(PATH_ESCAPED_MY_REPO + "/mails")
         .then()
@@ -1024,7 +973,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingAllTaskShouldIncludeDetailsWhenDefaultValues() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1058,7 +1007,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingAllTaskShouldIncludeDetails() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name1 = "name1";
         String name2 = "name2";
         mailRepository.store(FakeMail.builder()
@@ -1097,7 +1046,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingAllTaskShouldClearMailRepository() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name1 = "name1";
         String name2 = "name2";
         mailRepository.store(FakeMail.builder()
@@ -1125,7 +1074,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingAllTaskShouldEnqueueMailsOnDefaultQueue() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1151,7 +1100,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingAllTaskShouldPreserveStateWhenProcessorIsNotSpecified() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String state1 = "state1";
         String state2 = "state2";
         mailRepository.store(FakeMail.builder()
@@ -1181,7 +1130,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingAllTaskShouldOverWriteStateWhenProcessorSpecified() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String state1 = "state1";
         String state2 = "state2";
         mailRepository.store(FakeMail.builder()
@@ -1213,7 +1162,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingAllTaskShouldEnqueueMailsOnSpecifiedQueue() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1240,8 +1189,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldCreateATask() throws Exception {
-        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1258,8 +1206,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldRejectInvalidActions() throws Exception {
-        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1277,8 +1224,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldRequireAction() throws Exception {
-        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1294,7 +1240,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldIncludeDetailsWhenDefaultValues() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name1 = "name1";
         String name2 = "name2";
         mailRepository.store(FakeMail.builder()
@@ -1329,7 +1275,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldIncludeDetails() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name1 = "name1";
         String name2 = "name2";
         mailRepository.store(FakeMail.builder()
@@ -1367,7 +1313,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldRemoveMailFromRepository() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String name1 = "name1";
         String name2 = "name2";
         mailRepository.store(FakeMail.builder()
@@ -1396,7 +1342,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldEnqueueMailsOnDefaultQueue() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1422,7 +1368,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldPreserveStateWhenProcessorIsNotSpecified() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String state1 = "state1";
         String state2 = "state2";
         mailRepository.store(FakeMail.builder()
@@ -1452,7 +1398,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldOverWriteStateWhenProcessorSpecified() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         String state1 = "state1";
         String state2 = "state2";
         mailRepository.store(FakeMail.builder()
@@ -1484,7 +1430,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldEnqueueMailsOnSpecifiedQueue() throws Exception {
-        when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1511,7 +1457,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldNotEnqueueUnknownMailKey() throws Exception {
-        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1536,7 +1482,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldNotRemoveMailFromRepositoryWhenUnknownMailKey() throws Exception {
-        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1561,7 +1507,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void reprocessingOneTaskShouldFailWhenUnknownMailKey() throws Exception {
-        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
         mailRepository.store(FakeMail.builder()
             .name(NAME_1)
             .build());
@@ -1584,4 +1530,16 @@ public class MailRepositoriesRoutesTest {
             .body("status", is("failed"));
     }
 
+    private void createMailRepositoryStore() throws Exception {
+        configuration = Configuration.builder()
+                .workingDirectory("../")
+                .configurationFromClasspath()
+                .build();
+        fileSystem = new FileSystemImpl(configuration.directories());
+        MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
+        mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
+        mailRepositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
+                .getConfiguration("mailrepositorystore"));
+        mailRepositoryStore.init();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mailrepositorystore.xml b/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mailrepositorystore.xml
new file mode 100644
index 0000000..ed3e003
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mailrepositorystore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+    <mailrepositories>
+        <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+            <protocols>
+                <protocol>memory</protocol>
+            </protocols>
+        </mailrepository>
+    </mailrepositories>
+</mailrepositorystore>


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


[04/17] james-project git commit: JAMES-2524 Update io.swagger:swagger-jaxrs to 1.5.21

Posted by bt...@apache.org.
JAMES-2524 Update io.swagger:swagger-jaxrs to 1.5.21


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

Branch: refs/heads/master
Commit: d4ad007ee4e4aab80dc06688814d00ff96add041
Parents: 97078c8
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:00:19 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 server/protocols/webadmin/webadmin-core/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d4ad007e/server/protocols/webadmin/webadmin-core/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/pom.xml b/server/protocols/webadmin/webadmin-core/pom.xml
index 8df8461..6d27db4 100644
--- a/server/protocols/webadmin/webadmin-core/pom.xml
+++ b/server/protocols/webadmin/webadmin-core/pom.xml
@@ -99,7 +99,7 @@
         <dependency>
             <groupId>io.swagger</groupId>
             <artifactId>swagger-jaxrs</artifactId>
-            <version>1.5.13</version>
+            <version>1.5.21</version>
         </dependency>
         <dependency>
             <groupId>javax.inject</groupId>


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


[10/17] james-project git commit: JAMES-2524 Update org.mariadb.jdbc:mariadb-java-client to 2.2.6

Posted by bt...@apache.org.
JAMES-2524 Update org.mariadb.jdbc:mariadb-java-client to 2.2.6


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

Branch: refs/heads/master
Commit: 9648a6a4af6a91ac352c7e75cc4906d61d3fd072
Parents: dd69b51
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:30:14 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 server/container/guice/jpa-smtp-mariadb/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9648a6a4/server/container/guice/jpa-smtp-mariadb/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp-mariadb/pom.xml b/server/container/guice/jpa-smtp-mariadb/pom.xml
index 74ad54c..88fb888 100644
--- a/server/container/guice/jpa-smtp-mariadb/pom.xml
+++ b/server/container/guice/jpa-smtp-mariadb/pom.xml
@@ -65,7 +65,7 @@
         <dependency>
             <groupId>org.mariadb.jdbc</groupId>
             <artifactId>mariadb-java-client</artifactId>
-            <version>2.2.5</version>
+            <version>2.2.6</version>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>


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


[13/17] james-project git commit: JAMES-2523 MixedEventDelivery was not shutting threads down the right way

Posted by bt...@apache.org.
JAMES-2523 MixedEventDelivery was not shutting threads down the right way


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

Branch: refs/heads/master
Commit: b7cd37512b9f371defad5ec7deaabe9164ca466c
Parents: 9f6e768
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Mon Aug 20 10:11:27 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:15:05 2018 +0700

----------------------------------------------------------------------
 .../org/apache/james/mailbox/store/event/MixedEventDelivery.java  | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b7cd3751/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java
index bcbc044..1aab004 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.mailbox.store.event;
 
+import javax.annotation.PreDestroy;
+
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 
@@ -42,6 +44,7 @@ public class MixedEventDelivery implements EventDelivery {
         }
     }
 
+    @PreDestroy
     public void stop() {
         asynchronousEventDelivery.stop();
     }


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


[07/17] james-project git commit: JAMES-2524 Update org.jsoup:jsoup to 1.11.3

Posted by bt...@apache.org.
JAMES-2524 Update org.jsoup:jsoup to 1.11.3


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

Branch: refs/heads/master
Commit: dd69b51e6981ebbc5872db5d3b3d5cfe766a34c1
Parents: d319a48
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:29:12 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700

----------------------------------------------------------------------
 server/protocols/jmap/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/dd69b51e/server/protocols/jmap/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/pom.xml b/server/protocols/jmap/pom.xml
index 83514ff..1e11bfa 100644
--- a/server/protocols/jmap/pom.xml
+++ b/server/protocols/jmap/pom.xml
@@ -277,7 +277,7 @@
         <dependency>
             <groupId>org.jsoup</groupId>
             <artifactId>jsoup</artifactId>
-            <version>1.9.2</version>
+            <version>1.11.3</version>
         </dependency>
         <dependency>
             <groupId>org.mockito</groupId>


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