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:47 UTC

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

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