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 2019/01/15 03:21:36 UTC

[01/30] james-project git commit: JAMES-2637 fix alias mappings for PUT alias route

Repository: james-project
Updated Branches:
  refs/heads/master 79cf1c26b -> c16d4e9b0


JAMES-2637 fix alias mappings for PUT alias route


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

Branch: refs/heads/master
Commit: 62f7cf343636d6ab61c4acf86a4ae91bd24816d9
Parents: 79cf1c2
Author: Rene Cordier <rc...@linagora.com>
Authored: Fri Jan 11 11:59:40 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 09:54:43 2019 +0700

----------------------------------------------------------------------
 .../api/SameSourceAndDestinationException.java  | 31 +++++++++++
 .../rrt/lib/AbstractRecipientRewriteTable.java  | 28 ++++++----
 .../james/rrt/lib/RewriteTablesStepdefs.java    | 15 ++++--
 .../resources/cucumber/rewrite_tables.feature   | 22 ++++----
 .../james/webadmin/routes/AliasRoutes.java      | 11 +++-
 .../james/webadmin/routes/AliasRoutesTest.java  | 56 +++++++++++++++-----
 6 files changed, 121 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/62f7cf34/server/data/data-api/src/main/java/org/apache/james/rrt/api/SameSourceAndDestinationException.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/SameSourceAndDestinationException.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/SameSourceAndDestinationException.java
new file mode 100644
index 0000000..d76ffcb
--- /dev/null
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/SameSourceAndDestinationException.java
@@ -0,0 +1,31 @@
+/****************************************************************
+ * 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.rrt.api;
+
+public class SameSourceAndDestinationException extends RecipientRewriteTableException {
+
+    public SameSourceAndDestinationException(String msg) {
+        super(msg);
+    }
+
+    public SameSourceAndDestinationException(String msg, Throwable t) {
+        super(msg, t);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/62f7cf34/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
index 88e76ea..20c3fa5 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
@@ -37,6 +37,7 @@ import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.rrt.api.MappingAlreadyExistsException;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
+import org.apache.james.rrt.api.SameSourceAndDestinationException;
 import org.apache.james.rrt.lib.Mapping.Type;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -201,7 +202,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
         checkHasValidAddress(mapping);
         checkDuplicateMapping(source, mapping);
 
-        LOGGER.info("Add address mapping => {} for source: {}", mapping.toString(), source.asString());
+        LOGGER.info("Add address mapping => {} for source: {}", mapping.asString(), source.asString());
         addMapping(source, mapping);
     }
 
@@ -215,7 +216,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
 
     private void checkHasValidAddress(Mapping mapping) throws RecipientRewriteTableException {
         if (!mapping.asMailAddress().isPresent()) {
-            throw new RecipientRewriteTableException("Invalid emailAddress: " + mapping.toString());
+            throw new RecipientRewriteTableException("Invalid emailAddress: " + mapping.asString());
         }
     }
 
@@ -224,7 +225,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
         Mapping mapping = Mapping.address(address)
             .appendDomainFromThrowingSupplierIfNone(this::defaultDomain);
 
-        LOGGER.info("Remove address mapping => {} for source: {}", mapping.toString(), source.asString());
+        LOGGER.info("Remove address mapping => {} for source: {}", mapping.asString(), source.asString());
         removeMapping(source, mapping);
     }
 
@@ -264,7 +265,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
         checkHasValidAddress(mapping);
         checkDuplicateMapping(source, mapping);
 
-        LOGGER.info("Add forward mapping => {} for source: {}", mapping.toString(), source.asString());
+        LOGGER.info("Add forward mapping => {} for source: {}", mapping.asString(), source.asString());
         addMapping(source, mapping);
     }
 
@@ -273,7 +274,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
         Mapping mapping = Mapping.forward(address)
             .appendDomainFromThrowingSupplierIfNone(this::defaultDomain);
 
-        LOGGER.info("Remove forward mapping => {} for source: {}", mapping.toString(), source.asString());
+        LOGGER.info("Remove forward mapping => {} for source: {}", mapping.asString(), source.asString());
         removeMapping(source, mapping);
     }
 
@@ -285,7 +286,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
         checkHasValidAddress(mapping);
         checkDuplicateMapping(source, mapping);
 
-        LOGGER.info("Add group mapping => {} for source: {}", mapping.toString(), source.asString());
+        LOGGER.info("Add group mapping => {} for source: {}", mapping.asString(), source.asString());
         addMapping(source, mapping);
     }
 
@@ -294,7 +295,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
         Mapping mapping = Mapping.group(address)
             .appendDomainFromThrowingSupplierIfNone(this::defaultDomain);
 
-        LOGGER.info("Remove group mapping => {} for source: {}", mapping.toString(), source.asString());
+        LOGGER.info("Remove group mapping => {} for source: {}", mapping.asString(), source.asString());
         removeMapping(source, mapping);
     }
 
@@ -305,8 +306,9 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
 
         checkHasValidAddress(mapping);
         checkDuplicateMapping(source, mapping);
+        checkNotSameSourceAndDestination(source, address);
 
-        LOGGER.info("Add alias mapping => {} for source: {}", mapping.toString(), source.asString());
+        LOGGER.info("Add alias source => {} for destination mapping: {}", source.asString(), mapping.asString());
         addMapping(source, mapping);
     }
 
@@ -315,7 +317,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
         Mapping mapping = Mapping.alias(address)
             .appendDomainFromThrowingSupplierIfNone(this::defaultDomain);
 
-        LOGGER.info("Remove alias mapping => {} for source: {}", mapping.toString(), source.asString());
+        LOGGER.info("Remove alias source => {} for destination mapping: {}", source.asString(), mapping.asString());
         removeMapping(source, mapping);
     }
 
@@ -336,7 +338,13 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
     private void checkDuplicateMapping(MappingSource source, Mapping mapping) throws RecipientRewriteTableException {
         Mappings mappings = getStoredMappings(source);
         if (mappings.contains(mapping)) {
-            throw new MappingAlreadyExistsException("Mapping " + mapping.toString() + " for " + source.asString() + " already exist!");
+            throw new MappingAlreadyExistsException("Mapping " + mapping.asString() + " for " + source.asString() + " already exist!");
+        }
+    }
+
+    private void checkNotSameSourceAndDestination(MappingSource source, String address) throws RecipientRewriteTableException {
+        if (source.asMailAddress().map(mailAddress -> mailAddress.asString().equals(address)).orElse(false)) {
+            throw new SameSourceAndDestinationException("Source and destination can't be the same!");
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/62f7cf34/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java
index 5cca0f7..3b3d80e 100644
--- a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java
+++ b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java
@@ -84,10 +84,10 @@ public class RewriteTablesStepdefs {
         rewriteTable.addForwardMapping(source, address);
     }
 
-    @Given("store \"([^\"]*)\" alias mapping for user \"([^\"]*)\" at domain \"([^\"]*)\"")
-    public void storeAliasMappingForUserAtDomain(String address, String user, String domain) throws Throwable {
-        MappingSource source = MappingSource.fromUser(user, domain);
-        rewriteTable.addAliasMapping(source, address);
+    @Given("store user \"([^\"]*)\" alias mapping for alias \"([^\"]*)\" at domain \"([^\"]*)\"")
+    public void storeAliasMappingForUserAtDomain(String user, String address, String domain) throws Throwable {
+        MappingSource source = MappingSource.fromUser(address, domain);
+        rewriteTable.addAliasMapping(source, user);
     }
 
     @Given("store \"([^\"]*)\" group mapping for user \"([^\"]*)\" at domain \"([^\"]*)\"")
@@ -134,7 +134,7 @@ public class RewriteTablesStepdefs {
         rewriteTable.removeForwardMapping(source, address);
     }
 
-    @When("user \"([^\"]*)\" at domain \"([^\"]*)\" removes an alias mapping \"([^\"]*)\"")
+    @When("alias \"([^\"]*)\" at domain \"([^\"]*)\" removes an alias mapping \"([^\"]*)\"")
     public void userAtDomainRemovesAliasMapping(String user, String domain, String address) throws Throwable {
         MappingSource source = MappingSource.fromUser(user, domain);
         rewriteTable.removeAliasMapping(source, address);
@@ -171,6 +171,11 @@ public class RewriteTablesStepdefs {
         assertThat(rewriteTable.getResolvedMappings(user, Domain.of(domain)).asStrings()).containsOnlyElementsOf(mappings);
     }
 
+    @Then("mappings for alias \"([^\"]*)\" at domain \"([^\"]*)\" should contain only \"([^\"]*)\"")
+    public void assertMappingsForAlias(String alias, String domain, List<String> mappings) throws Throwable {
+        assertThat(rewriteTable.getResolvedMappings(alias, Domain.of(domain)).asStrings()).containsOnlyElementsOf(mappings);
+    }
+
     @Then("a \"([^\"]*)\" exception should have been thrown")
     public void assertException(String exceptionClass) throws Throwable {
         assertThat(exception.getClass().getSimpleName()).isEqualTo(exceptionClass);

http://git-wip-us.apache.org/repos/asf/james-project/blob/62f7cf34/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature b/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
index 9fea1b6..1048672 100644
--- a/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
+++ b/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
@@ -245,24 +245,24 @@ Feature: Rewrite Tables tests
 # Alias mapping
 
   Scenario: stored alias mapping should be retrieved when one mapping is matching
-    Given store "test@localhost2" alias mapping for user "test" at domain "localhost"
-    Then mappings for user "test" at domain "localhost" should contain only "alias:test@localhost2"
+    Given store user "test@localhost2" alias mapping for alias "test" at domain "localhost"
+    Then mappings for alias "test" at domain "localhost" should contain only "alias:test@localhost2"
 
   Scenario: stored alias mapping should be retrieved when two mappings are matching
-    Given store "test@localhost2" alias mapping for user "test" at domain "localhost"
-    And store "test@james" alias mapping for user "test" at domain "localhost"
-    Then mappings for user "test" at domain "localhost" should contain only "alias:test@localhost2, alias:test@james"
+    Given store user "test@localhost2" alias mapping for alias "test" at domain "localhost"
+    And store user "test@james" alias mapping for alias "test" at domain "localhost"
+    Then mappings for alias "test" at domain "localhost" should contain only "alias:test@localhost2, alias:test@james"
 
   Scenario: stored alias mapping should not be retrieved by another user
-    Given store "test@localhost2" alias mapping for user "test" at domain "localhost"
-    And store "test@james" alias mapping for user "test" at domain "localhost"
+    Given store user "test@localhost2" alias mapping for alias "test" at domain "localhost"
+    And store user "test@james" alias mapping for alias "test" at domain "localhost"
     Then mappings for user "test2" at domain "localhost" should be empty
 
   Scenario: removing a stored alias mapping should work
-    Given store "test@localhost2" alias mapping for user "test" at domain "localhost"
-    And store "test@james" alias mapping for user "test" at domain "localhost"
-    When user "test" at domain "localhost" removes an alias mapping "test@james"
-    Then mappings for user "test" at domain "localhost" should contain only "alias:test@localhost2"
+    Given store user "test@localhost2" alias mapping for alias "test" at domain "localhost"
+    And store user "test@james" alias mapping for alias "test" at domain "localhost"
+    When alias "test" at domain "localhost" removes an alias mapping "test@james"
+    Then mappings for alias "test" at domain "localhost" should contain only "alias:test@localhost2"
 
 # Group mapping
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/62f7cf34/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
index 583858d..0a06aa0 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
@@ -32,6 +32,7 @@ import org.apache.james.core.User;
 import org.apache.james.rrt.api.MappingAlreadyExistsException;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
+import org.apache.james.rrt.api.SameSourceAndDestinationException;
 import org.apache.james.rrt.lib.MappingSource;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
@@ -112,8 +113,8 @@ public class AliasRoutes implements Routes {
         MailAddress aliasSourceAddress = MailAddressParser.parseMailAddress(request.params(ALIAS_SOURCE_ADDRESS), ADDRESS_TYPE);
         ensureUserDoesNotExist(aliasSourceAddress);
         MailAddress destinationAddress = MailAddressParser.parseMailAddress(request.params(ALIAS_DESTINATION_ADDRESS), ADDRESS_TYPE);
-        MappingSource source = MappingSource.fromUser(User.fromMailAddress(destinationAddress));
-        addAlias(source, aliasSourceAddress);
+        MappingSource source = MappingSource.fromUser(User.fromMailAddress(aliasSourceAddress));
+        addAlias(source, destinationAddress);
         return halt(HttpStatus.NO_CONTENT_204);
     }
 
@@ -122,6 +123,12 @@ public class AliasRoutes implements Routes {
             recipientRewriteTable.addAliasMapping(source, aliasSourceAddress.asString());
         } catch (MappingAlreadyExistsException e) {
             // ignore
+        } catch (SameSourceAndDestinationException e) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .message(e.getMessage())
+                .haltError();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/62f7cf34/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
index 9eb0744..5faad03 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
@@ -53,11 +53,8 @@ import static io.restassured.RestAssured.with;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.hamcrest.CoreMatchers.hasItems;
-import static org.hamcrest.CoreMatchers.is;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 
@@ -76,9 +73,10 @@ class AliasRoutesTest {
     public static final String BOB_WITH_SLASH_PASSWORD = "abcdef";
     public static final String ALICE_PASSWORD = "789123";
 
-    private static final MappingSource BOB_SOURCE = MappingSource.fromUser("bob", DOMAIN);
-    private static final MappingSource BOB_WITH_ENCODED_SLASH_SOURCE = MappingSource.fromUser("bob/", DOMAIN);
-    private static final Mapping BOB_MAPPING = Mapping.alias(BOB_ALIAS);
+    private static final MappingSource BOB_ALIAS_SOURCE = MappingSource.fromUser("bob-alias", DOMAIN);
+    private static final MappingSource BOB_ALIAS_WITH_ENCODED_SLASH_SOURCE = MappingSource.fromUser("bob-alias/", DOMAIN);
+    private static final Mapping BOB_MAPPING = Mapping.alias(BOB);
+    private static final Mapping BOB_WITH_ENCODED_SLASH_MAPPING = Mapping.alias(BOB_WITH_SLASH);
 
     private WebAdminServer webAdminServer;
 
@@ -182,21 +180,37 @@ class AliasRoutesTest {
         }
 
         @Test
+        void putSameSourceAndDestinationShouldReturnBadRequest() {
+            Map<String, Object> errors = when()
+                .put(BOB_ALIAS + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS)
+            .then()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .contentType(ContentType.JSON)
+                .extract()
+                .body()
+                .jsonPath()
+                .getMap(".");
+
+            assertThat(errors)
+                .containsEntry("statusCode", HttpStatus.BAD_REQUEST_400)
+                .containsEntry("type", "InvalidArgument")
+                .containsEntry("message", "Source and destination can't be the same!");
+        }
+
+        @Test
         void putAliasForUserShouldCreateAlias() {
             with()
                 .put(BOB + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS);
 
-            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_SOURCE)).containsOnly(BOB_MAPPING);
+            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_ALIAS_SOURCE)).containsOnly(BOB_MAPPING);
         }
 
         @Test
         void putAliasWithEncodedSlashForUserShouldAddItAsADestination() {
-            Mapping mapping = Mapping.alias(BOB_ALIAS_WITH_SLASH);
-
             with()
                 .put(BOB + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS_WITH_ENCODED_SLASH);
 
-            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_SOURCE)).containsOnly(mapping);
+            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_ALIAS_WITH_ENCODED_SLASH_SOURCE)).containsOnly(BOB_MAPPING);
         }
 
         @Test
@@ -204,7 +218,7 @@ class AliasRoutesTest {
             with()
                 .put(BOB_WITH_ENCODED_SLASH + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS);
 
-            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_WITH_ENCODED_SLASH_SOURCE)).containsOnly(BOB_MAPPING);
+            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_ALIAS_SOURCE)).containsOnly(BOB_WITH_ENCODED_SLASH_MAPPING);
         }
 
         @Test
@@ -215,12 +229,12 @@ class AliasRoutesTest {
             with()
                 .put(BOB + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS);
 
-            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_SOURCE)).containsOnly(BOB_MAPPING);
+            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_ALIAS_SOURCE)).containsOnly(BOB_MAPPING);
         }
 
         @Test
         void putAliasForUserShouldAllowSeveralSources() {
-            Mapping mapping2 = Mapping.alias(BOB_ALIAS_2);
+            MappingSource source2 = MappingSource.fromUser("bob-alias2", DOMAIN);
 
             with()
                 .put(BOB + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS);
@@ -228,7 +242,21 @@ class AliasRoutesTest {
             with()
                 .put(BOB + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS_2);
 
-            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_SOURCE)).containsOnly(BOB_MAPPING, mapping2);
+            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_ALIAS_SOURCE)).containsOnly(BOB_MAPPING);
+            assertThat(memoryRecipientRewriteTable.getStoredMappings(source2)).containsOnly(BOB_MAPPING);
+        }
+
+        @Test
+        void putAliasForUserShouldAllowSeveralDestinations() {
+            Mapping aliceMapping = Mapping.alias(ALICE);
+
+            with()
+                .put(BOB + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS);
+
+            with()
+                .put(ALICE + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS);
+
+            assertThat(memoryRecipientRewriteTable.getStoredMappings(BOB_ALIAS_SOURCE)).containsOnly(BOB_MAPPING, aliceMapping);
         }
     }
 


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


[03/30] james-project git commit: MAILBOX-372 update tests affected by retry mechanism

Posted by bt...@apache.org.
MAILBOX-372 update tests affected by retry mechanism

using Mockito mock invocations (call real method, throwing...)
doesn't make test defeats RabbitMQ asynchronous arbitrary dispatching
with retry backoff.

Define new dedicated listener class for this purpose.


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

Branch: refs/heads/master
Commit: 44e7531881ae793218df77a6a8243bc9fe28aaee
Parents: fa22f9d
Author: tran tien duc <dt...@linagora.com>
Authored: Fri Jan 11 16:13:31 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 09:55:22 2019 +0700

----------------------------------------------------------------------
 .../mailbox/events/EventBusTestFixture.java     | 32 +++++++++++++++-----
 .../james/mailbox/events/GroupContract.java     | 11 +++----
 2 files changed, 29 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/44e75318/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
index 5d87c89..530bbe5 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
@@ -59,20 +59,38 @@ public interface EventBusTestFixture {
         }
     }
 
+    class EventMatcherThrowingListener extends MailboxListenerCountingSuccessfulExecution {
+        private final ImmutableSet<Event> eventsCauseThrowing;
+
+        EventMatcherThrowingListener(ImmutableSet<Event> eventsCauseThrowing) {
+            this.eventsCauseThrowing = eventsCauseThrowing;
+        }
+
+        @Override
+        public void event(Event event) {
+            if (eventsCauseThrowing.contains(event)) {
+                throw new RuntimeException("event triggers throwing");
+            }
+            super.event(event);
+        }
+    }
+
     class GroupA extends Group {}
     class GroupB extends Group {}
     class GroupC extends Group {}
 
-    MailboxListener.MailboxEvent EVENT = new MailboxListener.MailboxAdded(
-        MailboxSession.SessionId.of(42),
-        User.fromUsername("user"),
-        new MailboxPath(MailboxConstants.USER_NAMESPACE, "user", "mailboxName"),
-        TestId.of(18),
-        Event.EventId.random());
+    MailboxSession.SessionId SESSION_ID = MailboxSession.SessionId.of(42);
+    User USER = User.fromUsername("user");
+    MailboxPath MAILBOX_PATH = new MailboxPath(MailboxConstants.USER_NAMESPACE, "user", "mailboxName");
+    TestId TEST_ID = TestId.of(18);
+    Event.EventId EVENT_ID = Event.EventId.of("6e0dd59d-660e-4d9b-b22f-0354479f47b4");
+    Event.EventId EVENT_ID_2 = Event.EventId.of("5a7a9f3f-5f03-44be-b457-a51e93760645");
+    MailboxListener.MailboxEvent EVENT = new MailboxListener.MailboxAdded(SESSION_ID, USER, MAILBOX_PATH, TEST_ID, EVENT_ID);
+    MailboxListener.MailboxEvent EVENT_2 = new MailboxListener.MailboxAdded(SESSION_ID, USER, MAILBOX_PATH, TEST_ID, EVENT_ID_2);
 
     int ONE_SECOND = 1000;
     int FIVE_HUNDRED_MS = 500;
-    MailboxId ID_1 = TestId.of(18);
+    MailboxId ID_1 = TEST_ID;
     MailboxId ID_2 = TestId.of(24);
     ImmutableSet<RegistrationKey> NO_KEYS = ImmutableSet.of();
     MailboxIdRegistrationKey KEY_1 = new MailboxIdRegistrationKey(ID_1);

http://git-wip-us.apache.org/repos/asf/james-project/blob/44e75318/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
index 01b3583..c6bc1b2 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
@@ -20,6 +20,7 @@
 package org.apache.james.mailbox.events;
 
 import static org.apache.james.mailbox.events.EventBusTestFixture.EVENT;
+import static org.apache.james.mailbox.events.EventBusTestFixture.EVENT_2;
 import static org.apache.james.mailbox.events.EventBusTestFixture.FIVE_HUNDRED_MS;
 import static org.apache.james.mailbox.events.EventBusTestFixture.GroupA;
 import static org.apache.james.mailbox.events.EventBusTestFixture.GroupB;
@@ -34,7 +35,6 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.after;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -47,6 +47,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.TestId;
 import org.junit.jupiter.api.Test;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSortedMap;
 
 public interface GroupContract {
@@ -171,15 +172,11 @@ public interface GroupContract {
 
         @Test
         default void failingGroupListenersShouldNotAbortGroupDelivery() {
-            EventBusTestFixture.MailboxListenerCountingSuccessfulExecution listener = spy(new EventBusTestFixture.MailboxListenerCountingSuccessfulExecution());
+            EventBusTestFixture.EventMatcherThrowingListener listener = new EventBusTestFixture.EventMatcherThrowingListener(ImmutableSet.of(EVENT));
             eventBus().register(listener, new GroupA());
 
-            doThrow(new RuntimeException())
-                .doCallRealMethod()
-                .when(listener).event(any());
-
-            eventBus().dispatch(EVENT, NO_KEYS).block();
             eventBus().dispatch(EVENT, NO_KEYS).block();
+            eventBus().dispatch(EVENT_2, NO_KEYS).block();
 
             WAIT_CONDITION
                 .until(() -> assertThat(listener.numberOfEventCalls()).isEqualTo(1));


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


[29/30] james-project git commit: JAMES-2641 Enhance ListeningMessageSearchIndex logs

Posted by bt...@apache.org.
JAMES-2641 Enhance ListeningMessageSearchIndex logs


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

Branch: refs/heads/master
Commit: df109044888840fa872a16c1ee2ecda98d349455
Parents: 367c5ac
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Jan 11 15:45:12 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../james/mailbox/store/search/ListeningMessageSearchIndex.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/df109044/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
index fe470ad..de34195 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
@@ -68,7 +68,7 @@ public abstract class ListeningMessageSearchIndex implements MessageSearchIndex,
                     (MailboxEvent) event);
             }
         } catch (MailboxException e) {
-            LOGGER.error("Unable to update index", e);
+            LOGGER.error("Unable to update index for event {}", event, e);
         }
     }
 


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


[19/30] james-project git commit: JAMES-2641 Extract Session management from StoreMailboxManager

Posted by bt...@apache.org.
JAMES-2641 Extract Session management from StoreMailboxManager


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

Branch: refs/heads/master
Commit: 90af61430ff4f4067adc7fbd0b06c026e424baf9
Parents: aeffba8
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 12:03:30 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraMailboxManager.java      |   8 +-
 .../CassandraMailboxManagerProvider.java        |   5 +-
 .../cassandra/CassandraTestSystemFixture.java   |   4 +-
 .../CassandraMailboxManagerAttachmentTest.java  |   8 +-
 .../james/mailbox/jpa/JPAMailboxManager.java    |   8 +-
 .../jpa/openjpa/OpenJPAMailboxManager.java      |   8 +-
 .../mailbox/jpa/JpaMailboxManagerProvider.java  |   4 +-
 .../maildir/MaildirMailboxManagerProvider.java  |   7 +-
 .../inmemory/InMemoryMailboxManager.java        |   7 +-
 .../InMemoryMailboxManagerAttachmentTest.java   |   7 +-
 .../manager/InMemoryIntegrationResources.java   |  11 +-
 .../InMemoryMessageIdManagerSideEffectTest.java |   5 +-
 .../james/mailbox/store/SessionProvider.java    | 107 +++++++++++++++++++
 .../mailbox/store/StoreMailboxManager.java      |  81 ++------------
 .../mailbox/store/StoreMailboxManagerTest.java  |   5 +-
 .../cassandra/host/CassandraHostSystem.java     |   4 +-
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java |   4 +-
 .../host/LuceneSearchHostSystem.java            |   5 +-
 .../maildir/host/MaildirHostSystem.java         |   7 +-
 19 files changed, 180 insertions(+), 115 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index e539e57..9dc55dd 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -29,9 +29,8 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.Authenticator;
-import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
@@ -59,14 +58,13 @@ public class CassandraMailboxManager extends StoreMailboxManager {
     private final CassandraMailboxSessionMapperFactory mapperFactory;
 
     @Inject
-    public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
+    public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, SessionProvider sessionProvider,
                                    MailboxPathLocker locker, MessageParser messageParser,
                                    MessageId.Factory messageIdFactory, DelegatingMailboxListener delegatingMailboxListener,
                                    StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager,
                                    MailboxManagerConfiguration configuration) {
         super(mapperFactory,
-            authenticator,
-            authorizator,
+            sessionProvider,
             locker,
             messageParser,
             messageIdFactory,

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index 122b211..c6e8cbb 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
@@ -69,7 +70,9 @@ public class CassandraMailboxManagerProvider {
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager,
             LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
 
-        CassandraMailboxManager manager = new CassandraMailboxManager(mapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(),
+        SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
+
+        CassandraMailboxManager manager = new CassandraMailboxManager(mapperFactory, sessionProvider, new NoMailboxPathLocker(),
             messageParser, messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
 
         CassandraPerUserMaxQuotaManager maxQuotaManager = new CassandraPerUserMaxQuotaManager(new CassandraPerUserMaxQuotaDao(session),

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 51d937f..4cc4470 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -37,6 +37,7 @@ import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
@@ -64,7 +65,8 @@ public class CassandraTestSystemFixture {
         StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
 
-        CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, mock(Authenticator.class), mock(Authorizator.class),
+        SessionProvider sessionProvider = new SessionProvider(mock(Authenticator.class), mock(Authorizator.class));
+        CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
             new NoMailboxPathLocker(), new MessageParser(), new CassandraMessageId.Factory(),
             delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         cassandraMailboxManager.init();

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index ceffb79..6a0e60b 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -37,6 +37,7 @@ import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
@@ -91,14 +92,15 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
 
-        mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory,
-            noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), new MessageParser(),
+        SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
+
+        mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), new MessageParser(),
             messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any()))
             .thenThrow(new RuntimeException("Message parser set to fail"));
-        parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator,
+        parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider,
             new NoMailboxPathLocker(), failingMessageParser, messageIdFactory,
             delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         parseFailingMailboxManager.init();

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
index 8b581ed..c3af7db 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
@@ -27,9 +27,8 @@ import org.apache.james.mailbox.jpa.mail.JPAMailboxMapper;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.Authenticator;
-import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreRightManager;
@@ -49,15 +48,14 @@ public abstract class JPAMailboxManager extends StoreMailboxManager {
         MailboxCapabilities.Annotation);
 
     public JPAMailboxManager(JPAMailboxSessionMapperFactory mailboxSessionMapperFactory,
-                             Authenticator authenticator,
-                             Authorizator authorizator,
+                             SessionProvider sessionProvider,
                              MailboxPathLocker locker,
                              MessageParser messageParser,
                              MessageId.Factory messageIdFactory,
                              DelegatingMailboxListener delegatingMailboxListener,
                              StoreMailboxAnnotationManager annotationManager,
                              StoreRightManager storeRightManager) {
-        super(mailboxSessionMapperFactory, authenticator, authorizator, locker,
+        super(mailboxSessionMapperFactory, sessionProvider, locker,
             messageParser, messageIdFactory, annotationManager,
             delegatingMailboxListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
index 121dc9d..bedd47f 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
@@ -26,9 +26,8 @@ import org.apache.james.mailbox.jpa.JPAMailboxManager;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMessageManager.AdvancedFeature;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.Authenticator;
-import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.StoreRightManager;
@@ -44,14 +43,13 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
 
     @Inject
     public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory,
-                                 Authenticator authenticator,
-                                 Authorizator authorizator,
+                                 SessionProvider sessionProvider,
                                  MessageParser messageParser,
                                  MessageId.Factory messageIdFactory,
                                  DelegatingMailboxListener delegatingMailboxListener,
                                  StoreMailboxAnnotationManager annotationManager,
                                  StoreRightManager storeRightManager) {
-        super(mapperFactory, authenticator, authorizator, new JVMMailboxPathLocker(), messageParser,
+        super(mapperFactory, sessionProvider, new JVMMailboxPathLocker(), messageParser,
             messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
index c66a734..960db5e 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
@@ -59,7 +60,8 @@ public class JpaMailboxManagerProvider {
         StoreRightManager storeRightManager = new StoreRightManager(mf, aclResolver, groupMembershipResolver, delegatingListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager,
             LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
-        OpenJPAMailboxManager openJPAMailboxManager = new OpenJPAMailboxManager(mf, noAuthenticator, noAuthorizator,
+        SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
+        OpenJPAMailboxManager openJPAMailboxManager = new OpenJPAMailboxManager(mf, sessionProvider,
             messageParser, new DefaultMessageId.Factory(),
             delegatingListener, annotationManager,
             storeRightManager);

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
index 2d5165c..c071e39 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
@@ -30,6 +30,8 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreRightManager;
@@ -55,10 +57,11 @@ public class MaildirMailboxManagerProvider {
 
         Authenticator noAuthenticator = null;
         Authorizator noAuthorizator = null;
+        SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager);
-        StoreMailboxManager manager = new StoreMailboxManager(mf, noAuthenticator, noAuthorizator, new JVMMailboxPathLocker(),
-            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager);
+        StoreMailboxManager manager = new StoreMailboxManager(mf, sessionProvider, new JVMMailboxPathLocker(),
+            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         manager.init();
 
         return manager;

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 4326f6a..9fc1763 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -26,10 +26,9 @@ import javax.inject.Inject;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.Authenticator;
-import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
@@ -50,12 +49,12 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
     public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.UniqueID);
 
     @Inject
-    public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
+    public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider,
                                   MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory,
                                   DelegatingMailboxListener delegatingMailboxListener,
                                   StoreMailboxAnnotationManager annotationManager,
                                   StoreRightManager storeRightManager) {
-        super(mailboxSessionMapperFactory, authenticator, authorizator, locker, messageParser, messageIdFactory,
+        super(mailboxSessionMapperFactory, sessionProvider, locker, messageParser, messageIdFactory,
             annotationManager, delegatingMailboxListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
index 8217e54..11cb4b6 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
@@ -37,6 +37,7 @@ import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
@@ -63,14 +64,16 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager
         UnionMailboxACLResolver aclResolver = new UnionMailboxACLResolver();
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
 
+        SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
+
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
-        mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(),
+        mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(),
                 new MessageParser(), messageIdFactory, delegatingListener, annotationManager, storeRightManager);
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any(InputStream.class)))
             .thenThrow(new RuntimeException("Message parser set to fail"));
-        parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(),
+        parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(),
             failingMessageParser, messageIdFactory, delegatingListener, annotationManager, storeRightManager);
         parseFailingMailboxManager.init();
         super.setUp();

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 829ef92..3df7a75 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -43,6 +43,7 @@ import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.FakeAuthorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
@@ -145,10 +146,11 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         StoreMailboxAnnotationManager annotationManager = annotationManagerBiFunction
             .apply(storeRightManager, mailboxSessionMapperFactory);
 
+        SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, FakeAuthorizator.defaultReject());
+
         InMemoryMailboxManager manager = new InMemoryMailboxManager(
             mailboxSessionMapperFactory,
-            fakeAuthenticator,
-            FakeAuthorizator.defaultReject(),
+            sessionProvider,
             new JVMMailboxPathLocker(),
             new MessageParser(),
             new InMemoryMessageId.Factory(),
@@ -179,10 +181,11 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), groupMembershipResolver, delegatingListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
 
+        SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+
         StoreMailboxManager manager = new InMemoryMailboxManager(
             mailboxSessionMapperFactory,
-            authenticator,
-            authorizator,
+            sessionProvider,
             new NoMailboxPathLocker(),
             new MessageParser(),
             new InMemoryMessageId.Factory(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
index 329181d..dcddfbd 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
@@ -31,6 +31,7 @@ import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.FakeAuthorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
@@ -59,9 +60,9 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
         StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
         JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
         InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
+        SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, fakeAuthorizator);
         InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mapperFactory,
-            fakeAuthenticator,
-            fakeAuthorizator,
+            sessionProvider,
             locker,
             new MessageParser(),
             messageIdFactory,

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/store/src/main/java/org/apache/james/mailbox/store/SessionProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/SessionProvider.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/SessionProvider.java
new file mode 100644
index 0000000..992ad15
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/SessionProvider.java
@@ -0,0 +1,107 @@
+/****************************************************************
+ * 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.store;
+
+import java.util.ArrayList;
+
+import javax.inject.Inject;
+
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSessionIdGenerator;
+import org.apache.james.mailbox.exception.BadCredentialsException;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.exception.NotAdminException;
+import org.apache.james.mailbox.exception.UserDoesNotExistException;
+import org.apache.james.mailbox.model.MailboxConstants;
+
+public class SessionProvider {
+    private final MailboxSessionIdGenerator idGenerator;
+    private final Authenticator authenticator;
+    private final Authorizator authorizator;
+
+    @Inject
+    public SessionProvider(Authenticator authenticator, Authorizator authorizator) {
+        this.idGenerator = new RandomMailboxSessionIdGenerator();
+        this.authenticator = authenticator;
+        this.authorizator = authorizator;
+    }
+
+    public char getDelimiter() {
+        return MailboxConstants.DEFAULT_DELIMITER;
+    }
+
+    public MailboxSession createSystemSession(String userName) {
+        return createSession(userName, MailboxSession.SessionType.System);
+    }
+
+    public MailboxSession login(String userid, String passwd) throws MailboxException {
+        if (isValidLogin(userid, passwd)) {
+            return createSession(userid, MailboxSession.SessionType.User);
+        } else {
+            throw new BadCredentialsException();
+        }
+    }
+
+    public MailboxSession loginAsOtherUser(String adminUserid, String passwd, String otherUserId) throws MailboxException {
+        if (! isValidLogin(adminUserid, passwd)) {
+            throw new BadCredentialsException();
+        }
+        Authorizator.AuthorizationState authorizationState = authorizator.canLoginAsOtherUser(adminUserid, otherUserId);
+        switch (authorizationState) {
+            case ALLOWED:
+                return createSystemSession(otherUserId);
+            case NOT_ADMIN:
+                throw new NotAdminException();
+            case UNKNOWN_USER:
+                throw new UserDoesNotExistException(otherUserId);
+            default:
+                throw new RuntimeException("Unknown AuthorizationState " + authorizationState);
+        }
+    }
+
+    public void logout(MailboxSession session) {
+        if (session != null) {
+            session.close();
+        }
+    }
+
+    private MailboxSession createSession(String userName, MailboxSession.SessionType type) {
+        return new MailboxSession(newSessionId(), userName, new ArrayList<>(), getDelimiter(), type);
+    }
+
+    private MailboxSession.SessionId newSessionId() {
+        return MailboxSession.SessionId.of(randomId());
+    }
+
+    private long randomId() {
+        return idGenerator.nextId();
+    }
+
+    /**
+     * Log in the user with the given userid and password
+     *
+     * @param userid the username
+     * @param passwd the password
+     * @return success true if login success false otherwise
+     */
+    private boolean isValidLogin(String userid, String passwd) throws MailboxException {
+        return authenticator.isAuthentic(userid, passwd);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 2cc5566..3106688 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -38,17 +38,12 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MailboxSession.SessionType;
-import org.apache.james.mailbox.MailboxSessionIdGenerator;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.StandardMailboxMetaDataComparator;
-import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
-import org.apache.james.mailbox.exception.NotAdminException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;
-import org.apache.james.mailbox.exception.UserDoesNotExistException;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights;
 import org.apache.james.mailbox.model.MailboxACL.Right;
@@ -113,13 +108,11 @@ public class StoreMailboxManager implements MailboxManager {
     private final StoreRightManager storeRightManager;
     private final DelegatingMailboxListener delegatingListener;
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
-    private final Authenticator authenticator;
-    private final Authorizator authorizator;
     private final MailboxAnnotationManager annotationManager;
     private final MailboxPathLocker locker;
     private final MessageParser messageParser;
     private final Factory messageIdFactory;
-    private final MailboxSessionIdGenerator idGenerator;
+    private final SessionProvider sessionProvider;
     protected final MailboxManagerConfiguration configuration;
 
     private MessageSearchIndex index;
@@ -128,7 +121,7 @@ public class StoreMailboxManager implements MailboxManager {
     private QuotaUpdater quotaUpdater;
 
     @Inject
-    public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
+    public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider,
                                MailboxPathLocker locker, MessageParser messageParser,
                                MessageId.Factory messageIdFactory, MailboxAnnotationManager annotationManager,
                                DelegatingMailboxListener delegatingListener, StoreRightManager storeRightManager,
@@ -137,15 +130,13 @@ public class StoreMailboxManager implements MailboxManager {
         Preconditions.checkNotNull(mailboxSessionMapperFactory);
 
         this.annotationManager = annotationManager;
-        this.authenticator = authenticator;
-        this.authorizator = authorizator;
+        this.sessionProvider = sessionProvider;
         this.locker = locker;
         this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
         this.messageParser = messageParser;
         this.messageIdFactory = messageIdFactory;
         this.delegatingListener = delegatingListener;
         this.storeRightManager = storeRightManager;
-        this.idGenerator = new RandomMailboxSessionIdGenerator();
         this.configuration = configuration;
     }
 
@@ -279,84 +270,30 @@ public class StoreMailboxManager implements MailboxManager {
 
     @Override
     public MailboxSession createSystemSession(String userName) {
-        return createSession(userName, SessionType.System);
-    }
-
-    /**
-     * Create Session
-     *
-     * @param userName
-     * @return session
-     */
-
-    protected MailboxSession createSession(String userName, SessionType type) {
-        return new MailboxSession(newSessionId(), userName, new ArrayList<>(), getDelimiter(), type);
-    }
-
-    private MailboxSession.SessionId newSessionId() {
-        return MailboxSession.SessionId.of(randomId());
-    }
-
-    /**
-     * Generate and return the next id to use
-     *
-     * @return id
-     */
-    protected long randomId() {
-        return idGenerator.nextId();
+        return sessionProvider.createSystemSession(userName);
     }
 
     @Override
     public char getDelimiter() {
-        return MailboxConstants.DEFAULT_DELIMITER;
-    }
-
-    /**
-     * Log in the user with the given userid and password
-     *
-     * @param userid the username
-     * @param passwd the password
-     * @return success true if login success false otherwise
-     */
-    private boolean isValidLogin(String userid, String passwd) throws MailboxException {
-        return authenticator.isAuthentic(userid, passwd);
+        return sessionProvider.getDelimiter();
     }
 
     @Override
     public MailboxSession login(String userid, String passwd) throws MailboxException {
-        if (isValidLogin(userid, passwd)) {
-            return createSession(userid, SessionType.User);
-        } else {
-            throw new BadCredentialsException();
-        }
+        return sessionProvider.login(userid, passwd);
     }
 
     @Override
     public MailboxSession loginAsOtherUser(String adminUserid, String passwd, String otherUserId) throws MailboxException {
-        if (! isValidLogin(adminUserid, passwd)) {
-            throw new BadCredentialsException();
-        }
-        Authorizator.AuthorizationState authorizationState = authorizator.canLoginAsOtherUser(adminUserid, otherUserId);
-        switch (authorizationState) {
-            case ALLOWED:
-                return createSystemSession(otherUserId);
-            case NOT_ADMIN:
-                throw new NotAdminException();
-            case UNKNOWN_USER:
-                throw new UserDoesNotExistException(otherUserId);
-            default:
-                throw new RuntimeException("Unknown AuthorizationState " + authorizationState);
-        }
+        return sessionProvider.loginAsOtherUser(adminUserid, passwd, otherUserId);
     }
 
     /**
      * Close the {@link MailboxSession} if not null
      */
     @Override
-    public void logout(MailboxSession session, boolean force) throws MailboxException {
-        if (session != null) {
-            session.close();
-        }
+    public void logout(MailboxSession session, boolean force) {
+        sessionProvider.logout(session);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index 71e0e93..760d9d5 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -81,9 +81,10 @@ public class StoreMailboxManagerTest {
                                                                     new SimpleGroupMembershipResolver(), delegatingListener);
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mockedMapperFactory, storeRightManager);
-        storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, authenticator, FakeAuthorizator.forUserAndAdmin(ADMIN, CURRENT_USER),
+        SessionProvider sessionProvider = new SessionProvider(authenticator, FakeAuthorizator.forUserAndAdmin(ADMIN, CURRENT_USER));
+        storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, sessionProvider,
                 new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
-                annotationManager, delegatingListener, storeRightManager);
+                annotationManager, delegatingListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         storeMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index 7b9c160..d789fc0 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -41,6 +41,7 @@ import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
@@ -88,7 +89,8 @@ public class CassandraHostSystem extends JamesImapHostSystem {
         StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
-        mailboxManager = new CassandraMailboxManager(mapperFactory, authenticator, authorizator,
+        SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+        mailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
             new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
             delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory);

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 641f0e3..3f92176 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -45,6 +45,7 @@ import org.apache.james.mailbox.jpa.quota.JPAPerUserMaxQuotaDAO;
 import org.apache.james.mailbox.jpa.quota.JPAPerUserMaxQuotaManager;
 import org.apache.james.mailbox.jpa.quota.JpaCurrentQuotaManager;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
@@ -98,7 +99,8 @@ public class JPAHostSystem extends JamesImapHostSystem {
         DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
         StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
-        mailboxManager = new OpenJPAMailboxManager(mapperFactory, authenticator, authorizator,
+        SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+        mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider,
             messageParser, new DefaultMessageId.Factory(), delegatingListener, annotationManager, storeRightManager);
 
         DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory);

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index 8a62e53..8e15468 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -42,6 +42,7 @@ import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
 import org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
@@ -102,9 +103,9 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
             StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
             JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
             InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
+            SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
             mailboxManager = new InMemoryMailboxManager(mapperFactory,
-                authenticator,
-                authorizator,
+                sessionProvider,
                 locker,
                 new MessageParser(),
                 messageIdFactory,

http://git-wip-us.apache.org/repos/asf/james-project/blob/90af6143/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index 04ba896..83fa1eb 100644
--- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -36,6 +36,8 @@ import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.maildir.MaildirMailboxSessionMapperFactory;
 import org.apache.james.mailbox.maildir.MaildirStore;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreRightManager;
@@ -77,8 +79,9 @@ public class MaildirHostSystem extends JamesImapHostSystem {
         DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
-        mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, authenticator, authorizator, locker,
-            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager);
+        SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+        mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, sessionProvider, locker,
+            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         mailboxManager.init();
 
         ImapProcessor defaultImapProcessorFactory =


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


[17/30] james-project git commit: JAMES-2641 Re-organize mailbox manager fields

Posted by bt...@apache.org.
JAMES-2641 Re-organize mailbox manager fields


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

Branch: refs/heads/master
Commit: cac26ab9c8cb0a93d2bcb358b5ca3b34471e83fa
Parents: 9fc3e75
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 10:52:48 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../mailbox/store/StoreMailboxManager.java      | 23 +++++---------------
 1 file changed, 5 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/cac26ab9/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 55c0262..67bf1e3 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -108,40 +108,27 @@ public class StoreMailboxManager implements MailboxManager {
     private static final Logger LOGGER = LoggerFactory.getLogger(StoreMailboxManager.class);
     public static final char SQL_WILDCARD_CHAR = '%';
     public static final EnumSet<MessageCapabilities> DEFAULT_NO_MESSAGE_CAPABILITIES = EnumSet.noneOf(MessageCapabilities.class);
+    private static final SecureRandom RANDOM = new SecureRandom();
 
+    private final StoreRightManager storeRightManager;
     private final DelegatingMailboxListener delegatingListener;
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
-
     private final Authenticator authenticator;
     private final MailboxAnnotationManager annotationManager;
+    private final MailboxPathLocker locker;
+    private final MessageParser messageParser;
+    private final Factory messageIdFactory;
 
     private Authorizator authorizator;
-
-    private final StoreRightManager storeRightManager;
-
-    private static final SecureRandom RANDOM = new SecureRandom();
-
     private MessageBatcher copyBatcher;
-
     private MessageBatcher moveBatcher;
-
-    private final MailboxPathLocker locker;
-
     private MessageSearchIndex index;
-
     private MailboxSessionIdGenerator idGenerator;
-
     private QuotaManager quotaManager;
-
     private QuotaRootResolver quotaRootResolver;
-
     private QuotaUpdater quotaUpdater;
-
     private BatchSizes batchSizes = BatchSizes.defaultValues();
 
-    private final MessageParser messageParser;
-    private final Factory messageIdFactory;
-
     @Inject
     public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
                                MailboxPathLocker locker, MessageParser messageParser,


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


[11/30] james-project git commit: JAMES-2641 Stop lazy initialization of Quota components in MailboxManager

Posted by bt...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
index 9e87597..a858d6b 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
@@ -39,8 +39,6 @@ import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.quota.QuotaManager;
-import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
@@ -51,7 +49,6 @@ import org.apache.james.mailbox.store.mail.MessageMapperFactory;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
-import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.modules.Names;
 import org.apache.james.modules.data.JPAEntityManagerModule;
 import org.apache.james.utils.MailboxManagerDefinition;
@@ -111,11 +108,7 @@ public class JPAMailboxModule extends AbstractModule {
     @Provides
     @Named(Names.MAILBOXMANAGER_NAME)
     @Singleton
-    public MailboxManager provideMailboxManager(OpenJPAMailboxManager jpaMailboxManager, ListeningCurrentQuotaUpdater quotaUpdater,
-                                                QuotaManager quotaManager, QuotaRootResolver quotaRootResolver) throws MailboxException {
-        jpaMailboxManager.setQuotaRootResolver(quotaRootResolver);
-        jpaMailboxManager.setQuotaManager(quotaManager);
-        jpaMailboxManager.setQuotaUpdater(quotaUpdater);
+    public MailboxManager provideMailboxManager(OpenJPAMailboxManager jpaMailboxManager) throws MailboxException {
         jpaMailboxManager.init();
         return jpaMailboxManager;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
index 25209bf..c63f478 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
@@ -34,10 +34,10 @@ public class ConfigurationProbe implements GuiceProbe {
     }
 
     public int getMoveBatchSize() {
-        return configuration.getBatchSizes().getMoveBatchSize();
+        return configuration.getBatchSizes().getMoveBatchSize().get();
     }
 
     public int getCopyBatchSize() {
-        return configuration.getBatchSizes().getCopyBatchSize();
+        return configuration.getBatchSizes().getCopyBatchSize().get();
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
index 1847203..598c7c8 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
@@ -41,8 +41,6 @@ import org.apache.james.mailbox.inmemory.mail.InMemoryModSeqProvider;
 import org.apache.james.mailbox.inmemory.mail.InMemoryUidProvider;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.quota.QuotaManager;
-import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
@@ -58,7 +56,6 @@ import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
-import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.mailbox.store.user.SubscriptionMapperFactory;
@@ -127,11 +124,7 @@ public class MemoryMailboxModule extends AbstractModule {
     @Provides
     @Named(Names.MAILBOXMANAGER_NAME)
     @Singleton
-    public MailboxManager provideMailboxManager(InMemoryMailboxManager mailboxManager, ListeningCurrentQuotaUpdater quotaUpdater,
-                                                QuotaManager quotaManager, QuotaRootResolver quotaRootResolver) throws MailboxException {
-        mailboxManager.setQuotaRootResolver(quotaRootResolver);
-        mailboxManager.setQuotaManager(quotaManager);
-        mailboxManager.setQuotaUpdater(quotaUpdater);
+    public MailboxManager provideMailboxManager(InMemoryMailboxManager mailboxManager) throws MailboxException {
         mailboxManager.init();
         return mailboxManager;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
index 3fa7278..8ee3ec0 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
@@ -47,7 +47,6 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.StoreMailboxManager;
@@ -75,9 +74,8 @@ public class GetMailboxesMethodTest {
         InMemoryIntegrationResources inMemoryIntegrationResources = new InMemoryIntegrationResources();
         GroupMembershipResolver groupMembershipResolver = inMemoryIntegrationResources.createGroupMembershipResolver();
         mailboxManager = inMemoryIntegrationResources.createMailboxManager(groupMembershipResolver);
-        MaxQuotaManager maxQuotaManager = inMemoryIntegrationResources.createMaxQuotaManager();
-        QuotaRootResolver quotaRootResolver = inMemoryIntegrationResources.createQuotaRootResolver(mailboxManager);
-        QuotaManager quotaManager = inMemoryIntegrationResources.createQuotaManager(maxQuotaManager, mailboxManager);
+        QuotaRootResolver quotaRootResolver = mailboxManager.getQuotaComponents().getQuotaRootResolver();
+        QuotaManager quotaManager = mailboxManager.getQuotaComponents().getQuotaManager();
         mailboxFactory = new MailboxFactory(mailboxManager, quotaManager, quotaRootResolver);
 
         getMailboxesMethod = new GetMailboxesMethod(mailboxManager, mailboxFactory, new DefaultMetricFactory());

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
index 0f508a7..013e3ed 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
@@ -32,7 +32,6 @@ import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.StoreMailboxManager;
@@ -60,9 +59,8 @@ public class MailboxFactoryTest {
     public void setup() throws Exception {
         InMemoryIntegrationResources inMemoryIntegrationResources = new InMemoryIntegrationResources();
         mailboxManager = inMemoryIntegrationResources.createMailboxManager(inMemoryIntegrationResources.createGroupMembershipResolver());
-        MaxQuotaManager maxQuotaManager = inMemoryIntegrationResources.createMaxQuotaManager();
-        QuotaRootResolver quotaRootResolver = inMemoryIntegrationResources.createQuotaRootResolver(mailboxManager);
-        QuotaManager quotaManager = inMemoryIntegrationResources.createQuotaManager(maxQuotaManager, mailboxManager);
+        QuotaRootResolver quotaRootResolver = mailboxManager.getQuotaComponents().getQuotaRootResolver();
+        QuotaManager quotaManager = mailboxManager.getQuotaComponents().getQuotaManager();
 
         user = ManagerTestResources.USER;
         otherUser = ManagerTestResources.OTHER_USER;


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


[30/30] james-project git commit: JAMES-2641 Stop lazy initialization of Quota components in MailboxManager

Posted by bt...@apache.org.
JAMES-2641 Stop lazy initialization of Quota components in MailboxManager


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

Branch: refs/heads/master
Commit: d86e8b70d786ca2d9750948aa71b00fd8e87775d
Parents: 61dd6e2
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 9 10:37:08 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../manager/InMemoryIntegrationResources.java   | 90 ++++++++++----------
 ...ticSearchQuotaSearchTestSystemExtension.java |  9 +-
 .../MemoryQuotaSearchTestSystemExtension.java   | 11 ++-
 .../mailbox/store/quota/QuotaComponents.java    |  5 +-
 .../inmemory/host/InMemoryHostSystem.java       |  7 +-
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java |  2 +-
 .../transport/matchers/IsOverQuotaTest.java     | 19 ++---
 .../ElasticSearchQuotaSearchExtension.java      |  9 +-
 .../routes/ScanningQuotaSearchExtension.java    | 12 ++-
 9 files changed, 84 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index ef0d21b..d2d57b1 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -35,13 +35,11 @@ import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
-import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.FakeAuthorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
-import org.apache.james.mailbox.store.NoMailboxPathLocker;
 import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
@@ -65,11 +63,21 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         private final InMemoryMailboxManager mailboxManager;
         private final StoreRightManager storeRightManager;
         private final MessageId.Factory messageIdFactory;
+        private final InMemoryCurrentQuotaManager currentQuotaManager;
+        private final DefaultUserQuotaRootResolver defaultUserQuotaRootResolver;
+        private final InMemoryPerUserMaxQuotaManager maxQuotaManager;
 
-        Resources(InMemoryMailboxManager mailboxManager, StoreRightManager storeRightManager, MessageId.Factory messageIdFactory) {
+        Resources(InMemoryMailboxManager mailboxManager, StoreRightManager storeRightManager, MessageId.Factory messageIdFactory, InMemoryCurrentQuotaManager currentQuotaManager, DefaultUserQuotaRootResolver defaultUserQuotaRootResolver, InMemoryPerUserMaxQuotaManager maxQuotaManager) {
             this.mailboxManager = mailboxManager;
             this.storeRightManager = storeRightManager;
             this.messageIdFactory = messageIdFactory;
+            this.currentQuotaManager = currentQuotaManager;
+            this.defaultUserQuotaRootResolver = defaultUserQuotaRootResolver;
+            this.maxQuotaManager = maxQuotaManager;
+        }
+
+        public DefaultUserQuotaRootResolver getDefaultUserQuotaRootResolver() {
+            return defaultUserQuotaRootResolver;
         }
 
         public InMemoryMailboxManager getMailboxManager() {
@@ -77,7 +85,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         }
 
         public InMemoryCurrentQuotaManager getCurrentQuotaManager() {
-            return (InMemoryCurrentQuotaManager) mailboxManager.getQuotaComponents().getMaxQuotaManager();
+            return currentQuotaManager;
         }
 
         public StoreRightManager getStoreRightManager() {
@@ -87,6 +95,10 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         public MessageId.Factory getMessageIdFactory() {
             return messageIdFactory;
         }
+
+        public InMemoryPerUserMaxQuotaManager getMaxQuotaManager() {
+            return maxQuotaManager;
+        }
     }
 
     private SimpleGroupMembershipResolver groupMembershipResolver;
@@ -102,19 +114,41 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
     }
 
-    public Resources createResources(GroupMembershipResolver groupMembershipResolver,
-                                     int limitAnnotationCount, int limitAnnotationSize) throws MailboxException {
+    public Resources createResources(GroupMembershipResolver groupMembershipResolver, int limitAnnotationCount, int limitAnnotationSize) throws MailboxException {
         FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
         fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
         fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
+
+        return createResources(groupMembershipResolver, fakeAuthenticator, FakeAuthorizator.defaultReject(), limitAnnotationCount, limitAnnotationSize);
+    }
+
+    public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) throws MailboxException {
+        return createResources(groupMembershipResolver, authenticator, authorizator).mailboxManager;
+    }
+
+    public Resources createResources(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) throws MailboxException {
+        return createResources(groupMembershipResolver, authenticator, authorizator, MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
+    }
+
+    private Resources createResources(GroupMembershipResolver groupMembershipResolver,
+                                      Authenticator authenticator, Authorizator authorizator,
+                                      int limitAnnotationCount, int limitAnnotationSize) throws MailboxException {
+
         InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
         DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(),
             groupMembershipResolver, delegatingListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager, limitAnnotationCount, limitAnnotationSize);
 
-        SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, FakeAuthorizator.defaultReject());
-        QuotaComponents quotaComponents = createQuotaComponents(mailboxSessionMapperFactory, delegatingListener, sessionProvider);
+        SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+
+        InMemoryPerUserMaxQuotaManager maxQuotaManager = new InMemoryPerUserMaxQuotaManager();
+        DefaultUserQuotaRootResolver quotaRootResolver =  new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory);
+        InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(new CurrentQuotaCalculator(mailboxSessionMapperFactory, quotaRootResolver), sessionProvider);
+        StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
+        ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingListener, quotaManager);
+        QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, quotaManager, quotaRootResolver, listeningCurrentQuotaUpdater);
+
         MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
 
         InMemoryMailboxManager manager = new InMemoryMailboxManager(
@@ -133,50 +167,12 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         delegatingListener.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
 
         try {
-            return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory());
+            return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory(), currentQuotaManager, quotaRootResolver, maxQuotaManager);
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }
 
-    private QuotaComponents createQuotaComponents(InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory, DefaultDelegatingMailboxListener delegatingListener, SessionProvider sessionProvider) {
-        MaxQuotaManager maxQuotaManager = new InMemoryPerUserMaxQuotaManager();
-        QuotaRootResolver quotaRootResolver =  new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory);
-        InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(new CurrentQuotaCalculator(mailboxSessionMapperFactory, quotaRootResolver), sessionProvider);
-        StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
-        ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingListener, quotaManager);
-        return new QuotaComponents(maxQuotaManager, quotaManager, quotaRootResolver, listeningCurrentQuotaUpdater);
-    }
-
-    public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver,
-                                                    Authenticator authenticator, Authorizator authorizator) throws MailboxException {
-        InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), groupMembershipResolver, delegatingListener);
-        StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
-
-        SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
-        QuotaComponents quotaComponents = createQuotaComponents(mailboxSessionMapperFactory, delegatingListener, sessionProvider);
-
-        MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
-
-        StoreMailboxManager manager = new InMemoryMailboxManager(
-            mailboxSessionMapperFactory,
-            sessionProvider,
-            new NoMailboxPathLocker(),
-            new MessageParser(),
-            new InMemoryMessageId.Factory(),
-            delegatingListener,
-            annotationManager,
-            storeRightManager,
-            quotaComponents,
-            index);
-
-        delegatingListener.addGlobalListener((ListeningCurrentQuotaUpdater) quotaComponents.getQuotaUpdater(), sessionProvider.createSystemSession("admin"));
-        delegatingListener.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
-        return manager;
-    }
-
     @Override
     public MessageIdManager createMessageIdManager(StoreMailboxManager mailboxManager) {
         return createMessageIdManager(mailboxManager, new InMemoryMessageId.Factory());

http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
index aba78c9..ae50774 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
@@ -33,6 +33,7 @@ import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
 import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
@@ -81,11 +82,13 @@ public class ElasticSearchQuotaSearchTestSystemExtension implements ParameterRes
             resources.getMailboxManager()
                 .addGlobalListener(listener, MailboxSessionUtil.create("ANY"));
 
+            QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
+
             return new QuotaSearchTestSystem(
-                resources.getMaxQuotaManager(),
+                quotaComponents.getMaxQuotaManager(),
                 resources.getMailboxManager(),
-                resources.getQuotaManager(),
-                resources.getQuotaRootResolver(),
+                quotaComponents.getQuotaManager(),
+                resources.getDefaultUserQuotaRootResolver(),
                 new ElasticSearchQuotaSearcher(client,
                     QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS),
                 usersRepository,

http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
index 12394e7..65a5fa3 100644
--- a/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
+++ b/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
@@ -25,6 +25,7 @@ import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
 import org.apache.james.user.memory.MemoryUsersRepository;
 import org.junit.jupiter.api.extension.ExtensionContext;
@@ -52,13 +53,15 @@ public class MemoryQuotaSearchTestSystemExtension implements ParameterResolver {
             MemoryDomainList domainList = new MemoryDomainList(dnsService);
             usersRepository.setDomainList(domainList);
 
+            QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
+
             return new QuotaSearchTestSystem(
-                resources.getMaxQuotaManager(),
+                quotaComponents.getMaxQuotaManager(),
                 resources.getMailboxManager(),
-                resources.getQuotaManager(),
-                resources.getQuotaRootResolver(),
+                quotaComponents.getQuotaManager(),
+                resources.getDefaultUserQuotaRootResolver(),
                 new ScanningQuotaSearcher(usersRepository,
-                    new ClauseConverter(resources.getQuotaRootResolver(), resources.getQuotaManager())),
+                    new ClauseConverter(resources.getDefaultUserQuotaRootResolver(), quotaComponents.getQuotaManager())),
                 usersRepository,
                 domainList,
                 resources.getCurrentQuotaManager(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
index 35326bc..340b153 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.mailbox.store.quota;
 
+import javax.inject.Inject;
+
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
@@ -26,7 +28,7 @@ import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.SessionProvider;
 
 public class QuotaComponents {
-    public static final QuotaComponents disabled(SessionProvider sessionProvider, MailboxSessionMapperFactory mailboxSessionMapperFactory) {
+    public static QuotaComponents disabled(SessionProvider sessionProvider, MailboxSessionMapperFactory mailboxSessionMapperFactory) {
         return new QuotaComponents(
             new NoMaxQuotaManager(),
             new NoQuotaManager(),
@@ -39,6 +41,7 @@ public class QuotaComponents {
     private final QuotaRootResolver quotaRootResolver;
     private final QuotaUpdater quotaUpdater;
 
+    @Inject
     public QuotaComponents(MaxQuotaManager maxQuotaManager, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, QuotaUpdater quotaUpdater) {
         this.maxQuotaManager = maxQuotaManager;
         this.quotaManager = quotaManager;

http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
index 0880cda..740f385 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
@@ -52,10 +52,9 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
     @Override
     public void beforeTest() throws Exception {
         super.beforeTest();
-        this.mailboxManager = new InMemoryIntegrationResources()
-            .createMailboxManager(new SimpleGroupMembershipResolver(), authenticator, authorizator);
-
-        perUserMaxQuotaManager = (InMemoryPerUserMaxQuotaManager) mailboxManager.getQuotaComponents().getMaxQuotaManager();
+        InMemoryIntegrationResources.Resources resources = new InMemoryIntegrationResources().createResources(new SimpleGroupMembershipResolver(), authenticator, authorizator);
+        this.mailboxManager = resources.getMailboxManager();
+        this.perUserMaxQuotaManager = resources.getMaxQuotaManager();
 
         ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new StoreSubscriptionManager(mailboxManager.getMapperFactory()),
             mailboxManager.getQuotaComponents().getQuotaManager(), mailboxManager.getQuotaComponents().getQuotaRootResolver(), new DefaultMetricFactory());

http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 4fd803c..cf3c594 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -105,7 +105,7 @@ public class JPAHostSystem extends JamesImapHostSystem {
         StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
-        DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mapperFactory);
+        DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory);
         JpaCurrentQuotaManager currentQuotaManager = new JpaCurrentQuotaManager(entityManagerFactory);
         maxQuotaManager = new JPAPerUserMaxQuotaManager(new JPAPerUserMaxQuotaDAO(entityManagerFactory));
         StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);

http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
index 4f27422..1c65ad1 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
@@ -30,14 +30,11 @@ import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
-import org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager;
 import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.StoreMailboxManager;
-import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
-import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.mailet.base.MailAddressFixture;
 import org.apache.mailet.base.test.FakeMail;
@@ -54,18 +51,14 @@ public class IsOverQuotaTest {
 
     @Before
     public void setUp() throws Exception {
-        mailboxManager = new InMemoryIntegrationResources().createMailboxManager(new SimpleGroupMembershipResolver());
+        InMemoryIntegrationResources.Resources resources = new InMemoryIntegrationResources().createResources(new SimpleGroupMembershipResolver());
+        mailboxManager = resources.getMailboxManager();
 
-        quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory());
-        maxQuotaManager = new InMemoryPerUserMaxQuotaManager();
-        CurrentQuotaCalculator quotaCalculator = new CurrentQuotaCalculator(mailboxManager.getMapperFactory(), quotaRootResolver);
-        InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(quotaCalculator, mailboxManager);
-        StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
-        usersRepository = mock(UsersRepository.class);
-        testee = new IsOverQuota(quotaRootResolver, quotaManager, mailboxManager, usersRepository);
+        quotaRootResolver = resources.getDefaultUserQuotaRootResolver();
+        maxQuotaManager = resources.getMaxQuotaManager();
 
-        mailboxManager.setQuotaRootResolver(quotaRootResolver);
-        mailboxManager.setQuotaManager(quotaManager);
+        usersRepository = mock(UsersRepository.class);
+        testee = new IsOverQuota(quotaRootResolver, resources.getMailboxManager().getQuotaComponents().getQuotaManager(), mailboxManager, usersRepository);
 
         testee.init(FakeMatcherConfig.builder().matcherName("IsOverQuota").build());
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
index a833156..4db355b 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
@@ -33,6 +33,7 @@ import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher;
 import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
@@ -84,11 +85,13 @@ public class ElasticSearchQuotaSearchExtension implements ParameterResolver, Bef
             resources.getMailboxManager()
                 .addGlobalListener(listener, MailboxSessionUtil.create("ANY"));
 
+            QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
+
             QuotaSearchTestSystem quotaSearchTestSystem = new QuotaSearchTestSystem(
-                resources.getMaxQuotaManager(),
+                quotaComponents.getMaxQuotaManager(),
                 resources.getMailboxManager(),
-                resources.getQuotaManager(),
-                resources.getQuotaRootResolver(),
+                quotaComponents.getQuotaManager(),
+                resources.getDefaultUserQuotaRootResolver(),
                 new ElasticSearchQuotaSearcher(client,
                     QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS),
                 usersRepository,

http://git-wip-us.apache.org/repos/asf/james-project/blob/d86e8b70/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
index 552f3d2..e55c34b 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
@@ -26,6 +26,7 @@ import org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
 import org.apache.james.quota.search.scanning.ClauseConverter;
 import org.apache.james.quota.search.scanning.ScanningQuotaSearcher;
@@ -56,13 +57,16 @@ public class ScanningQuotaSearchExtension implements ParameterResolver, BeforeEa
                 .autoDetectIp(false));
             usersRepository.setDomainList(domainList);
 
+
+            QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
+
             QuotaSearchTestSystem quotaSearchTestSystem = new QuotaSearchTestSystem(
-                resources.getMaxQuotaManager(),
+                quotaComponents.getMaxQuotaManager(),
                 resources.getMailboxManager(),
-                resources.getQuotaManager(),
-                resources.getQuotaRootResolver(),
+                quotaComponents.getQuotaManager(),
+                resources.getDefaultUserQuotaRootResolver(),
                 new ScanningQuotaSearcher(usersRepository,
-                    new ClauseConverter(resources.getQuotaRootResolver(), resources.getQuotaManager())),
+                    new ClauseConverter(resources.getDefaultUserQuotaRootResolver(), quotaComponents.getQuotaManager())),
                 usersRepository,
                 domainList,
                 resources.getCurrentQuotaManager(),


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


[08/30] james-project git commit: MAILBOX-367 Simplify RabbitMQManagement creations

Posted by bt...@apache.org.
MAILBOX-367 Simplify RabbitMQManagement creations


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

Branch: refs/heads/master
Commit: 90cabdd66b4b5ee42c420b352c93e3e1ce9321ab
Parents: 64d4cdb
Author: datph <dp...@linagora.com>
Authored: Wed Jan 9 06:15:10 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 09:56:28 2019 +0700

----------------------------------------------------------------------
 .../james/backend/rabbitmq/RabbitMQExtension.java      |  8 ++++++++
 .../queue/rabbitmq/RabbitMQMailQueueManagement.java    |  7 +++++++
 .../RabbitMQMailQueueConfigurationChangeTest.java      |  9 +--------
 .../james/queue/rabbitmq/RabbitMQMailQueueTest.java    | 10 +---------
 .../queue/rabbitmq/RabbitMqMailQueueFactoryTest.java   | 13 ++-----------
 5 files changed, 19 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/90cabdd6/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
----------------------------------------------------------------------
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
index a64c95f..47e6488 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
@@ -89,6 +89,14 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
         return connectionFactory;
     }
 
+    public RabbitMQManagementAPI managementAPI() throws Exception {
+        return RabbitMQManagementAPI.from(RabbitMQConfiguration.builder()
+                .amqpUri(rabbitMQ.amqpUri())
+                .managementUri(rabbitMQ.managementUri())
+                .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+                .build());
+    }
+
     private RabbitMQConnectionFactory createRabbitConnectionFactory() throws URISyntaxException {
         RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
             .amqpUri(rabbitMQ.amqpUri())

http://git-wip-us.apache.org/repos/asf/james-project/blob/90cabdd6/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java
index 91e5ba5..4d0c261 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java
@@ -27,6 +27,8 @@ import org.apache.james.backend.rabbitmq.RabbitMQConfiguration;
 import org.apache.james.backend.rabbitmq.RabbitMQManagementAPI;
 import org.apache.james.util.OptionalUtils;
 
+import com.google.common.annotations.VisibleForTesting;
+
 public class RabbitMQMailQueueManagement {
 
     private final RabbitMQManagementAPI api;
@@ -36,6 +38,11 @@ public class RabbitMQMailQueueManagement {
         api = RabbitMQManagementAPI.from(configuration);
     }
 
+    @VisibleForTesting
+    RabbitMQMailQueueManagement(RabbitMQManagementAPI api) {
+        this.api = api;
+    }
+
     Stream<MailQueueName> listCreatedMailQueueNames() {
         return api.listQueues()
             .stream()

http://git-wip-us.apache.org/repos/asf/james-project/blob/90cabdd6/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
index e7b2ab5..46dfdbe 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
@@ -21,7 +21,6 @@ package org.apache.james.queue.rabbitmq;
 
 import static java.time.temporal.ChronoUnit.HOURS;
 import static java.time.temporal.ChronoUnit.MINUTES;
-import static org.apache.james.backend.rabbitmq.RabbitMQFixture.DEFAULT_MANAGEMENT_CREDENTIAL;
 import static org.apache.james.queue.api.Mails.defaultMail;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -33,7 +32,6 @@ import java.util.function.Function;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
-import org.apache.james.backend.rabbitmq.RabbitMQConfiguration;
 import org.apache.james.backend.rabbitmq.RabbitMQExtension;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
@@ -101,13 +99,8 @@ class RabbitMQMailQueueConfigurationChangeTest {
         clock = new UpdatableTickingClock(IN_SLICE_1);
         random = ThreadLocalRandom.current();
 
-        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
-            .amqpUri(rabbitMQExtension.getRabbitMQ().amqpUri())
-            .managementUri(rabbitMQExtension.getRabbitMQ().managementUri())
-            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
-            .build();
         rabbitClient = new RabbitClient(rabbitMQExtension.getRabbitChannelPool());
-        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQConfiguration);
+        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQExtension.managementAPI());
     }
 
     @AfterEach

http://git-wip-us.apache.org/repos/asf/james-project/blob/90cabdd6/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
index 7d5885e..94b68e2 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
@@ -20,7 +20,6 @@
 package org.apache.james.queue.rabbitmq;
 
 import static java.time.temporal.ChronoUnit.HOURS;
-import static org.apache.james.backend.rabbitmq.RabbitMQFixture.DEFAULT_MANAGEMENT_CREDENTIAL;
 import static org.apache.james.queue.api.Mails.defaultMail;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
@@ -33,7 +32,6 @@ import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
 import org.apache.james.backend.rabbitmq.DockerRabbitMQ;
-import org.apache.james.backend.rabbitmq.RabbitMQConfiguration;
 import org.apache.james.backend.rabbitmq.RabbitMQExtension;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
@@ -113,12 +111,6 @@ public class RabbitMQMailQueueTest implements ManageableMailQueueContract, MailQ
                     .build(),
             mimeMessageStoreFactory);
 
-        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
-            .amqpUri(rabbitMQ.amqpUri())
-            .managementUri(rabbitMQ.managementUri())
-            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
-            .build();
-
         RabbitClient rabbitClient = new RabbitClient(rabbitMQExtension.getRabbitChannelPool());
         RabbitMQMailQueueFactory.PrivateFactory factory = new RabbitMQMailQueueFactory.PrivateFactory(
             metricTestSystem.getSpyMetricFactory(),
@@ -129,7 +121,7 @@ public class RabbitMQMailQueueTest implements ManageableMailQueueContract, MailQ
             mailQueueViewFactory,
             clock,
             new RawMailQueueItemDecoratorFactory());
-        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQConfiguration);
+        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQExtension.managementAPI());
         mailQueueFactory = new RabbitMQMailQueueFactory(rabbitClient, mqManagementApi, factory);
         mailQueue = mailQueueFactory.createQueue(SPOOL);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/90cabdd6/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
index f152663..24088dc 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
@@ -19,19 +19,16 @@
 
 package org.apache.james.queue.rabbitmq;
 
-import static org.apache.james.backend.rabbitmq.RabbitMQFixture.DEFAULT_MANAGEMENT_CREDENTIAL;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.net.URISyntaxException;
 import java.time.Clock;
 import java.time.Duration;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.james.backend.rabbitmq.RabbitMQConfiguration;
 import org.apache.james.backend.rabbitmq.RabbitMQExtension;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.mail.MimeMessageStore;
@@ -57,19 +54,13 @@ class RabbitMqMailQueueFactoryTest implements MailQueueFactoryContract<RabbitMQM
     private RabbitMQMailQueueManagement mqManagementApi;
 
     @BeforeEach
-    void setup() throws URISyntaxException {
+    void setup() throws Exception {
         MimeMessageStore.Factory mimeMessageStoreFactory = mock(MimeMessageStore.Factory.class);
         MailQueueView.Factory mailQueueViewFactory = mock(MailQueueView.Factory.class);
         MailQueueView mailQueueView = mock(MailQueueView.class);
         when(mailQueueViewFactory.create(any()))
             .thenReturn(mailQueueView);
 
-        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
-            .amqpUri(rabbitMQExtension.getRabbitMQ().amqpUri())
-            .managementUri(rabbitMQExtension.getRabbitMQ().managementUri())
-            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
-            .build();
-
         RabbitClient rabbitClient = new RabbitClient(rabbitMQExtension.getRabbitChannelPool());
         RabbitMQMailQueueFactory.PrivateFactory factory = new RabbitMQMailQueueFactory.PrivateFactory(
             new NoopMetricFactory(),
@@ -80,7 +71,7 @@ class RabbitMqMailQueueFactoryTest implements MailQueueFactoryContract<RabbitMQM
             mailQueueViewFactory,
             Clock.systemUTC(),
             new RawMailQueueItemDecoratorFactory());
-        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQConfiguration);
+        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQExtension.managementAPI());
         mailQueueFactory = new RabbitMQMailQueueFactory(rabbitClient, mqManagementApi, factory);
     }
 


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


[04/30] james-project git commit: MAILBOX-372 suppress InVmEventDelivery errors in DelegateMailBoxListener

Posted by bt...@apache.org.
MAILBOX-372 suppress InVmEventDelivery errors in DelegateMailBoxListener

Before that InVmEventDelivery was already suppressed, it always returns
success Mono.

DelegateMailBoxListener will soon be removed. So keeping its behavior till
it get removed.


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

Branch: refs/heads/master
Commit: fa22f9d2f6bc8d3dee8ebd2eb4f5d28be0f05aef
Parents: 0707db5
Author: tran tien duc <dt...@linagora.com>
Authored: Fri Jan 11 13:54:04 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 09:55:22 2019 +0700

----------------------------------------------------------------------
 .../mailbox/store/event/DefaultDelegatingMailboxListener.java     | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/fa22f9d2/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
index 79167f3..1cc0319 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
@@ -35,6 +35,8 @@ import org.apache.james.metrics.api.NoopMetricFactory;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 
+import reactor.core.publisher.Mono;
+
 /**
  * Receive a {@link org.apache.james.mailbox.MailboxListener.MailboxEvent} and delegate it to an other
  * {@link MailboxListener} depending on the registered mailboxId
@@ -99,6 +101,7 @@ public class DefaultDelegatingMailboxListener implements DelegatingMailboxListen
 
             eventDelivery.deliver(listeners, event)
                 .synchronousListenerFuture()
+                .onErrorResume(throwable -> Mono.empty()) // suppress InVmEventDelivery delivery errors. This class will be removed soon
                 .block();
 
             if (event instanceof MailboxDeletion) {


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


[05/30] james-project git commit: MAILBOX-372 InVmEventDelivery exponential backoff

Posted by bt...@apache.org.
MAILBOX-372 InVmEventDelivery exponential backoff

- InVmEventDelivery returns error when delivery fails, but always
returns success when dispatching
- Update ErrorHandlingContract to EventBusContract, testing max retries
and exponential backoff delay


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

Branch: refs/heads/master
Commit: 0707db5008367ca9963b4a939eac94b4b9b21dec
Parents: 48bc40f
Author: tran tien duc <dt...@linagora.com>
Authored: Wed Jan 9 19:10:37 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 09:55:22 2019 +0700

----------------------------------------------------------------------
 .../mailbox/events/ErrorHandlingContract.java   | 152 +++++++++++++++++++
 .../james/mailbox/events/InVMEventBus.java      |   3 +-
 .../events/delivery/InVmEventDelivery.java      |  33 +++-
 .../james/mailbox/events/InVMEventBusTest.java  |   4 +-
 .../events/delivery/InVmEventDeliveryTest.java  |  33 ++--
 5 files changed, 203 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0707db50/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
new file mode 100644
index 0000000..4b17a6f
--- /dev/null
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
@@ -0,0 +1,152 @@
+/****************************************************************
+ * 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.events;
+
+import static org.apache.james.mailbox.events.EventBusTestFixture.EVENT;
+import static org.apache.james.mailbox.events.EventBusTestFixture.NO_KEYS;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.spy;
+
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.james.mailbox.Event;
+import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.util.EventCollector;
+import org.assertj.core.api.SoftAssertions;
+import org.junit.jupiter.api.Test;
+
+import com.google.common.base.Stopwatch;
+
+interface ErrorHandlingContract extends EventBusContract {
+
+    class ThrowingListener implements MailboxListener {
+
+        private List<Instant> timeElapsed;
+
+        private ThrowingListener() {
+            timeElapsed = new ArrayList<>();
+        }
+
+        @Override
+        public ListenerType getType() {
+            return MailboxListener.ListenerType.ONCE;
+        }
+
+        @Override
+        public void event(Event event) {
+            timeElapsed.add(Instant.now());
+            throw new RuntimeException("throw to trigger reactor retry");
+        }
+    }
+
+    default EventCollector eventCollector() {
+        return spy(new EventCollector());
+    }
+
+    default ThrowingListener throwingListener() {
+        return new ThrowingListener();
+    }
+
+    default long recordTimeRun(Runnable operation) {
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        operation.run();
+        return stopwatch.elapsed(TimeUnit.MILLISECONDS);
+    }
+
+    @Test
+    default void listenerShouldReceiveWhenFailsLessThanMaxRetries() {
+        EventCollector eventCollector = eventCollector();
+
+        doThrow(new RuntimeException())
+            .doThrow(new RuntimeException())
+            .doCallRealMethod()
+            .when(eventCollector).event(EVENT);
+
+        eventBus().register(eventCollector, new EventBusTestFixture.GroupA());
+        eventBus().dispatch(EVENT, NO_KEYS).block();
+
+        assertThat(eventCollector.getEvents())
+            .hasSize(1);
+    }
+
+    @Test
+    default void listenerShouldReceiveWhenFailsEqualsMaxRetries() {
+        EventCollector eventCollector = eventCollector();
+
+        doThrow(new RuntimeException())
+            .doThrow(new RuntimeException())
+            .doThrow(new RuntimeException())
+            .doCallRealMethod()
+            .when(eventCollector).event(EVENT);
+
+        eventBus().register(eventCollector, new EventBusTestFixture.GroupA());
+        eventBus().dispatch(EVENT, NO_KEYS).block();
+
+        assertThat(eventCollector.getEvents())
+            .hasSize(1);
+    }
+
+    @Test
+    default void listenerShouldNotReceiveWhenFailsGreaterThanMaxRetries() {
+        EventCollector eventCollector = eventCollector();
+
+        doThrow(new RuntimeException())
+            .doThrow(new RuntimeException())
+            .doThrow(new RuntimeException())
+            .doThrow(new RuntimeException())
+            .doCallRealMethod()
+            .when(eventCollector).event(EVENT);
+
+        eventBus().register(eventCollector, new EventBusTestFixture.GroupA());
+        eventBus().dispatch(EVENT, NO_KEYS).block();
+
+        assertThat(eventCollector.getEvents())
+            .isEmpty();
+    }
+
+    @Test
+    default void retriesBackOffShouldDelayByExponentialGrowth() {
+        ThrowingListener throwingListener = throwingListener();
+
+        eventBus().register(throwingListener, new EventBusTestFixture.GroupA());
+        eventBus().dispatch(EVENT, NO_KEYS).block();
+
+        SoftAssertions.assertSoftly(softly -> {
+            softly.assertThat(throwingListener.timeElapsed).hasSize(4);
+
+            long minFirstDelayAfter = 100; // first backOff
+            long minSecondDelayAfter = 100; // 200 * jitter factor (200 * 0.5)
+            long minThirdDelayAfter = 200; // 400 * jitter factor (400 * 0.5)
+
+            softly.assertThat(throwingListener.timeElapsed.get(1))
+                .isAfterOrEqualTo(throwingListener.timeElapsed.get(0).plusMillis(minFirstDelayAfter));
+
+            softly.assertThat(throwingListener.timeElapsed.get(2))
+                .isAfterOrEqualTo(throwingListener.timeElapsed.get(1).plusMillis(minSecondDelayAfter));
+
+            softly.assertThat(throwingListener.timeElapsed.get(3))
+                .isAfterOrEqualTo(throwingListener.timeElapsed.get(2).plusMillis(minThirdDelayAfter));
+        });
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0707db50/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/InVMEventBus.java
----------------------------------------------------------------------
diff --git a/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/InVMEventBus.java b/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/InVMEventBus.java
index 0f452bf..aad1be0 100644
--- a/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/InVMEventBus.java
+++ b/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/InVMEventBus.java
@@ -63,7 +63,8 @@ public class InVMEventBus implements EventBus {
     @Override
     public Mono<Void> dispatch(Event event, Set<RegistrationKey> keys) {
         if (!event.isNoop()) {
-            return eventDelivery.deliver(registeredListeners(keys), event).synchronousListenerFuture();
+            return eventDelivery.deliver(registeredListeners(keys), event).synchronousListenerFuture()
+                .onErrorResume(throwable -> Mono.empty());
         }
         return Mono.empty();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0707db50/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
----------------------------------------------------------------------
diff --git a/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java b/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
index 2d2ef65..63edafb 100644
--- a/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
+++ b/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.events.delivery;
 
+import java.time.Duration;
 import java.util.Collection;
 
 import javax.inject.Inject;
@@ -40,6 +41,10 @@ import reactor.core.scheduler.Schedulers;
 
 public class InVmEventDelivery implements EventDelivery {
     private static final Logger LOGGER = LoggerFactory.getLogger(InVmEventDelivery.class);
+    private static final int MAX_RETRIES = 3;
+    private static final Duration FIRST_BACKOFF = Duration.ofMillis(100);
+    private static final Duration MAX_BACKOFF = Duration.ofMillis(Long.MAX_VALUE);
+    private static final double DEFAULT_JITTER_FACTOR = 0.5;
 
     private final MetricFactory metricFactory;
 
@@ -72,22 +77,40 @@ public class InVmEventDelivery implements EventDelivery {
 
     private Mono<Void> doDeliver(Collection<MailboxListener> mailboxListeners, Event event) {
         return Flux.fromIterable(mailboxListeners)
-            .flatMap(mailboxListener -> Mono.fromRunnable(() -> doDeliverToListener(mailboxListener, event)))
+            .flatMap(mailboxListener -> deliveryWithRetries(event, mailboxListener))
             .then()
             .subscribeOn(Schedulers.elastic());
     }
 
+    private Mono<Void> deliveryWithRetries(Event event, MailboxListener mailboxListener) {
+        return Mono.fromRunnable(() -> doDeliverToListener(mailboxListener, event))
+            .doOnError(throwable -> LOGGER.error("Error while processing listener {} for {}",
+                listenerName(mailboxListener),
+                eventName(event),
+                throwable))
+            .retryBackoff(MAX_RETRIES, FIRST_BACKOFF, MAX_BACKOFF, DEFAULT_JITTER_FACTOR)
+            .doOnError(throwable -> LOGGER.error("listener {} exceeded maximum retry({}) to handle event {}",
+                listenerName(mailboxListener),
+                MAX_RETRIES,
+                eventName(event),
+                throwable))
+            .then();
+    }
+
     private void doDeliverToListener(MailboxListener mailboxListener, Event event) {
         TimeMetric timer = metricFactory.timer("mailbox-listener-" + mailboxListener.getClass().getSimpleName());
         try {
             mailboxListener.event(event);
-        } catch (Throwable throwable) {
-            LOGGER.error("Error while processing listener {} for {}",
-                mailboxListener.getClass().getCanonicalName(), event.getClass().getCanonicalName(),
-                throwable);
         } finally {
             timer.stopAndPublish();
         }
     }
 
+    private String listenerName(MailboxListener mailboxListener) {
+        return mailboxListener.getClass().getCanonicalName();
+    }
+
+    private String eventName(Event event) {
+        return event.getClass().getCanonicalName();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0707db50/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java
index 0241ac7..8df4557 100644
--- a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java
+++ b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java
@@ -23,7 +23,9 @@ import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.junit.jupiter.api.BeforeEach;
 
-public class InVMEventBusTest implements KeyContract.SingleEventBusKeyContract, GroupContract.SingleEventBusGroupContract {
+public class InVMEventBusTest implements KeyContract.SingleEventBusKeyContract, GroupContract.SingleEventBusGroupContract,
+    ErrorHandlingContract{
+
     private InVMEventBus eventBus;
 
     @BeforeEach

http://git-wip-us.apache.org/repos/asf/james-project/blob/0707db50/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java
index 3f46019..77194fb 100644
--- a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java
+++ b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java
@@ -20,7 +20,7 @@
 package org.apache.james.mailbox.events.delivery;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertTimeout;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doThrow;
@@ -85,20 +85,21 @@ class InVmEventDeliveryTest {
             void deliverShouldNotDeliverEventToListenerWhenException() {
                 doThrow(RuntimeException.class).when(syncEventCollector).event(event);
 
-                inVmEventDelivery.deliver(ImmutableList.of(syncEventCollector), event).allListenerFuture().block();
+                inVmEventDelivery.deliver(ImmutableList.of(syncEventCollector), event).allListenerFuture().subscribe();
 
                 assertThat(syncEventCollector.getEvents())
                     .isEmpty();
             }
 
             @Test
-            void deliverShouldBeSuccessWhenException() {
+            void deliverShouldBeErrorWhenException() {
                 doThrow(RuntimeException.class).when(syncEventCollector).event(event);
 
-                assertThatCode(() -> inVmEventDelivery
+                assertThatThrownBy(() -> inVmEventDelivery
                     .deliver(ImmutableList.of(syncEventCollector), event).allListenerFuture()
                     .block())
-                .doesNotThrowAnyException();
+                .isInstanceOf(IllegalStateException.class)
+                .hasMessageContaining("Retries exhausted");
             }
         }
 
@@ -109,30 +110,31 @@ class InVmEventDeliveryTest {
 
                 doThrow(RuntimeException.class).when(asyncEventCollector).event(event);
 
-                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector), event).allListenerFuture().block();
+                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector), event).allListenerFuture().subscribe();
 
                 assertThat(asyncEventCollector.getEvents())
                     .isEmpty();
             }
 
             @Test
-            void deliverShouldBeSuccessWhenException() {
+            void deliverShouldBeErrorWhenException() {
                 doThrow(RuntimeException.class).when(asyncEventCollector).event(event);
 
-                assertThatCode(() -> inVmEventDelivery
+                assertThatThrownBy(() -> inVmEventDelivery
                     .deliver(ImmutableList.of(asyncEventCollector), event).allListenerFuture()
                     .block())
-                .doesNotThrowAnyException();
+                .isInstanceOf(IllegalStateException.class)
+                .hasMessageContaining("Retries exhausted");
             }
         }
 
         @Nested
-        class BothAsynchronousAnsSynchronous {
+        class BothAsynchronousAndSynchronous {
             @Test
             void deliverShouldDeliverEventToSyncListenerWhenAsyncGetException() {
                 doThrow(RuntimeException.class).when(asyncEventCollector).event(event);
 
-                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector, syncEventCollector), event).allListenerFuture().block();
+                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector, syncEventCollector), event).allListenerFuture().subscribe();
 
                 SoftAssertions.assertSoftly(softly -> {
                     softly.assertThat(asyncEventCollector.getEvents()).isEmpty();
@@ -145,7 +147,7 @@ class InVmEventDeliveryTest {
             void deliverShouldDeliverEventToAsyncListenerWhenSyncGetException() {
                 doThrow(RuntimeException.class).when(syncEventCollector).event(event);
 
-                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector, syncEventCollector), event).allListenerFuture().block();
+                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector, syncEventCollector), event).allListenerFuture().subscribe();
 
                 SoftAssertions.assertSoftly(softly -> {
                     softly.assertThat(syncEventCollector.getEvents()).isEmpty();
@@ -155,14 +157,15 @@ class InVmEventDeliveryTest {
             }
 
             @Test
-            void deliverShouldBeSuccessWhenException() {
+            void deliverShouldBeErrorWhenException() {
                 doThrow(RuntimeException.class).when(syncEventCollector).event(event);
                 doThrow(RuntimeException.class).when(asyncEventCollector).event(event);
 
-                assertThatCode(() -> inVmEventDelivery
+                assertThatThrownBy(() -> inVmEventDelivery
                     .deliver(ImmutableList.of(asyncEventCollector), event).allListenerFuture()
                     .block())
-                .doesNotThrowAnyException();
+                .isInstanceOf(IllegalStateException.class)
+                .hasMessageContaining("Retries exhausted");
             }
         }
     }


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


[21/30] james-project git commit: JAMES-2641 Make StoreMailboxManager::Authorizator field final

Posted by bt...@apache.org.
JAMES-2641 Make StoreMailboxManager::Authorizator field final


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

Branch: refs/heads/master
Commit: aeffba88efa1fdb22b94f7e810deba008cf168d4
Parents: 5520851
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 11:27:27 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/store/StoreMailboxManager.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/aeffba88/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 04cdc7d..2cc5566 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -114,6 +114,7 @@ public class StoreMailboxManager implements MailboxManager {
     private final DelegatingMailboxListener delegatingListener;
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
     private final Authenticator authenticator;
+    private final Authorizator authorizator;
     private final MailboxAnnotationManager annotationManager;
     private final MailboxPathLocker locker;
     private final MessageParser messageParser;
@@ -121,7 +122,6 @@ public class StoreMailboxManager implements MailboxManager {
     private final MailboxSessionIdGenerator idGenerator;
     protected final MailboxManagerConfiguration configuration;
 
-    private Authorizator authorizator;
     private MessageSearchIndex index;
     private QuotaManager quotaManager;
     private QuotaRootResolver quotaRootResolver;


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


[15/30] james-project git commit: JAMES-2641 Search indexes should rely on SessionProvider

Posted by bt...@apache.org.
JAMES-2641 Search indexes should rely on SessionProvider

This again avoids a circular dependency


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

Branch: refs/heads/master
Commit: 7a2bf1eb3b4f5b85b466f7cbc79ae54fb3ce99c4
Parents: eb2d2cc
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 9 09:22:39 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../events/ElasticSearchListeningMessageSearchIndex.java  |  6 +++---
 .../elasticsearch/ElasticSearchIntegrationTest.java       |  5 ++++-
 .../ElasticSearchListeningMessageSearchIndexTest.java     |  6 +++---
 .../mailbox/lucene/search/LuceneMessageSearchIndex.java   |  9 +++++----
 .../lucene/search/LuceneMessageSearchIndexTest.java       |  5 ++++-
 .../mailbox/store/search/LazyMessageSearchIndex.java      |  5 +++--
 .../mailbox/store/search/ListeningMessageSearchIndex.java | 10 +++++-----
 .../elasticsearch/host/ElasticSearchHostSystem.java       |  5 +++--
 .../lucenesearch/host/LuceneSearchHostSystem.java         |  2 +-
 9 files changed, 31 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
index a925c04..6d4929e 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -32,7 +32,6 @@ import javax.inject.Named;
 
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.UpdatedRepresentation;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManager.MessageCapabilities;
 import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.MailboxSession;
@@ -47,6 +46,7 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
@@ -71,8 +71,8 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
     public ElasticSearchListeningMessageSearchIndex(MailboxSessionMapperFactory factory,
                                                     @Named(MailboxElasticSearchConstants.InjectionNames.MAILBOX) ElasticSearchIndexer indexer,
                                                     ElasticSearchSearcher searcher, MessageToElasticSearchJson messageToElasticSearchJson,
-                                                    MailboxManager mailboxManager) {
-        super(factory, mailboxManager);
+                                                    SessionProvider sessionProvider) {
+        super(factory, sessionProvider);
         this.elasticSearchIndexer = indexer;
         this.messageToElasticSearchJson = messageToElasticSearchJson;
         this.searcher = searcher;

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index 13aa203..e85582b 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -44,6 +44,9 @@ import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.SearchQuery;
+import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
@@ -116,7 +119,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
                 MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
                 MailboxElasticSearchConstants.MESSAGE_TYPE),
             new MessageToElasticSearchJson(textExtractor, ZoneId.of("Europe/Paris"), IndexAttachments.YES),
-            storeMailboxManager);
+            new SessionProvider(new FakeAuthenticator(), FakeAuthorizator.defaultReject()));
 
         QuotaComponents quotaComponents = storeMailboxManager.getQuotaComponents();
         messageIdManager = new StoreMessageIdManager(

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
index 2d6f18d..de5f599 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
@@ -34,7 +34,6 @@ import javax.mail.Flags;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.UpdatedRepresentation;
 import org.apache.james.core.User;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageUid;
@@ -43,6 +42,7 @@ import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.elasticsearch.ElasticsearchException;
@@ -77,12 +77,12 @@ public class ElasticSearchListeningMessageSearchIndexTest {
         MailboxSessionMapperFactory mapperFactory = mock(MailboxSessionMapperFactory.class);
         messageToElasticSearchJson = mock(MessageToElasticSearchJson.class);
         ElasticSearchSearcher elasticSearchSearcher = mock(ElasticSearchSearcher.class);
-        MailboxManager mockMailboxManager = mock(MailboxManager.class);
+        SessionProvider mockSessionProvider = mock(SessionProvider.class);
 
         elasticSearchIndexer = mock(ElasticSearchIndexer.class);
         
         testee = new ElasticSearchListeningMessageSearchIndex(mapperFactory, elasticSearchIndexer, elasticSearchSearcher,
-            messageToElasticSearchJson, mockMailboxManager);
+            messageToElasticSearchJson, mockSessionProvider);
         session = MailboxSessionUtil.create(USERNAME);
         users = ImmutableList.of(User.fromUsername(USERNAME));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
index 63af04e..9ff285f 100644
--- a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
+++ b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
@@ -67,6 +67,7 @@ import org.apache.james.mailbox.model.SearchQuery.UidCriterion;
 import org.apache.james.mailbox.model.SearchQuery.UidRange;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
@@ -367,8 +368,8 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
         MailboxId.Factory mailboxIdFactory,
         Directory directory,
         MessageId.Factory messageIdFactory,
-        MailboxManager mailboxManager) throws IOException {
-        this(factory, mailboxIdFactory, directory, false, true, messageIdFactory, mailboxManager);
+        SessionProvider sessionProvider) throws IOException {
+        this(factory, mailboxIdFactory, directory, false, true, messageIdFactory, sessionProvider);
     }
 
     public LuceneMessageSearchIndex(
@@ -378,8 +379,8 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
             boolean dropIndexOnStart,
             boolean lenient,
             MessageId.Factory messageIdFactory,
-            MailboxManager mailboxManager) throws IOException {
-        super(factory, mailboxManager);
+            SessionProvider sessionProvider) throws IOException {
+        super(factory, sessionProvider);
         this.mailboxIdFactory = mailboxIdFactory;
         this.messageIdFactory = messageIdFactory;
         this.directory = directory;

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
index 7853d32..16b6b46 100644
--- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
+++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
@@ -24,6 +24,9 @@ import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
@@ -52,7 +55,7 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
         LuceneMessageSearchIndex luceneMessageSearchIndex = new LuceneMessageSearchIndex(
             storeMailboxManager.getMapperFactory(), new InMemoryId.Factory(), new RAMDirectory(),
             storeMailboxManager.getMessageIdFactory(),
-            storeMailboxManager);
+            new SessionProvider(new FakeAuthenticator(), FakeAuthorizator.defaultReject()));
         storeMailboxManager.setMessageSearchIndex(luceneMessageSearchIndex);
         storeMailboxManager.addGlobalListener(luceneMessageSearchIndex, MailboxSessionUtil.create("admin"));
         this.messageSearchIndex = luceneMessageSearchIndex;

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
index b1a53e5..32f9d32 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -62,8 +63,8 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex {
     private final MailboxSessionMapperFactory factory;
     
     
-    public LazyMessageSearchIndex(ListeningMessageSearchIndex index, MailboxSessionMapperFactory factory, MailboxManager mailboxManager) {
-        super(factory, mailboxManager);
+    public LazyMessageSearchIndex(ListeningMessageSearchIndex index, MailboxSessionMapperFactory factory, SessionProvider sessionProvider) {
+        super(factory, sessionProvider);
         this.index = index;
         this.factory = factory;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
index b12eaa1..fe470ad 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
@@ -24,13 +24,13 @@ import java.util.stream.Stream;
 
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -48,11 +48,11 @@ public abstract class ListeningMessageSearchIndex implements MessageSearchIndex,
 
     private static final int UNLIMITED = -1;
     private final MailboxSessionMapperFactory factory;
-    private final MailboxManager mailboxManager;
+    private final SessionProvider sessionProvider;
 
-    public ListeningMessageSearchIndex(MailboxSessionMapperFactory factory, MailboxManager mailboxManager) {
+    public ListeningMessageSearchIndex(MailboxSessionMapperFactory factory, SessionProvider sessionProvider) {
         this.factory = factory;
-        this.mailboxManager = mailboxManager;
+        this.sessionProvider = sessionProvider;
     }
 
     /**
@@ -64,7 +64,7 @@ public abstract class ListeningMessageSearchIndex implements MessageSearchIndex,
         try {
             if (event instanceof MailboxEvent) {
                 handleMailboxEvent(event,
-                    mailboxManager.createSystemSession(event.getUser().asString()),
+                    sessionProvider.createSystemSession(event.getUser().asString()),
                     (MailboxEvent) event);
             }
         } catch (MailboxException e) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 515d79d..8ddfac8 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
@@ -102,7 +103,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
 
         ThreadFactory threadFactory = NamedThreadFactory.withClassName(getClass());
         ElasticSearchListeningMessageSearchIndex searchIndex = new ElasticSearchListeningMessageSearchIndex(
-            mailboxManager.getMapperFactory(),
+            mailboxSessionMapperFactory,
             new ElasticSearchIndexer(client,
                 Executors.newSingleThreadExecutor(threadFactory),
                 MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
@@ -113,7 +114,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
                 new InMemoryId.Factory(), messageIdFactory,
                 MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS, MailboxElasticSearchConstants.MESSAGE_TYPE),
             new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.systemDefault(), IndexAttachments.YES),
-            mailboxManager);
+            new SessionProvider(authenticator, authorizator));
 
         mailboxManager.setMessageSearchIndex(searchIndex);
         mailboxManager.addGlobalListener(searchIndex, MailboxSessionUtil.create("admin"));

http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2bf1eb/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index ae94e2a..6774134 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -114,7 +114,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
                 rightManager);
 
             FSDirectory fsDirectory = FSDirectory.open(tempFile);
-            searchIndex = new LuceneMessageSearchIndex(mapperFactory, new InMemoryId.Factory(), fsDirectory, messageIdFactory, mailboxManager);
+            searchIndex = new LuceneMessageSearchIndex(mapperFactory, new InMemoryId.Factory(), fsDirectory, messageIdFactory, sessionProvider);
             searchIndex.setEnableSuffixMatch(true);
             mailboxManager.setMessageSearchIndex(searchIndex);
 


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


[27/30] james-project git commit: JAMES-2641 Correct spring logic

Posted by bt...@apache.org.
JAMES-2641 Correct spring logic

We need to register listeners that was previously registered


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

Branch: refs/heads/master
Commit: 367c5aca3f6724f5efb80c638cbcf74f359bff5d
Parents: d86e8b7
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 9 13:11:24 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../resources/META-INF/spring/mailbox-jpa.xml   | 20 +++---
 .../META-INF/spring/mailbox-index-lucene.xml    |  2 +-
 .../META-INF/spring/mailbox-maildir.xml         | 26 +++----
 .../META-INF/spring/mailbox-memory.xml          | 23 +++----
 .../mailbox/spring/MailboxInitializer.java      | 71 ++++++++++++++++++++
 .../james/mailbox/spring/SpringMailbox.java     |  3 +-
 .../resources/META-INF/spring/event-system.xml  |  2 +-
 .../main/resources/META-INF/spring/quota.xml    | 11 ++-
 .../META-INF/spring/spring-mailbox.xml          | 14 +++-
 .../spring/mailbox-index-lucene-test.xml        | 44 ++++++++++++
 .../META-INF/spring/mailbox-index-lucene.xml    | 48 -------------
 .../store/MailboxManagerConfiguration.java      |  8 +++
 .../app/spring/JamesSpringContextTest.java      |  1 -
 13 files changed, 181 insertions(+), 92 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
index 6c0901f..9e60f9d 100644
--- a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
+++ b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
@@ -32,18 +32,16 @@
     <bean id="jpa-mailboxIdFactory" class="org.apache.james.mailbox.jpa.JPAId.Factory" />
 
 
-    <bean id="jpa-mailboxmanager" class="org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager" init-method="init">
+    <bean id="jpa-mailboxmanager" class="org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager">
         <constructor-arg index="0" ref="jpa-sessionMapperFactory"/>
-        <constructor-arg index="1" ref="authenticator"/>
-        <constructor-arg index="2" ref="authorizator"/>
-        <constructor-arg index="3" ref="messageParser"/>
-        <constructor-arg index="4" ref="messageIdFactory"/>
-        <constructor-arg index="5" ref="delegating-listener"/>
-        <constructor-arg index="6" ref="storeMailboxAnnotationManager"/>
-        <constructor-arg index="7" ref="storeRightManager" />
-        <property name="quotaManager" ref="quotaManager"/>
-        <property name="quotaRootResolver" ref="quotaRootResolver"/>
-        <property name="quotaUpdater" ref="quotaUpdater"/>
+        <constructor-arg index="1" ref="sessionProvider"/>
+        <constructor-arg index="2" ref="messageParser"/>
+        <constructor-arg index="3" ref="messageIdFactory" />
+        <constructor-arg index="4" ref="delegating-listener" />
+        <constructor-arg index="5" ref="storeMailboxAnnotationManager" />
+        <constructor-arg index="6" ref="storeRightManager" />
+        <constructor-arg index="7" ref="quotaComponents" />
+        <constructor-arg index="8" ref="indexer" />
     </bean>
     
     <bean id ="jpa-subscriptionManager" class="org.apache.james.mailbox.jpa.JPASubscriptionManager">

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/lucene/src/main/resources/META-INF/spring/mailbox-index-lucene.xml
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/main/resources/META-INF/spring/mailbox-index-lucene.xml b/mailbox/lucene/src/main/resources/META-INF/spring/mailbox-index-lucene.xml
index e44882b..5896181 100644
--- a/mailbox/lucene/src/main/resources/META-INF/spring/mailbox-index-lucene.xml
+++ b/mailbox/lucene/src/main/resources/META-INF/spring/mailbox-index-lucene.xml
@@ -30,7 +30,7 @@
     <bean id="lazyIndex" class="org.apache.james.mailbox.store.search.LazyMessageSearchIndex">
         <constructor-arg index="0" ref="luceneIndex"/>
         <constructor-arg index="1" ref="messageMapperFactory"/>
-        <constructor-arg index="2" ref="mailboxmanager"/>
+        <constructor-arg index="2" ref="sessionProvider"/>
     </bean>
     <bean id="luceneIndex" class="org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex">
         <constructor-arg index="0" ref="messageMapperFactory"/>

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml b/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
index eb364f3..6980f6d 100644
--- a/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
+++ b/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
@@ -34,21 +34,21 @@
         <property name ="location" value="classpath:mailbox-maildir.properties"/>
     </bean>
 
-    <bean id="maildir-mailboxmanager" class="org.apache.james.mailbox.store.StoreMailboxManager" init-method="init">
+    <bean id="maildir-mailboxmanager" class="org.apache.james.mailbox.store.StoreMailboxManager">
         <constructor-arg index="0" ref="maildir-sessionMapperFactory"/>
-        <constructor-arg index="1" ref="authenticator"/>
-        <constructor-arg index="2" ref="authorizator"/>
-        <constructor-arg index="3" ref="maildir-locker"/>
-        <constructor-arg index="4" ref="messageParser"/>
-        <constructor-arg index="5" ref="messageIdFactory" />
-        <constructor-arg index="6" ref="storeMailboxAnnotationManager" />
-        <constructor-arg index="7" ref="delegating-listener" />
-        <constructor-arg index="8" ref="storeRightManager" />
-<!--         <property name="messageSearchIndex" ref="lazyIndex"/> -->
-        <property name="quotaManager" ref="quotaManager"/>
-        <property name="quotaRootResolver" ref="quotaRootResolver"/>
-        <property name="quotaUpdater" ref="quotaUpdater"/>
+        <constructor-arg index="1" ref="sessionProvider"/>
+        <constructor-arg index="2" ref="memory-locker"/>
+        <constructor-arg index="3" ref="messageParser"/>
+        <constructor-arg index="4" ref="messageIdFactory" />
+        <constructor-arg index="5" ref="storeMailboxAnnotationManager" />
+        <constructor-arg index="6" ref="delegating-listener" />
+        <constructor-arg index="7" ref="storeRightManager" />
+        <constructor-arg index="8" ref="quotaComponents" />
+        <constructor-arg index="9" ref="indexer" />
+        <constructor-arg index="10" ref="no-mailbox-configuration" />
     </bean>
+
+    <bean id ="no-mailbox-configuration" class="org.apache.james.mailbox.store.MailboxManagerConfiguration.NoMailboxConfiguration"/>
     
     <bean id ="maildir-subscriptionManager" class="org.apache.james.mailbox.store.StoreSubscriptionManager">
         <constructor-arg index="0" ref="maildir-sessionMapperFactory"/>

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml b/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
index db25210..c9b1147 100644
--- a/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
+++ b/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
@@ -31,20 +31,17 @@
     <!-- WARNING: Memory does not persist the mailbox. -->
     <!--          Information will be lost after jvm restart. -->
 
-    <bean id="memory-mailboxManager" class="org.apache.james.mailbox.inmemory.InMemoryMailboxManager" init-method="init">
+    <bean id="memory-mailboxManager" class="org.apache.james.mailbox.inmemory.InMemoryMailboxManager">
         <constructor-arg index="0" ref="memory-sessionMapperFactory"/>
-        <constructor-arg index="1" ref="authenticator"/>
-        <constructor-arg index="2" ref="authorizator"/>
-        <constructor-arg index="3" ref="memory-locker"/>
-        <constructor-arg index="4" ref="messageParser"/>
-        <constructor-arg index="5" ref="messageIdFactory" />
-        <constructor-arg index="6" ref="delegating-listener" />
-        <constructor-arg index="7" ref="storeMailboxAnnotationManager" />
-        <constructor-arg index="8" ref="storeRightManager" />
-<!--         <property name="messageSearchIndex" ref="lazyIndex"/> -->
-        <property name="quotaManager" ref="quotaManager"/>
-        <property name="quotaRootResolver" ref="quotaRootResolver"/>
-        <property name="quotaUpdater" ref="quotaUpdater"/>
+        <constructor-arg index="1" ref="sessionProvider"/>
+        <constructor-arg index="2" ref="memory-locker"/>
+        <constructor-arg index="3" ref="messageParser"/>
+        <constructor-arg index="4" ref="messageIdFactory" />
+        <constructor-arg index="5" ref="delegating-listener" />
+        <constructor-arg index="6" ref="storeMailboxAnnotationManager" />
+        <constructor-arg index="7" ref="storeRightManager" />
+        <constructor-arg index="8" ref="quotaComponents" />
+        <constructor-arg index="9" ref="indexer" />
     </bean>
 
     <bean id ="memory-subscriptionManager" class="org.apache.james.mailbox.store.StoreSubscriptionManager">

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java
new file mode 100644
index 0000000..9527a4a
--- /dev/null
+++ b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java
@@ -0,0 +1,71 @@
+/****************************************************************
+ * 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.spring;
+
+import javax.inject.Inject;
+
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
+import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
+import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
+import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaUpdater;
+import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+
+public class MailboxInitializer {
+    private final SessionProvider sessionProvider;
+    private final DelegatingMailboxListener delegatingMailboxListener;
+    private final MessageSearchIndex messageSearchIndex;
+    private final QuotaUpdater quotaUpdater;
+    private final MailboxManager mailboxManager;
+    private final MailboxSessionMapperFactory mapperFactory;
+
+    @Inject
+    public MailboxInitializer(SessionProvider sessionProvider, DelegatingMailboxListener delegatingMailboxListener, MessageSearchIndex messageSearchIndex, QuotaUpdater quotaUpdater, MailboxManager mailboxManager, MailboxSessionMapperFactory mapperFactory) {
+        this.sessionProvider = sessionProvider;
+        this.delegatingMailboxListener = delegatingMailboxListener;
+        this.messageSearchIndex = messageSearchIndex;
+        this.quotaUpdater = quotaUpdater;
+        this.mailboxManager = mailboxManager;
+        this.mapperFactory = mapperFactory;
+    }
+
+    public void init() throws MailboxException {
+        MailboxSession session = sessionProvider.createSystemSession("admin");
+
+        if (messageSearchIndex instanceof ListeningMessageSearchIndex) {
+            ListeningMessageSearchIndex index = (ListeningMessageSearchIndex) messageSearchIndex;
+            delegatingMailboxListener.addGlobalListener(index, session);
+        }
+
+        if (quotaUpdater instanceof ListeningCurrentQuotaUpdater) {
+            ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = (ListeningCurrentQuotaUpdater) quotaUpdater;
+            delegatingMailboxListener.addGlobalListener(listeningCurrentQuotaUpdater, session);
+        }
+
+        if (mailboxManager.getSupportedMailboxCapabilities().contains(MailboxManager.MailboxCapabilities.Annotation)) {
+            delegatingMailboxListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), session);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
index f68871a..36c63b4 100644
--- a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
+++ b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
@@ -28,7 +28,8 @@ public class SpringMailbox {
     public SpringMailbox() {
         applicationContext = new ClassPathXmlApplicationContext("META-INF/spring/spring-mailbox.xml",
             "META-INF/spring/mailbox-authenticator-anonymous.xml", "META-INF/spring/mailbox-no-authorizator.xml", "META-INF/spring/quota.xml",
-            "META-INF/spring/quota-alias.xml", "META-INF/spring/event-system.xml", "META-INF/spring/metrics.xml");
+            "META-INF/spring/quota-alias.xml","META-INF/spring/mailbox-index-lucene-test.xml", "META-INF/spring/event-system.xml",
+            "META-INF/spring/metrics.xml");
     }
     
     public Object getBean(String beanName) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml b/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
index 17661cb..f21a0b7 100644
--- a/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
+++ b/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
@@ -23,7 +23,7 @@
        xsi:schemaLocation="
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
-    <bean id="default-delegating-listener" class="org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener" lazy-init="true">
+    <bean id="delegating-listener" class="org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener" lazy-init="true">
         <constructor-arg index="0" ref="event-delivery"/>
         <constructor-arg index="1" ref="event-registry"/>
     </bean>

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/spring/src/main/resources/META-INF/spring/quota.xml
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/resources/META-INF/spring/quota.xml b/mailbox/spring/src/main/resources/META-INF/spring/quota.xml
index a284b14..9cb5a2c 100644
--- a/mailbox/spring/src/main/resources/META-INF/spring/quota.xml
+++ b/mailbox/spring/src/main/resources/META-INF/spring/quota.xml
@@ -26,7 +26,7 @@
         <constructor-arg index="0" ref="entityManagerFactory" />
     </bean>
     <bean id="defaultQuotaRootResolver" class="org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver" lazy-init="true">
-        <constructor-arg index="0" ref="mailboxmanager"/>
+        <constructor-arg index="0" ref="sessionProvider"/>
         <constructor-arg index="1" ref="messageMapperFactory"/>
     </bean>
 
@@ -37,7 +37,7 @@
 
     <bean id="inMemoryCurrentQuotaManager" class="org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager" lazy-init="true">
         <constructor-arg index="0" ref="currentQuotaCalculator"/>
-        <constructor-arg index="1" ref="mailboxmanager"/>
+        <constructor-arg index="1" ref="sessionProvider"/>
     </bean>
 
     <bean id="noMaxQuotaManager" class="org.apache.james.mailbox.store.quota.NoMaxQuotaManager" lazy-init="true"/>
@@ -58,4 +58,11 @@
         <constructor-arg index="3" ref="storeQuotaManager"/>
     </bean>
 
+    <bean id="quotaComponents" class="org.apache.james.mailbox.store.quota.QuotaComponents">
+        <constructor-arg index="0" ref="maxQuotaManager"/>
+        <constructor-arg index="1" ref="quotaManager"/>
+        <constructor-arg index="2" ref="quotaRootResolver"/>
+        <constructor-arg index="3" ref="quotaUpdater"/>
+    </bean>
+
 </beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml b/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml
index b7ae58a..bedb91a 100644
--- a/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml
+++ b/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml
@@ -66,6 +66,18 @@
         <constructor-arg index="3" ref="delegating-listener" />
     </bean>
 
-    <alias name="default-delegating-listener" alias="delegating-listener"/>
+    <bean id="sessionProvider" class="org.apache.james.mailbox.store.SessionProvider" >
+        <constructor-arg index="0" ref="authenticator" />
+        <constructor-arg index="1" ref="authorizator" />
+    </bean>
+
+    <bean id="mailbox-init" class="org.apache.james.mailbox.spring.MailboxInitializer" init-method="init">
+        <constructor-arg index="0" ref="sessionProvider" />
+        <constructor-arg index="1" ref="delegating-listener" />
+        <constructor-arg index="2" ref="indexer" />
+        <constructor-arg index="3" ref="quotaUpdater" />
+        <constructor-arg index="4" ref="mailboxmanager" />
+        <constructor-arg index="5" ref="messageMapperFactory" />
+    </bean>
 
 </beans>

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene-test.xml
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene-test.xml b/mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene-test.xml
new file mode 100644
index 0000000..bf7036e
--- /dev/null
+++ b/mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene-test.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.    
+-->
+
+<beans xmlns="http://www.springframework.org/schema/beans" 
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+    <!-- 
+      Mailbox Lucene
+     -->
+
+    <bean id="luceneIndex" class="org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex">
+        <constructor-arg index="0" ref="messageMapperFactory"/>
+        <constructor-arg index="1" ref="mailboxIdFactory"/>
+        <constructor-arg index="2" type="org.apache.lucene.store.Directory" ref="fsDirectory"/>
+        <constructor-arg index="3" ref="messageIdFactory"/>
+        <constructor-arg index="4" ref="sessionProvider"/>
+        <property name="enableSuffixMatch" value="true"/>
+    </bean>
+    <bean id="fsDirectory"  class="org.apache.lucene.store.FSDirectory" factory-method="open">
+        <constructor-arg index="0" value="../var/store/lucene"/>
+    </bean>
+    <alias name="jpa-mailboxIdFactory" alias="mailboxIdFactory"/>
+    <alias name="jpa-mailboxmanager" alias="mailboxmanager"/>
+    <alias name="luceneIndex" alias="indexer"/>
+</beans>

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene.xml
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene.xml b/mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene.xml
deleted file mode 100644
index 5cf7f8e..0000000
--- a/mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.    
--->
-
-<beans xmlns="http://www.springframework.org/schema/beans" 
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="
-          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-    <!-- 
-      Mailbox Lucene
-     -->
-
-    <bean id="lazyIndex" class="org.apache.james.mailbox.store.search.LazyMessageSearchIndex">
-        <constructor-arg index="0" ref="luceneIndex"/>
-        <constructor-arg index="1" ref="messageMapperFactory"/>
-        <constructor-arg index="2" ref="mailboxmanager"/>
-    </bean>
-    <bean id="luceneIndex" class="org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex">
-        <constructor-arg index="0" ref="messageMapperFactory"/>
-        <constructor-arg index="1" ref="mailboxIdFactory"/>
-        <constructor-arg index="2" type="org.apache.lucene.store.Directory" ref="fsDirectory"/>
-        <constructor-arg index="3" ref="messageIdFactory"/>
-        <constructor-arg index="4" ref="mailboxmanager"/>
-        <property name="enableSuffixMatch" value="true"/>
-    </bean>
-    <bean id="fsDirectory"  class="org.apache.lucene.store.FSDirectory" factory-method="open">
-        <constructor-arg index="0" value="../var/store/lucene"/>
-    </bean>
-    <alias name="jpa-mailboxIdFactory" alias="mailboxIdFactory"/>
-    <alias name="jpa-mailboxmanager" alias="mailboxmanager"/>
-</beans>

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
index 2f12b06..5a7e5ba 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
@@ -24,6 +24,14 @@ import javax.inject.Inject;
 public class MailboxManagerConfiguration {
     public static final MailboxManagerConfiguration DEFAULT = new MailboxManagerConfiguration(BatchSizes.defaultValues());
 
+    static class NoMailboxConfiguration extends MailboxManagerConfiguration {
+        // Spring hack
+
+        public NoMailboxConfiguration() {
+            super(BatchSizes.defaultValues());
+        }
+    }
+
     private final BatchSizes batchSizes;
 
     @Inject

http://git-wip-us.apache.org/repos/asf/james-project/blob/367c5aca/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
----------------------------------------------------------------------
diff --git a/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java b/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
index 5ff4917..f060891 100644
--- a/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
+++ b/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
@@ -58,7 +58,6 @@ public class JamesSpringContextTest {
         DefaultDelegatingMailboxListener mailboxListener = context.getBean(DefaultDelegatingMailboxListener.class);
 
         assertThat(mailboxListener.getRegistry().getGlobalListeners())
-            .hasSize(2)
             .areExactly(ONCE, QUOTA_UPDATER_LISTENER);
     }
 


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


[18/30] james-project git commit: MAILBOX-367 RabbitMQEventBus exchange, queue life cycle tests

Posted by bt...@apache.org.
MAILBOX-367 RabbitMQEventBus exchange, queue life cycle tests


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

Branch: refs/heads/master
Commit: 9fc3e75044ffc11677c6b9c11dc07efc5cf075b4
Parents: 9142624
Author: datph <dp...@linagora.com>
Authored: Thu Jan 10 10:56:27 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../mailbox/events/EventBusTestFixture.java     |   2 +
 .../james/mailbox/events/GroupContract.java     |  42 ++--
 .../james/mailbox/events/RabbitMQEventBus.java  |  37 +++-
 .../mailbox/events/RabbitMQEventBusTest.java    | 210 +++++++++++++++++++
 4 files changed, 259 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9fc3e750/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
index 530bbe5..90f5ff5 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
@@ -97,6 +97,8 @@ public interface EventBusTestFixture {
     MailboxIdRegistrationKey KEY_2 = new MailboxIdRegistrationKey(ID_2);
     List<Class<? extends Group>> ALL_GROUPS = ImmutableList.of(GroupA.class, GroupB.class, GroupC.class);
 
+    GroupA GROUP_A = new GroupA();
+
     ConditionFactory WAIT_CONDITION = await().timeout(com.jayway.awaitility.Duration.ONE_SECOND);
 
     static MailboxListener newListener() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/9fc3e750/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
index c6bc1b2..beeeb0b 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
@@ -22,7 +22,7 @@ package org.apache.james.mailbox.events;
 import static org.apache.james.mailbox.events.EventBusTestFixture.EVENT;
 import static org.apache.james.mailbox.events.EventBusTestFixture.EVENT_2;
 import static org.apache.james.mailbox.events.EventBusTestFixture.FIVE_HUNDRED_MS;
-import static org.apache.james.mailbox.events.EventBusTestFixture.GroupA;
+import static org.apache.james.mailbox.events.EventBusTestFixture.GROUP_A;
 import static org.apache.james.mailbox.events.EventBusTestFixture.GroupB;
 import static org.apache.james.mailbox.events.EventBusTestFixture.NO_KEYS;
 import static org.apache.james.mailbox.events.EventBusTestFixture.ONE_SECOND;
@@ -58,7 +58,7 @@ public interface GroupContract {
         default void listenerGroupShouldReceiveEvents() {
             MailboxListener listener = newListener();
 
-            eventBus().register(listener, new GroupA());
+            eventBus().register(listener, GROUP_A);
 
             eventBus().dispatch(EVENT, NO_KEYS).block();
 
@@ -69,7 +69,7 @@ public interface GroupContract {
         default void groupListenersShouldNotReceiveNoopEvents() {
             MailboxListener listener = newListener();
 
-            eventBus().register(listener, new GroupA());
+            eventBus().register(listener, GROUP_A);
 
             MailboxListener.Added noopEvent = new MailboxListener.Added(MailboxSession.SessionId.of(18), User.fromUsername("bob"), MailboxPath.forUser("bob", "mailbox"), TestId.of(58), ImmutableSortedMap.of(), Event.EventId.random());
             eventBus().dispatch(noopEvent, NO_KEYS).block();
@@ -83,7 +83,7 @@ public interface GroupContract {
             MailboxListener listener = newListener();
             doThrow(new RuntimeException()).when(listener).event(any());
 
-            eventBus().register(listener, new GroupA());
+            eventBus().register(listener, GROUP_A);
 
             assertThatCode(() -> eventBus().dispatch(EVENT, NO_KEYS).block())
                 .doesNotThrowAnyException();
@@ -93,7 +93,7 @@ public interface GroupContract {
         default void eachListenerGroupShouldReceiveEvents() {
             MailboxListener listener = newListener();
             MailboxListener listener2 = newListener();
-            eventBus().register(listener, new GroupA());
+            eventBus().register(listener, GROUP_A);
             eventBus().register(listener2, new GroupB());
 
             eventBus().dispatch(EVENT, NO_KEYS).block();
@@ -105,7 +105,7 @@ public interface GroupContract {
         @Test
         default void unregisteredGroupListenerShouldNotReceiveEvents() {
             MailboxListener listener = newListener();
-            Registration registration = eventBus().register(listener, new GroupA());
+            Registration registration = eventBus().register(listener, GROUP_A);
 
             registration.unregister();
 
@@ -119,9 +119,9 @@ public interface GroupContract {
             MailboxListener listener = newListener();
             MailboxListener listener2 = newListener();
 
-            eventBus().register(listener, new GroupA());
+            eventBus().register(listener, GROUP_A);
 
-            assertThatThrownBy(() -> eventBus().register(listener2, new GroupA()))
+            assertThatThrownBy(() -> eventBus().register(listener2, GROUP_A))
                 .isInstanceOf(GroupAlreadyRegistered.class);
         }
 
@@ -130,9 +130,9 @@ public interface GroupContract {
             MailboxListener listener = newListener();
             MailboxListener listener2 = newListener();
 
-            eventBus().register(listener, new GroupA()).unregister();
+            eventBus().register(listener, GROUP_A).unregister();
 
-            assertThatCode(() -> eventBus().register(listener2, new GroupA()))
+            assertThatCode(() -> eventBus().register(listener2, GROUP_A))
                 .doesNotThrowAnyException();
         }
 
@@ -140,7 +140,7 @@ public interface GroupContract {
         default void unregisterShouldBeIdempotentForGroups() {
             MailboxListener listener = newListener();
 
-            Registration registration = eventBus().register(listener, new GroupA());
+            Registration registration = eventBus().register(listener, GROUP_A);
             registration.unregister();
 
             assertThatCode(registration::unregister)
@@ -151,8 +151,8 @@ public interface GroupContract {
         default void registerShouldAcceptAlreadyUnregisteredGroups() {
             MailboxListener listener = newListener();
 
-            eventBus().register(listener, new GroupA()).unregister();
-            eventBus().register(listener, new GroupA());
+            eventBus().register(listener, GROUP_A).unregister();
+            eventBus().register(listener, GROUP_A);
 
             eventBus().dispatch(EVENT, NO_KEYS).block();
 
@@ -163,7 +163,7 @@ public interface GroupContract {
         default void dispatchShouldCallSynchronousListener() {
             MailboxListener listener = newListener();
 
-            eventBus().register(listener, new GroupA());
+            eventBus().register(listener, GROUP_A);
 
             eventBus().dispatch(EVENT, NO_KEYS).block();
 
@@ -172,8 +172,8 @@ public interface GroupContract {
 
         @Test
         default void failingGroupListenersShouldNotAbortGroupDelivery() {
-            EventBusTestFixture.EventMatcherThrowingListener listener = new EventBusTestFixture.EventMatcherThrowingListener(ImmutableSet.of(EVENT));
-            eventBus().register(listener, new GroupA());
+            EventBusTestFixture.MailboxListenerCountingSuccessfulExecution listener = new EventBusTestFixture.EventMatcherThrowingListener(ImmutableSet.of(EVENT));
+            eventBus().register(listener, GROUP_A);
 
             eventBus().dispatch(EVENT, NO_KEYS).block();
             eventBus().dispatch(EVENT_2, NO_KEYS).block();
@@ -190,7 +190,7 @@ public interface GroupContract {
             when(listener.getExecutionMode()).thenReturn(MailboxListener.ExecutionMode.SYNCHRONOUS);
             doThrow(new RuntimeException()).when(failingListener).event(any());
 
-            eventBus().register(failingListener, new GroupA());
+            eventBus().register(failingListener, GROUP_A);
             eventBus().register(listener, new GroupB());
 
             eventBus().dispatch(EVENT, NO_KEYS).block();
@@ -205,7 +205,7 @@ public interface GroupContract {
         default void groupsDefinedOnlyOnSomeNodesShouldBeNotified() {
             MailboxListener mailboxListener = newListener();
 
-            eventBus().register(mailboxListener, new GroupA());
+            eventBus().register(mailboxListener, GROUP_A);
 
             eventBus2().dispatch(EVENT, NO_KEYS).block();
 
@@ -216,8 +216,8 @@ public interface GroupContract {
         default void groupListenersShouldBeExecutedOnceInAControlledEnvironment() {
             MailboxListener mailboxListener = newListener();
 
-            eventBus().register(mailboxListener, new GroupA());
-            eventBus2().register(mailboxListener, new GroupA());
+            eventBus().register(mailboxListener, GROUP_A);
+            eventBus2().register(mailboxListener, GROUP_A);
 
             eventBus2().dispatch(EVENT, NO_KEYS).block();
 
@@ -228,7 +228,7 @@ public interface GroupContract {
         default void unregisterShouldStopNotificationForDistantGroups() {
             MailboxListener mailboxListener = newListener();
 
-            eventBus().register(mailboxListener, new GroupA()).unregister();
+            eventBus().register(mailboxListener, GROUP_A).unregister();
 
             eventBus2().dispatch(EVENT, NO_KEYS).block();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9fc3e750/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java
----------------------------------------------------------------------
diff --git a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java
index accd6cc..87e8ab1 100644
--- a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java
+++ b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java
@@ -20,6 +20,7 @@
 package org.apache.james.mailbox.events;
 
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.annotation.PreDestroy;
 
@@ -36,29 +37,43 @@ import reactor.rabbitmq.RabbitFlux;
 import reactor.rabbitmq.Sender;
 import reactor.rabbitmq.SenderOptions;
 
-public class RabbitMQEventBus implements EventBus {
+class RabbitMQEventBus implements EventBus {
     static final String MAILBOX_EVENT = "mailboxEvent";
     static final String MAILBOX_EVENT_EXCHANGE_NAME = MAILBOX_EVENT + "-exchange";
 
-    private final Sender sender;
-    private final GroupRegistrationHandler groupRegistrationHandler;
-    private final EventDispatcher eventDispatcher;
+    private final Mono<Connection> connectionMono;
+    private final EventSerializer eventSerializer;
+    private final AtomicBoolean isRunning;
+
+    private GroupRegistrationHandler groupRegistrationHandler;
+    private EventDispatcher eventDispatcher;
+    private Sender sender;
 
     RabbitMQEventBus(RabbitMQConnectionFactory rabbitMQConnectionFactory, EventSerializer eventSerializer) {
-        Mono<Connection> connectionMono = Mono.fromSupplier(rabbitMQConnectionFactory::create).cache();
-        this.sender = RabbitFlux.createSender(new SenderOptions().connectionMono(connectionMono));
-        this.groupRegistrationHandler = new GroupRegistrationHandler(eventSerializer, sender, connectionMono);
-        this.eventDispatcher = new EventDispatcher(eventSerializer, sender);
+        this.connectionMono = Mono.fromSupplier(rabbitMQConnectionFactory::create).cache();
+        this.eventSerializer = eventSerializer;
+        isRunning = new AtomicBoolean(false);
     }
 
     public void start() {
-        eventDispatcher.start();
+        if (!isRunning.get()) {
+            sender = RabbitFlux.createSender(new SenderOptions().connectionMono(connectionMono));
+            groupRegistrationHandler = new GroupRegistrationHandler(eventSerializer, sender, connectionMono);
+            eventDispatcher = new EventDispatcher(eventSerializer, sender);
+
+            eventDispatcher.start();
+
+            isRunning.set(true);
+        }
     }
 
     @PreDestroy
     public void stop() {
-        groupRegistrationHandler.stop();
-        sender.close();
+        if (isRunning.get()) {
+            groupRegistrationHandler.stop();
+            sender.close();
+            isRunning.set(false);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/9fc3e750/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
index b8d5cee..8e5503a 100644
--- a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
+++ b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
@@ -20,25 +20,37 @@
 package org.apache.james.mailbox.events;
 
 import static org.apache.james.backend.rabbitmq.Constants.AUTO_DELETE;
+import static org.apache.james.backend.rabbitmq.Constants.DIRECT_EXCHANGE;
 import static org.apache.james.backend.rabbitmq.Constants.DURABLE;
 import static org.apache.james.backend.rabbitmq.Constants.EMPTY_ROUTING_KEY;
 import static org.apache.james.backend.rabbitmq.Constants.EXCLUSIVE;
 import static org.apache.james.backend.rabbitmq.Constants.NO_ARGUMENTS;
 import static org.apache.james.mailbox.events.EventBusTestFixture.ALL_GROUPS;
 import static org.apache.james.mailbox.events.EventBusTestFixture.EVENT;
+import static org.apache.james.mailbox.events.EventBusTestFixture.GROUP_A;
+import static org.apache.james.mailbox.events.EventBusTestFixture.GroupA;
+import static org.apache.james.mailbox.events.EventBusTestFixture.KEY_1;
+import static org.apache.james.mailbox.events.EventBusTestFixture.MailboxListenerCountingSuccessfulExecution;
 import static org.apache.james.mailbox.events.EventBusTestFixture.NO_KEYS;
 import static org.apache.james.mailbox.events.RabbitMQEventBus.MAILBOX_EVENT;
 import static org.apache.james.mailbox.events.RabbitMQEventBus.MAILBOX_EVENT_EXCHANGE_NAME;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.mockito.Mockito.mock;
 
 import java.nio.charset.StandardCharsets;
+import java.time.Duration;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.james.backend.rabbitmq.RabbitMQConnectionFactory;
 import org.apache.james.backend.rabbitmq.RabbitMQExtension;
+import org.apache.james.backend.rabbitmq.RabbitMQManagementAPI;
 import org.apache.james.event.json.EventSerializer;
 import org.apache.james.mailbox.Event;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.model.TestMessageId;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
@@ -158,4 +170,202 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 .get();
         }
     }
+
+    @Nested
+    class LifeCycleTest {
+
+        private RabbitMQManagementAPI rabbitManagementAPI;
+
+        @BeforeEach
+        void setUp() throws Exception {
+            rabbitManagementAPI = rabbitMQExtension.managementAPI();
+        }
+
+        @Nested
+        class SingleEventBus {
+            @Test
+            void startShouldCreateEventExchange() {
+                eventBus.start();
+                assertThat(rabbitManagementAPI.listExchanges())
+                    .filteredOn(exchange -> exchange.getName().equals(MAILBOX_EVENT_EXCHANGE_NAME))
+                    .hasOnlyOneElementSatisfying(exchange -> {
+                        assertThat(exchange.isDurable()).isTrue();
+                        assertThat(exchange.getType()).isEqualTo(DIRECT_EXCHANGE);
+                    });
+            }
+
+            @Test
+            void stopShouldNotDeleteEventBusExchange() {
+                eventBus.start();
+                eventBus.stop();
+
+                assertThat(rabbitManagementAPI.listExchanges())
+                    .anySatisfy(exchange -> exchange.getName().equals(MAILBOX_EVENT_EXCHANGE_NAME));
+            }
+
+            @Test
+            void stopShouldNotDeleteGroupRegistrationWorkQueue() {
+                eventBus.start();
+                eventBus.register(mock(MailboxListener.class), GROUP_A);
+                eventBus.stop();
+
+                assertThat(rabbitManagementAPI.listQueues())
+                    .anySatisfy(queue -> queue.getName().contains(GroupA.class.getName()));
+            }
+
+            @Test
+            void stopShouldDeleteKeyRegistrationWorkQueue() {
+                eventBus.start();
+                eventBus.stop();
+
+                assertThat(rabbitManagementAPI.listQueues())
+                    .isEmpty();
+            }
+
+            @Test
+            void eventBusShouldNotThrowWhenContinuouslyStartAndStop() {
+                assertThatCode(() -> {
+                    eventBus.start();
+                    eventBus.stop();
+                    eventBus.stop();
+                    eventBus.start();
+                    eventBus.start();
+                    eventBus.start();
+                    eventBus.stop();
+                    eventBus.stop();
+                }).doesNotThrowAnyException();
+            }
+
+            @Test
+            void registrationsShouldNotHandleEventsAfterStop() throws Exception {
+                eventBus.start();
+
+                MailboxListenerCountingSuccessfulExecution listener = new MailboxListenerCountingSuccessfulExecution();
+                eventBus.register(listener, GROUP_A);
+
+                int threadCount = 10;
+                int operationCount = 1000;
+                int maxEventsDispatched = threadCount * operationCount;
+                ConcurrentTestRunner.builder()
+                    .operation((threadNumber, step) -> eventBus.dispatch(EVENT, KEY_1))
+                    .threadCount(10)
+                    .operationCount(1000)
+                    .runSuccessfullyWithin(Duration.ofSeconds(5));
+
+                eventBus.stop();
+                int callsAfterStop = listener.numberOfEventCalls();
+
+                TimeUnit.SECONDS.sleep(1);
+                assertThat(listener.numberOfEventCalls())
+                    .isEqualTo(callsAfterStop)
+                    .isLessThan(maxEventsDispatched);
+            }
+        }
+
+        @Nested
+        class MultiEventBus {
+
+            private RabbitMQEventBus eventBus3;
+
+            @BeforeEach
+            void setUp() {
+                eventBus3 = new RabbitMQEventBus(connectionFactory, eventSerializer);
+                eventBus3.start();
+            }
+
+            @AfterEach
+            void tearDown() {
+                eventBus3.stop();
+            }
+
+            @Test
+            void multipleEventBusStartShouldCreateOnlyOneEventExchange() {
+                assertThat(rabbitManagementAPI.listExchanges())
+                    .filteredOn(exchange -> exchange.getName().equals(MAILBOX_EVENT_EXCHANGE_NAME))
+                    .hasSize(1);
+            }
+
+            @Test
+            void multipleEventBusShouldNotThrowWhenStartAndStopContinuously() {
+                assertThatCode(() -> {
+                    eventBus.start();
+                    eventBus.start();
+                    eventBus2.start();
+                    eventBus2.start();
+                    eventBus.stop();
+                    eventBus.stop();
+                    eventBus.stop();
+                    eventBus3.start();
+                    eventBus3.start();
+                    eventBus3.start();
+                    eventBus3.stop();
+                    eventBus.start();
+                    eventBus2.start();
+                    eventBus.stop();
+                    eventBus2.stop();
+                }).doesNotThrowAnyException();
+            }
+
+            @Test
+            void multipleEventBusStopShouldNotDeleteEventBusExchange() {
+                eventBus.stop();
+                eventBus2.stop();
+                eventBus3.stop();
+
+                assertThat(rabbitManagementAPI.listExchanges())
+                    .anySatisfy(exchange -> exchange.getName().equals(MAILBOX_EVENT_EXCHANGE_NAME));
+            }
+
+            @Test
+            void multipleEventBusStopShouldNotDeleteGroupRegistrationWorkQueue() {
+                eventBus.register(mock(MailboxListener.class), GROUP_A);
+
+                eventBus.stop();
+                eventBus2.stop();
+                eventBus3.stop();
+
+                assertThat(rabbitManagementAPI.listQueues())
+                    .anySatisfy(queue -> queue.getName().contains(GroupA.class.getName()));
+            }
+
+            @Test
+            void multipleEventBusStopShouldDeleteAllKeyRegistrationsWorkQueue() {
+                eventBus.stop();
+                eventBus2.stop();
+                eventBus3.stop();
+
+                assertThat(rabbitManagementAPI.listQueues())
+                    .isEmpty();
+            }
+
+            @Test
+            void registrationsShouldNotHandleEventsAfterStop() throws Exception {
+                eventBus.start();
+                eventBus2.start();
+
+                MailboxListenerCountingSuccessfulExecution listener = new MailboxListenerCountingSuccessfulExecution();
+                eventBus.register(listener, GROUP_A);
+                eventBus2.register(listener, GROUP_A);
+
+                int threadCount = 10;
+                int operationCount = 1000;
+                int maxEventsDispatched = threadCount * operationCount;
+                ConcurrentTestRunner.builder()
+                    .operation((threadNumber, step) -> eventBus.dispatch(EVENT, KEY_1))
+                    .threadCount(10)
+                    .operationCount(1000)
+                    .runSuccessfullyWithin(Duration.ofSeconds(5));
+
+                eventBus.stop();
+                eventBus2.stop();
+                int callsAfterStop = listener.numberOfEventCalls();
+
+                TimeUnit.SECONDS.sleep(1);
+                assertThat(listener.numberOfEventCalls())
+                    .isEqualTo(callsAfterStop)
+                    .isLessThan(maxEventsDispatched);
+            }
+        }
+
+    }
 }
\ No newline at end of file


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


[24/30] james-project git commit: JAMES-2641 Simplify slightly InMemoryIntegrationResources

Posted by bt...@apache.org.
JAMES-2641 Simplify slightly InMemoryIntegrationResources


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

Branch: refs/heads/master
Commit: 59910ec7cad40bd4c2cc9ef5c40897d49d5b328c
Parents: 7a2bf1e
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 9 10:17:56 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../manager/InMemoryIntegrationResources.java   | 25 ++++----------------
 1 file changed, 5 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/59910ec7/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 27f3c9d..45425cb 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.mailbox.inmemory.manager;
 
-import java.util.function.BiFunction;
-
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
@@ -33,6 +31,7 @@ import org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager;
 import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
 import org.apache.james.mailbox.manager.IntegrationResources;
 import org.apache.james.mailbox.manager.ManagerTestResources;
+import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
@@ -94,26 +93,13 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
     }
 
     public Resources createResources(GroupMembershipResolver groupMembershipResolver) throws MailboxException {
-        return createMailboxManager(groupMembershipResolver,
-            ((storeRightManager, inMemoryMailboxSessionMapperFactory) ->
-                new StoreMailboxAnnotationManager(
-                    inMemoryMailboxSessionMapperFactory,
-                    storeRightManager)));
+        return createResources(groupMembershipResolver,
+            MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX,
+            MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
     }
 
     public Resources createResources(GroupMembershipResolver groupMembershipResolver,
                                      int limitAnnotationCount, int limitAnnotationSize) throws MailboxException {
-        return createMailboxManager(groupMembershipResolver,
-            ((storeRightManager, inMemoryMailboxSessionMapperFactory) ->
-             new StoreMailboxAnnotationManager(
-                 inMemoryMailboxSessionMapperFactory,
-                 storeRightManager,
-                 limitAnnotationCount,
-                 limitAnnotationSize)));
-    }
-
-    private Resources createMailboxManager(GroupMembershipResolver groupMembershipResolver,
-                                           BiFunction<StoreRightManager, InMemoryMailboxSessionMapperFactory, StoreMailboxAnnotationManager> annotationManagerBiFunction) throws MailboxException {
         FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
         fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
         fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
@@ -121,8 +107,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(),
             groupMembershipResolver, delegatingListener);
-        StoreMailboxAnnotationManager annotationManager = annotationManagerBiFunction
-            .apply(storeRightManager, mailboxSessionMapperFactory);
+        StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager, limitAnnotationCount, limitAnnotationSize);
 
         SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, FakeAuthorizator.defaultReject());
         QuotaComponents quotaComponents = createQuotaComponents(mailboxSessionMapperFactory, delegatingListener, sessionProvider);


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


[09/30] james-project git commit: JAMES-2641 DefaultUserQuotaRootResolver should rely on SessionProvider

Posted by bt...@apache.org.
JAMES-2641 DefaultUserQuotaRootResolver should rely on SessionProvider

This allow uncoupling it from the mailbox manager and breaks a dependency loop that prevented final allocation


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

Branch: refs/heads/master
Commit: c4be7f66525b154e480040810da5b94343e25fb6
Parents: 90af614
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 12:09:08 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraMailboxManagerProvider.java        |  2 +-
 .../mailbox/cassandra/CassandraTestSystemFixture.java     |  2 +-
 .../inmemory/manager/InMemoryIntegrationResources.java    |  2 +-
 .../manager/InMemoryMessageIdManagerSideEffectTest.java   |  2 +-
 .../apache/james/mailbox/store/StoreMailboxManager.java   |  6 +++++-
 .../mailbox/store/quota/DefaultUserQuotaRootResolver.java | 10 +++++-----
 .../store/quota/DefaultUserQuotaRootResolverTest.java     |  5 ++---
 .../imapmailbox/cassandra/host/CassandraHostSystem.java   |  2 +-
 .../elasticsearch/host/ElasticSearchHostSystem.java       |  2 +-
 .../james/mpt/imapmailbox/jpa/host/JPAHostSystem.java     |  2 +-
 .../lucenesearch/host/LuceneSearchHostSystem.java         |  2 +-
 .../mpt/imapmailbox/maildir/host/MaildirHostSystem.java   |  2 +-
 .../apache/james/transport/matchers/IsOverQuotaTest.java  |  2 +-
 13 files changed, 22 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index c6e8cbb..38c5ca4 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -80,7 +80,7 @@ public class CassandraMailboxManagerProvider {
             new CassandraGlobalMaxQuotaDao(session));
         CassandraCurrentQuotaManager currentQuotaUpdater = new CassandraCurrentQuotaManager(session);
         StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaUpdater, maxQuotaManager);
-        QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(manager, mapperFactory);
+        QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory);
 
         ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaUpdater, quotaRootResolver, delegatingMailboxListener, storeQuotaManager);
         manager.setQuotaManager(storeQuotaManager);

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 4cc4470..b5657ae 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -82,7 +82,7 @@ public class CassandraTestSystemFixture {
             delegatingMailboxListener,
             new CassandraMessageId.Factory(),
             quotaManager,
-            new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory));
+            new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mapperFactory));
     }
 
     public static MaxQuotaManager createMaxQuotaManager(CassandraCluster cassandra) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 3df7a75..d736813 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -249,7 +249,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
     @Override
     public DefaultUserQuotaRootResolver createQuotaRootResolver(StoreMailboxManager mailboxManager) {
         if (quotaRootResolver == null) {
-            quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mailboxManager.getMapperFactory());
+            quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory());
         }
         return quotaRootResolver;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
index dcddfbd..d95f40b 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
@@ -75,7 +75,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
             delegatingMailboxListener,
             messageIdFactory,
             quotaManager,
-            new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory));
+            new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory));
         return new MessageIdManagerTestSystem(messageIdManager, messageIdFactory, mapperFactory, mailboxManager);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 3106688..4ebb875 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -156,6 +156,10 @@ public class StoreMailboxManager implements MailboxManager {
         this.quotaUpdater = quotaUpdater;
     }
 
+    public SessionProvider getSessionProvider() {
+        return sessionProvider;
+    }
+
     /**
      * Init the {@link MailboxManager}
      *
@@ -174,7 +178,7 @@ public class StoreMailboxManager implements MailboxManager {
             quotaManager = new NoQuotaManager();
         }
         if (quotaRootResolver == null) {
-            quotaRootResolver = new DefaultUserQuotaRootResolver(this, mailboxSessionMapperFactory);
+            quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory);
         }
         if (quotaUpdater != null && quotaUpdater instanceof MailboxListener) {
             this.addGlobalListener((MailboxListener) quotaUpdater, session);

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
index 3d86e2d..5b53b3c 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
@@ -25,7 +25,6 @@ import java.util.Optional;
 import javax.inject.Inject;
 
 import org.apache.james.core.User;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxConstants;
@@ -34,6 +33,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.quota.UserQuotaRootResolver;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 
 import com.google.common.base.Preconditions;
@@ -44,12 +44,12 @@ public class DefaultUserQuotaRootResolver implements UserQuotaRootResolver {
 
     public static final String SEPARATOR = "&"; // Character illegal for mailbox naming in regard of RFC 3501 section 5.1
 
-    private final MailboxManager mailboxManager;
+    private final SessionProvider sessionProvider;
     private final MailboxSessionMapperFactory factory;
 
     @Inject
-    public DefaultUserQuotaRootResolver(MailboxManager mailboxManager, MailboxSessionMapperFactory factory) {
-        this.mailboxManager = mailboxManager;
+    public DefaultUserQuotaRootResolver(SessionProvider sessionProvider, MailboxSessionMapperFactory factory) {
+        this.sessionProvider = sessionProvider;
         this.factory = factory;
     }
 
@@ -73,7 +73,7 @@ public class DefaultUserQuotaRootResolver implements UserQuotaRootResolver {
 
     @Override
     public QuotaRoot getQuotaRoot(MailboxId mailboxId) throws MailboxException {
-        MailboxSession session = mailboxManager.createSystemSession("DefaultUserQuotaRootResolver");
+        MailboxSession session = sessionProvider.createSystemSession("DefaultUserQuotaRootResolver");
         User user = User.fromUsername(
             factory.getMailboxMapper(session)
                 .findMailboxById(mailboxId)

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
index 52ee7b3..649f4d6 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
@@ -26,7 +26,6 @@ import static org.mockito.Mockito.when;
 
 import java.util.Optional;
 
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
@@ -34,6 +33,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.junit.Before;
@@ -57,9 +57,8 @@ public class DefaultUserQuotaRootResolverTest {
 
     @Before
     public void setUp() {
-        MailboxManager mailboxManager = mock(MailboxManager.class);
         mockedFactory = mock(MailboxSessionMapperFactory.class);
-        testee = new DefaultUserQuotaRootResolver(mailboxManager, mockedFactory);
+        testee = new DefaultUserQuotaRootResolver(mock(SessionProvider.class), mockedFactory);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index d789fc0..ed2e5cc 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -90,10 +90,10 @@ public class CassandraHostSystem extends JamesImapHostSystem {
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+        QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory);
         mailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
             new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
             delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
-        QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory);
 
         perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(
             new CassandraPerUserMaxQuotaDao(session),

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 302a7f7..515d79d 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -122,7 +122,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
             DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager,
                 new StoreSubscriptionManager(mailboxManager.getMapperFactory()),
                 new NoQuotaManager(),
-                new DefaultUserQuotaRootResolver(mailboxManager, mailboxManager.getMapperFactory()),
+                new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory()),
                 new DefaultMetricFactory());
         configure(new DefaultImapDecoderFactory().buildImapDecoder(),
             new DefaultImapEncoderFactory().buildImapEncoder(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 3f92176..84afd80 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -103,7 +103,7 @@ public class JPAHostSystem extends JamesImapHostSystem {
         mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider,
             messageParser, new DefaultMessageId.Factory(), delegatingListener, annotationManager, storeRightManager);
 
-        DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory);
+        DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mapperFactory);
         JpaCurrentQuotaManager currentQuotaManager = new JpaCurrentQuotaManager(entityManagerFactory);
         maxQuotaManager = new JPAPerUserMaxQuotaManager(new JPAPerUserMaxQuotaDAO(entityManagerFactory));
         StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index 8e15468..ae94e2a 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -127,7 +127,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
                     mailboxManager,
                     subscriptionManager,
                     new NoQuotaManager(),
-                    new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory),
+                    new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory),
                     new DefaultMetricFactory());
 
             configure(new DefaultImapDecoderFactory().buildImapDecoder(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index 83fa1eb..942935c 100644
--- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -89,7 +89,7 @@ public class MaildirHostSystem extends JamesImapHostSystem {
                         mailboxManager, 
                         sm, 
                         new NoQuotaManager(), 
-                        new DefaultUserQuotaRootResolver(mailboxManager, mailboxSessionMapperFactory),
+                        new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory),
                         new DefaultMetricFactory());
         configure(new DefaultImapDecoderFactory().buildImapDecoder(),
                 new DefaultImapEncoderFactory().buildImapEncoder(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4be7f66/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
index b25da39..4f27422 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
@@ -56,7 +56,7 @@ public class IsOverQuotaTest {
     public void setUp() throws Exception {
         mailboxManager = new InMemoryIntegrationResources().createMailboxManager(new SimpleGroupMembershipResolver());
 
-        quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mailboxManager.getMapperFactory());
+        quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory());
         maxQuotaManager = new InMemoryPerUserMaxQuotaManager();
         CurrentQuotaCalculator quotaCalculator = new CurrentQuotaCalculator(mailboxManager.getMapperFactory(), quotaRootResolver);
         InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(quotaCalculator, mailboxManager);


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


[16/30] james-project git commit: JAMES-2641 MailboxAnnotationListener should depend on SessionProvider

Posted by bt...@apache.org.
JAMES-2641 MailboxAnnotationListener should depend on SessionProvider

Again this breaks a dependency loop


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

Branch: refs/heads/master
Commit: eb2d2cc3e30c98ae02e34270cda8eac2217c18c3
Parents: 14ca4fe
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 17:29:32 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/store/StoreMailboxManager.java   |  2 +-
 .../mailbox/store/event/MailboxAnnotationListener.java    | 10 +++++-----
 .../store/event/MailboxAnnotationListenerTest.java        |  8 ++++----
 3 files changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/eb2d2cc3/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 388c81b..7fd17cf 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -174,7 +174,7 @@ public class StoreMailboxManager implements MailboxManager {
             this.addGlobalListener((MailboxListener) quotaUpdater, session);
         }
         if (hasCapability(MailboxCapabilities.Annotation)) {
-            this.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, this), session);
+            this.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider), session);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/eb2d2cc3/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
index b64dd6d..2514a40 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
@@ -24,12 +24,12 @@ import javax.inject.Inject;
 
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,12 +37,12 @@ import org.slf4j.LoggerFactory;
 public class MailboxAnnotationListener implements MailboxListener {
     private static final Logger logger = LoggerFactory.getLogger(MailboxAnnotationListener.class);
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
-    private final MailboxManager mailboxManager;
+    private final SessionProvider sessionProvider;
 
     @Inject
-    public MailboxAnnotationListener(MailboxSessionMapperFactory mailboxSessionMapperFactory, MailboxManager mailboxManager) {
+    public MailboxAnnotationListener(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider) {
         this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
-        this.mailboxManager = mailboxManager;
+        this.sessionProvider = sessionProvider;
     }
     
     @Override
@@ -54,7 +54,7 @@ public class MailboxAnnotationListener implements MailboxListener {
     public void event(Event event) {
         if (event instanceof MailboxDeletion) {
             try {
-                MailboxSession mailboxSession = mailboxManager.createSystemSession(event.getUser().asString());
+                MailboxSession mailboxSession = sessionProvider.createSystemSession(event.getUser().asString());
                 AnnotationMapper annotationMapper = mailboxSessionMapperFactory.getAnnotationMapper(mailboxSession);
                 MailboxId mailboxId = ((MailboxDeletion) event).getMailboxId();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/eb2d2cc3/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
index 13efd68..394b008 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
@@ -32,7 +32,6 @@ import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.model.MailboxAnnotation;
@@ -42,6 +41,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
 import org.junit.Before;
 import org.junit.Test;
@@ -63,7 +63,7 @@ public class MailboxAnnotationListenerTest {
     public static final int UID_VALIDITY = 145;
     public static final TestId MAILBOX_ID = TestId.of(45);
 
-    @Mock private MailboxManager mailboxManager;
+    @Mock private SessionProvider sessionProvider;
     @Mock private MailboxSessionMapperFactory mailboxSessionMapperFactory;
     @Mock private AnnotationMapper annotationMapper;
     @Mock private MailboxId mailboxId;
@@ -76,7 +76,7 @@ public class MailboxAnnotationListenerTest {
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         mailboxSession = MailboxSessionUtil.create("test");
-        listener = new MailboxAnnotationListener(mailboxSessionMapperFactory, mailboxManager);
+        listener = new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider);
 
         deleteEvent = EventFactory.mailboxDeleted()
             .randomEventId()
@@ -88,7 +88,7 @@ public class MailboxAnnotationListenerTest {
             .quotaSize(QuotaSize.size(456))
             .build();
 
-        when(mailboxManager.createSystemSession(deleteEvent.getUser().asString()))
+        when(sessionProvider.createSystemSession(deleteEvent.getUser().asString()))
             .thenReturn(mailboxSession);
         when(mailboxSessionMapperFactory.getAnnotationMapper(eq(mailboxSession))).thenReturn(annotationMapper);
     }


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


[07/30] james-project git commit: MAILBOX-367 Moving RabbitMQManagement API to rabbitmq-backend project

Posted by bt...@apache.org.
MAILBOX-367 Moving RabbitMQManagement API to rabbitmq-backend project

- Using this API in RabbitMQ EventBus


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

Branch: refs/heads/master
Commit: 64d4cdb7fe0878659f10f657774aaa2e6360e7ca
Parents: 44e7531
Author: datph <dp...@linagora.com>
Authored: Wed Jan 9 16:56:01 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 09:56:28 2019 +0700

----------------------------------------------------------------------
 backends-common/rabbitmq/pom.xml                |  21 +++-
 .../backend/rabbitmq/RabbitMQManagementAPI.java |  79 +++++++++++++++
 .../james/modules/TestRabbitMQModule.java       |  14 +--
 server/queue/queue-rabbitmq/pom.xml             |  19 ----
 .../rabbitmq/RabbitMQMailQueueFactory.java      |   4 +-
 .../rabbitmq/RabbitMQMailQueueManagement.java   |  52 ++++++++++
 .../queue/rabbitmq/RabbitMQManagementApi.java   | 100 -------------------
 ...abbitMQMailQueueConfigurationChangeTest.java |   4 +-
 .../queue/rabbitmq/RabbitMQMailQueueTest.java   |   4 +-
 .../rabbitmq/RabbitMqMailQueueFactoryTest.java  |   4 +-
 10 files changed, 166 insertions(+), 135 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/backends-common/rabbitmq/pom.xml
----------------------------------------------------------------------
diff --git a/backends-common/rabbitmq/pom.xml b/backends-common/rabbitmq/pom.xml
index ac0776e..40ddbce 100644
--- a/backends-common/rabbitmq/pom.xml
+++ b/backends-common/rabbitmq/pom.xml
@@ -30,6 +30,10 @@
     <artifactId>apache-james-backends-rabbitmq</artifactId>
     <name>Apache James RabbitMQ backend</name>
 
+    <properties>
+        <feign.version>10.0.1</feign.version>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
@@ -67,6 +71,21 @@
             <version>2.6.0</version>
         </dependency>
         <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-core</artifactId>
+            <version>${feign.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-jackson</artifactId>
+            <version>${feign.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-slf4j</artifactId>
+            <version>${feign.version}</version>
+        </dependency>
+        <dependency>
             <groupId>javax.inject</groupId>
             <artifactId>javax.inject</artifactId>
         </dependency>
@@ -113,4 +132,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java
----------------------------------------------------------------------
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java
new file mode 100644
index 0000000..13a1c45
--- /dev/null
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java
@@ -0,0 +1,79 @@
+
+/****************************************************************
+ * 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.backend.rabbitmq;
+
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import feign.Feign;
+import feign.Logger;
+import feign.Param;
+import feign.RequestLine;
+import feign.RetryableException;
+import feign.Retryer;
+import feign.auth.BasicAuthRequestInterceptor;
+import feign.codec.ErrorDecoder;
+import feign.jackson.JacksonDecoder;
+import feign.jackson.JacksonEncoder;
+import feign.slf4j.Slf4jLogger;
+
+public interface RabbitMQManagementAPI {
+
+    class MessageQueue {
+        @JsonProperty("name")
+        String name;
+
+        @JsonProperty("vhost")
+        String vhost;
+
+        public String getName() {
+            return name;
+        }
+    }
+
+    static RabbitMQManagementAPI from(RabbitMQConfiguration configuration) {
+        RabbitMQConfiguration.ManagementCredentials credentials = configuration.getManagementCredentials();
+        return Feign.builder()
+            .requestInterceptor(new BasicAuthRequestInterceptor(credentials.getUser(), new String(credentials.getPassword())))
+            .logger(new Slf4jLogger(RabbitMQManagementAPI.class))
+            .logLevel(Logger.Level.FULL)
+            .encoder(new JacksonEncoder())
+            .decoder(new JacksonDecoder())
+            .retryer(new Retryer.Default())
+            .errorDecoder(RETRY_500)
+            .target(RabbitMQManagementAPI.class, configuration.getManagementUri().toString());
+    }
+
+    ErrorDecoder RETRY_500 = (methodKey, response) -> {
+        if (response.status() == 500) {
+            throw new RetryableException("Error encountered, scheduling retry", response.request().httpMethod(), new Date());
+        }
+        throw new RuntimeException("Non recoverable exception status: " + response.status());
+    };
+
+    @RequestLine("GET /api/queues")
+    List<MessageQueue> listQueues();
+
+    @RequestLine(value = "DELETE /api/queues/{vhost}/{name}", decodeSlash = false)
+    void deleteQueue(@Param("vhost") String vhost, @Param("name") String name);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestRabbitMQModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestRabbitMQModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestRabbitMQModule.java
index c9cda53..2118830 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestRabbitMQModule.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestRabbitMQModule.java
@@ -30,7 +30,7 @@ import javax.inject.Singleton;
 import org.apache.james.CleanupTasksPerformer;
 import org.apache.james.backend.rabbitmq.DockerRabbitMQ;
 import org.apache.james.backend.rabbitmq.RabbitMQConfiguration;
-import org.apache.james.queue.rabbitmq.RabbitMQManagementApi;
+import org.apache.james.queue.rabbitmq.RabbitMQMailQueueManagement;
 import org.apache.james.queue.rabbitmq.view.cassandra.configuration.CassandraMailQueueViewConfiguration;
 
 import com.google.inject.AbstractModule;
@@ -63,17 +63,17 @@ public class TestRabbitMQModule extends AbstractModule {
     @Singleton
     protected RabbitMQConfiguration provideRabbitMQConfiguration() throws URISyntaxException {
         return RabbitMQConfiguration.builder()
-                .amqpUri(rabbitMQ.amqpUri())
-                .managementUri(rabbitMQ.managementUri())
-                .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
-                .build();
+            .amqpUri(rabbitMQ.amqpUri())
+            .managementUri(rabbitMQ.managementUri())
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .build();
     }
 
     public static class QueueCleanUp implements CleanupTasksPerformer.CleanupTask {
-        private final RabbitMQManagementApi api;
+        private final RabbitMQMailQueueManagement api;
 
         @Inject
-        public QueueCleanUp(RabbitMQManagementApi api) {
+        public QueueCleanUp(RabbitMQMailQueueManagement api) {
             this.api = api;
         }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/server/queue/queue-rabbitmq/pom.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/pom.xml b/server/queue/queue-rabbitmq/pom.xml
index ab4ffff..05bde5c 100644
--- a/server/queue/queue-rabbitmq/pom.xml
+++ b/server/queue/queue-rabbitmq/pom.xml
@@ -32,10 +32,6 @@
 
     <name>Apache James :: Server :: Mail Queue :: RabbitMQ</name>
 
-    <properties>
-        <feign.version>10.0.1</feign.version>
-    </properties>
-
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
@@ -156,21 +152,6 @@
             <artifactId>amqp-client</artifactId>
         </dependency>
         <dependency>
-            <groupId>io.github.openfeign</groupId>
-            <artifactId>feign-core</artifactId>
-            <version>${feign.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.github.openfeign</groupId>
-            <artifactId>feign-jackson</artifactId>
-            <version>${feign.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.github.openfeign</groupId>
-            <artifactId>feign-slf4j</artifactId>
-            <version>${feign.version}</version>
-        </dependency>
-        <dependency>
             <groupId>io.projectreactor</groupId>
             <artifactId>reactor-core</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
index 52a99eb..57d5181 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
@@ -119,14 +119,14 @@ public class RabbitMQMailQueueFactory implements MailQueueFactory<RabbitMQMailQu
     }
 
     private final RabbitClient rabbitClient;
-    private final RabbitMQManagementApi mqManagementApi;
+    private final RabbitMQMailQueueManagement mqManagementApi;
     private final PrivateFactory privateFactory;
     private final RabbitMQMailQueueObjectPool mailQueueObjectPool;
 
     @VisibleForTesting
     @Inject
     RabbitMQMailQueueFactory(RabbitClient rabbitClient,
-                             RabbitMQManagementApi mqManagementApi,
+                             RabbitMQMailQueueManagement mqManagementApi,
                              PrivateFactory privateFactory) {
         this.rabbitClient = rabbitClient;
         this.mqManagementApi = mqManagementApi;

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java
new file mode 100644
index 0000000..91e5ba5
--- /dev/null
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.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.queue.rabbitmq;
+
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.apache.james.backend.rabbitmq.RabbitMQConfiguration;
+import org.apache.james.backend.rabbitmq.RabbitMQManagementAPI;
+import org.apache.james.util.OptionalUtils;
+
+public class RabbitMQMailQueueManagement {
+
+    private final RabbitMQManagementAPI api;
+
+    @Inject
+    RabbitMQMailQueueManagement(RabbitMQConfiguration configuration) {
+        api = RabbitMQManagementAPI.from(configuration);
+    }
+
+    Stream<MailQueueName> listCreatedMailQueueNames() {
+        return api.listQueues()
+            .stream()
+            .map(RabbitMQManagementAPI.MessageQueue::getName)
+            .map(MailQueueName::fromRabbitWorkQueueName)
+            .flatMap(OptionalUtils::toStream)
+            .distinct();
+    }
+
+    public void deleteAllQueues() {
+        api.listQueues()
+            .forEach(queue -> api.deleteQueue("/", queue.getName()));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQManagementApi.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQManagementApi.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQManagementApi.java
deleted file mode 100644
index 1a992c6..0000000
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQManagementApi.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.queue.rabbitmq;
-
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Stream;
-
-import javax.inject.Inject;
-
-import org.apache.james.backend.rabbitmq.RabbitMQConfiguration;
-import org.apache.james.util.OptionalUtils;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import feign.Feign;
-import feign.Logger;
-import feign.Param;
-import feign.RequestLine;
-import feign.RetryableException;
-import feign.Retryer;
-import feign.auth.BasicAuthRequestInterceptor;
-import feign.codec.ErrorDecoder;
-import feign.jackson.JacksonDecoder;
-import feign.jackson.JacksonEncoder;
-import feign.slf4j.Slf4jLogger;
-
-public class RabbitMQManagementApi {
-
-    private static final ErrorDecoder RETRY_500 = (methodKey, response) -> {
-        if (response.status() == 500) {
-            throw new RetryableException("Error encountered, scheduling retry", response.request().httpMethod(), new Date());
-        }
-        throw new RuntimeException("Non recoverable exception status: " + response.status());
-    };
-
-    public interface Api {
-
-        class MessageQueue {
-            @JsonProperty("name")
-            String name;
-
-            @JsonProperty("vhost")
-            String vhost;
-        }
-
-        @RequestLine("GET /api/queues")
-        List<MessageQueue> listQueues();
-
-        @RequestLine(value = "DELETE /api/queues/{vhost}/{name}", decodeSlash = false)
-        void deleteQueue(@Param("vhost") String vhost, @Param("name") String name);
-    }
-
-    private final Api api;
-
-    @Inject
-    RabbitMQManagementApi(RabbitMQConfiguration configuration) {
-        RabbitMQConfiguration.ManagementCredentials credentials = configuration.getManagementCredentials();
-        api = Feign.builder()
-            .requestInterceptor(new BasicAuthRequestInterceptor(credentials.getUser(), new String(credentials.getPassword())))
-            .logger(new Slf4jLogger(RabbitMQManagementApi.class))
-            .logLevel(Logger.Level.FULL)
-            .encoder(new JacksonEncoder())
-            .decoder(new JacksonDecoder())
-            .retryer(new Retryer.Default())
-            .errorDecoder(RETRY_500)
-            .target(Api.class, configuration.getManagementUri().toString());
-    }
-
-    Stream<MailQueueName> listCreatedMailQueueNames() {
-        return api.listQueues()
-            .stream()
-            .map(x -> x.name)
-            .map(MailQueueName::fromRabbitWorkQueueName)
-            .flatMap(OptionalUtils::toStream)
-            .distinct();
-    }
-
-    public void deleteAllQueues() {
-        api.listQueues()
-            .forEach(queue -> api.deleteQueue("/", queue.name));
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
index 4ae8328..e7b2ab5 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
@@ -89,7 +89,7 @@ class RabbitMQMailQueueConfigurationChangeTest {
     static RabbitMQExtension rabbitMQExtension = new RabbitMQExtension();
 
     private UpdatableTickingClock clock;
-    private RabbitMQManagementApi mqManagementApi;
+    private RabbitMQMailQueueManagement mqManagementApi;
     private RabbitClient rabbitClient;
     private ThreadLocalRandom random;
     private MimeMessageStore.Factory mimeMessageStoreFactory;
@@ -107,7 +107,7 @@ class RabbitMQMailQueueConfigurationChangeTest {
             .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
             .build();
         rabbitClient = new RabbitClient(rabbitMQExtension.getRabbitChannelPool());
-        mqManagementApi = new RabbitMQManagementApi(rabbitMQConfiguration);
+        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQConfiguration);
     }
 
     @AfterEach

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
index 01cdcbd..7d5885e 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
@@ -90,7 +90,7 @@ public class RabbitMQMailQueueTest implements ManageableMailQueueContract, MailQ
     private RabbitMQMailQueueFactory mailQueueFactory;
     private UpdatableTickingClock clock;
     private RabbitMQMailQueue mailQueue;
-    private RabbitMQManagementApi mqManagementApi;
+    private RabbitMQMailQueueManagement mqManagementApi;
 
     @Override
     public void enQueue(Mail mail) throws MailQueue.MailQueueException {
@@ -129,7 +129,7 @@ public class RabbitMQMailQueueTest implements ManageableMailQueueContract, MailQ
             mailQueueViewFactory,
             clock,
             new RawMailQueueItemDecoratorFactory());
-        mqManagementApi = new RabbitMQManagementApi(rabbitMQConfiguration);
+        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQConfiguration);
         mailQueueFactory = new RabbitMQMailQueueFactory(rabbitClient, mqManagementApi, factory);
         mailQueue = mailQueueFactory.createQueue(SPOOL);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/64d4cdb7/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
index 55f0da7..f152663 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
@@ -54,7 +54,7 @@ class RabbitMqMailQueueFactoryTest implements MailQueueFactoryContract<RabbitMQM
     static final RabbitMQExtension rabbitMQExtension = new RabbitMQExtension();
 
     private RabbitMQMailQueueFactory mailQueueFactory;
-    private RabbitMQManagementApi mqManagementApi;
+    private RabbitMQMailQueueManagement mqManagementApi;
 
     @BeforeEach
     void setup() throws URISyntaxException {
@@ -80,7 +80,7 @@ class RabbitMqMailQueueFactoryTest implements MailQueueFactoryContract<RabbitMQM
             mailQueueViewFactory,
             Clock.systemUTC(),
             new RawMailQueueItemDecoratorFactory());
-        mqManagementApi = new RabbitMQManagementApi(rabbitMQConfiguration);
+        mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQConfiguration);
         mailQueueFactory = new RabbitMQMailQueueFactory(rabbitClient, mqManagementApi, factory);
     }
 


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


[12/30] james-project git commit: JAMES-2641 Stop lazy initialization of Quota components in MailboxManager

Posted by bt...@apache.org.
JAMES-2641 Stop lazy initialization of Quota components in MailboxManager


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

Branch: refs/heads/master
Commit: 14ca4fe21e4a390f119f333cf44c88e9b4fec8c4
Parents: f7f7f73
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 17:26:39 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../mailbox/manager/IntegrationResources.java   |  9 +-
 .../mailbox/manager/ManagerTestResources.java   | 11 ++-
 .../cassandra/CassandraMailboxManager.java      |  7 +-
 .../CassandraMailboxManagerProvider.java        | 12 ++-
 .../CassandraMessageIdManagerTestSystem.java    |  2 +-
 .../cassandra/CassandraTestSystemFixture.java   | 24 ++---
 .../CassandraMailboxManagerAttachmentTest.java  |  6 +-
 .../ElasticSearchIntegrationTest.java           |  6 +-
 .../james/mailbox/jpa/JPAMailboxManager.java    |  6 +-
 .../jpa/openjpa/OpenJPAMailboxManager.java      | 11 ++-
 .../mailbox/jpa/JpaMailboxManagerProvider.java  |  5 +-
 .../search/LuceneMessageSearchIndexTest.java    |  6 +-
 .../maildir/MaildirMailboxManagerProvider.java  |  4 +-
 .../inmemory/InMemoryMailboxManager.java        | 10 +-
 .../quota/InMemoryCurrentQuotaManager.java      |  6 +-
 .../InMemoryMailboxManagerAttachmentTest.java   |  6 +-
 .../manager/InMemoryIntegrationResources.java   | 97 ++++++--------------
 .../InMemoryMessageIdManagerSideEffectTest.java | 11 ++-
 .../InMemoryQuotaMailboxMessageManagerTest.java |  2 +-
 .../quota/InMemoryCurrentQuotaManagerTest.java  |  5 +-
 .../search/SimpleMessageSearchIndexTest.java    |  4 +-
 .../mailbox/store/StoreMailboxManager.java      | 53 ++++-------
 .../mailbox/store/quota/QuotaComponents.java    | 64 +++++++++++++
 .../mailbox/store/StoreMailboxManagerTest.java  |  4 +-
 .../cassandra/host/CassandraHostSystem.java     | 14 +--
 .../inmemory/host/InMemoryHostSystem.java       | 32 +------
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java | 11 +--
 .../maildir/host/MaildirHostSystem.java         | 10 +-
 .../modules/mailbox/CassandraMailboxModule.java |  9 +-
 .../james/modules/mailbox/JPAMailboxModule.java |  9 +-
 .../james/modules/ConfigurationProbe.java       |  4 +-
 .../modules/mailbox/MemoryMailboxModule.java    |  9 +-
 .../jmap/methods/GetMailboxesMethodTest.java    |  6 +-
 .../james/jmap/model/MailboxFactoryTest.java    |  6 +-
 34 files changed, 230 insertions(+), 251 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/api/src/test/java/org/apache/james/mailbox/manager/IntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/IntegrationResources.java b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/IntegrationResources.java
index bb1a868..f68f1c9 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/IntegrationResources.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/IntegrationResources.java
@@ -23,7 +23,6 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
@@ -35,13 +34,11 @@ public interface IntegrationResources<T extends MailboxManager> {
 
     T createMailboxManager(GroupMembershipResolver groupMembershipResolver) throws MailboxException;
 
-    QuotaManager createQuotaManager(MaxQuotaManager maxQuotaManager, T mailboxManager) throws Exception;
+    QuotaManager retrieveQuotaManager(T mailboxManager) throws Exception;
 
-    MaxQuotaManager createMaxQuotaManager() throws Exception;
+    MaxQuotaManager retrieveMaxQuotaManager(T mailboxManager) throws Exception;
 
-    CurrentQuotaManager createCurrentQuotaManager(T mailboxManager) throws Exception;
-
-    QuotaRootResolver createQuotaRootResolver(T mailboxManager) throws Exception;
+    QuotaRootResolver retrieveQuotaRootResolver(T mailboxManager) throws Exception;
 
     GroupMembershipResolver createGroupMembershipResolver() throws Exception;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestResources.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestResources.java b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestResources.java
index 58b7292..516b01d 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestResources.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestResources.java
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.manager;
 
 import java.io.ByteArrayInputStream;
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 import java.util.Calendar;
 
 import javax.mail.Flags;
@@ -67,11 +68,13 @@ public class ManagerTestResources<T extends MailboxManager> {
 
     public ManagerTestResources(IntegrationResources<T> integrationResources) throws Exception {
         this.integrationResources = integrationResources;
-        maxQuotaManager = integrationResources.createMaxQuotaManager();
         groupMembershipResolver = integrationResources.createGroupMembershipResolver();
         mailboxManager = integrationResources.createMailboxManager(groupMembershipResolver);
-        quotaRootResolver = integrationResources.createQuotaRootResolver(mailboxManager);
-        quotaManager = integrationResources.createQuotaManager(maxQuotaManager, mailboxManager);
+
+        maxQuotaManager = integrationResources.retrieveMaxQuotaManager(mailboxManager);
+        quotaRootResolver = integrationResources.retrieveQuotaRootResolver(mailboxManager);
+        quotaManager = integrationResources.retrieveQuotaManager(mailboxManager);
+
         integrationResources.init();
         session = mailboxManager.login(USER, USER_PASS);
         inbox = MailboxPath.inbox(session);
@@ -141,7 +144,7 @@ public class ManagerTestResources<T extends MailboxManager> {
     }
 
     public MessageUid appendMessage(MessageManager messageManager, MailboxSession session, Flags flags) throws MailboxException, UnsupportedEncodingException {
-        return messageManager.appendMessage(new ByteArrayInputStream(MockMail.MAIL_TEXT_PLAIN.getBytes("UTF-8")),
+        return messageManager.appendMessage(new ByteArrayInputStream(MockMail.MAIL_TEXT_PLAIN.getBytes(StandardCharsets.UTF_8)),
             Calendar.getInstance().getTime(), session, true, flags).getUid();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index 9dc55dd..a54331f 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -39,6 +39,7 @@ import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 /**
@@ -62,6 +63,7 @@ public class CassandraMailboxManager extends StoreMailboxManager {
                                    MailboxPathLocker locker, MessageParser messageParser,
                                    MessageId.Factory messageIdFactory, DelegatingMailboxListener delegatingMailboxListener,
                                    StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager,
+                                   QuotaComponents quotaComponents,
                                    MailboxManagerConfiguration configuration) {
         super(mapperFactory,
             sessionProvider,
@@ -71,6 +73,7 @@ public class CassandraMailboxManager extends StoreMailboxManager {
             annotationManager,
             delegatingMailboxListener,
             storeRightManager,
+            quotaComponents,
             configuration);
         this.locker = locker;
         this.mapperFactory = mapperFactory;
@@ -106,8 +109,8 @@ public class CassandraMailboxManager extends StoreMailboxManager {
             getDelegationListener(),
             this.locker,
             mailboxRow,
-            getQuotaManager(),
-            getQuotaRootResolver(),
+            getQuotaComponents().getQuotaManager(),
+            getQuotaComponents().getQuotaRootResolver(),
             getMessageParser(),
             getMessageIdFactory(),
             configuration.getBatchSizes(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index 38c5ca4..26bf3a9 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -43,6 +43,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 
 import com.datastax.driver.core.Session;
@@ -71,18 +72,19 @@ public class CassandraMailboxManagerProvider {
             LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
 
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
-
-        CassandraMailboxManager manager = new CassandraMailboxManager(mapperFactory, sessionProvider, new NoMailboxPathLocker(),
-            messageParser, messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
-
         CassandraPerUserMaxQuotaManager maxQuotaManager = new CassandraPerUserMaxQuotaManager(new CassandraPerUserMaxQuotaDao(session),
             new CassandraPerDomainMaxQuotaDao(session),
             new CassandraGlobalMaxQuotaDao(session));
         CassandraCurrentQuotaManager currentQuotaUpdater = new CassandraCurrentQuotaManager(session);
         StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaUpdater, maxQuotaManager);
         QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory);
-
         ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaUpdater, quotaRootResolver, delegatingMailboxListener, storeQuotaManager);
+        QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, storeQuotaManager, quotaRootResolver, quotaUpdater);
+
+        CassandraMailboxManager manager = new CassandraMailboxManager(mapperFactory, sessionProvider, new NoMailboxPathLocker(),
+            messageParser, messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager,
+            quotaComponents, MailboxManagerConfiguration.DEFAULT);
+
         manager.setQuotaManager(storeQuotaManager);
         manager.setQuotaUpdater(quotaUpdater);
         manager.setQuotaRootResolver(quotaRootResolver);

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
index 34e6236..ede1fe2 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
@@ -46,7 +46,7 @@ public class CassandraMessageIdManagerTestSystem {
         CassandraMailboxManager mailboxManager = CassandraTestSystemFixture.createMailboxManager(mapperFactory);
         ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(
             (StoreCurrentQuotaManager) currentQuotaManager,
-            mailboxManager.getQuotaRootResolver(), mailboxManager.getDelegationListener(), quotaManager);
+            mailboxManager.getQuotaComponents().getQuotaRootResolver(), mailboxManager.getDelegationListener(), quotaManager);
         mailboxManager.addGlobalListener(listeningCurrentQuotaUpdater, mailboxManager.createSystemSession("System"));
         return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getDelegationListener()),
             new CassandraMessageId.Factory(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index b5657ae..5f7c87a 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -45,13 +45,11 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
-import org.apache.james.mailbox.store.quota.StoreQuotaManager;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 
-public class CassandraTestSystemFixture {
-    
-    public static final int MOD_SEQ = 452;
+class CassandraTestSystemFixture {
 
-    public static CassandraMailboxSessionMapperFactory createMapperFactory(CassandraCluster cassandra) {
+    static CassandraMailboxSessionMapperFactory createMapperFactory(CassandraCluster cassandra) {
         CassandraMessageId.Factory messageIdFactory = new CassandraMessageId.Factory();
 
         return TestCassandraMailboxSessionMapperFactory.forTests(
@@ -60,21 +58,23 @@ public class CassandraTestSystemFixture {
             messageIdFactory);
     }
 
-    public static CassandraMailboxManager createMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory) throws Exception {
+    static CassandraMailboxManager createMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory) throws Exception {
         DefaultDelegatingMailboxListener delegatingMailboxListener = new DefaultDelegatingMailboxListener();
         StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
 
         SessionProvider sessionProvider = new SessionProvider(mock(Authenticator.class), mock(Authorizator.class));
+
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mapperFactory);
         CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
             new NoMailboxPathLocker(), new MessageParser(), new CassandraMessageId.Factory(),
-            delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
+            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
         cassandraMailboxManager.init();
 
         return cassandraMailboxManager;
     }
 
-    public static StoreMessageIdManager createMessageIdManager(CassandraMailboxSessionMapperFactory mapperFactory, QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) throws Exception {
+    static StoreMessageIdManager createMessageIdManager(CassandraMailboxSessionMapperFactory mapperFactory, QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) throws Exception {
         CassandraMailboxManager mailboxManager = createMailboxManager(mapperFactory);
         return new StoreMessageIdManager(
             mailboxManager,
@@ -85,19 +85,15 @@ public class CassandraTestSystemFixture {
             new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mapperFactory));
     }
 
-    public static MaxQuotaManager createMaxQuotaManager(CassandraCluster cassandra) {
+    static MaxQuotaManager createMaxQuotaManager(CassandraCluster cassandra) {
         return new CassandraPerUserMaxQuotaManager(
             new CassandraPerUserMaxQuotaDao(cassandra.getConf()),
             new CassandraPerDomainMaxQuotaDao(cassandra.getConf()),
             new CassandraGlobalMaxQuotaDao(cassandra.getConf()));
     }
 
-    public static CurrentQuotaManager createCurrentQuotaManager(CassandraCluster cassandra) {
+    static CurrentQuotaManager createCurrentQuotaManager(CassandraCluster cassandra) {
         return new CassandraCurrentQuotaManager(cassandra.getConf());
     }
 
-    public static QuotaManager createQuotaManager(CassandraCluster cassandra, MaxQuotaManager maxQuotaManager) {
-        return new StoreQuotaManager(new CassandraCurrentQuotaManager(cassandra.getConf()), maxQuotaManager);
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index 6a0e60b..6fe8d71 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -43,6 +43,7 @@ import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.AttachmentMapperFactory;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -93,16 +94,17 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
 
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
 
         mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), new MessageParser(),
-            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
+            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any()))
             .thenThrow(new RuntimeException("Message parser set to fail"));
         parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider,
             new NoMailboxPathLocker(), failingMessageParser, messageIdFactory,
-            delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
+            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
         parseFailingMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index f31e363..13aa203 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -45,6 +45,7 @@ import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
 import org.apache.james.mailbox.tika.TikaConfiguration;
 import org.apache.james.mailbox.tika.TikaContainerSingletonRule;
@@ -117,13 +118,14 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
             new MessageToElasticSearchJson(textExtractor, ZoneId.of("Europe/Paris"), IndexAttachments.YES),
             storeMailboxManager);
 
+        QuotaComponents quotaComponents = storeMailboxManager.getQuotaComponents();
         messageIdManager = new StoreMessageIdManager(
             storeMailboxManager,
             storeMailboxManager.getMapperFactory(),
             storeMailboxManager.getDelegationListener(),
             storeMailboxManager.getMessageIdFactory(),
-            storeMailboxManager.getQuotaManager(),
-            storeMailboxManager.getQuotaRootResolver());
+            quotaComponents.getQuotaManager(),
+            quotaComponents.getQuotaRootResolver());
         storeMailboxManager.setMessageSearchIndex(elasticSearchListeningMessageSearchIndex);
         storeMailboxManager.addGlobalListener(elasticSearchListeningMessageSearchIndex, MailboxSessionUtil.create("admin"));
         this.messageSearchIndex = elasticSearchListeningMessageSearchIndex;

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
index c3af7db..70a4e1f 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
@@ -35,6 +35,7 @@ import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.transaction.Mapper;
 
 /**
@@ -54,10 +55,11 @@ public abstract class JPAMailboxManager extends StoreMailboxManager {
                              MessageId.Factory messageIdFactory,
                              DelegatingMailboxListener delegatingMailboxListener,
                              StoreMailboxAnnotationManager annotationManager,
-                             StoreRightManager storeRightManager) {
+                             StoreRightManager storeRightManager,
+                             QuotaComponents quotaComponents) {
         super(mailboxSessionMapperFactory, sessionProvider, locker,
             messageParser, messageIdFactory, annotationManager,
-            delegatingMailboxListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
+            delegatingMailboxListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
index bedd47f..77c2fcd 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 
 /**
  * OpenJPA implementation of MailboxManager
@@ -48,9 +49,11 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
                                  MessageId.Factory messageIdFactory,
                                  DelegatingMailboxListener delegatingMailboxListener,
                                  StoreMailboxAnnotationManager annotationManager,
-                                 StoreRightManager storeRightManager) {
+                                 StoreRightManager storeRightManager,
+                                 QuotaComponents quotaComponents) {
         super(mapperFactory, sessionProvider, new JVMMailboxPathLocker(), messageParser,
-            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager);
+            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager,
+            quotaComponents);
     }
 
     protected AdvancedFeature getAdvancedFeature() {
@@ -65,8 +68,8 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
             getLocker(),
             mailboxRow,
             getAdvancedFeature(),
-            getQuotaManager(),
-            getQuotaRootResolver(),
+            getQuotaComponents().getQuotaManager(),
+            getQuotaComponents().getQuotaRootResolver(),
             getMessageParser(),
             getMessageIdFactory(),
             configuration.getBatchSizes(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
index 960db5e..bdaf958 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
@@ -39,6 +39,7 @@ import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 
 public class JpaMailboxManagerProvider {
 
@@ -61,10 +62,12 @@ public class JpaMailboxManagerProvider {
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager,
             LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mf);
+
         OpenJPAMailboxManager openJPAMailboxManager = new OpenJPAMailboxManager(mf, sessionProvider,
             messageParser, new DefaultMessageId.Factory(),
             delegatingListener, annotationManager,
-            storeRightManager);
+            storeRightManager, quotaComponents);
 
         try {
             openJPAMailboxManager.init();

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
index ac4ac1e..7853d32 100644
--- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
+++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
@@ -25,6 +25,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
 import org.apache.lucene.store.RAMDirectory;
 import org.junit.Ignore;
@@ -40,13 +41,14 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
         storeMailboxManager = new InMemoryIntegrationResources()
             .createMailboxManager(new SimpleGroupMembershipResolver());
 
+        QuotaComponents quotaComponents = storeMailboxManager.getQuotaComponents();
         messageIdManager = new StoreMessageIdManager(
             storeMailboxManager,
             storeMailboxManager.getMapperFactory(),
             storeMailboxManager.getDelegationListener(),
             storeMailboxManager.getMessageIdFactory(),
-            storeMailboxManager.getQuotaManager(),
-            storeMailboxManager.getQuotaRootResolver());
+            quotaComponents.getQuotaManager(),
+            quotaComponents.getQuotaRootResolver());
         LuceneMessageSearchIndex luceneMessageSearchIndex = new LuceneMessageSearchIndex(
             storeMailboxManager.getMapperFactory(), new InMemoryId.Factory(), new RAMDirectory(),
             storeMailboxManager.getMessageIdFactory(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
index c071e39..604039b 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
@@ -38,6 +38,7 @@ import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.junit.rules.TemporaryFolder;
 
 public class MaildirMailboxManagerProvider {
@@ -60,8 +61,9 @@ public class MaildirMailboxManagerProvider {
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager);
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mf);
         StoreMailboxManager manager = new StoreMailboxManager(mf, sessionProvider, new JVMMailboxPathLocker(),
-            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
+            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
         manager.init();
 
         return manager;

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 9fc1763..f2ef014 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 public class InMemoryMailboxManager extends StoreMailboxManager {
@@ -53,9 +54,10 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
                                   MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory,
                                   DelegatingMailboxListener delegatingMailboxListener,
                                   StoreMailboxAnnotationManager annotationManager,
-                                  StoreRightManager storeRightManager) {
+                                  StoreRightManager storeRightManager,
+                                  QuotaComponents quotaComponents) {
         super(mailboxSessionMapperFactory, sessionProvider, locker, messageParser, messageIdFactory,
-            annotationManager, delegatingMailboxListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
+            annotationManager, delegatingMailboxListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
     }
 
     @Override
@@ -81,8 +83,8 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
             getDelegationListener(),
             getLocker(),
             mailbox,
-            getQuotaManager(),
-            getQuotaRootResolver(),
+            getQuotaComponents().getQuotaManager(),
+            getQuotaComponents().getQuotaRootResolver(),
             getMessageParser(),
             getMessageIdFactory(),
             configuration.getBatchSizes(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
index 673ac44..3bc7d36 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
@@ -27,9 +27,9 @@ import javax.inject.Inject;
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.QuotaRoot;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 
@@ -43,11 +43,11 @@ public class InMemoryCurrentQuotaManager implements StoreCurrentQuotaManager {
     private final LoadingCache<QuotaRoot, Entry> quotaCache;
 
     @Inject
-    public InMemoryCurrentQuotaManager(final CurrentQuotaCalculator quotaCalculator, final MailboxManager mailboxManager) {
+    public InMemoryCurrentQuotaManager(CurrentQuotaCalculator quotaCalculator, SessionProvider sessionProvider) {
         this.quotaCache = CacheBuilder.newBuilder().build(new CacheLoader<QuotaRoot, Entry>() {
             @Override
             public Entry load(QuotaRoot quotaRoot) throws Exception {
-                return new Entry(quotaCalculator.recalculateCurrentQuotas(quotaRoot, mailboxManager.createSystemSession(quotaRoot.getValue())));
+                return new Entry(quotaCalculator.recalculateCurrentQuotas(quotaRoot, sessionProvider.createSystemSession(quotaRoot.getValue())));
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
index 11cb4b6..9ce53e0 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
@@ -43,6 +43,7 @@ import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.AttachmentMapperFactory;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.junit.Before;
 
 public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManagerAttachmentTest {
@@ -65,16 +66,17 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
 
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
         mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(),
-                new MessageParser(), messageIdFactory, delegatingListener, annotationManager, storeRightManager);
+                new MessageParser(), messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents);
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any(InputStream.class)))
             .thenThrow(new RuntimeException("Message parser set to fail"));
         parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(),
-            failingMessageParser, messageIdFactory, delegatingListener, annotationManager, storeRightManager);
+            failingMessageParser, messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents);
         parseFailingMailboxManager.init();
         super.setUp();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index d736813..27f3c9d 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -53,25 +53,18 @@ import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 
 public class InMemoryIntegrationResources implements IntegrationResources<StoreMailboxManager> {
 
     public static class Resources {
         private final InMemoryMailboxManager mailboxManager;
-        private final MaxQuotaManager maxQuotaManager;
-        private final QuotaManager quotaManager;
-        private final InMemoryCurrentQuotaManager currentQuotaManager;
-        private final DefaultUserQuotaRootResolver quotaRootResolver;
         private final StoreRightManager storeRightManager;
         private final MessageId.Factory messageIdFactory;
 
-        public Resources(InMemoryMailboxManager mailboxManager, MaxQuotaManager maxQuotaManager, QuotaManager quotaManager, InMemoryCurrentQuotaManager currentQuotaManager, DefaultUserQuotaRootResolver quotaRootResolver, StoreRightManager storeRightManager, MessageId.Factory messageIdFactory) {
+        Resources(InMemoryMailboxManager mailboxManager, StoreRightManager storeRightManager, MessageId.Factory messageIdFactory) {
             this.mailboxManager = mailboxManager;
-            this.maxQuotaManager = maxQuotaManager;
-            this.quotaManager = quotaManager;
-            this.currentQuotaManager = currentQuotaManager;
-            this.quotaRootResolver = quotaRootResolver;
             this.storeRightManager = storeRightManager;
             this.messageIdFactory = messageIdFactory;
         }
@@ -80,20 +73,8 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             return mailboxManager;
         }
 
-        public MaxQuotaManager getMaxQuotaManager() {
-            return maxQuotaManager;
-        }
-
-        public QuotaManager getQuotaManager() {
-            return quotaManager;
-        }
-
-        public DefaultUserQuotaRootResolver getQuotaRootResolver() {
-            return quotaRootResolver;
-        }
-
         public InMemoryCurrentQuotaManager getCurrentQuotaManager() {
-            return currentQuotaManager;
+            return (InMemoryCurrentQuotaManager) mailboxManager.getQuotaComponents().getMaxQuotaManager();
         }
 
         public StoreRightManager getStoreRightManager() {
@@ -106,13 +87,10 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
     }
 
     private SimpleGroupMembershipResolver groupMembershipResolver;
-    private DefaultUserQuotaRootResolver quotaRootResolver;
-    private InMemoryCurrentQuotaManager currentQuotaManager;
 
     @Override
     public InMemoryMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver) throws MailboxException {
-        return createResources(groupMembershipResolver)
-            .mailboxManager;
+        return createResources(groupMembershipResolver).mailboxManager;
     }
 
     public Resources createResources(GroupMembershipResolver groupMembershipResolver) throws MailboxException {
@@ -147,6 +125,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             .apply(storeRightManager, mailboxSessionMapperFactory);
 
         SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, FakeAuthorizator.defaultReject());
+        QuotaComponents quotaComponents = createQuotaComponents(mailboxSessionMapperFactory, delegatingListener, sessionProvider);
 
         InMemoryMailboxManager manager = new InMemoryMailboxManager(
             mailboxSessionMapperFactory,
@@ -156,24 +135,25 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             new InMemoryMessageId.Factory(),
             delegatingListener,
             annotationManager,
-            storeRightManager);
+            storeRightManager,
+            quotaComponents);
         manager.init();
-        MaxQuotaManager maxQuotaManager = createMaxQuotaManager();
         try {
-            QuotaManager quotaManager = createQuotaManager(maxQuotaManager, manager);
-            return new Resources(
-                manager,
-                maxQuotaManager,
-                quotaManager,
-                currentQuotaManager,
-                quotaRootResolver,
-                storeRightManager,
-                new InMemoryMessageId.Factory());
+            return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }
 
+    private QuotaComponents createQuotaComponents(InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory, DefaultDelegatingMailboxListener delegatingListener, SessionProvider sessionProvider) {
+        MaxQuotaManager maxQuotaManager = new InMemoryPerUserMaxQuotaManager();
+        QuotaRootResolver quotaRootResolver =  new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory);
+        InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(new CurrentQuotaCalculator(mailboxSessionMapperFactory, quotaRootResolver), sessionProvider);
+        StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
+        ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingListener, quotaManager);
+        return new QuotaComponents(maxQuotaManager, quotaManager, quotaRootResolver, listeningCurrentQuotaUpdater);
+    }
+
     public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver,
                                                     Authenticator authenticator, Authorizator authorizator) throws MailboxException {
         InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
@@ -182,6 +162,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
 
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+        QuotaComponents quotaComponents = createQuotaComponents(mailboxSessionMapperFactory, delegatingListener, sessionProvider);
 
         StoreMailboxManager manager = new InMemoryMailboxManager(
             mailboxSessionMapperFactory,
@@ -191,7 +172,8 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             new InMemoryMessageId.Factory(),
             delegatingListener,
             annotationManager,
-            storeRightManager);
+            storeRightManager,
+            quotaComponents);
         manager.init();
         return manager;
     }
@@ -202,42 +184,29 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
     }
 
     public MessageIdManager createMessageIdManager(StoreMailboxManager mailboxManager, MessageId.Factory factory) {
+        QuotaComponents quotaComponents = mailboxManager.getQuotaComponents();
         return new StoreMessageIdManager(
             mailboxManager,
             mailboxManager.getMapperFactory(),
             mailboxManager.getDelegationListener(),
             factory,
-            mailboxManager.getQuotaManager(),
-            mailboxManager.getQuotaRootResolver());
+            quotaComponents.getQuotaManager(),
+            quotaComponents.getQuotaRootResolver());
     }
     
     @Override
-    public QuotaManager createQuotaManager(MaxQuotaManager maxQuotaManager, StoreMailboxManager mailboxManager) throws Exception {
-
-        QuotaRootResolver quotaRootResolver =  createQuotaRootResolver(mailboxManager);
-
-        InMemoryCurrentQuotaManager currentQuotaManager = createCurrentQuotaManager(mailboxManager);
-
-        StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
-        ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, mailboxManager.getDelegationListener(), quotaManager);
-        mailboxManager.setQuotaManager(quotaManager);
-        mailboxManager.addGlobalListener(listeningCurrentQuotaUpdater, null);
-        return quotaManager;
+    public QuotaManager retrieveQuotaManager(StoreMailboxManager mailboxManager) {
+        return mailboxManager.getQuotaComponents().getQuotaManager();
     }
 
     @Override
-    public InMemoryCurrentQuotaManager createCurrentQuotaManager(StoreMailboxManager mailboxManager) {
-        if (currentQuotaManager == null) {
-            currentQuotaManager = new InMemoryCurrentQuotaManager(
-                    new CurrentQuotaCalculator(mailboxManager.getMapperFactory(), createQuotaRootResolver(mailboxManager)),
-                    mailboxManager);
-        }
-        return currentQuotaManager;
+    public MaxQuotaManager retrieveMaxQuotaManager(StoreMailboxManager mailboxManager) {
+        return mailboxManager.getQuotaComponents().getMaxQuotaManager();
     }
 
     @Override
-    public MaxQuotaManager createMaxQuotaManager() {
-        return new InMemoryPerUserMaxQuotaManager();
+    public DefaultUserQuotaRootResolver retrieveQuotaRootResolver(StoreMailboxManager mailboxManager) {
+        return (DefaultUserQuotaRootResolver) mailboxManager.getQuotaComponents().getQuotaRootResolver();
     }
 
     @Override
@@ -247,14 +216,6 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
     }
 
     @Override
-    public DefaultUserQuotaRootResolver createQuotaRootResolver(StoreMailboxManager mailboxManager) {
-        if (quotaRootResolver == null) {
-            quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory());
-        }
-        return quotaRootResolver;
-    }
-
-    @Override
     public void init() {
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
index d95f40b..28cdc0c 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
@@ -38,6 +38,9 @@ import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
+import org.apache.james.mailbox.store.quota.NoMaxQuotaManager;
+import org.apache.james.mailbox.store.quota.NoQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.junit.Before;
 
 public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSideEffectTest {
@@ -61,6 +64,9 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
         JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
         InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
         SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, fakeAuthorizator);
+
+        QuotaComponents quotaComponents = new QuotaComponents(new NoMaxQuotaManager(), quotaManager, new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory), new NoQuotaUpdater());
+
         InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mapperFactory,
             sessionProvider,
             locker,
@@ -68,14 +74,15 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
             messageIdFactory,
             delegatingMailboxListener,
             new StoreMailboxAnnotationManager(mapperFactory, rightManager),
-            rightManager);
+            rightManager,
+            quotaComponents);
         StoreMessageIdManager messageIdManager = new StoreMessageIdManager(
             mailboxManager,
             mapperFactory,
             delegatingMailboxListener,
             messageIdFactory,
             quotaManager,
-            new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory));
+            quotaComponents.getQuotaRootResolver());
         return new MessageIdManagerTestSystem(messageIdManager, messageIdFactory, mapperFactory, mailboxManager);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryQuotaMailboxMessageManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryQuotaMailboxMessageManagerTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryQuotaMailboxMessageManagerTest.java
index 2f3a0c9..4929584 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryQuotaMailboxMessageManagerTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryQuotaMailboxMessageManagerTest.java
@@ -32,7 +32,7 @@ public class InMemoryQuotaMailboxMessageManagerTest extends QuotaMessageManagerT
 
     @Override
     protected ManagerTestResources<StoreMailboxManager> createResources() throws Exception {
-        return new ManagerTestResources<StoreMailboxManager>(new InMemoryIntegrationResources());
+        return new ManagerTestResources<>(new InMemoryIntegrationResources());
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
index 4707ea4..1446af8 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
@@ -27,8 +27,8 @@ import java.util.Optional;
 
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.model.QuotaRoot;
+import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.junit.Before;
 import org.junit.Test;
@@ -43,8 +43,7 @@ public class InMemoryCurrentQuotaManagerTest {
     @Before
     public void setUp() throws Exception {
         mockedCurrentQuotaCalculator = mock(CurrentQuotaCalculator.class);
-        MailboxManager mockedMailboxManager = mock(MailboxManager.class);
-        testee = new InMemoryCurrentQuotaManager(mockedCurrentQuotaCalculator, mockedMailboxManager);
+        testee = new InMemoryCurrentQuotaManager(mockedCurrentQuotaCalculator, mock(SessionProvider.class));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
index 3691e39..30f6880 100644
--- a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
+++ b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
@@ -46,8 +46,8 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest
             storeMailboxManager.getMapperFactory(),
             storeMailboxManager.getDelegationListener(),
             storeMailboxManager.getMessageIdFactory(),
-            storeMailboxManager.getQuotaManager(),
-            storeMailboxManager.getQuotaRootResolver());
+            storeMailboxManager.getQuotaComponents().getQuotaManager(),
+            storeMailboxManager.getQuotaComponents().getQuotaRootResolver());
 
         storeMailboxManager.setMessageSearchIndex(messageSearchIndex);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 4ebb875..388c81b 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -73,8 +73,7 @@ import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
-import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
-import org.apache.james.mailbox.store.quota.NoQuotaManager;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.QuotaUpdater;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
@@ -113,19 +112,20 @@ public class StoreMailboxManager implements MailboxManager {
     private final MessageParser messageParser;
     private final Factory messageIdFactory;
     private final SessionProvider sessionProvider;
+    private final QuotaManager quotaManager;
+    private final QuotaRootResolver quotaRootResolver;
+    private final QuotaUpdater quotaUpdater;
+    private final QuotaComponents quotaComponents;
     protected final MailboxManagerConfiguration configuration;
 
     private MessageSearchIndex index;
-    private QuotaManager quotaManager;
-    private QuotaRootResolver quotaRootResolver;
-    private QuotaUpdater quotaUpdater;
 
     @Inject
     public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider,
                                MailboxPathLocker locker, MessageParser messageParser,
                                MessageId.Factory messageIdFactory, MailboxAnnotationManager annotationManager,
                                DelegatingMailboxListener delegatingListener, StoreRightManager storeRightManager,
-                               MailboxManagerConfiguration configuration) {
+                               QuotaComponents quotaComponents, MailboxManagerConfiguration configuration) {
         Preconditions.checkNotNull(delegatingListener);
         Preconditions.checkNotNull(mailboxSessionMapperFactory);
 
@@ -137,23 +137,19 @@ public class StoreMailboxManager implements MailboxManager {
         this.messageIdFactory = messageIdFactory;
         this.delegatingListener = delegatingListener;
         this.storeRightManager = storeRightManager;
+        this.quotaUpdater = quotaComponents.getQuotaUpdater();
+        this.quotaRootResolver = quotaComponents.getQuotaRootResolver();
+        this.quotaManager = quotaComponents.getQuotaManager();
+        this.quotaComponents = quotaComponents;
         this.configuration = configuration;
     }
 
-    public Factory getMessageIdFactory() {
-        return messageIdFactory;
+    public QuotaComponents getQuotaComponents() {
+        return quotaComponents;
     }
 
-    public void setQuotaManager(QuotaManager quotaManager) {
-        this.quotaManager = quotaManager;
-    }
-
-    public void setQuotaRootResolver(QuotaRootResolver quotaRootResolver) {
-        this.quotaRootResolver = quotaRootResolver;
-    }
-
-    public void setQuotaUpdater(QuotaUpdater quotaUpdater) {
-        this.quotaUpdater = quotaUpdater;
+    public Factory getMessageIdFactory() {
+        return messageIdFactory;
     }
 
     public SessionProvider getSessionProvider() {
@@ -174,12 +170,6 @@ public class StoreMailboxManager implements MailboxManager {
         if (index instanceof ListeningMessageSearchIndex) {
             this.addGlobalListener((MailboxListener) index, session);
         }
-        if (quotaManager == null) {
-            quotaManager = new NoQuotaManager();
-        }
-        if (quotaRootResolver == null) {
-            quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory);
-        }
         if (quotaUpdater != null && quotaUpdater instanceof MailboxListener) {
             this.addGlobalListener((MailboxListener) quotaUpdater, session);
         }
@@ -202,7 +192,6 @@ public class StoreMailboxManager implements MailboxManager {
     public EnumSet<SearchCapabilities> getSupportedSearchCapabilities() {
         return index.getSupportedCapabilities(getSupportedMessageCapabilities());
     }
-    
 
     /**
      * Return the {@link DelegatingMailboxListener} which is used by this {@link MailboxManager}
@@ -213,7 +202,6 @@ public class StoreMailboxManager implements MailboxManager {
         return delegatingListener;
     }
 
-
     /**
      * Return the {@link MessageSearchIndex} used by this {@link MailboxManager}
      *
@@ -223,15 +211,6 @@ public class StoreMailboxManager implements MailboxManager {
         return index;
     }
 
-    public QuotaRootResolver getQuotaRootResolver() {
-        return quotaRootResolver;
-    }
-
-    public QuotaManager getQuotaManager() {
-        return quotaManager;
-    }
-
-
     /**
      * Return the {@link MailboxSessionMapperFactory} used by this {@link MailboxManager}
      *
@@ -310,8 +289,8 @@ public class StoreMailboxManager implements MailboxManager {
      */
     protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException {
         return new StoreMessageManager(DEFAULT_NO_MESSAGE_CAPABILITIES, getMapperFactory(), getMessageSearchIndex(), getDelegationListener(),
-                getLocker(), mailbox, getQuotaManager(),
-                getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), configuration.getBatchSizes(),
+                getLocker(), mailbox, quotaManager,
+            getQuotaComponents().getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), configuration.getBatchSizes(),
             getStoreRightManager());
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
new file mode 100644
index 0000000..35326bc
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
@@ -0,0 +1,64 @@
+/****************************************************************
+ * 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.store.quota;
+
+import org.apache.james.mailbox.quota.MaxQuotaManager;
+import org.apache.james.mailbox.quota.QuotaManager;
+import org.apache.james.mailbox.quota.QuotaRootResolver;
+import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.SessionProvider;
+
+public class QuotaComponents {
+    public static final QuotaComponents disabled(SessionProvider sessionProvider, MailboxSessionMapperFactory mailboxSessionMapperFactory) {
+        return new QuotaComponents(
+            new NoMaxQuotaManager(),
+            new NoQuotaManager(),
+            new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory),
+            new NoQuotaUpdater());
+    }
+
+    private final MaxQuotaManager maxQuotaManager;
+    private final QuotaManager quotaManager;
+    private final QuotaRootResolver quotaRootResolver;
+    private final QuotaUpdater quotaUpdater;
+
+    public QuotaComponents(MaxQuotaManager maxQuotaManager, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, QuotaUpdater quotaUpdater) {
+        this.maxQuotaManager = maxQuotaManager;
+        this.quotaManager = quotaManager;
+        this.quotaRootResolver = quotaRootResolver;
+        this.quotaUpdater = quotaUpdater;
+    }
+
+    public MaxQuotaManager getMaxQuotaManager() {
+        return maxQuotaManager;
+    }
+
+    public QuotaManager getQuotaManager() {
+        return quotaManager;
+    }
+
+    public QuotaRootResolver getQuotaRootResolver() {
+        return quotaRootResolver;
+    }
+
+    public QuotaUpdater getQuotaUpdater() {
+        return quotaUpdater;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index 760d9d5..6cc0f59 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -46,6 +46,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 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.MessageParser;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -82,9 +83,10 @@ public class StoreMailboxManagerTest {
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mockedMapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, FakeAuthorizator.forUserAndAdmin(ADMIN, CURRENT_USER));
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mockedMapperFactory);
         storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, sessionProvider,
                 new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
-                annotationManager, delegatingListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
+                annotationManager, delegatingListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
         storeMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index ed2e5cc..937e572 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -49,6 +49,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
@@ -91,24 +92,19 @@ public class CassandraHostSystem extends JamesImapHostSystem {
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
         QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory);
-        mailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
-            new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
-            delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
 
         perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(
             new CassandraPerUserMaxQuotaDao(session),
             new CassandraPerDomainMaxQuotaDao(cassandra.getConf()),
             new CassandraGlobalMaxQuotaDao(session));
-
         CassandraCurrentQuotaManager currentQuotaManager = new CassandraCurrentQuotaManager(session);
-
         StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, perUserMaxQuotaManager);
-
         ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingMailboxListener, quotaManager);
+        QuotaComponents quotaComponents = new QuotaComponents(perUserMaxQuotaManager, quotaManager, quotaRootResolver, quotaUpdater);
 
-        mailboxManager.setQuotaRootResolver(quotaRootResolver);
-        mailboxManager.setQuotaManager(quotaManager);
-        mailboxManager.setQuotaUpdater(quotaUpdater);
+        mailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
+            new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
+            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
 
         mailboxManager.init();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
index ff04b10..0880cda 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
@@ -27,19 +27,11 @@ import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
-import org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager;
 import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
-import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
-import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
-import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
-import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
-import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -56,34 +48,18 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
 
     private StoreMailboxManager mailboxManager;
     private InMemoryPerUserMaxQuotaManager perUserMaxQuotaManager;
-
-    public static JamesImapHostSystem build() throws Exception {
-        return new InMemoryHostSystem();
-    }
     
     @Override
     public void beforeTest() throws Exception {
         super.beforeTest();
         this.mailboxManager = new InMemoryIntegrationResources()
             .createMailboxManager(new SimpleGroupMembershipResolver(), authenticator, authorizator);
-        QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mailboxManager.getMapperFactory());
-
-        perUserMaxQuotaManager = new InMemoryPerUserMaxQuotaManager();
-
-        InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(
-            new CurrentQuotaCalculator(mailboxManager.getMapperFactory(), quotaRootResolver),
-            mailboxManager);
-
-        StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, perUserMaxQuotaManager);
 
-        ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, mailboxManager.getDelegationListener(), quotaManager);
+        perUserMaxQuotaManager = (InMemoryPerUserMaxQuotaManager) mailboxManager.getQuotaComponents().getMaxQuotaManager();
 
-        mailboxManager.setQuotaRootResolver(quotaRootResolver);
-        mailboxManager.setQuotaManager(quotaManager);
-        mailboxManager.setQuotaUpdater(quotaUpdater);
-        mailboxManager.addGlobalListener(quotaUpdater, MailboxSessionUtil.create("admin"));
+        ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new StoreSubscriptionManager(mailboxManager.getMapperFactory()),
+            mailboxManager.getQuotaComponents().getQuotaManager(), mailboxManager.getQuotaComponents().getQuotaRootResolver(), new DefaultMetricFactory());
 
-        final ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new StoreSubscriptionManager(mailboxManager.getMapperFactory()), quotaManager, quotaRootResolver, new DefaultMetricFactory());
         configure(new DefaultImapDecoderFactory().buildImapDecoder(),
                 new DefaultImapEncoderFactory().buildImapEncoder(),
                 defaultImapProcessorFactory);
@@ -100,7 +76,7 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
     }
 
     @Override
-    public void setQuotaLimits(QuotaCount maxMessageQuota, QuotaSize maxStorageQuota) throws MailboxException {
+    public void setQuotaLimits(QuotaCount maxMessageQuota, QuotaSize maxStorageQuota) {
         perUserMaxQuotaManager.setGlobalMaxMessage(maxMessageQuota);
         perUserMaxQuotaManager.setGlobalMaxStorage(maxStorageQuota);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 84afd80..15dfb64 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -53,6 +53,7 @@ import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
@@ -100,18 +101,16 @@ public class JPAHostSystem extends JamesImapHostSystem {
         StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
-        mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider,
-            messageParser, new DefaultMessageId.Factory(), delegatingListener, annotationManager, storeRightManager);
-
         DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mapperFactory);
         JpaCurrentQuotaManager currentQuotaManager = new JpaCurrentQuotaManager(entityManagerFactory);
         maxQuotaManager = new JPAPerUserMaxQuotaManager(new JPAPerUserMaxQuotaDAO(entityManagerFactory));
         StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
         ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingListener, storeQuotaManager);
+        QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, storeQuotaManager, quotaRootResolver, quotaUpdater);
+
+        mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider,
+            messageParser, new DefaultMessageId.Factory(), delegatingListener, annotationManager, storeRightManager, quotaComponents);
 
-        mailboxManager.setQuotaManager(storeQuotaManager);
-        mailboxManager.setQuotaUpdater(quotaUpdater);
-        mailboxManager.setQuotaRootResolver(quotaRootResolver);
         mailboxManager.init();
 
         SubscriptionManager subscriptionManager = new JPASubscriptionManager(mapperFactory);

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index 942935c..6eb7fc3 100644
--- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -45,8 +45,7 @@ import org.apache.james.mailbox.store.StoreSubscriptionManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
-import org.apache.james.mailbox.store.quota.NoQuotaManager;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -80,16 +79,17 @@ public class MaildirHostSystem extends JamesImapHostSystem {
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
         mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, sessionProvider, locker,
-            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
+            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
         mailboxManager.init();
 
         ImapProcessor defaultImapProcessorFactory =
                 DefaultImapProcessorFactory.createDefaultProcessor(
                         mailboxManager, 
                         sm, 
-                        new NoQuotaManager(), 
-                        new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory),
+                        quotaComponents.getQuotaManager(),
+                        quotaComponents.getQuotaRootResolver(),
                         new DefaultMetricFactory());
         configure(new DefaultImapDecoderFactory().buildImapDecoder(),
                 new DefaultImapEncoderFactory().buildImapEncoder(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/14ca4fe2/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index 07aaf33..3383951 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -72,8 +72,6 @@ import org.apache.james.mailbox.indexer.MessageIdReIndexer;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.quota.QuotaManager;
-import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -88,7 +86,6 @@ import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
-import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.modules.Names;
 import org.apache.james.utils.MailboxManagerDefinition;
 import org.apache.mailbox.tools.indexer.MessageIdReIndexerImpl;
@@ -191,11 +188,7 @@ public class CassandraMailboxModule extends AbstractModule {
     @Provides
     @Named(Names.MAILBOXMANAGER_NAME)
     @Singleton
-    public MailboxManager provideMailboxManager(CassandraMailboxManager cassandraMailboxManager, ListeningCurrentQuotaUpdater quotaUpdater,
-                                                QuotaManager quotaManager, QuotaRootResolver quotaRootResolver) throws MailboxException {
-        cassandraMailboxManager.setQuotaUpdater(quotaUpdater);
-        cassandraMailboxManager.setQuotaManager(quotaManager);
-        cassandraMailboxManager.setQuotaRootResolver(quotaRootResolver);
+    public MailboxManager provideMailboxManager(CassandraMailboxManager cassandraMailboxManager) throws MailboxException {
         cassandraMailboxManager.init();
         return cassandraMailboxManager;
     }


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


[10/30] james-project git commit: JAMES-2641 BatchSizes can be missing

Posted by bt...@apache.org.
JAMES-2641 BatchSizes can be missing


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

Branch: refs/heads/master
Commit: 69487bdf385f0fe8d00f714eeaad56a75297ca61
Parents: c4be7f6
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 16:59:24 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../org/apache/james/mailbox/store/BatchSizes.java  | 14 +++++++-------
 .../mailbox/store/MailboxManagerConfiguration.java  |  9 +++------
 .../apache/james/mailbox/store/BatchSizesTest.java  | 16 ++++++++--------
 3 files changed, 18 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/69487bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/BatchSizes.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/BatchSizes.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/BatchSizes.java
index 1d6efde..26d622b 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/BatchSizes.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/BatchSizes.java
@@ -107,8 +107,8 @@ public class BatchSizes {
                     fetchHeaders.orElse(DEFAULT_BATCH_SIZE),
                     fetchBody.orElse(DEFAULT_BATCH_SIZE),
                     fetchFull.orElse(DEFAULT_BATCH_SIZE),
-                    copyBatchSize.orElse(DEFAULT_BATCH_SIZE),
-                    moveBatchSize.orElse(DEFAULT_BATCH_SIZE));
+                    copyBatchSize,
+                    moveBatchSize);
         }
     }
 
@@ -116,10 +116,10 @@ public class BatchSizes {
     private final int fetchHeaders;
     private final int fetchBody;
     private final int fetchFull;
-    private final int copyBatchSize;
-    private final int moveBatchSize;
+    private final Optional<Integer> copyBatchSize;
+    private final Optional<Integer> moveBatchSize;
 
-    private BatchSizes(int fetchMetadata, int fetchHeaders, int fetchBody, int fetchFull, int copyBatchSize, int moveBatchSize) {
+    private BatchSizes(int fetchMetadata, int fetchHeaders, int fetchBody, int fetchFull, Optional<Integer> copyBatchSize, Optional<Integer> moveBatchSize) {
         this.fetchMetadata = fetchMetadata;
         this.fetchHeaders = fetchHeaders;
         this.fetchBody = fetchBody;
@@ -144,11 +144,11 @@ public class BatchSizes {
         return fetchFull;
     }
 
-    public int getCopyBatchSize() {
+    public Optional<Integer> getCopyBatchSize() {
         return copyBatchSize;
     }
 
-    public int getMoveBatchSize() {
+    public Optional<Integer> getMoveBatchSize() {
         return moveBatchSize;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/69487bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
index 63c47e7..2f12b06 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
@@ -22,10 +22,7 @@ package org.apache.james.mailbox.store;
 import javax.inject.Inject;
 
 public class MailboxManagerConfiguration {
-    public static final MailboxManagerConfiguration DEFAULT = new MailboxManagerConfiguration(BatchSizes.builder()
-        .copyBatchSize(MessageBatcher.NO_BATCH_SIZE)
-        .moveBatchSize(MessageBatcher.NO_BATCH_SIZE)
-        .build());
+    public static final MailboxManagerConfiguration DEFAULT = new MailboxManagerConfiguration(BatchSizes.defaultValues());
 
     private final BatchSizes batchSizes;
 
@@ -39,10 +36,10 @@ public class MailboxManagerConfiguration {
     }
 
     public MessageBatcher getCopyBatcher() {
-        return new MessageBatcher(batchSizes.getCopyBatchSize());
+        return new MessageBatcher(batchSizes.getCopyBatchSize().orElse(MessageBatcher.NO_BATCH_SIZE));
     }
 
     public MessageBatcher getMoveBatcher() {
-        return new MessageBatcher(batchSizes.getMoveBatchSize());
+        return new MessageBatcher(batchSizes.getMoveBatchSize().orElse(MessageBatcher.NO_BATCH_SIZE));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/69487bdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/BatchSizesTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/BatchSizesTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/BatchSizesTest.java
index 275387f..2495da0 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/BatchSizesTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/BatchSizesTest.java
@@ -43,8 +43,8 @@ public class BatchSizesTest {
         assertThat(batchSizes.getFetchHeaders()).isEqualTo(BatchSizes.DEFAULT_BATCH_SIZE);
         assertThat(batchSizes.getFetchBody()).isEqualTo(BatchSizes.DEFAULT_BATCH_SIZE);
         assertThat(batchSizes.getFetchFull()).isEqualTo(BatchSizes.DEFAULT_BATCH_SIZE);
-        assertThat(batchSizes.getCopyBatchSize()).isEqualTo(BatchSizes.DEFAULT_BATCH_SIZE);
-        assertThat(batchSizes.getMoveBatchSize()).isEqualTo(BatchSizes.DEFAULT_BATCH_SIZE);
+        assertThat(batchSizes.getCopyBatchSize()).isEmpty();
+        assertThat(batchSizes.getMoveBatchSize()).isEmpty();
     }
 
     @Test
@@ -55,8 +55,8 @@ public class BatchSizesTest {
         assertThat(batchSizes.getFetchHeaders()).isEqualTo(batchSize);
         assertThat(batchSizes.getFetchBody()).isEqualTo(batchSize);
         assertThat(batchSizes.getFetchFull()).isEqualTo(batchSize);
-        assertThat(batchSizes.getCopyBatchSize()).isEqualTo(batchSize);
-        assertThat(batchSizes.getMoveBatchSize()).isEqualTo(batchSize);
+        assertThat(batchSizes.getCopyBatchSize()).contains(batchSize);
+        assertThat(batchSizes.getMoveBatchSize()).contains(batchSize);
     }
 
     @Test
@@ -223,7 +223,7 @@ public class BatchSizesTest {
     public void buildShouldSetDefaultValueToCopyBatchSizeWhenNotGiven() {
         BatchSizes batchSizes = BatchSizes.builder()
                 .build();
-        assertThat(batchSizes.getCopyBatchSize()).isEqualTo(BatchSizes.DEFAULT_BATCH_SIZE);
+        assertThat(batchSizes.getCopyBatchSize()).isEmpty();
     }
 
     @Test
@@ -232,14 +232,14 @@ public class BatchSizesTest {
         BatchSizes batchSizes = BatchSizes.builder()
                 .copyBatchSize(expected)
                 .build();
-        assertThat(batchSizes.getCopyBatchSize()).isEqualTo(expected);
+        assertThat(batchSizes.getCopyBatchSize()).contains(expected);
     }
 
     @Test
     public void buildShouldSetDefaultValueToMoveBatchSizeWhenNotGiven() {
         BatchSizes batchSizes = BatchSizes.builder()
                 .build();
-        assertThat(batchSizes.getMoveBatchSize()).isEqualTo(BatchSizes.DEFAULT_BATCH_SIZE);
+        assertThat(batchSizes.getMoveBatchSize()).isEmpty();
     }
 
     @Test
@@ -248,6 +248,6 @@ public class BatchSizesTest {
         BatchSizes batchSizes = BatchSizes.builder()
                 .moveBatchSize(expected)
                 .build();
-        assertThat(batchSizes.getMoveBatchSize()).isEqualTo(expected);
+        assertThat(batchSizes.getMoveBatchSize()).contains(expected);
     }
 }


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


[22/30] james-project git commit: JAMES-2641 Finally remove StoreMailboxManager::init()

Posted by bt...@apache.org.
JAMES-2641 Finally remove StoreMailboxManager::init()

It's last responsibility, registrating listeners, needs to be performed explicitly

That way StoreMailboxListener no more need knowledge about components composing it.


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

Branch: refs/heads/master
Commit: 61dd6e21161b20b503233f34a4cdd1a1aed759e6
Parents: c06c13a
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 9 10:53:23 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../CassandraMailboxManagerProvider.java        |  4 ++-
 .../cassandra/CassandraTestSystemFixture.java   |  4 ++-
 .../CassandraMailboxManagerAttachmentTest.java  |  2 --
 .../mailbox/jpa/JpaMailboxManagerProvider.java  | 11 +--------
 .../maildir/MaildirMailboxManagerProvider.java  |  1 -
 .../InMemoryMailboxManagerAttachmentTest.java   |  2 --
 .../manager/InMemoryIntegrationResources.java   | 10 ++++++--
 .../mailbox/store/StoreMailboxManager.java      | 26 --------------------
 .../mailbox/store/StoreMailboxManagerTest.java  |  1 -
 .../mailbox/tools/copier/MailboxCopierTest.java |  8 ------
 .../cassandra/host/CassandraHostSystem.java     |  2 +-
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java |  4 ++-
 .../host/LuceneSearchHostSystem.java            |  2 +-
 .../maildir/host/MaildirHostSystem.java         |  1 -
 .../modules/mailbox/CassandraMailboxModule.java | 21 ++++++++--------
 .../modules/mailbox/CassandraQuotaModule.java   |  9 +++++++
 .../mailbox/ElasticSearchMailboxModule.java     |  6 +++++
 .../james/modules/mailbox/JPAMailboxModule.java | 23 ++++++++---------
 .../james/modules/mailbox/JpaQuotaModule.java   | 10 ++++++++
 .../mailbox/LuceneSearchMailboxModule.java      |  6 +++++
 .../modules/mailbox/MemoryMailboxModule.java    | 23 ++++++++---------
 .../modules/mailbox/MemoryQuotaModule.java      | 10 ++++++++
 22 files changed, 95 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index 3f06277..1c7f467 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
@@ -90,7 +91,8 @@ public class CassandraMailboxManagerProvider {
             messageParser, messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager,
             quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
         try {
-            manager.init();
+            delegatingMailboxListener.addGlobalListener(quotaUpdater, sessionProvider.createSystemSession("admin"));
+            delegatingMailboxListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
         } catch (MailboxException e) {
             throw new RuntimeException(e);
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 5ccb8c0..f8e45bc 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -43,6 +43,7 @@ import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
+import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
@@ -73,7 +74,8 @@ class CassandraTestSystemFixture {
         CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
             new NoMailboxPathLocker(), new MessageParser(), new CassandraMessageId.Factory(),
             delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
-        cassandraMailboxManager.init();
+
+        delegatingMailboxListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
 
         return cassandraMailboxManager;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index 61b15d6..9402a41 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -103,14 +103,12 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
         mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), new MessageParser(),
             messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents,
             index, MailboxManagerConfiguration.DEFAULT);
-        mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any()))
             .thenThrow(new RuntimeException("Message parser set to fail"));
         parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider,
             new NoMailboxPathLocker(), failingMessageParser, messageIdFactory,
             delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
-        parseFailingMailboxManager.init();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
index 6687e68..27f0662 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
@@ -26,7 +26,6 @@ import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
 import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
@@ -68,17 +67,9 @@ public class JpaMailboxManagerProvider {
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mf);
         MessageSearchIndex index = new SimpleMessageSearchIndex(mf, mf, new DefaultTextExtractor());
 
-        OpenJPAMailboxManager openJPAMailboxManager = new OpenJPAMailboxManager(mf, sessionProvider,
+        return new OpenJPAMailboxManager(mf, sessionProvider,
             messageParser, new DefaultMessageId.Factory(),
             delegatingListener, annotationManager,
             storeRightManager, quotaComponents, index);
-
-        try {
-            openJPAMailboxManager.init();
-        } catch (MailboxException e) {
-            throw new RuntimeException(e);
-        }
-
-        return openJPAMailboxManager;
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
index 88284af..365967f 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
@@ -70,7 +70,6 @@ public class MaildirMailboxManagerProvider {
         StoreMailboxManager manager = new StoreMailboxManager(mf, sessionProvider, new JVMMailboxPathLocker(),
             messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager,
             quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
-        manager.init();
 
         return manager;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
index bc348e9..668cfbe 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
@@ -75,13 +75,11 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
         mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(),
                 new MessageParser(), messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents, index);
-        mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any(InputStream.class)))
             .thenThrow(new RuntimeException("Message parser set to fail"));
         parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(),
             failingMessageParser, messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents, index);
-        parseFailingMailboxManager.init();
         super.setUp();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 94b04fc..ef0d21b 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -48,6 +48,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
@@ -127,7 +128,10 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             storeRightManager,
             quotaComponents,
             index);
-        manager.init();
+
+        delegatingListener.addGlobalListener((ListeningCurrentQuotaUpdater) quotaComponents.getQuotaUpdater(), sessionProvider.createSystemSession("admin"));
+        delegatingListener.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
+
         try {
             return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory());
         } catch (Exception e) {
@@ -167,7 +171,9 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             storeRightManager,
             quotaComponents,
             index);
-        manager.init();
+
+        delegatingListener.addGlobalListener((ListeningCurrentQuotaUpdater) quotaComponents.getQuotaUpdater(), sessionProvider.createSystemSession("admin"));
+        delegatingListener.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
         return manager;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 65d4923..c097f99 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -27,7 +27,6 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Stream;
 
-import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 import org.apache.james.core.quota.QuotaCount;
@@ -65,7 +64,6 @@ import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.EventFactory;
-import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -73,8 +71,6 @@ import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
-import org.apache.james.mailbox.store.quota.QuotaUpdater;
-import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.transaction.Mapper;
 import org.apache.james.util.streams.Iterators;
@@ -112,12 +108,10 @@ public class StoreMailboxManager implements MailboxManager {
     private final SessionProvider sessionProvider;
     private final QuotaManager quotaManager;
     private final QuotaRootResolver quotaRootResolver;
-    private final QuotaUpdater quotaUpdater;
     private final QuotaComponents quotaComponents;
     private final MessageSearchIndex index;
     protected final MailboxManagerConfiguration configuration;
 
-
     @Inject
     public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider,
                                MailboxPathLocker locker, MessageParser messageParser,
@@ -135,7 +129,6 @@ public class StoreMailboxManager implements MailboxManager {
         this.messageIdFactory = messageIdFactory;
         this.delegatingListener = delegatingListener;
         this.storeRightManager = storeRightManager;
-        this.quotaUpdater = quotaComponents.getQuotaUpdater();
         this.quotaRootResolver = quotaComponents.getQuotaRootResolver();
         this.quotaManager = quotaComponents.getQuotaManager();
         this.quotaComponents = quotaComponents;
@@ -155,25 +148,6 @@ public class StoreMailboxManager implements MailboxManager {
         return sessionProvider;
     }
 
-    /**
-     * Init the {@link MailboxManager}
-     *
-     * @throws MailboxException
-     */
-    @PostConstruct
-    public void init() throws MailboxException {
-        MailboxSession session = createSystemSession("storeMailboxManager");
-        if (index instanceof ListeningMessageSearchIndex) {
-            this.addGlobalListener((MailboxListener) index, session);
-        }
-        if (quotaUpdater != null && quotaUpdater instanceof MailboxListener) {
-            this.addGlobalListener((MailboxListener) quotaUpdater, session);
-        }
-        if (hasCapability(MailboxCapabilities.Annotation)) {
-            this.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider), session);
-        }
-    }
-
     @Override
     public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() {
         return EnumSet.noneOf(MailboxCapabilities.class);

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index 9ada55f..86d4df3 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -92,7 +92,6 @@ public class StoreMailboxManagerTest {
         storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, sessionProvider,
                 new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
                 annotationManager, delegatingListener, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
-        storeMailboxManager.init();
     }
 
     @Test(expected = MailboxNotFoundException.class)

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mailbox/tools/copier/src/test/java/org/apache/james/mailbox/tools/copier/MailboxCopierTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/copier/src/test/java/org/apache/james/mailbox/tools/copier/MailboxCopierTest.java b/mailbox/tools/copier/src/test/java/org/apache/james/mailbox/tools/copier/MailboxCopierTest.java
index 6c6db9c..1144b16 100644
--- a/mailbox/tools/copier/src/test/java/org/apache/james/mailbox/tools/copier/MailboxCopierTest.java
+++ b/mailbox/tools/copier/src/test/java/org/apache/james/mailbox/tools/copier/MailboxCopierTest.java
@@ -33,7 +33,6 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.mock.DataProvisioner;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -91,13 +90,6 @@ public class MailboxCopierTest {
      */
     @Test
     public void testMailboxCopy() throws MailboxException, IOException {
-         if (srcMemMailboxManager instanceof StoreMailboxManager) {
-             ((StoreMailboxManager) srcMemMailboxManager).init();
-         }
-         if (dstMemMailboxManager instanceof StoreMailboxManager) {
-             ((StoreMailboxManager) dstMemMailboxManager).init();
-         }
-
         DataProvisioner.feedMailboxManager(srcMemMailboxManager);
        
         assertMailboxManagerSize(srcMemMailboxManager, 1);

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index bc4f33f..5ce4b21 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -111,7 +111,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
             new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
             delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
 
-        mailboxManager.init();
+        delegatingMailboxListener.addGlobalListener(quotaUpdater, sessionProvider.createSystemSession("admin"));
 
         SubscriptionManager subscriptionManager = new StoreSubscriptionManager(mapperFactory);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 6aef8bc..4fd803c 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -49,6 +49,7 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -115,7 +116,8 @@ public class JPAHostSystem extends JamesImapHostSystem {
         mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider, messageParser, new DefaultMessageId.Factory(),
             delegatingListener, annotationManager, storeRightManager, quotaComponents, index);
 
-        mailboxManager.init();
+        delegatingListener.addGlobalListener(quotaUpdater, sessionProvider.createSystemSession("admin"));
+        delegatingListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
 
         SubscriptionManager subscriptionManager = new JPASubscriptionManager(mapperFactory);
         

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index fac28bb..8163306 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -121,7 +121,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
 
             searchIndex.setEnableSuffixMatch(true);
 
-            mailboxManager.init();
+            delegatingMailboxListener.addGlobalListener(searchIndex, sessionProvider.createSystemSession("admin"));
 
             SubscriptionManager subscriptionManager = new StoreSubscriptionManager(mapperFactory);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index 4dc20d9..de93a3d 100644
--- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -88,7 +88,6 @@ public class MaildirHostSystem extends JamesImapHostSystem {
         mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, sessionProvider, locker,
             messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, quotaComponents,
             index, MailboxManagerConfiguration.DEFAULT);
-        mailboxManager.init();
 
         ImapProcessor defaultImapProcessorFactory =
                 DefaultImapProcessorFactory.createDefaultProcessor(

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index 3383951..c9a8f4c 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.james.modules.mailbox;
 
+import static org.apache.james.modules.Names.MAILBOXMANAGER_NAME;
+
 import javax.inject.Singleton;
 
 import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
@@ -25,6 +27,7 @@ import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.mailbox.AttachmentManager;
 import org.apache.james.mailbox.BlobManager;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MessageIdManager;
@@ -67,7 +70,6 @@ import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.indexer.MessageIdReIndexer;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.model.MailboxId;
@@ -81,22 +83,21 @@ import org.apache.james.mailbox.store.StoreBlobManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
+import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.mail.AttachmentMapperFactory;
 import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
-import org.apache.james.modules.Names;
 import org.apache.james.utils.MailboxManagerDefinition;
 import org.apache.mailbox.tools.indexer.MessageIdReIndexerImpl;
 import org.apache.mailbox.tools.indexer.ReIndexerImpl;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
-import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
-import com.google.inject.name.Named;
+import com.google.inject.name.Names;
 
 public class CassandraMailboxModule extends AbstractModule {
 
@@ -183,14 +184,12 @@ public class CassandraMailboxModule extends AbstractModule {
         cassandraDataDefinitions.addBinding().toInstance(CassandraUidModule.MODULE);
 
         Multibinder.newSetBinder(binder(), MailboxManagerDefinition.class).addBinding().to(CassandraMailboxManagerDefinition.class);
-    }
 
-    @Provides
-    @Named(Names.MAILBOXMANAGER_NAME)
-    @Singleton
-    public MailboxManager provideMailboxManager(CassandraMailboxManager cassandraMailboxManager) throws MailboxException {
-        cassandraMailboxManager.init();
-        return cassandraMailboxManager;
+        Multibinder.newSetBinder(binder(), MailboxListener.class)
+            .addBinding()
+            .to(MailboxAnnotationListener.class);
+
+        bind(MailboxManager.class).annotatedWith(Names.named(MAILBOXMANAGER_NAME)).to(MailboxManager.class);
     }
     
     @Singleton

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
index dcbdcb9..6cdef0f 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
@@ -20,6 +20,7 @@
 package org.apache.james.modules.mailbox;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
 import org.apache.james.mailbox.cassandra.quota.CassandraGlobalMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerDomainMaxQuotaDao;
@@ -31,6 +32,8 @@ import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.quota.UserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
+import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaUpdater;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 
@@ -59,5 +62,11 @@ public class CassandraQuotaModule extends AbstractModule {
 
         Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
         cassandraDataDefinitions.addBinding().toInstance(org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule.MODULE);
+
+        bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
+        bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
+        Multibinder.newSetBinder(binder(), MailboxListener.class)
+            .addBinding()
+            .to(ListeningCurrentQuotaUpdater.class);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 56b7fbc..eaadda6 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -34,6 +34,7 @@ import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.backends.es.ClientProviderImpl;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.elasticsearch.ElasticSearchMailboxConfiguration;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
@@ -57,6 +58,7 @@ import org.slf4j.LoggerFactory;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
+import com.google.inject.multibindings.Multibinder;
 import com.nurkiewicz.asyncretry.AsyncRetryExecutor;
 
 public class ElasticSearchMailboxModule extends AbstractModule {
@@ -71,6 +73,10 @@ public class ElasticSearchMailboxModule extends AbstractModule {
         bind(ElasticSearchListeningMessageSearchIndex.class).in(Scopes.SINGLETON);
         bind(MessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class);
         bind(ListeningMessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class);
+
+        Multibinder.newSetBinder(binder(), MailboxListener.class)
+            .addBinding()
+            .to(ElasticSearchListeningMessageSearchIndex.class);
     }
 
     @Provides

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
index a858d6b..bbe0590 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
@@ -18,10 +18,13 @@
  ****************************************************************/
 package org.apache.james.modules.mailbox;
 
+import static org.apache.james.modules.Names.MAILBOXMANAGER_NAME;
+
 import javax.inject.Singleton;
 
 import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
 import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.SubscriptionManager;
@@ -29,7 +32,6 @@ import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.jpa.JPAId;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
@@ -42,24 +44,24 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
-import org.apache.james.modules.Names;
 import org.apache.james.modules.data.JPAEntityManagerModule;
 import org.apache.james.utils.MailboxManagerDefinition;
 import org.apache.mailbox.tools.indexer.ReIndexerImpl;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
-import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
-import com.google.inject.name.Named;
+import com.google.inject.name.Names;
 
 public class JPAMailboxModule extends AbstractModule {
 
@@ -103,14 +105,13 @@ public class JPAMailboxModule extends AbstractModule {
         bind(ReIndexer.class).to(ReIndexerImpl.class);
         
         Multibinder.newSetBinder(binder(), MailboxManagerDefinition.class).addBinding().to(JPAMailboxManagerDefinition.class);
-    }
 
-    @Provides
-    @Named(Names.MAILBOXMANAGER_NAME)
-    @Singleton
-    public MailboxManager provideMailboxManager(OpenJPAMailboxManager jpaMailboxManager) throws MailboxException {
-        jpaMailboxManager.init();
-        return jpaMailboxManager;
+        Multibinder.newSetBinder(binder(), MailboxListener.class)
+            .addBinding()
+            .to(MailboxAnnotationListener.class);
+
+        bind(MailboxManager.class).annotatedWith(Names.named(MAILBOXMANAGER_NAME)).to(MailboxManager.class);
+        bind(MailboxManagerConfiguration.class).toInstance(MailboxManagerConfiguration.DEFAULT);
     }
     
     @Singleton

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
index 6cd825c..118adf1 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.modules.mailbox;
 
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.jpa.quota.JPAPerUserMaxQuotaManager;
 import org.apache.james.mailbox.jpa.quota.JpaCurrentQuotaManager;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
@@ -27,11 +28,14 @@ import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.quota.UserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
+import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaUpdater;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Scopes;
+import com.google.inject.multibindings.Multibinder;
 
 public class JpaQuotaModule extends AbstractModule {
 
@@ -48,5 +52,11 @@ public class JpaQuotaModule extends AbstractModule {
         bind(QuotaManager.class).to(StoreQuotaManager.class);
         bind(CurrentQuotaManager.class).to(JpaCurrentQuotaManager.class);
         bind(StoreCurrentQuotaManager.class).to(JpaCurrentQuotaManager.class);
+
+        bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
+        bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
+        Multibinder.newSetBinder(binder(), MailboxListener.class)
+            .addBinding()
+            .to(ListeningCurrentQuotaUpdater.class);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
index 55996fd..79ea234 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
@@ -22,6 +22,7 @@ package org.apache.james.modules.mailbox;
 import java.io.IOException;
 
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
@@ -32,6 +33,7 @@ import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
+import com.google.inject.multibindings.Multibinder;
 
 public class LuceneSearchMailboxModule extends AbstractModule {
 
@@ -40,6 +42,10 @@ public class LuceneSearchMailboxModule extends AbstractModule {
         bind(LuceneMessageSearchIndex.class).in(Scopes.SINGLETON);
         bind(MessageSearchIndex.class).to(LuceneMessageSearchIndex.class);
         bind(ListeningMessageSearchIndex.class).to(LuceneMessageSearchIndex.class);
+
+        Multibinder.newSetBinder(binder(), MailboxListener.class)
+            .addBinding()
+            .to(LuceneMessageSearchIndex.class);
     }
 
     @Provides

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
index 598c7c8..2432baa 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
@@ -19,18 +19,20 @@
 
 package org.apache.james.modules.mailbox;
 
+import static org.apache.james.modules.Names.MAILBOXMANAGER_NAME;
+
 import javax.inject.Singleton;
 
 import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
 import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
 import org.apache.james.mailbox.AttachmentManager;
 import org.apache.james.mailbox.BlobManager;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.RightManager;
 import org.apache.james.mailbox.SubscriptionManager;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
@@ -44,6 +46,7 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.StoreAttachmentManager;
 import org.apache.james.mailbox.store.StoreBlobManager;
@@ -51,6 +54,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
+import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.mail.AttachmentMapperFactory;
 import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
@@ -59,15 +63,13 @@ import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.mailbox.store.user.SubscriptionMapperFactory;
-import org.apache.james.modules.Names;
 import org.apache.james.utils.MailboxManagerDefinition;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
-import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
-import com.google.inject.name.Named;
+import com.google.inject.name.Names;
 
 public class MemoryMailboxModule extends AbstractModule {
 
@@ -119,14 +121,13 @@ public class MemoryMailboxModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), MailboxManagerDefinition.class)
             .addBinding()
             .to(MemoryMailboxManagerDefinition.class);
-    }
 
-    @Provides
-    @Named(Names.MAILBOXMANAGER_NAME)
-    @Singleton
-    public MailboxManager provideMailboxManager(InMemoryMailboxManager mailboxManager) throws MailboxException {
-        mailboxManager.init();
-        return mailboxManager;
+        Multibinder.newSetBinder(binder(), MailboxListener.class)
+            .addBinding()
+            .to(MailboxAnnotationListener.class);
+
+        bind(MailboxManager.class).annotatedWith(Names.named(MAILBOXMANAGER_NAME)).to(MailboxManager.class);
+        bind(MailboxManagerConfiguration.class).toInstance(MailboxManagerConfiguration.DEFAULT);
     }
 
     @Singleton

http://git-wip-us.apache.org/repos/asf/james-project/blob/61dd6e21/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
index bf2e1f0..5bd73fc 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.modules.mailbox;
 
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager;
 import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
@@ -27,11 +28,14 @@ import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.quota.UserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
+import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.QuotaUpdater;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Scopes;
+import com.google.inject.multibindings.Multibinder;
 
 public class MemoryQuotaModule extends AbstractModule {
 
@@ -48,5 +52,11 @@ public class MemoryQuotaModule extends AbstractModule {
         bind(QuotaManager.class).to(StoreQuotaManager.class);
         bind(CurrentQuotaManager.class).to(InMemoryCurrentQuotaManager.class);
         bind(StoreCurrentQuotaManager.class).to(InMemoryCurrentQuotaManager.class);
+
+        bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
+        bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
+        Multibinder.newSetBinder(binder(), MailboxListener.class)
+            .addBinding()
+            .to(ListeningCurrentQuotaUpdater.class);
     }
 }


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


[06/30] james-project git commit: MAILBOX-367 Expose Exchange APIs to RabbitMQManagementAPI

Posted by bt...@apache.org.
MAILBOX-367 Expose Exchange APIs to RabbitMQManagementAPI


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

Branch: refs/heads/master
Commit: 914262497df2b71222a04538afb83efcb002d82c
Parents: 90cabdd
Author: datph <dp...@linagora.com>
Authored: Thu Jan 10 09:27:47 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 09:56:28 2019 +0700

----------------------------------------------------------------------
 .../backend/rabbitmq/RabbitMQManagementAPI.java | 95 +++++++++++++++++++-
 1 file changed, 94 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/91426249/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java
----------------------------------------------------------------------
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java
index 13a1c45..d8ad7bb 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQManagementAPI.java
@@ -1,4 +1,3 @@
-
 /****************************************************************
  * Licensed to the Apache Software Foundation (ASF) under one   *
  * or more contributor license agreements.  See the NOTICE file *
@@ -22,8 +21,10 @@ package org.apache.james.backend.rabbitmq;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.MoreObjects;
 
 import feign.Feign;
 import feign.Logger;
@@ -46,9 +47,98 @@ public interface RabbitMQManagementAPI {
         @JsonProperty("vhost")
         String vhost;
 
+        @JsonProperty("auto_delete")
+        boolean autoDelete;
+
+        @JsonProperty("durable")
+        boolean durable;
+
+        @JsonProperty("exclusive")
+        boolean exclusive;
+
+        @JsonProperty("arguments")
+        Map<String, String> arguments;
+
+        public String getName() {
+            return name;
+        }
+
+        public String getVhost() {
+            return vhost;
+        }
+
+        public boolean isAutoDelete() {
+            return autoDelete;
+        }
+
+        public boolean isDurable() {
+            return durable;
+        }
+
+        public boolean isExclusive() {
+            return exclusive;
+        }
+
+        public Map<String, String> getArguments() {
+            return arguments;
+        }
+    }
+
+    class Exchange {
+
+        @JsonProperty("name")
+        String name;
+
+        @JsonProperty("type")
+        String type;
+
+        @JsonProperty("auto_delete")
+        boolean autoDelete;
+
+        @JsonProperty("durable")
+        boolean durable;
+
+        @JsonProperty("internal")
+        boolean internal;
+
+        @JsonProperty("arguments")
+        Map<String, String> arguments;
+
         public String getName() {
             return name;
         }
+
+        public String getType() {
+            return type;
+        }
+
+        public boolean isAutoDelete() {
+            return autoDelete;
+        }
+
+        public boolean isDurable() {
+            return durable;
+        }
+
+        public boolean isInternal() {
+            return internal;
+        }
+
+        public Map<String, String> getArguments() {
+            return arguments;
+        }
+
+        @Override
+        public String toString() {
+            return MoreObjects.toStringHelper(this)
+                .add("name", name)
+                .add("type", type)
+                .add("autoDelete", autoDelete)
+                .add("durable", durable)
+                .add("internal", internal)
+                .add("arguments", arguments)
+                .toString();
+        }
     }
 
     static RabbitMQManagementAPI from(RabbitMQConfiguration configuration) {
@@ -76,4 +166,7 @@ public interface RabbitMQManagementAPI {
 
     @RequestLine(value = "DELETE /api/queues/{vhost}/{name}", decodeSlash = false)
     void deleteQueue(@Param("vhost") String vhost, @Param("name") String name);
+
+    @RequestLine("GET /api/exchanges")
+    List<Exchange> listExchanges();
 }
\ No newline at end of file


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


[26/30] james-project git commit: JAMES-2641 Ship knowledge about serializability along in MessageId

Posted by bt...@apache.org.
JAMES-2641 Ship knowledge about serializability along in MessageId

JPA integration test issues some failed logs about "fake" messageId serializing
that should have been prevented.


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

Branch: refs/heads/master
Commit: dc426a56f67a9746952cc19539a3e3edbcfedbf0
Parents: df10904
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Jan 11 15:53:06 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/model/MessageId.java   |  2 ++
 .../ComposedMessageIdWithMetaDataTest.java      |  5 +++++
 .../james/mailbox/model/TestMessageId.java      |  5 +++++
 .../cassandra/ids/CassandraMessageId.java       |  5 +++++
 .../cassandra/ids/CassandraMessageIdTest.java   |  5 +++++
 .../lucene/search/LuceneMessageSearchIndex.java |  6 +++++-
 .../mailbox/inmemory/InMemoryMessageId.java     |  5 +++++
 .../mailbox/inmemory/InMemoryMessageIdTest.java |  7 +++++++
 .../store/mail/model/DefaultMessageId.java      |  5 +++++
 .../james/mailbox/store/search/SearchUtil.java  |  2 +-
 .../store/mail/model/DefaultMessageIdTest.java  |  7 +++++++
 .../mailbox/store/search/SearchUtilTest.java    | 21 ++++++++++++++++++--
 12 files changed, 71 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
index f531f0a..36e2c47 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
@@ -30,4 +30,6 @@ public interface MessageId {
     }
     
     String serialize();
+
+    boolean isSerializable();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/api/src/test/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaDataTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaDataTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaDataTest.java
index 62b6cd2..8df2ba4 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaDataTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaDataTest.java
@@ -111,6 +111,11 @@ public class ComposedMessageIdWithMetaDataTest {
         public String serialize() {
             return id;
         }
+
+        @Override
+        public boolean isSerializable() {
+            return true;
+        }
         
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/api/src/test/java/org/apache/james/mailbox/model/TestMessageId.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/TestMessageId.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/TestMessageId.java
index 9913e20..52da632 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/TestMessageId.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/TestMessageId.java
@@ -61,6 +61,11 @@ public class TestMessageId implements MessageId {
     }
 
     @Override
+    public boolean isSerializable() {
+        return true;
+    }
+
+    @Override
     public int hashCode() {
         return Objects.hashCode(value);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageId.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageId.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageId.java
index 54b190f..be359a4 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageId.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageId.java
@@ -62,6 +62,11 @@ public class CassandraMessageId implements MessageId {
     }
 
     @Override
+    public boolean isSerializable() {
+        return true;
+    }
+
+    @Override
     public final boolean equals(Object o) {
         if (o instanceof CassandraMessageId) {
             CassandraMessageId other = (CassandraMessageId) o;

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageIdTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageIdTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageIdTest.java
index ff4ac82..bb7551a 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageIdTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageIdTest.java
@@ -62,4 +62,9 @@ public class CassandraMessageIdTest {
         String expected = uuid.toString();
         assertThat(cassandraMessageId.serialize()).isEqualTo(expected);
     }
+
+    @Test
+    public void shouldBeSerializable() {
+        assertThat(new CassandraMessageId.Factory().generate().isSerializable()).isTrue();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
index 9ff285f..7fffb74 100644
--- a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
+++ b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
@@ -548,7 +548,11 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
         doc.add(new Field(MAILBOX_ID_FIELD, membership.getMailboxId().serialize().toUpperCase(Locale.US), Store.YES, Index.NOT_ANALYZED));
         doc.add(new NumericField(UID_FIELD,Store.YES, true).setLongValue(membership.getUid().asLong()));
         doc.add(new Field(HAS_ATTACHMENT_FIELD, Boolean.toString(hasAttachment(membership)), Store.YES, Index.NOT_ANALYZED));
-        doc.add(new Field(MESSAGE_ID_FIELD, SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(membership), Store.YES, Index.NOT_ANALYZED));
+
+        String serializedMessageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(membership);
+        if (serializedMessageId != null) {
+            doc.add(new Field(MESSAGE_ID_FIELD, serializedMessageId, Store.YES, Index.NOT_ANALYZED));
+        }
 
         // create an unqiue key for the document which can be used later on updates to find the document
         doc.add(new Field(ID_FIELD, membership.getMailboxId().serialize().toUpperCase(Locale.US) + "-" + Long.toString(membership.getUid().asLong()), Store.YES, Index.NOT_ANALYZED));

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageId.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageId.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageId.java
index f1a3ab5..789e933 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageId.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageId.java
@@ -62,6 +62,11 @@ public class InMemoryMessageId implements MessageId {
     }
 
     @Override
+    public boolean isSerializable() {
+        return true;
+    }
+
+    @Override
     public final int hashCode() {
         return Objects.hashCode(value);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdTest.java
index fd64e12..59303a9 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdTest.java
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.james.mailbox.inmemory;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.junit.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
@@ -28,4 +30,9 @@ public class InMemoryMessageIdTest {
     public void shouldRespectJavaBeanContract() {
         EqualsVerifier.forClass(InMemoryMessageId.class).verify();
     }
+
+    @Test
+    public void shouldBeSerializable() {
+        assertThat(new InMemoryMessageId.Factory().generate().isSerializable()).isTrue();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
index 51fff2d..c163ec6 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
@@ -22,6 +22,11 @@ public class DefaultMessageId implements MessageId {
     }
 
     @Override
+    public boolean isSerializable() {
+        return false;
+    }
+
+    @Override
     public String serialize() {
         throw new IllegalStateException("Capabilities should prevent calling this method");
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
index 1dbecda..44519ed 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
@@ -180,7 +180,7 @@ public class SearchUtil {
 
     public static String getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(MailboxMessage mailboxMessage) {
         MessageId messageId = mailboxMessage.getMessageId();
-        if (messageId != null) {
+        if (messageId != null && messageId.isSerializable()) {
             return messageId.serialize();
         }
         return null;

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMessageIdTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMessageIdTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMessageIdTest.java
index 3ae48e9..85aa49f 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMessageIdTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMessageIdTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.mailbox.store.mail.model;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.TestId;
@@ -36,4 +38,9 @@ public class DefaultMessageIdTest {
         composedMessageId.toString();
     }
 
+    @Test
+    public void shouldNotBeSerializable() {
+        assertThat(new DefaultMessageId().isSerializable()).isFalse();
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc426a56/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
index 3995a0a..b5210e6 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
@@ -107,8 +107,8 @@ public class SearchUtilTest {
         //given
         String messageIdString = "http://www.labraxeenne.com/#/";
         MessageId messageId = mock(MessageId.class);
-        when(messageId.serialize())
-            .thenReturn(messageIdString);
+        when(messageId.serialize()).thenReturn(messageIdString);
+        when(messageId.isSerializable()).thenReturn(true);
 
         MailboxMessage message = mock(MailboxMessage.class);
         when(message.getMessageId())
@@ -121,4 +121,21 @@ public class SearchUtilTest {
         assertThat(messageIdString).isEqualTo(serialiazedMessageId);
     }
 
+    @Test
+    public void getSerializedMessageIdIfSupportedByUnderlyingStorageOrNullForValidMessageIdShouldReturnNullWhenNotSupported() {
+        //given
+        MessageId messageId = mock(MessageId.class);
+        when(messageId.isSerializable()).thenReturn(false);
+
+        MailboxMessage message = mock(MailboxMessage.class);
+        when(message.getMessageId())
+            .thenReturn(messageId);
+
+        //when
+        String serialiazedMessageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
+
+        //expect
+        assertThat(serialiazedMessageId).isNull();
+    }
+
 }


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


[28/30] james-project git commit: JAMES-2641 Search indexes should not be initialized in StoreMailboxManager::init()

Posted by bt...@apache.org.
JAMES-2641 Search indexes should not be initialized in StoreMailboxManager::init()


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

Branch: refs/heads/master
Commit: c06c13aa5a49def4f56ed2d94c1eb07255a706c2
Parents: 59910ec
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 17:48:31 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraMailboxManager.java      |  9 +---
 .../CassandraMailboxManagerProvider.java        | 11 +++--
 .../cassandra/CassandraTestSystemFixture.java   |  6 ++-
 .../CassandraMailboxManagerAttachmentTest.java  |  9 +++-
 .../ElasticSearchIntegrationTest.java           | 46 ++++++++++++++----
 .../james/mailbox/jpa/JPAMailboxManager.java    |  7 ++-
 .../jpa/openjpa/OpenJPAMailboxManager.java      |  6 ++-
 .../mailbox/jpa/JpaMailboxManagerProvider.java  |  6 ++-
 .../search/LuceneMessageSearchIndexTest.java    | 49 ++++++++++++++++----
 .../maildir/MaildirMailboxManagerProvider.java  |  8 +++-
 .../inmemory/InMemoryMailboxManager.java        | 11 ++---
 .../InMemoryMailboxManagerAttachmentTest.java   |  8 +++-
 .../manager/InMemoryIntegrationResources.java   | 12 ++++-
 .../InMemoryMessageIdManagerSideEffectTest.java |  7 ++-
 .../search/SimpleMessageSearchIndexTest.java    |  2 -
 .../mailbox/store/StoreMailboxManager.java      | 20 ++------
 .../mailbox/store/StoreMailboxManagerTest.java  |  7 ++-
 .../cassandra/host/CassandraHostSystem.java     |  7 ++-
 .../host/ElasticSearchHostSystem.java           | 38 ++++++++++++---
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java |  8 +++-
 .../host/LuceneSearchHostSystem.java            | 11 +++--
 .../maildir/host/MaildirHostSystem.java         |  8 +++-
 22 files changed, 209 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index a54331f..8b5623c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -63,7 +63,7 @@ public class CassandraMailboxManager extends StoreMailboxManager {
                                    MailboxPathLocker locker, MessageParser messageParser,
                                    MessageId.Factory messageIdFactory, DelegatingMailboxListener delegatingMailboxListener,
                                    StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager,
-                                   QuotaComponents quotaComponents,
+                                   QuotaComponents quotaComponents, MessageSearchIndex index,
                                    MailboxManagerConfiguration configuration) {
         super(mapperFactory,
             sessionProvider,
@@ -74,18 +74,13 @@ public class CassandraMailboxManager extends StoreMailboxManager {
             delegatingMailboxListener,
             storeRightManager,
             quotaComponents,
+            index,
             configuration);
         this.locker = locker;
         this.mapperFactory = mapperFactory;
     }
 
     @Override
-    @Inject
-    public void setMessageSearchIndex(MessageSearchIndex index) {
-        super.setMessageSearchIndex(index);
-    }
-
-    @Override
     public EnumSet<MailboxManager.MailboxCapabilities> getSupportedMailboxCapabilities() {
         return MAILBOX_CAPABILITIES;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index 26bf3a9..3f06277 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -40,11 +40,14 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 
 import com.datastax.driver.core.Session;
 
@@ -81,13 +84,11 @@ public class CassandraMailboxManagerProvider {
         ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaUpdater, quotaRootResolver, delegatingMailboxListener, storeQuotaManager);
         QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, storeQuotaManager, quotaRootResolver, quotaUpdater);
 
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mapperFactory, mapperFactory, new DefaultTextExtractor());
+
         CassandraMailboxManager manager = new CassandraMailboxManager(mapperFactory, sessionProvider, new NoMailboxPathLocker(),
             messageParser, messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager,
-            quotaComponents, MailboxManagerConfiguration.DEFAULT);
-
-        manager.setQuotaManager(storeQuotaManager);
-        manager.setQuotaUpdater(quotaUpdater);
-        manager.setQuotaRootResolver(quotaRootResolver);
+            quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
         try {
             manager.init();
         } catch (MailboxException e) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 5f7c87a..5ccb8c0 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -43,9 +43,12 @@ import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 
 class CassandraTestSystemFixture {
 
@@ -66,9 +69,10 @@ class CassandraTestSystemFixture {
         SessionProvider sessionProvider = new SessionProvider(mock(Authenticator.class), mock(Authorizator.class));
 
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mapperFactory);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mapperFactory, mapperFactory, new DefaultTextExtractor());
         CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
             new NoMailboxPathLocker(), new MessageParser(), new CassandraMessageId.Factory(),
-            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
+            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
         cassandraMailboxManager.init();
 
         return cassandraMailboxManager;

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index 6fe8d71..61b15d6 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -41,9 +41,12 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.AttachmentMapperFactory;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -95,16 +98,18 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
 
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
 
         mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), new MessageParser(),
-            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
+            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents,
+            index, MailboxManagerConfiguration.DEFAULT);
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any()))
             .thenThrow(new RuntimeException("Message parser set to fail"));
         parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider,
             new NoMailboxPathLocker(), failingMessageParser, messageIdFactory,
-            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
+            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
         parseFailingMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index e85582b..b68f310 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -34,20 +34,29 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
 import org.apache.james.mailbox.elasticsearch.query.CriterionConverter;
 import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
 import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.inmemory.InMemoryId;
-import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.inmemory.InMemoryMessageId;
+import org.apache.james.mailbox.manager.ManagerTestResources;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.FakeAuthorizator;
+import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.SessionProvider;
+import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
+import org.apache.james.mailbox.store.StoreRightManager;
+import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
 import org.apache.james.mailbox.tika.TikaConfiguration;
@@ -103,25 +112,46 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
             new TestingClientProvider(embeddedElasticSearch.getNode()).get(),
                 ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
 
-        storeMailboxManager = new InMemoryIntegrationResources()
-            .createMailboxManager(new SimpleGroupMembershipResolver());
+        FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
+        fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
+        fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
+        InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
+        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
+        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(),
+            new SimpleGroupMembershipResolver(), delegatingListener);
+        StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
+        InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
+
+        SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, FakeAuthorizator.defaultReject());
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
 
         ThreadFactory threadFactory = NamedThreadFactory.withClassName(getClass());
         ElasticSearchListeningMessageSearchIndex elasticSearchListeningMessageSearchIndex = new ElasticSearchListeningMessageSearchIndex(
-            storeMailboxManager.getMapperFactory(),
+            mailboxSessionMapperFactory,
             new ElasticSearchIndexer(client,
                 Executors.newSingleThreadExecutor(threadFactory),
                 MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
                 MailboxElasticSearchConstants.MESSAGE_TYPE,
                 BATCH_SIZE),
             new ElasticSearchSearcher(client, new QueryConverter(new CriterionConverter()), SEARCH_SIZE,
-                new InMemoryId.Factory(), storeMailboxManager.getMessageIdFactory(),
+                new InMemoryId.Factory(), messageIdFactory,
                 MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
                 MailboxElasticSearchConstants.MESSAGE_TYPE),
             new MessageToElasticSearchJson(textExtractor, ZoneId.of("Europe/Paris"), IndexAttachments.YES),
             new SessionProvider(new FakeAuthenticator(), FakeAuthorizator.defaultReject()));
 
-        QuotaComponents quotaComponents = storeMailboxManager.getQuotaComponents();
+        storeMailboxManager = new InMemoryMailboxManager(
+            mailboxSessionMapperFactory,
+            sessionProvider,
+            new JVMMailboxPathLocker(),
+            new MessageParser(),
+            messageIdFactory,
+            delegatingListener,
+            annotationManager,
+            storeRightManager,
+            quotaComponents,
+            elasticSearchListeningMessageSearchIndex);
+
         messageIdManager = new StoreMessageIdManager(
             storeMailboxManager,
             storeMailboxManager.getMapperFactory(),
@@ -129,8 +159,8 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
             storeMailboxManager.getMessageIdFactory(),
             quotaComponents.getQuotaManager(),
             quotaComponents.getQuotaRootResolver());
-        storeMailboxManager.setMessageSearchIndex(elasticSearchListeningMessageSearchIndex);
-        storeMailboxManager.addGlobalListener(elasticSearchListeningMessageSearchIndex, MailboxSessionUtil.create("admin"));
+
+        delegatingListener.addGlobalListener(elasticSearchListeningMessageSearchIndex, MailboxSessionUtil.create("admin"));
         this.messageSearchIndex = elasticSearchListeningMessageSearchIndex;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
index 70a4e1f..eef45a1 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.transaction.Mapper;
 
 /**
@@ -56,10 +57,12 @@ public abstract class JPAMailboxManager extends StoreMailboxManager {
                              DelegatingMailboxListener delegatingMailboxListener,
                              StoreMailboxAnnotationManager annotationManager,
                              StoreRightManager storeRightManager,
-                             QuotaComponents quotaComponents) {
+                             QuotaComponents quotaComponents,
+                             MessageSearchIndex index) {
         super(mailboxSessionMapperFactory, sessionProvider, locker,
             messageParser, messageIdFactory, annotationManager,
-            delegatingMailboxListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
+            delegatingMailboxListener, storeRightManager, quotaComponents,
+            index, MailboxManagerConfiguration.DEFAULT);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
index 77c2fcd..4aeb300 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
@@ -35,6 +35,7 @@ import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 /**
  * OpenJPA implementation of MailboxManager
@@ -50,10 +51,11 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
                                  DelegatingMailboxListener delegatingMailboxListener,
                                  StoreMailboxAnnotationManager annotationManager,
                                  StoreRightManager storeRightManager,
-                                 QuotaComponents quotaComponents) {
+                                 QuotaComponents quotaComponents,
+                                 MessageSearchIndex index) {
         super(mapperFactory, sessionProvider, new JVMMailboxPathLocker(), messageParser,
             messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager,
-            quotaComponents);
+            quotaComponents, index);
     }
 
     protected AdvancedFeature getAdvancedFeature() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
index bdaf958..6687e68 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
@@ -37,9 +37,12 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 
 public class JpaMailboxManagerProvider {
 
@@ -63,11 +66,12 @@ public class JpaMailboxManagerProvider {
             LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mf);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mf, mf, new DefaultTextExtractor());
 
         OpenJPAMailboxManager openJPAMailboxManager = new OpenJPAMailboxManager(mf, sessionProvider,
             messageParser, new DefaultMessageId.Factory(),
             delegatingListener, annotationManager,
-            storeRightManager, quotaComponents);
+            storeRightManager, quotaComponents, index);
 
         try {
             openJPAMailboxManager.init();

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
index 16b6b46..28f80da 100644
--- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
+++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
@@ -21,13 +21,22 @@ package org.apache.james.mailbox.lucene.search;
 
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
-import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.inmemory.InMemoryMessageId;
+import org.apache.james.mailbox.manager.ManagerTestResources;
 import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.FakeAuthorizator;
+import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.SessionProvider;
+import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
+import org.apache.james.mailbox.store.StoreRightManager;
+import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
 import org.apache.lucene.store.RAMDirectory;
@@ -41,10 +50,34 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
 
     @Override
     protected void initializeMailboxManager() throws Exception {
-        storeMailboxManager = new InMemoryIntegrationResources()
-            .createMailboxManager(new SimpleGroupMembershipResolver());
+        FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
+        fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
+        fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
+        InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
+        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
+        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingListener);
+        StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
+
+        SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, FakeAuthorizator.defaultReject());
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
+        InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
+        LuceneMessageSearchIndex luceneMessageSearchIndex = new LuceneMessageSearchIndex(
+            mailboxSessionMapperFactory, new InMemoryId.Factory(), new RAMDirectory(),
+            messageIdFactory,
+            new SessionProvider(new FakeAuthenticator(), FakeAuthorizator.defaultReject()));
+
+        storeMailboxManager = new InMemoryMailboxManager(
+            mailboxSessionMapperFactory,
+            sessionProvider,
+            new JVMMailboxPathLocker(),
+            new MessageParser(),
+            messageIdFactory,
+            delegatingListener,
+            annotationManager,
+            storeRightManager,
+            quotaComponents,
+            luceneMessageSearchIndex);
 
-        QuotaComponents quotaComponents = storeMailboxManager.getQuotaComponents();
         messageIdManager = new StoreMessageIdManager(
             storeMailboxManager,
             storeMailboxManager.getMapperFactory(),
@@ -52,12 +85,8 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
             storeMailboxManager.getMessageIdFactory(),
             quotaComponents.getQuotaManager(),
             quotaComponents.getQuotaRootResolver());
-        LuceneMessageSearchIndex luceneMessageSearchIndex = new LuceneMessageSearchIndex(
-            storeMailboxManager.getMapperFactory(), new InMemoryId.Factory(), new RAMDirectory(),
-            storeMailboxManager.getMessageIdFactory(),
-            new SessionProvider(new FakeAuthenticator(), FakeAuthorizator.defaultReject()));
-        storeMailboxManager.setMessageSearchIndex(luceneMessageSearchIndex);
-        storeMailboxManager.addGlobalListener(luceneMessageSearchIndex, MailboxSessionUtil.create("admin"));
+
+        delegatingListener.addGlobalListener(luceneMessageSearchIndex, MailboxSessionUtil.create("admin"));
         this.messageSearchIndex = luceneMessageSearchIndex;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
index 604039b..88284af 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java
@@ -36,9 +36,12 @@ import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.junit.rules.TemporaryFolder;
 
 public class MaildirMailboxManagerProvider {
@@ -62,8 +65,11 @@ public class MaildirMailboxManagerProvider {
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager);
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mf);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mf, mf, new DefaultTextExtractor());
+
         StoreMailboxManager manager = new StoreMailboxManager(mf, sessionProvider, new JVMMailboxPathLocker(),
-            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
+            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager,
+            quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
         manager.init();
 
         return manager;

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index f2ef014..d83e75e 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -55,15 +55,10 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
                                   DelegatingMailboxListener delegatingMailboxListener,
                                   StoreMailboxAnnotationManager annotationManager,
                                   StoreRightManager storeRightManager,
-                                  QuotaComponents quotaComponents) {
+                                  QuotaComponents quotaComponents,
+                                  MessageSearchIndex searchIndex) {
         super(mailboxSessionMapperFactory, sessionProvider, locker, messageParser, messageIdFactory,
-            annotationManager, delegatingMailboxListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
-    }
-
-    @Override
-    @Inject
-    public void setMessageSearchIndex(MessageSearchIndex index) {
-        super.setMessageSearchIndex(index);
+            annotationManager, delegatingMailboxListener, storeRightManager, quotaComponents, searchIndex, MailboxManagerConfiguration.DEFAULT);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
index 9ce53e0..bc348e9 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
@@ -41,9 +41,12 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.AttachmentMapperFactory;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.junit.Before;
 
 public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManagerAttachmentTest {
@@ -67,16 +70,17 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager
 
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
         mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(),
-                new MessageParser(), messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents);
+                new MessageParser(), messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents, index);
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any(InputStream.class)))
             .thenThrow(new RuntimeException("Message parser set to fail"));
         parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(),
-            failingMessageParser, messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents);
+            failingMessageParser, messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents, index);
         parseFailingMailboxManager.init();
         super.setUp();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 45425cb..94b04fc 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -48,12 +48,15 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 
 public class InMemoryIntegrationResources implements IntegrationResources<StoreMailboxManager> {
 
@@ -111,6 +114,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
 
         SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, FakeAuthorizator.defaultReject());
         QuotaComponents quotaComponents = createQuotaComponents(mailboxSessionMapperFactory, delegatingListener, sessionProvider);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
 
         InMemoryMailboxManager manager = new InMemoryMailboxManager(
             mailboxSessionMapperFactory,
@@ -121,7 +125,8 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             delegatingListener,
             annotationManager,
             storeRightManager,
-            quotaComponents);
+            quotaComponents,
+            index);
         manager.init();
         try {
             return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory());
@@ -149,6 +154,8 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
         QuotaComponents quotaComponents = createQuotaComponents(mailboxSessionMapperFactory, delegatingListener, sessionProvider);
 
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
+
         StoreMailboxManager manager = new InMemoryMailboxManager(
             mailboxSessionMapperFactory,
             sessionProvider,
@@ -158,7 +165,8 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             delegatingListener,
             annotationManager,
             storeRightManager,
-            quotaComponents);
+            quotaComponents,
+            index);
         manager.init();
         return manager;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
index 28cdc0c..8f32bf8 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
@@ -36,11 +36,14 @@ import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.NoMaxQuotaManager;
 import org.apache.james.mailbox.store.quota.NoQuotaUpdater;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.junit.Before;
 
 public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSideEffectTest {
@@ -66,6 +69,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
         SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, fakeAuthorizator);
 
         QuotaComponents quotaComponents = new QuotaComponents(new NoMaxQuotaManager(), quotaManager, new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory), new NoQuotaUpdater());
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mapperFactory, mapperFactory, new DefaultTextExtractor());
 
         InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mapperFactory,
             sessionProvider,
@@ -75,7 +79,8 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
             delegatingMailboxListener,
             new StoreMailboxAnnotationManager(mapperFactory, rightManager),
             rightManager,
-            quotaComponents);
+            quotaComponents,
+            index);
         StoreMessageIdManager messageIdManager = new StoreMessageIdManager(
             mailboxManager,
             mapperFactory,

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
index 30f6880..92e6995 100644
--- a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
+++ b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
@@ -48,8 +48,6 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest
             storeMailboxManager.getMessageIdFactory(),
             storeMailboxManager.getQuotaComponents().getQuotaManager(),
             storeMailboxManager.getQuotaComponents().getQuotaRootResolver());
-
-        storeMailboxManager.setMessageSearchIndex(messageSearchIndex);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 7fd17cf..65d4923 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -66,7 +66,6 @@ import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
-import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -77,7 +76,6 @@ import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.QuotaUpdater;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
-import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.mailbox.store.transaction.Mapper;
 import org.apache.james.util.streams.Iterators;
 import org.slf4j.Logger;
@@ -116,16 +114,16 @@ public class StoreMailboxManager implements MailboxManager {
     private final QuotaRootResolver quotaRootResolver;
     private final QuotaUpdater quotaUpdater;
     private final QuotaComponents quotaComponents;
+    private final MessageSearchIndex index;
     protected final MailboxManagerConfiguration configuration;
 
-    private MessageSearchIndex index;
 
     @Inject
     public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider,
                                MailboxPathLocker locker, MessageParser messageParser,
                                MessageId.Factory messageIdFactory, MailboxAnnotationManager annotationManager,
                                DelegatingMailboxListener delegatingListener, StoreRightManager storeRightManager,
-                               QuotaComponents quotaComponents, MailboxManagerConfiguration configuration) {
+                               QuotaComponents quotaComponents, MessageSearchIndex searchIndex, MailboxManagerConfiguration configuration) {
         Preconditions.checkNotNull(delegatingListener);
         Preconditions.checkNotNull(mailboxSessionMapperFactory);
 
@@ -141,6 +139,7 @@ public class StoreMailboxManager implements MailboxManager {
         this.quotaRootResolver = quotaComponents.getQuotaRootResolver();
         this.quotaManager = quotaComponents.getQuotaManager();
         this.quotaComponents = quotaComponents;
+        this.index = searchIndex;
         this.configuration = configuration;
     }
 
@@ -164,9 +163,6 @@ public class StoreMailboxManager implements MailboxManager {
     @PostConstruct
     public void init() throws MailboxException {
         MailboxSession session = createSystemSession("storeMailboxManager");
-        if (index == null) {
-            index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
-        }
         if (index instanceof ListeningMessageSearchIndex) {
             this.addGlobalListener((MailboxListener) index, session);
         }
@@ -233,16 +229,6 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     /**
-     * Set the {@link MessageSearchIndex} which should be used by this {@link MailboxManager}. If none is given this implementation will use a {@link SimpleMessageSearchIndex}
-     * by default
-     *
-     * @param index
-     */
-    public void setMessageSearchIndex(MessageSearchIndex index) {
-        this.index = index;
-    }
-
-    /**
      * Generate an return the next uid validity
      *
      * @return uidValidity

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index 6cc0f59..9ada55f 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -43,10 +43,13 @@ import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.mailbox.model.search.PrefixedRegex;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 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.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -84,9 +87,11 @@ public class StoreMailboxManagerTest {
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mockedMapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, FakeAuthorizator.forUserAndAdmin(ADMIN, CURRENT_USER));
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mockedMapperFactory);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mockedMapperFactory, mockedMapperFactory, new DefaultTextExtractor());
+
         storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, sessionProvider,
                 new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
-                annotationManager, delegatingListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
+                annotationManager, delegatingListener, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
         storeMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index 937e572..bc4f33f 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -46,11 +46,14 @@ import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -102,9 +105,11 @@ public class CassandraHostSystem extends JamesImapHostSystem {
         ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingMailboxListener, quotaManager);
         QuotaComponents quotaComponents = new QuotaComponents(perUserMaxQuotaManager, quotaManager, quotaRootResolver, quotaUpdater);
 
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mapperFactory, mapperFactory, new DefaultTextExtractor());
+
         mailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider,
             new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
-            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
+            delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
 
         mailboxManager.init();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 8ddfac8..f20d56b 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -40,6 +40,7 @@ import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
@@ -50,14 +51,21 @@ import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
 import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
-import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.SessionProvider;
+import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
+import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.NoQuotaManager;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -96,10 +104,15 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
                 ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
 
         InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
-        mailboxManager = new InMemoryIntegrationResources()
-            .createMailboxManager(new SimpleGroupMembershipResolver(),
-                authenticator,
-                authorizator);
+
+        InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
+        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
+        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingListener);
+        StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
+
+        SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+        QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
+
 
         ThreadFactory threadFactory = NamedThreadFactory.withClassName(getClass());
         ElasticSearchListeningMessageSearchIndex searchIndex = new ElasticSearchListeningMessageSearchIndex(
@@ -116,8 +129,19 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
             new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.systemDefault(), IndexAttachments.YES),
             new SessionProvider(authenticator, authorizator));
 
-        mailboxManager.setMessageSearchIndex(searchIndex);
-        mailboxManager.addGlobalListener(searchIndex, MailboxSessionUtil.create("admin"));
+        mailboxManager = new InMemoryMailboxManager(
+            mailboxSessionMapperFactory,
+            sessionProvider,
+            new JVMMailboxPathLocker(),
+            new MessageParser(),
+            messageIdFactory,
+            delegatingListener,
+            annotationManager,
+            storeRightManager,
+            quotaComponents,
+            searchIndex);
+
+        delegatingListener.addGlobalListener(searchIndex, MailboxSessionUtil.create("admin"));
 
         ImapProcessor defaultImapProcessorFactory =
             DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager,

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 15dfb64..6aef8bc 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -49,12 +49,15 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -107,9 +110,10 @@ public class JPAHostSystem extends JamesImapHostSystem {
         StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
         ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingListener, storeQuotaManager);
         QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, storeQuotaManager, quotaRootResolver, quotaUpdater);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mapperFactory, mapperFactory, new DefaultTextExtractor());
 
-        mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider,
-            messageParser, new DefaultMessageId.Factory(), delegatingListener, annotationManager, storeRightManager, quotaComponents);
+        mailboxManager = new OpenJPAMailboxManager(mapperFactory, sessionProvider, messageParser, new DefaultMessageId.Factory(),
+            delegatingListener, annotationManager, storeRightManager, quotaComponents, index);
 
         mailboxManager.init();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index 6774134..fac28bb 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -50,6 +50,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.NoQuotaManager;
+import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -104,6 +105,9 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
             JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
             InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
             SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
+            FSDirectory fsDirectory = FSDirectory.open(tempFile);
+            searchIndex = new LuceneMessageSearchIndex(mapperFactory, new InMemoryId.Factory(), fsDirectory, messageIdFactory, sessionProvider);
+
             mailboxManager = new InMemoryMailboxManager(mapperFactory,
                 sessionProvider,
                 locker,
@@ -111,12 +115,11 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
                 messageIdFactory,
                 delegatingMailboxListener,
                 new StoreMailboxAnnotationManager(mapperFactory, rightManager),
-                rightManager);
+                rightManager,
+                QuotaComponents.disabled(sessionProvider, mapperFactory),
+                searchIndex);
 
-            FSDirectory fsDirectory = FSDirectory.open(tempFile);
-            searchIndex = new LuceneMessageSearchIndex(mapperFactory, new InMemoryId.Factory(), fsDirectory, messageIdFactory, sessionProvider);
             searchIndex.setEnableSuffixMatch(true);
-            mailboxManager.setMessageSearchIndex(searchIndex);
 
             mailboxManager.init();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c06c13aa/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index 6eb7fc3..4dc20d9 100644
--- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -43,9 +43,12 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -80,8 +83,11 @@ public class MaildirHostSystem extends JamesImapHostSystem {
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
+        MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
+
         mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, sessionProvider, locker,
-            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, quotaComponents, MailboxManagerConfiguration.DEFAULT);
+            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager, quotaComponents,
+            index, MailboxManagerConfiguration.DEFAULT);
         mailboxManager.init();
 
         ImapProcessor defaultImapProcessorFactory =


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


[25/30] james-project git commit: JAMES-2641 Avoid retrieving mailbox information upon renames

Posted by bt...@apache.org.
JAMES-2641 Avoid retrieving mailbox information upon renames

This is simply not needed and causes the JPA + Lucene product to fail


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

Branch: refs/heads/master
Commit: c16d4e9b079d2c4145987b5909e6a5ae8c5f7f8b
Parents: c08473d
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Jan 11 17:19:49 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../search/ListeningMessageSearchIndex.java     | 25 ++++++++++++--------
 1 file changed, 15 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c16d4e9b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
index de34195..25d9952 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
@@ -37,6 +37,8 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableList;
+
 /**
  * {@link MessageSearchIndex} which needs to get registered as global {@link MailboxListener} and so get
  * notified about message changes. This will then allow to update the underlying index.
@@ -49,6 +51,7 @@ public abstract class ListeningMessageSearchIndex implements MessageSearchIndex,
     private static final int UNLIMITED = -1;
     private final MailboxSessionMapperFactory factory;
     private final SessionProvider sessionProvider;
+    private static final ImmutableList<Class<? extends Event>> INTERESTING_EVENTS = ImmutableList.of(Added.class, Expunged.class, FlagsUpdated.class, MailboxDeletion.class);
 
     public ListeningMessageSearchIndex(MailboxSessionMapperFactory factory, SessionProvider sessionProvider) {
         this.factory = factory;
@@ -73,16 +76,18 @@ public abstract class ListeningMessageSearchIndex implements MessageSearchIndex,
     }
 
     private void handleMailboxEvent(Event event, MailboxSession session, MailboxEvent mailboxEvent) throws MailboxException {
-        Mailbox mailbox = factory.getMailboxMapper(session).findMailboxById(mailboxEvent.getMailboxId());
-
-        if (event instanceof Added) {
-            handleAdded(session, mailbox, (Added) event);
-        } else if (event instanceof Expunged) {
-            handleExpunged(session, mailbox, (Expunged) event);
-        } else if (event instanceof FlagsUpdated) {
-            handleFlagsUpdated(session, mailbox, (FlagsUpdated) event);
-        } else if (event instanceof MailboxDeletion) {
-            deleteAll(session, mailbox);
+        if (INTERESTING_EVENTS.contains(event.getClass())) {
+            Mailbox mailbox = factory.getMailboxMapper(session).findMailboxById(mailboxEvent.getMailboxId());
+
+            if (event instanceof Added) {
+                handleAdded(session, mailbox, (Added) event);
+            } else if (event instanceof Expunged) {
+                handleExpunged(session, mailbox, (Expunged) event);
+            } else if (event instanceof FlagsUpdated) {
+                handleFlagsUpdated(session, mailbox, (FlagsUpdated) event);
+            } else if (event instanceof MailboxDeletion) {
+                deleteAll(session, mailbox);
+            }
         }
     }
 


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


[02/30] james-project git commit: MAILBOX-372 InVmEventDelivery returns success even when exception tests

Posted by bt...@apache.org.
MAILBOX-372 InVmEventDelivery returns success even when exception tests


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

Branch: refs/heads/master
Commit: 48bc40f256a08378848e09d849b61ec360079286
Parents: 62f7cf3
Author: tran tien duc <dt...@linagora.com>
Authored: Wed Jan 9 18:35:22 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 09:55:11 2019 +0700

----------------------------------------------------------------------
 .../events/delivery/InVmEventDeliveryTest.java  | 114 +++++++++++++++++++
 1 file changed, 114 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/48bc40f2/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java
index 417401c..3f46019 100644
--- a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java
+++ b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/delivery/InVmEventDeliveryTest.java
@@ -19,9 +19,13 @@
 
 package org.apache.james.mailbox.events.delivery;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.junit.jupiter.api.Assertions.assertTimeout;
 import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -31,8 +35,11 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.util.EventCollector;
 import org.apache.james.metrics.api.NoopMetricFactory;
+import org.assertj.core.api.SoftAssertions;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -53,6 +60,113 @@ class InVmEventDeliveryTest {
         inVmEventDelivery = new InVmEventDelivery(new NoopMetricFactory());
     }
 
+    @Nested
+    class ErrorHandling {
+
+        class AsyncEventCollector extends EventCollector {
+            @Override
+            public ExecutionMode getExecutionMode() {
+                return ExecutionMode.ASYNCHRONOUS;
+            }
+        }
+
+        private EventCollector syncEventCollector;
+        private EventCollector asyncEventCollector;
+
+        @BeforeEach
+        void setUp() {
+            syncEventCollector = spy(new EventCollector());
+            asyncEventCollector = spy(new AsyncEventCollector());
+        }
+
+        @Nested
+        class SynchronousOnly {
+            @Test
+            void deliverShouldNotDeliverEventToListenerWhenException() {
+                doThrow(RuntimeException.class).when(syncEventCollector).event(event);
+
+                inVmEventDelivery.deliver(ImmutableList.of(syncEventCollector), event).allListenerFuture().block();
+
+                assertThat(syncEventCollector.getEvents())
+                    .isEmpty();
+            }
+
+            @Test
+            void deliverShouldBeSuccessWhenException() {
+                doThrow(RuntimeException.class).when(syncEventCollector).event(event);
+
+                assertThatCode(() -> inVmEventDelivery
+                    .deliver(ImmutableList.of(syncEventCollector), event).allListenerFuture()
+                    .block())
+                .doesNotThrowAnyException();
+            }
+        }
+
+        @Nested
+        class AsynchronousOnly {
+            @Test
+            void deliverShouldNotDeliverEventToListenerWhenException() {
+
+                doThrow(RuntimeException.class).when(asyncEventCollector).event(event);
+
+                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector), event).allListenerFuture().block();
+
+                assertThat(asyncEventCollector.getEvents())
+                    .isEmpty();
+            }
+
+            @Test
+            void deliverShouldBeSuccessWhenException() {
+                doThrow(RuntimeException.class).when(asyncEventCollector).event(event);
+
+                assertThatCode(() -> inVmEventDelivery
+                    .deliver(ImmutableList.of(asyncEventCollector), event).allListenerFuture()
+                    .block())
+                .doesNotThrowAnyException();
+            }
+        }
+
+        @Nested
+        class BothAsynchronousAnsSynchronous {
+            @Test
+            void deliverShouldDeliverEventToSyncListenerWhenAsyncGetException() {
+                doThrow(RuntimeException.class).when(asyncEventCollector).event(event);
+
+                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector, syncEventCollector), event).allListenerFuture().block();
+
+                SoftAssertions.assertSoftly(softly -> {
+                    softly.assertThat(asyncEventCollector.getEvents()).isEmpty();
+                    softly.assertThat(syncEventCollector.getEvents()).hasSize(1);
+                });
+
+            }
+
+            @Test
+            void deliverShouldDeliverEventToAsyncListenerWhenSyncGetException() {
+                doThrow(RuntimeException.class).when(syncEventCollector).event(event);
+
+                inVmEventDelivery.deliver(ImmutableList.of(asyncEventCollector, syncEventCollector), event).allListenerFuture().block();
+
+                SoftAssertions.assertSoftly(softly -> {
+                    softly.assertThat(syncEventCollector.getEvents()).isEmpty();
+                    softly.assertThat(asyncEventCollector.getEvents()).hasSize(1);
+                });
+
+            }
+
+            @Test
+            void deliverShouldBeSuccessWhenException() {
+                doThrow(RuntimeException.class).when(syncEventCollector).event(event);
+                doThrow(RuntimeException.class).when(asyncEventCollector).event(event);
+
+                assertThatCode(() -> inVmEventDelivery
+                    .deliver(ImmutableList.of(asyncEventCollector), event).allListenerFuture()
+                    .block())
+                .doesNotThrowAnyException();
+            }
+        }
+    }
+
     @Test
     void deliverShouldHaveCalledSynchronousListenersWhenAllListenerExecutedJoined() {
         when(listener.getExecutionMode()).thenReturn(MailboxListener.ExecutionMode.SYNCHRONOUS);


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


[23/30] james-project git commit: JAMES-2641 Enable Annotations in JPA Guice

Posted by bt...@apache.org.
JAMES-2641 Enable Annotations in JPA Guice


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

Branch: refs/heads/master
Commit: c08473de6e1b6b8f8c6349439750f143e7e385ff
Parents: dc426a5
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Jan 11 15:54:37 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:05 2019 +0700

----------------------------------------------------------------------
 .../guice/jpa-guice/src/main/resources/META-INF/persistence.xml   | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c08473de/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml b/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml
index fd1711d..2b89b96 100644
--- a/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml
+++ b/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml
@@ -46,6 +46,9 @@
         <class>org.apache.james.mailbox.jpa.quota.model.MaxDomainMessageCount</class>
         <class>org.apache.james.mailbox.jpa.quota.model.JpaCurrentQuota</class>
 
+        <class>org.apache.james.mailbox.jpa.mail.model.JPAMailboxAnnotation</class>
+        <class>org.apache.james.mailbox.jpa.mail.model.JPAMailboxAnnotationId</class>
+
         <properties>
             <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
             <property name="openjpa.jdbc.MappingDefaults" value="ForeignKeyDeleteAction=cascade, JoinForeignKeyDeleteAction=cascade"/>


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


[20/30] james-project git commit: JAMES-2641 Make StoreMailboxManager::batchSizes final

Posted by bt...@apache.org.
JAMES-2641 Make StoreMailboxManager::batchSizes final

To do this we need to let the injection system providing the built value.

Note that we inject a more generic "MailboxManagerConfiguration" class in order to make
future parameters addition easier in the future.

Note that Sprint (& memory) did not configure the batch size. Thus to reduce diff size the constructors directly provide default value as a temporary solution.


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

Branch: refs/heads/master
Commit: 55208516fd5081696c26f0dfeb1073112568f9e5
Parents: ff7f30e
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 11:26:03 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraMailboxManager.java      |  9 ++-
 .../CassandraMailboxManagerProvider.java        |  3 +-
 .../cassandra/CassandraTestSystemFixture.java   |  3 +-
 .../CassandraMailboxManagerAttachmentTest.java  |  5 +-
 .../james/mailbox/jpa/JPAMailboxManager.java    |  5 +-
 .../jpa/openjpa/OpenJPAMailboxManager.java      |  2 +-
 .../inmemory/InMemoryMailboxManager.java        |  5 +-
 .../store/MailboxManagerConfiguration.java      | 48 ++++++++++++++
 .../mailbox/store/StoreMailboxManager.java      | 66 +++++---------------
 .../cassandra/host/CassandraHostSystem.java     |  3 +-
 .../modules/mailbox/CassandraMailboxModule.java |  6 +-
 .../james/modules/ConfigurationProbe.java       | 12 ++--
 12 files changed, 94 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index f963706..e539e57 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -31,6 +31,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
@@ -61,7 +62,8 @@ public class CassandraMailboxManager extends StoreMailboxManager {
     public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
                                    MailboxPathLocker locker, MessageParser messageParser,
                                    MessageId.Factory messageIdFactory, DelegatingMailboxListener delegatingMailboxListener,
-                                   StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager) {
+                                   StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager,
+                                   MailboxManagerConfiguration configuration) {
         super(mapperFactory,
             authenticator,
             authorizator,
@@ -70,7 +72,8 @@ public class CassandraMailboxManager extends StoreMailboxManager {
             messageIdFactory,
             annotationManager,
             delegatingMailboxListener,
-            storeRightManager);
+            storeRightManager,
+            configuration);
         this.locker = locker;
         this.mapperFactory = mapperFactory;
     }
@@ -109,7 +112,7 @@ public class CassandraMailboxManager extends StoreMailboxManager {
             getQuotaRootResolver(),
             getMessageParser(),
             getMessageIdFactory(),
-            getBatchSizes(),
+            configuration.getBatchSizes(),
             getStoreRightManager());
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index 8656080..122b211 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
@@ -69,7 +70,7 @@ public class CassandraMailboxManagerProvider {
             LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
 
         CassandraMailboxManager manager = new CassandraMailboxManager(mapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(),
-            messageParser, messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager);
+            messageParser, messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
 
         CassandraPerUserMaxQuotaManager maxQuotaManager = new CassandraPerUserMaxQuotaManager(new CassandraPerUserMaxQuotaDao(session),
             new CassandraPerDomainMaxQuotaDao(session),

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 916029a..51d937f 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -35,6 +35,7 @@ import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
@@ -65,7 +66,7 @@ public class CassandraTestSystemFixture {
 
         CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, mock(Authenticator.class), mock(Authorizator.class),
             new NoMailboxPathLocker(), new MessageParser(), new CassandraMessageId.Factory(),
-            delegatingMailboxListener, annotationManager, storeRightManager);
+            delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         cassandraMailboxManager.init();
 
         return cassandraMailboxManager;

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index be88f00..ceffb79 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.store.AbstractMailboxManagerAttachmentTest;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
@@ -92,14 +93,14 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
 
         mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory,
             noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), new MessageParser(),
-            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager);
+            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any()))
             .thenThrow(new RuntimeException("Message parser set to fail"));
         parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator,
             new NoMailboxPathLocker(), failingMessageParser, messageIdFactory,
-            delegatingMailboxListener, annotationManager, storeRightManager);
+            delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         parseFailingMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
index d8e9759..8b581ed 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreRightManager;
@@ -58,11 +59,11 @@ public abstract class JPAMailboxManager extends StoreMailboxManager {
                              StoreRightManager storeRightManager) {
         super(mailboxSessionMapperFactory, authenticator, authorizator, locker,
             messageParser, messageIdFactory, annotationManager,
-            delegatingMailboxListener, storeRightManager);
+            delegatingMailboxListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
     }
     
     @Override
-    protected Mailbox doCreateMailbox(MailboxPath path, MailboxSession session) throws MailboxException {
+    protected Mailbox doCreateMailbox(MailboxPath path, MailboxSession session) {
         return  new JPAMailbox(path, randomUidValidity());
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
index 2d637f4..121dc9d 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
@@ -71,7 +71,7 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
             getQuotaRootResolver(),
             getMessageParser(),
             getMessageIdFactory(),
-            getBatchSizes(),
+            configuration.getBatchSizes(),
             getStoreRightManager());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 821e4e3..4326f6a 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -28,6 +28,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
@@ -55,7 +56,7 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
                                   StoreMailboxAnnotationManager annotationManager,
                                   StoreRightManager storeRightManager) {
         super(mailboxSessionMapperFactory, authenticator, authorizator, locker, messageParser, messageIdFactory,
-            annotationManager, delegatingMailboxListener, storeRightManager);
+            annotationManager, delegatingMailboxListener, storeRightManager, MailboxManagerConfiguration.DEFAULT);
     }
 
     @Override
@@ -85,7 +86,7 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
             getQuotaRootResolver(),
             getMessageParser(),
             getMessageIdFactory(),
-            getBatchSizes(),
+            configuration.getBatchSizes(),
             getStoreRightManager());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
new file mode 100644
index 0000000..63c47e7
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
@@ -0,0 +1,48 @@
+/****************************************************************
+ * 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.store;
+
+import javax.inject.Inject;
+
+public class MailboxManagerConfiguration {
+    public static final MailboxManagerConfiguration DEFAULT = new MailboxManagerConfiguration(BatchSizes.builder()
+        .copyBatchSize(MessageBatcher.NO_BATCH_SIZE)
+        .moveBatchSize(MessageBatcher.NO_BATCH_SIZE)
+        .build());
+
+    private final BatchSizes batchSizes;
+
+    @Inject
+    public MailboxManagerConfiguration(BatchSizes batchSizes) {
+        this.batchSizes = batchSizes;
+    }
+
+    public BatchSizes getBatchSizes() {
+        return batchSizes;
+    }
+
+    public MessageBatcher getCopyBatcher() {
+        return new MessageBatcher(batchSizes.getCopyBatchSize());
+    }
+
+    public MessageBatcher getMoveBatcher() {
+        return new MessageBatcher(batchSizes.getMoveBatchSize());
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index e9b062d..04cdc7d 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -119,21 +119,20 @@ public class StoreMailboxManager implements MailboxManager {
     private final MessageParser messageParser;
     private final Factory messageIdFactory;
     private final MailboxSessionIdGenerator idGenerator;
+    protected final MailboxManagerConfiguration configuration;
 
     private Authorizator authorizator;
-    private MessageBatcher copyBatcher;
-    private MessageBatcher moveBatcher;
     private MessageSearchIndex index;
     private QuotaManager quotaManager;
     private QuotaRootResolver quotaRootResolver;
     private QuotaUpdater quotaUpdater;
-    private BatchSizes batchSizes = BatchSizes.defaultValues();
 
     @Inject
     public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
                                MailboxPathLocker locker, MessageParser messageParser,
                                MessageId.Factory messageIdFactory, MailboxAnnotationManager annotationManager,
-                               DelegatingMailboxListener delegatingListener, StoreRightManager storeRightManager) {
+                               DelegatingMailboxListener delegatingListener, StoreRightManager storeRightManager,
+                               MailboxManagerConfiguration configuration) {
         Preconditions.checkNotNull(delegatingListener);
         Preconditions.checkNotNull(mailboxSessionMapperFactory);
 
@@ -147,6 +146,7 @@ public class StoreMailboxManager implements MailboxManager {
         this.delegatingListener = delegatingListener;
         this.storeRightManager = storeRightManager;
         this.idGenerator = new RandomMailboxSessionIdGenerator();
+        this.configuration = configuration;
     }
 
     public Factory getMessageIdFactory() {
@@ -165,30 +165,6 @@ public class StoreMailboxManager implements MailboxManager {
         this.quotaUpdater = quotaUpdater;
     }
 
-    public void setCopyBatchSize(BatchSizes batchSizes) {
-        this.copyBatcher = new MessageBatcher(batchSizes.getCopyBatchSize());
-    }
-
-    public int getCopyBatchSize() {
-        return copyBatcher.getBatchSize();
-    }
-
-    public void setMoveBatchSize(BatchSizes batchSizes) {
-        this.moveBatcher = new MessageBatcher(batchSizes.getMoveBatchSize());
-    }
-
-    public int getMoveBatchSize() {
-        return moveBatcher.getBatchSize();
-    }
-
-    public void setBatchSizes(BatchSizes batchSizes) {
-        this.batchSizes = batchSizes;
-    }
-
-    public BatchSizes getBatchSizes() {
-        return batchSizes;
-    }
-
     /**
      * Init the {@link MailboxManager}
      *
@@ -212,12 +188,6 @@ public class StoreMailboxManager implements MailboxManager {
         if (quotaUpdater != null && quotaUpdater instanceof MailboxListener) {
             this.addGlobalListener((MailboxListener) quotaUpdater, session);
         }
-        if (copyBatcher == null) {
-            copyBatcher = new MessageBatcher(MessageBatcher.NO_BATCH_SIZE);
-        }
-        if (moveBatcher == null) {
-            moveBatcher = new MessageBatcher(MessageBatcher.NO_BATCH_SIZE);
-        }
         if (hasCapability(MailboxCapabilities.Annotation)) {
             this.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, this), session);
         }
@@ -400,7 +370,7 @@ public class StoreMailboxManager implements MailboxManager {
     protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException {
         return new StoreMessageManager(DEFAULT_NO_MESSAGE_CAPABILITIES, getMapperFactory(), getMessageSearchIndex(), getDelegationListener(),
                 getLocker(), mailbox, getQuotaManager(),
-                getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), getBatchSizes(),
+                getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), configuration.getBatchSizes(),
             getStoreRightManager());
     }
 
@@ -621,35 +591,33 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     @Override
-    public List<MessageRange> copyMessages(MessageRange set, MailboxPath from, MailboxPath to, final MailboxSession session) throws MailboxException {
-        final StoreMessageManager toMailbox = (StoreMessageManager) getMailbox(to, session);
-        final StoreMessageManager fromMailbox = (StoreMessageManager) getMailbox(from, session);
+    public List<MessageRange> copyMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException {
+        StoreMessageManager toMailbox = (StoreMessageManager) getMailbox(to, session);
+        StoreMessageManager fromMailbox = (StoreMessageManager) getMailbox(from, session);
 
         return copyMessages(set, session, toMailbox, fromMailbox);
     }
 
     @Override
-    public List<MessageRange> copyMessages(MessageRange set, MailboxId from, MailboxId to, final MailboxSession session) throws MailboxException {
-        final StoreMessageManager toMailbox = (StoreMessageManager) getMailbox(to, session);
-        final StoreMessageManager fromMailbox = (StoreMessageManager) getMailbox(from, session);
+    public List<MessageRange> copyMessages(MessageRange set, MailboxId from, MailboxId to, MailboxSession session) throws MailboxException {
+        StoreMessageManager toMailbox = (StoreMessageManager) getMailbox(to, session);
+        StoreMessageManager fromMailbox = (StoreMessageManager) getMailbox(from, session);
 
         return copyMessages(set, session, toMailbox, fromMailbox);
     }
 
     
-    private List<MessageRange> copyMessages(MessageRange set, final MailboxSession session,
-            final StoreMessageManager toMailbox, final StoreMessageManager fromMailbox) throws MailboxException {
-        return copyBatcher.batchMessages(set,
+    private List<MessageRange> copyMessages(MessageRange set, MailboxSession session, StoreMessageManager toMailbox, StoreMessageManager fromMailbox) throws MailboxException {
+        return configuration.getCopyBatcher().batchMessages(set,
             messageRange -> fromMailbox.copyTo(messageRange, toMailbox, session));
     }
 
     @Override
-    public List<MessageRange> moveMessages(MessageRange set, MailboxPath from, MailboxPath to, final MailboxSession session) throws MailboxException {
-        final StoreMessageManager toMailbox = (StoreMessageManager) getMailbox(to, session);
-        final StoreMessageManager fromMailbox = (StoreMessageManager) getMailbox(from, session);
+    public List<MessageRange> moveMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException {
+        StoreMessageManager toMailbox = (StoreMessageManager) getMailbox(to, session);
+        StoreMessageManager fromMailbox = (StoreMessageManager) getMailbox(from, session);
 
-        return moveBatcher.batchMessages(set,
-            messageRange -> fromMailbox.moveTo(messageRange, toMailbox, session));
+        return configuration.getMoveBatcher().batchMessages(set, messageRange -> fromMailbox.moveTo(messageRange, toMailbox, session));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index b78c89f..7b9c160 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
@@ -89,7 +90,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         mailboxManager = new CassandraMailboxManager(mapperFactory, authenticator, authorizator,
             new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
-            delegatingMailboxListener, annotationManager, storeRightManager);
+            delegatingMailboxListener, annotationManager, storeRightManager, MailboxManagerConfiguration.DEFAULT);
         QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager, mapperFactory);
 
         perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index ebd268f..07aaf33 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -76,7 +76,6 @@ import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
-import org.apache.james.mailbox.store.BatchSizes;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreAttachmentManager;
@@ -193,13 +192,10 @@ public class CassandraMailboxModule extends AbstractModule {
     @Named(Names.MAILBOXMANAGER_NAME)
     @Singleton
     public MailboxManager provideMailboxManager(CassandraMailboxManager cassandraMailboxManager, ListeningCurrentQuotaUpdater quotaUpdater,
-                                                QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, BatchSizes batchSizes) throws MailboxException {
+                                                QuotaManager quotaManager, QuotaRootResolver quotaRootResolver) throws MailboxException {
         cassandraMailboxManager.setQuotaUpdater(quotaUpdater);
         cassandraMailboxManager.setQuotaManager(quotaManager);
         cassandraMailboxManager.setQuotaRootResolver(quotaRootResolver);
-        cassandraMailboxManager.setBatchSizes(batchSizes);
-        cassandraMailboxManager.setMoveBatchSize(batchSizes);
-        cassandraMailboxManager.setCopyBatchSize(batchSizes);
         cassandraMailboxManager.init();
         return cassandraMailboxManager;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/55208516/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
index de934c3..25209bf 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
@@ -21,23 +21,23 @@ package org.apache.james.modules;
 
 import javax.inject.Inject;
 
-import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.utils.GuiceProbe;
 
 public class ConfigurationProbe implements GuiceProbe {
 
-    private final StoreMailboxManager storeMailboxManager;
+    private final MailboxManagerConfiguration configuration;
 
     @Inject
-    private ConfigurationProbe(StoreMailboxManager storeMailboxManager) {
-        this.storeMailboxManager = storeMailboxManager;
+    private ConfigurationProbe(MailboxManagerConfiguration configuration) {
+        this.configuration = configuration;
     }
 
     public int getMoveBatchSize() {
-        return storeMailboxManager.getMoveBatchSize();
+        return configuration.getBatchSizes().getMoveBatchSize();
     }
 
     public int getCopyBatchSize() {
-        return storeMailboxManager.getCopyBatchSize();
+        return configuration.getBatchSizes().getCopyBatchSize();
     }
 }


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


[13/30] james-project git commit: JAMES-2641 Fix QuotaMessageManagerTest

Posted by bt...@apache.org.
JAMES-2641 Fix QuotaMessageManagerTest

The QuotaUpdater was registered 2 times


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

Branch: refs/heads/master
Commit: f7f7f73c6fbf22e596ad961ad02af50613110dbd
Parents: 69487bd
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 17:18:31 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../james/mailbox/manager/QuotaMessageManagerTest.java  | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f7f7f73c/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java
index cea2c5d..f110fcc 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java
@@ -103,14 +103,14 @@ public abstract class QuotaMessageManagerTest<T extends MailboxManager> {
         } catch (OverQuotaException overQuotaException) {
             // Silent these exception as we don't want it to disturb the test
         }
-        QuotaCount maxMessageCount = QuotaCount.count(20L);
+        QuotaCount maxMessageCount = QuotaCount.count(15L);
         maxQuotaManager.setMaxMessage(quotaRootResolver.getQuotaRoot(inbox), maxMessageCount);
         mailboxManager.copyMessages(MessageRange.all(), inbox, subFolder, session);
     }
 
     @Test(expected = OverQuotaException.class)
     public void testCopyOverQuotaSize() throws Exception {
-        QuotaSize maxQuotaSize = QuotaSize.size(20L * MockMail.MAIL_TEXT_PLAIN.length());
+        QuotaSize maxQuotaSize = QuotaSize.size(15L * MockMail.MAIL_TEXT_PLAIN.length());
         maxQuotaManager.setMaxStorage(quotaRootResolver.getQuotaRoot(inbox), maxQuotaSize);
         try {
             resources.fillMailbox();
@@ -122,7 +122,7 @@ public abstract class QuotaMessageManagerTest<T extends MailboxManager> {
 
     @Test
     public void testRetrievalOverMaxMessage() throws Exception {
-        QuotaCount maxMessageCount = QuotaCount.count(8L);
+        QuotaCount maxMessageCount = QuotaCount.count(15L);
         maxQuotaManager.setMaxMessage(quotaRootResolver.getQuotaRoot(inbox), maxMessageCount);
         try {
             resources.fillMailbox();
@@ -136,7 +136,7 @@ public abstract class QuotaMessageManagerTest<T extends MailboxManager> {
 
     @Test
     public void testRetrievalOverMaxStorage() throws Exception {
-        QuotaSize maxQuotaSize = QuotaSize.size(8 * MockMail.MAIL_TEXT_PLAIN.length() + 1);
+        QuotaSize maxQuotaSize = QuotaSize.size(15 * MockMail.MAIL_TEXT_PLAIN.getBytes(StandardCharsets.UTF_8).length + 1);
         maxQuotaManager.setMaxStorage(quotaRootResolver.getQuotaRoot(inbox), maxQuotaSize);
         try {
             resources.fillMailbox();
@@ -180,8 +180,8 @@ public abstract class QuotaMessageManagerTest<T extends MailboxManager> {
         Quota<QuotaCount> messageQuota = resources.getQuotaManager().getMessageQuota(quotaRoot);
         Quota<QuotaSize> storageQuota = resources.getQuotaManager().getStorageQuota(quotaRoot);
         SoftAssertions.assertSoftly(softly -> {
-            softly.assertThat(messageQuota.getUsed()).isEqualTo(QuotaCount.count(32));
-            softly.assertThat(storageQuota.getUsed()).isEqualTo(QuotaSize.size(7904));
+            softly.assertThat(messageQuota.getUsed()).isEqualTo(QuotaCount.count(16));
+            softly.assertThat(storageQuota.getUsed()).isEqualTo(QuotaSize.size(16 * 247));
         });
     }
 }
\ No newline at end of file


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


[14/30] james-project git commit: JAMES-2641 Make StoreMailboxManager::idGenerator final

Posted by bt...@apache.org.
JAMES-2641 Make StoreMailboxManager::idGenerator final


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

Branch: refs/heads/master
Commit: ff7f30e8a6f0f61741cd7c063c7c284bacc35a28
Parents: cac26ab
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 8 10:55:37 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 15 10:10:04 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/store/StoreMailboxManager.java   | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ff7f30e8/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 67bf1e3..e9b062d 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -118,12 +118,12 @@ public class StoreMailboxManager implements MailboxManager {
     private final MailboxPathLocker locker;
     private final MessageParser messageParser;
     private final Factory messageIdFactory;
+    private final MailboxSessionIdGenerator idGenerator;
 
     private Authorizator authorizator;
     private MessageBatcher copyBatcher;
     private MessageBatcher moveBatcher;
     private MessageSearchIndex index;
-    private MailboxSessionIdGenerator idGenerator;
     private QuotaManager quotaManager;
     private QuotaRootResolver quotaRootResolver;
     private QuotaUpdater quotaUpdater;
@@ -146,15 +146,12 @@ public class StoreMailboxManager implements MailboxManager {
         this.messageIdFactory = messageIdFactory;
         this.delegatingListener = delegatingListener;
         this.storeRightManager = storeRightManager;
+        this.idGenerator = new RandomMailboxSessionIdGenerator();
     }
 
     public Factory getMessageIdFactory() {
         return messageIdFactory;
     }
-    
-    public void setMailboxSessionIdGenerator(MailboxSessionIdGenerator idGenerator) {
-        this.idGenerator = idGenerator;
-    }
 
     public void setQuotaManager(QuotaManager quotaManager) {
         this.quotaManager = quotaManager;
@@ -199,9 +196,6 @@ public class StoreMailboxManager implements MailboxManager {
      */
     @PostConstruct
     public void init() throws MailboxException {
-        if (idGenerator == null) {
-            idGenerator = new RandomMailboxSessionIdGenerator();
-        }
         MailboxSession session = createSystemSession("storeMailboxManager");
         if (index == null) {
             index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());


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