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/17 06:50:17 UTC

[01/27] james-project git commit: JAMES-2641 MessageMoves should return impactedMailboxIds

Repository: james-project
Updated Branches:
  refs/heads/master 1f390f4f3 -> 21cde6d28


JAMES-2641 MessageMoves should return impactedMailboxIds

This is needed to get the registration keys to dispatch related events


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

Branch: refs/heads/master
Commit: 8cf25c79fef04218938368d6cedd5798746a7421
Parents: 0947b1b
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 11:18:15 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:40 2019 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/model/MessageMoves.java     | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/8cf25c79/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMoves.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMoves.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMoves.java
index b4ef7ea..a6a9d19 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMoves.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMoves.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Stream;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
@@ -94,6 +95,12 @@ public class MessageMoves {
         return targetMailboxIds;
     }
 
+    public Stream<MailboxId> impactedMailboxIds() {
+        return Stream.concat(
+            addedMailboxIds().stream(),
+            removedMailboxIds().stream());
+    }
+
     @Override
     public final boolean equals(Object o) {
         if (o instanceof MessageMoves) {


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


[21/27] james-project git commit: JAMES-2641 DefaultEventBus should not bind specific listeners

Posted by bt...@apache.org.
JAMES-2641 DefaultEventBus should not bind specific listeners


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

Branch: refs/heads/master
Commit: 897a206ab68a0c7e35c84c76c465d822a70c3a6e
Parents: 7cc4a19
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 15 10:46:38 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:09 2019 +0700

----------------------------------------------------------------------
 .../james/modules/mailbox/DefaultEventModule.java   | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/897a206a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
index 79d2dab..83056d1 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
@@ -30,8 +30,6 @@ import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.events.delivery.EventDelivery;
 import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
-import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
-import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
@@ -44,22 +42,18 @@ import com.google.inject.multibindings.Multibinder;
 public class DefaultEventModule extends AbstractModule {
     @Override
     protected void configure() {
-
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(ListenerRegistrationPerformer.class);
 
-        bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
-        bind(MailboxAnnotationListener.class).in(Scopes.SINGLETON);
-
         bind(MailboxListenerFactory.class).in(Scopes.SINGLETON);
         bind(MailboxListenersLoaderImpl.class).in(Scopes.SINGLETON);
-        bind(MailboxListenersLoader.class).to(MailboxListenersLoaderImpl.class);
-        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class);
-
         bind(InVmEventDelivery.class).in(Scopes.SINGLETON);
-        bind(EventDelivery.class).to(InVmEventDelivery.class);
-
         bind(InVMEventBus.class).in(Scopes.SINGLETON);
+        
+        bind(MailboxListenersLoader.class).to(MailboxListenersLoaderImpl.class);
+        bind(EventDelivery.class).to(InVmEventDelivery.class);
         bind(EventBus.class).to(InVMEventBus.class);
+
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class);
     }
 
     @Singleton


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


[13/27] james-project git commit: JAMES-2641 Drop Delegating mailbox listener and rather use the EventBus

Posted by bt...@apache.org.
JAMES-2641 Drop Delegating mailbox listener and rather use the 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/89f168de
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/89f168de
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/89f168de

Branch: refs/heads/master
Commit: 89f168de14d819e7c877a1907c1215d151e71feb
Parents: c82c138
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 14:16:30 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../james/mailbox/MailboxListenerSupport.java   |  82 ------------
 .../apache/james/mailbox/MailboxManager.java    |   3 -
 .../apache/james/mailbox/events/EventBus.java   |   4 +
 .../CacheInvalidatingMailboxListener.java       |   9 +-
 mailbox/cassandra/pom.xml                       |   5 +
 .../cassandra/CassandraMailboxManager.java      |   8 +-
 .../cassandra/CassandraMessageManager.java      |  14 +--
 .../CassandraCombinationManagerTest.java        |   9 +-
 .../CassandraCombinationManagerTestSystem.java  |   8 +-
 .../CassandraMailboxManagerProvider.java        |  22 ++--
 ...CassandraMessageIdManagerSideEffectTest.java |   6 +-
 .../CassandraMessageIdManagerStorageTest.java   |   9 +-
 .../CassandraMessageIdManagerTestSystem.java    |  14 +--
 .../cassandra/CassandraTestSystemFixture.java   |  20 +--
 .../CassandraMailboxManagerAttachmentTest.java  |  12 +-
 mailbox/elasticsearch/pom.xml                   |   5 +
 .../ElasticSearchIntegrationTest.java           |  15 +--
 .../james/mailbox/events/InVMEventBus.java      |   9 +-
 mailbox/jpa/pom.xml                             |   5 +
 .../james/mailbox/jpa/JPAMailboxManager.java    |   6 +-
 .../james/mailbox/jpa/JPAMessageManager.java    |   6 +-
 .../jpa/openjpa/OpenJPAMailboxManager.java      |   8 +-
 .../jpa/openjpa/OpenJPAMessageManager.java      |   6 +-
 .../resources/META-INF/spring/mailbox-jpa.xml   |   2 +-
 .../mailbox/jpa/JpaMailboxManagerProvider.java  |  11 +-
 mailbox/lucene/pom.xml                          |   5 +
 .../search/LuceneMessageSearchIndexTest.java    |  15 +--
 mailbox/maildir/pom.xml                         |   5 +
 .../META-INF/spring/mailbox-maildir.xml         |   2 +-
 .../maildir/MaildirMailboxManagerProvider.java  |  11 +-
 .../inmemory/InMemoryMailboxManager.java        |   8 +-
 .../inmemory/InMemoryMessageManager.java        |   6 +-
 .../META-INF/spring/mailbox-memory.xml          |   2 +-
 .../InMemoryMailboxManagerAttachmentTest.java   |  12 +-
 .../manager/InMemoryIntegrationResources.java   |  36 +++---
 .../InMemoryMessageIdManagerSideEffectTest.java |  10 +-
 mailbox/plugin/quota-mailing/pom.xml            |   5 +
 .../QuotaThresholdListenersTestSystem.java      |  26 ++--
 .../search/SimpleMessageSearchIndexTest.java    |   4 +-
 mailbox/spring/pom.xml                          |   4 +
 .../mailbox/spring/MailboxInitializer.java      |  20 ++-
 .../resources/META-INF/spring/event-system.xml  |   6 +-
 .../main/resources/META-INF/spring/quota.xml    |   2 +-
 .../META-INF/spring/spring-mailbox.xml          |   4 +-
 .../mailbox/store/StoreMailboxManager.java      |  76 ++++-------
 .../mailbox/store/StoreMessageIdManager.java    |  36 +++---
 .../mailbox/store/StoreMessageManager.java      |  52 ++++----
 .../james/mailbox/store/StoreRightManager.java  |  19 +--
 .../event/DefaultDelegatingMailboxListener.java | 126 -------------------
 .../store/event/DelegatingMailboxListener.java  |  27 ----
 .../store/event/MailboxAnnotationListener.java  |  14 ++-
 .../quota/ListeningCurrentQuotaUpdater.java     |  24 ++--
 .../AbstractMessageIdManagerSideEffectTest.java |  49 ++++----
 .../store/MessageIdManagerTestSystem.java       |   6 +-
 .../mailbox/store/StoreMailboxManagerTest.java  |  10 +-
 .../mailbox/store/StoreRightManagerTest.java    |   6 +-
 .../quota/ListeningCurrentQuotaUpdaterTest.java |  11 +-
 mpt/impl/imap-mailbox/cassandra/pom.xml         |   5 +
 .../cassandra/host/CassandraHostSystem.java     |  15 ++-
 mpt/impl/imap-mailbox/elasticsearch/pom.xml     |   5 +
 .../host/ElasticSearchHostSystem.java           |  13 +-
 mpt/impl/imap-mailbox/jpa/pom.xml               |   5 +
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java |  17 +--
 mpt/impl/imap-mailbox/lucenesearch/pom.xml      |   4 +
 .../host/LuceneSearchHostSystem.java            |  15 +--
 mpt/impl/imap-mailbox/maildir/pom.xml           |   5 +
 .../maildir/host/MaildirHostSystem.java         |  16 ++-
 .../app/spring/JamesSpringContextTest.java      |  14 +--
 .../modules/mailbox/CassandraMailboxModule.java |   2 +-
 .../mailbox/ElasticSearchMailboxModule.java     |   2 +-
 .../ElasticSearchQuotaSearcherModule.java       |   2 +-
 .../james/modules/mailbox/JPAMailboxModule.java |   2 +-
 .../james/modules/mailbox/JpaQuotaModule.java   |   2 +-
 .../mailbox/LuceneSearchMailboxModule.java      |   2 +-
 server/container/guice/mailbox/pom.xml          |   4 +
 .../modules/mailbox/DefaultEventModule.java     |  11 +-
 .../modules/mailbox/MemoryMailboxModule.java    |   2 +-
 .../modules/mailbox/MemoryQuotaModule.java      |   2 +-
 .../java/org/apache/james/jmap/JMAPModule.java  |   2 +-
 79 files changed, 478 insertions(+), 606 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
deleted file mode 100644
index f76b70f..0000000
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
+++ /dev/null
@@ -1,82 +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.mailbox;
-
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxPath;
-
-/**
- * Implementations of this interface supports {@link MailboxListener}. Its needed that the events get handled
- * in the submitted order
- * 
- *
- */
-public interface MailboxListenerSupport {
-
-    /**
-     * <p>
-     * Implementations of Mailbox may interpret the fact that someone is
-     * listening and do some caching and even postpone persistence until
-     * everyone has removed itself.
-     * </p>
-     * 
-     * @param mailboxId
-     *            not null
-     * @param listener
-     *            not null
-     * @param session
-     *            not null
-     * @throws MailboxException
-     */
-    void addListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException;
-
-    /**
-     * Remove the {@link MailboxListener}
-     * 
-     * @param mailboxId
-     * @param listner
-     * @param session
-     * @throws MailboxException
-     */
-    void removeListener(MailboxId mailboxId, MailboxListener listner, MailboxSession session) throws MailboxException;
-    
-    /**
-     * Add a {@link MailboxListener} which get fired for ever
-     * {@link MailboxPath}
-     * 
-     * @param listener
-     * @param session
-     * @throws MailboxException
-     */
-    void addGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException;
-    
-    
-    /**
-     * Remove the {@link MailboxListener}
-     * 
-     * @param listner
-     * @param session
-     * @throws MailboxException
-     */
-    void removeGlobalListener(MailboxListener listner, MailboxSession session) throws MailboxException;
-
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index be6c107..3b5f36c 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -23,7 +23,6 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.Optional;
 
-import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.events.Registration;
 import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
@@ -349,7 +348,5 @@ public interface MailboxManager extends RequestAware, RightManager, MailboxAnnot
 
     Registration register(MailboxListener listener, MailboxId registrationKey);
 
-    Registration register(MailboxListener listener, Group group);
-
     Registration register(MailboxListener.GroupMailboxListener groupMailboxListener);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
index 02ea68f..70275cc 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
@@ -38,4 +38,8 @@ public interface EventBus {
     default Mono<Void> dispatch(Event event, RegistrationKey key) {
         return dispatch(event, ImmutableSet.of(key));
     }
+
+    default Registration register(MailboxListener.GroupMailboxListener groupMailboxListener) {
+        return register(groupMailboxListener, groupMailboxListener.getGroup());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
index 02b436b..f693c7a 100644
--- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
+++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
@@ -2,7 +2,7 @@ package org.apache.james.mailbox.caching;
 
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxListenerSupport;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.slf4j.Logger;
@@ -35,11 +35,10 @@ public class CacheInvalidatingMailboxListener implements MailboxListener.GroupMa
      * Used to register the CacheInvalidatingMailboxListener as a global listener
      * into the main MailboxListener
      *
-     * @param listener
-     * @throws MailboxException
+     * @param eventBus
      */
-    public void register(MailboxListenerSupport listener) throws MailboxException {
-        listener.addGlobalListener(this, null);
+    public void register(EventBus eventBus) {
+        eventBus.register(this);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/pom.xml b/mailbox/cassandra/pom.xml
index bca6d37..f902976 100644
--- a/mailbox/cassandra/pom.xml
+++ b/mailbox/cassandra/pom.xml
@@ -54,6 +54,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-store</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 8b5623c..44a00ad 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
@@ -26,6 +26,7 @@ import javax.inject.Inject;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
@@ -35,7 +36,6 @@ import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 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.mail.model.impl.SimpleMailbox;
@@ -61,7 +61,7 @@ public class CassandraMailboxManager extends StoreMailboxManager {
     @Inject
     public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, SessionProvider sessionProvider,
                                    MailboxPathLocker locker, MessageParser messageParser,
-                                   MessageId.Factory messageIdFactory, DelegatingMailboxListener delegatingMailboxListener,
+                                   MessageId.Factory messageIdFactory, EventBus eventBus,
                                    StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager,
                                    QuotaComponents quotaComponents, MessageSearchIndex index,
                                    MailboxManagerConfiguration configuration) {
@@ -71,7 +71,7 @@ public class CassandraMailboxManager extends StoreMailboxManager {
             messageParser,
             messageIdFactory,
             annotationManager,
-            delegatingMailboxListener,
+            eventBus,
             storeRightManager,
             quotaComponents,
             index,
@@ -101,7 +101,7 @@ public class CassandraMailboxManager extends StoreMailboxManager {
     protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSession session) {
         return new CassandraMessageManager(mapperFactory,
             getMessageSearchIndex(),
-            getDelegationListener(),
+            getEventBus(),
             this.locker,
             mailboxRow,
             getQuotaComponents().getQuotaManager(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
index 11b46c9..918dd1d 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
@@ -25,6 +25,7 @@ import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MessageAttachment;
 import org.apache.james.mailbox.model.MessageId;
@@ -33,7 +34,6 @@ import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.BatchSizes;
 import org.apache.james.mailbox.store.StoreMessageManager;
 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.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -49,12 +49,12 @@ public class CassandraMessageManager extends StoreMessageManager {
 
     private CassandraMailboxSessionMapperFactory mapperFactory;
 
-    public CassandraMessageManager(CassandraMailboxSessionMapperFactory mapperFactory, MessageSearchIndex index,
-                                   DelegatingMailboxListener delegatingMailboxListener, MailboxPathLocker locker, Mailbox mailbox, QuotaManager quotaManager,
-                                   QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory,
-                                   BatchSizes batchSizes,
-                                   StoreRightManager storeRightManager) {
-        super(CassandraMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, delegatingMailboxListener, locker, mailbox,
+    CassandraMessageManager(CassandraMailboxSessionMapperFactory mapperFactory, MessageSearchIndex index,
+                            EventBus eventBus, MailboxPathLocker locker, Mailbox mailbox, QuotaManager quotaManager,
+                            QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory,
+                            BatchSizes batchSizes,
+                            StoreRightManager storeRightManager) {
+        super(CassandraMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, eventBus, locker, mailbox,
             quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, storeRightManager);
 
         this.mapperFactory = mapperFactory;

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
index 65cc240..ad58afe 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
@@ -22,10 +22,12 @@ package org.apache.james.mailbox.cassandra;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.store.AbstractCombinationManagerTest;
 import org.apache.james.mailbox.store.CombinationManagerTestSystem;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.quota.NoQuotaManager;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -60,8 +62,9 @@ public class CassandraCombinationManagerTest extends AbstractCombinationManagerT
     }
     
     @Override
-    public CombinationManagerTestSystem createTestingData() throws Exception {
-        return CassandraCombinationManagerTestSystem.createTestingData(cassandra, new NoQuotaManager(), new DefaultDelegatingMailboxListener());
+    public CombinationManagerTestSystem createTestingData() {
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        return CassandraCombinationManagerTestSystem.createTestingData(cassandra, new NoQuotaManager(), eventBus);
     }
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
index 9e1430c..4878a9b 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
@@ -24,11 +24,11 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.store.CombinationManagerTestSystem;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 
 public class CassandraCombinationManagerTestSystem extends CombinationManagerTestSystem {
@@ -36,10 +36,10 @@ public class CassandraCombinationManagerTestSystem extends CombinationManagerTes
     private final CassandraMailboxSessionMapperFactory mapperFactory;
     private final CassandraMailboxManager cassandraMailboxManager;
 
-    public static CombinationManagerTestSystem createTestingData(CassandraCluster cassandra, QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) throws Exception {
+    public static CombinationManagerTestSystem createTestingData(CassandraCluster cassandra, QuotaManager quotaManager, EventBus eventBus) {
         CassandraMailboxSessionMapperFactory mapperFactory = CassandraTestSystemFixture.createMapperFactory(cassandra);
 
-        return new CassandraCombinationManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, delegatingMailboxListener),
+        return new CassandraCombinationManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, eventBus),
             mapperFactory,
             CassandraTestSystemFixture.createMailboxManager(mapperFactory));
     }
@@ -57,7 +57,7 @@ public class CassandraCombinationManagerTestSystem extends CombinationManagerTes
     }
 
     @Override
-    public MessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException {
+    public MessageManager createMessageManager(Mailbox mailbox, MailboxSession session) {
         return cassandraMailboxManager.createMessageManager(mailbox, session);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 1c7f467..5849e2f 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
@@ -30,7 +30,8 @@ import org.apache.james.mailbox.cassandra.quota.CassandraGlobalMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerDomainMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
-import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
@@ -39,7 +40,6 @@ 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;
 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;
@@ -49,6 +49,7 @@ 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.api.NoopMetricFactory;
 
 import com.datastax.driver.core.Session;
 
@@ -67,8 +68,8 @@ public class CassandraMailboxManagerProvider {
         MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
         GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
         MessageParser messageParser = new MessageParser();
-        DefaultDelegatingMailboxListener delegatingMailboxListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, delegatingMailboxListener);
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, eventBus);
 
         Authenticator noAuthenticator = null;
         Authorizator noAuthorizator = null;
@@ -82,20 +83,17 @@ public class CassandraMailboxManagerProvider {
         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);
+        ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaUpdater, quotaRootResolver, eventBus, 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,
+            messageParser, messageIdFactory, eventBus, annotationManager, storeRightManager,
             quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
-        try {
-            delegatingMailboxListener.addGlobalListener(quotaUpdater, sessionProvider.createSystemSession("admin"));
-            delegatingMailboxListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
-        } catch (MailboxException e) {
-            throw new RuntimeException(e);
-        }
+
+        eventBus.register(quotaUpdater);
+        eventBus.register(new MailboxAnnotationListener(mapperFactory, sessionProvider));
 
         return manager;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
index 72ce1b4..3b70449 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
@@ -22,10 +22,10 @@ package org.apache.james.mailbox.cassandra;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.store.AbstractMessageIdManagerSideEffectTest;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -60,7 +60,7 @@ public class CassandraMessageIdManagerSideEffectTest extends AbstractMessageIdMa
     }
 
     @Override
-    protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) throws Exception {
-        return CassandraMessageIdManagerTestSystem.createTestingData(cassandra, quotaManager, delegatingMailboxListener);
+    protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, EventBus eventBus) {
+        return CassandraMessageIdManagerTestSystem.createTestingData(cassandra, quotaManager, eventBus);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java
index 8133113..0902dce 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java
@@ -22,10 +22,12 @@ package org.apache.james.mailbox.cassandra;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.store.AbstractMessageIdManagerStorageTest;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.quota.NoQuotaManager;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -60,7 +62,8 @@ public class CassandraMessageIdManagerStorageTest extends AbstractMessageIdManag
     }
     
     @Override
-    protected MessageIdManagerTestSystem createTestingData() throws Exception {
-        return CassandraMessageIdManagerTestSystem.createTestingData(cassandra, new NoQuotaManager(), new DefaultDelegatingMailboxListener());
+    protected MessageIdManagerTestSystem createTestingData() {
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        return CassandraMessageIdManagerTestSystem.createTestingData(cassandra, new NoQuotaManager(), eventBus);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 d09d540..3cc5809 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
@@ -21,34 +21,34 @@ package org.apache.james.mailbox.cassandra;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 
-public class CassandraMessageIdManagerTestSystem {
+class CassandraMessageIdManagerTestSystem {
 
-    public static MessageIdManagerTestSystem createTestingData(CassandraCluster cassandra, QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) throws Exception {
+    static MessageIdManagerTestSystem createTestingData(CassandraCluster cassandra, QuotaManager quotaManager, EventBus eventBus) {
         CassandraMailboxSessionMapperFactory mapperFactory = CassandraTestSystemFixture.createMapperFactory(cassandra);
 
-        return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, delegatingMailboxListener),
+        return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, eventBus),
             new CassandraMessageId.Factory(),
             mapperFactory,
             CassandraTestSystemFixture.createMailboxManager(mapperFactory)) {
         };
     }
 
-    public static MessageIdManagerTestSystem createTestingDataWithQuota(CassandraCluster cassandra, QuotaManager quotaManager, CurrentQuotaManager currentQuotaManager) throws Exception {
+    static MessageIdManagerTestSystem createTestingDataWithQuota(CassandraCluster cassandra, QuotaManager quotaManager, CurrentQuotaManager currentQuotaManager) {
         CassandraMailboxSessionMapperFactory mapperFactory = CassandraTestSystemFixture.createMapperFactory(cassandra);
 
         CassandraMailboxManager mailboxManager = CassandraTestSystemFixture.createMailboxManager(mapperFactory);
         ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(
             (StoreCurrentQuotaManager) currentQuotaManager,
-            mailboxManager.getQuotaComponents().getQuotaRootResolver(), mailboxManager.getDelegationListener(), quotaManager);
+            mailboxManager.getQuotaComponents().getQuotaRootResolver(), mailboxManager.getEventBus(), quotaManager);
         mailboxManager.register(listeningCurrentQuotaUpdater);
-        return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getDelegationListener()),
+        return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getEventBus()),
             new CassandraMessageId.Factory(),
             mapperFactory,
             mailboxManager);

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 f8e45bc..b1bef0a 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
@@ -30,6 +30,9 @@ import org.apache.james.mailbox.cassandra.quota.CassandraGlobalMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerDomainMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
@@ -41,8 +44,6 @@ 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.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;
@@ -50,6 +51,7 @@ 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;
+import org.apache.james.metrics.api.NoopMetricFactory;
 
 class CassandraTestSystemFixture {
 
@@ -62,9 +64,9 @@ class CassandraTestSystemFixture {
             messageIdFactory);
     }
 
-    static CassandraMailboxManager createMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory) throws Exception {
-        DefaultDelegatingMailboxListener delegatingMailboxListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
+    static CassandraMailboxManager createMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory) {
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
 
         SessionProvider sessionProvider = new SessionProvider(mock(Authenticator.class), mock(Authorizator.class));
@@ -73,19 +75,19 @@ class CassandraTestSystemFixture {
         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, index, MailboxManagerConfiguration.DEFAULT);
+            eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
 
-        delegatingMailboxListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
+        eventBus.register(new MailboxAnnotationListener(mapperFactory, sessionProvider));
 
         return cassandraMailboxManager;
     }
 
-    static StoreMessageIdManager createMessageIdManager(CassandraMailboxSessionMapperFactory mapperFactory, QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) throws Exception {
+    static StoreMessageIdManager createMessageIdManager(CassandraMailboxSessionMapperFactory mapperFactory, QuotaManager quotaManager, EventBus eventBus) {
         CassandraMailboxManager mailboxManager = createMailboxManager(mapperFactory);
         return new StoreMessageIdManager(
             mailboxManager,
             mapperFactory,
-            delegatingMailboxListener,
+            eventBus,
             new CassandraMessageId.Factory(),
             quotaManager,
             new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mapperFactory));

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 9402a41..d0ff808 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
@@ -31,6 +31,8 @@ import org.apache.james.mailbox.cassandra.CassandraMailboxManager;
 import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
 import org.apache.james.mailbox.cassandra.TestCassandraMailboxSessionMapperFactory;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.store.AbstractMailboxManagerAttachmentTest;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
@@ -40,13 +42,13 @@ 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;
 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.apache.james.metrics.api.NoopMetricFactory;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -92,8 +94,8 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
             messageIdFactory);
         Authenticator noAuthenticator = null;
         Authorizator noAuthorizator = null;
-        DefaultDelegatingMailboxListener delegatingMailboxListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
 
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
@@ -101,14 +103,14 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
         MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
 
         mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), new MessageParser(),
-            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager, quotaComponents,
+            messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents,
             index, MailboxManagerConfiguration.DEFAULT);
         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);
+            eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/elasticsearch/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/pom.xml b/mailbox/elasticsearch/pom.xml
index 8a09696..2c6a030 100644
--- a/mailbox/elasticsearch/pom.xml
+++ b/mailbox/elasticsearch/pom.xml
@@ -54,6 +54,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-memory</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 b68f310..4556681 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
@@ -40,6 +40,8 @@ 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
@@ -55,7 +57,6 @@ 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;
@@ -107,7 +108,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
     }
 
     @Override
-    protected void initializeMailboxManager() throws Exception {
+    protected void initializeMailboxManager() {
         Client client = MailboxIndexCreationUtil.prepareDefaultClient(
             new TestingClientProvider(embeddedElasticSearch.getNode()).get(),
                 ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
@@ -116,9 +117,9 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
         fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
         fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
         InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(),
-            new SimpleGroupMembershipResolver(), delegatingListener);
+            new SimpleGroupMembershipResolver(), eventBus);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
         InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
 
@@ -146,7 +147,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
             new JVMMailboxPathLocker(),
             new MessageParser(),
             messageIdFactory,
-            delegatingListener,
+            eventBus,
             annotationManager,
             storeRightManager,
             quotaComponents,
@@ -155,12 +156,12 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
         messageIdManager = new StoreMessageIdManager(
             storeMailboxManager,
             storeMailboxManager.getMapperFactory(),
-            storeMailboxManager.getDelegationListener(),
+            eventBus,
             storeMailboxManager.getMessageIdFactory(),
             quotaComponents.getQuotaManager(),
             quotaComponents.getQuotaRootResolver());
 
-        delegatingListener.addGlobalListener(elasticSearchListeningMessageSearchIndex, MailboxSessionUtil.create("admin"));
+        eventBus.register(elasticSearchListeningMessageSearchIndex);
         this.messageSearchIndex = elasticSearchListeningMessageSearchIndex;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 aad1be0..8069739 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
@@ -22,6 +22,8 @@ package org.apache.james.mailbox.events;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Inject;
+
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.events.delivery.EventDelivery;
@@ -39,7 +41,8 @@ public class InVMEventBus implements EventBus {
     private final ConcurrentHashMap<Group, MailboxListener> groups;
     private final EventDelivery eventDelivery;
 
-    InVMEventBus(EventDelivery eventDelivery) {
+    @Inject
+    public InVMEventBus(EventDelivery eventDelivery) {
         this.eventDelivery = eventDelivery;
         this.registrations = Multimaps.synchronizedSetMultimap(HashMultimap.create());
         this.groups = new ConcurrentHashMap<>();
@@ -69,6 +72,10 @@ public class InVMEventBus implements EventBus {
         return Mono.empty();
     }
 
+    public Set<Group> registeredGroups() {
+        return groups.keySet();
+    }
+
     private Set<MailboxListener> registeredListeners(Set<RegistrationKey> keys) {
         return ImmutableSet.<MailboxListener>builder()
             .addAll(groups.values())

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/jpa/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/jpa/pom.xml b/mailbox/jpa/pom.xml
index 35a8050..9e8a7bc 100644
--- a/mailbox/jpa/pom.xml
+++ b/mailbox/jpa/pom.xml
@@ -54,6 +54,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-store</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 eef45a1..86ae50f 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
@@ -22,6 +22,7 @@ import java.util.EnumSet;
 
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.mail.JPAMailboxMapper;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
@@ -32,7 +33,6 @@ 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.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;
@@ -54,14 +54,14 @@ public abstract class JPAMailboxManager extends StoreMailboxManager {
                              MailboxPathLocker locker,
                              MessageParser messageParser,
                              MessageId.Factory messageIdFactory,
-                             DelegatingMailboxListener delegatingMailboxListener,
+                             EventBus eventBus,
                              StoreMailboxAnnotationManager annotationManager,
                              StoreRightManager storeRightManager,
                              QuotaComponents quotaComponents,
                              MessageSearchIndex index) {
         super(mailboxSessionMapperFactory, sessionProvider, locker,
             messageParser, messageIdFactory, annotationManager,
-            delegatingMailboxListener, storeRightManager, quotaComponents,
+            eventBus, storeRightManager, quotaComponents,
             index, MailboxManagerConfiguration.DEFAULT);
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
index e718f95..3af130f 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
@@ -26,6 +26,7 @@ import javax.mail.internet.SharedInputStream;
 
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
 import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage;
@@ -37,7 +38,6 @@ import org.apache.james.mailbox.store.BatchSizes;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.StoreMessageManager;
 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.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -51,7 +51,7 @@ public class JPAMessageManager extends StoreMessageManager {
     
     public JPAMessageManager(MailboxSessionMapperFactory mapperFactory,
                              MessageSearchIndex index,
-                             DelegatingMailboxListener delegatingMailboxListener,
+                             EventBus eventBus,
                              MailboxPathLocker locker,
                              Mailbox mailbox,
                              QuotaManager quotaManager,
@@ -61,7 +61,7 @@ public class JPAMessageManager extends StoreMessageManager {
                              BatchSizes batchSizes,
                              StoreRightManager storeRightManager) {
 
-        super(JPAMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, delegatingMailboxListener, locker, mailbox,
+        super(JPAMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, eventBus, locker, mailbox,
             quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, storeRightManager);
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 4aeb300..e3bb2aa 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
@@ -22,6 +22,7 @@ package org.apache.james.mailbox.jpa.openjpa;
 import javax.inject.Inject;
 
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.jpa.JPAMailboxManager;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMessageManager.AdvancedFeature;
@@ -31,7 +32,6 @@ 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;
-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;
@@ -48,13 +48,13 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
                                  SessionProvider sessionProvider,
                                  MessageParser messageParser,
                                  MessageId.Factory messageIdFactory,
-                                 DelegatingMailboxListener delegatingMailboxListener,
+                                 EventBus eventBus,
                                  StoreMailboxAnnotationManager annotationManager,
                                  StoreRightManager storeRightManager,
                                  QuotaComponents quotaComponents,
                                  MessageSearchIndex index) {
         super(mapperFactory, sessionProvider, new JVMMailboxPathLocker(), messageParser,
-            messageIdFactory, delegatingMailboxListener, annotationManager, storeRightManager,
+            messageIdFactory, eventBus, annotationManager, storeRightManager,
             quotaComponents, index);
     }
 
@@ -66,7 +66,7 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
     protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSession session) {
         return new OpenJPAMessageManager(getMapperFactory(),
             getMessageSearchIndex(),
-            getDelegationListener(),
+            getEventBus(),
             getLocker(),
             mailboxRow,
             getAdvancedFeature(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
index 2e96d5c..a9ba5f3 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
@@ -26,6 +26,7 @@ import javax.mail.Flags;
 import javax.mail.internet.SharedInputStream;
 
 import org.apache.james.mailbox.MailboxPathLocker;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.JPAMessageManager;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
@@ -38,7 +39,6 @@ import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.BatchSizes;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 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.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -59,13 +59,13 @@ public class OpenJPAMessageManager extends JPAMessageManager {
     }
 
     public OpenJPAMessageManager(MailboxSessionMapperFactory mapperFactory,
-                                 MessageSearchIndex index, DelegatingMailboxListener delegatingMailboxListener,
+                                 MessageSearchIndex index, EventBus eventBus,
                                  MailboxPathLocker locker, Mailbox mailbox, AdvancedFeature f,
                                  QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser,
                                  MessageId.Factory messageIdFactory, BatchSizes batchSizes,
                                  StoreRightManager storeRightManager) {
 
-        super(mapperFactory,  index, delegatingMailboxListener, locker, mailbox, quotaManager, quotaRootResolver,
+        super(mapperFactory,  index, eventBus, locker, mailbox, quotaManager, quotaRootResolver,
             messageParser, messageIdFactory, batchSizes, storeRightManager);
         this.feature = f;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 9e60f9d..0c2876e 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
@@ -37,7 +37,7 @@
         <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="4" ref="event-bus" />
         <constructor-arg index="5" ref="storeMailboxAnnotationManager" />
         <constructor-arg index="6" ref="storeRightManager" />
         <constructor-arg index="7" ref="quotaComponents" />

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 27f0662..7e216ab 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,6 +26,8 @@ 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
 import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
@@ -35,13 +37,13 @@ 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;
 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.api.NoopMetricFactory;
 
 public class JpaMailboxManagerProvider {
 
@@ -59,8 +61,9 @@ public class JpaMailboxManagerProvider {
 
         Authenticator noAuthenticator = null;
         Authorizator noAuthorizator = null;
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mf, aclResolver, groupMembershipResolver, delegatingListener);
+
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mf, aclResolver, groupMembershipResolver, eventBus);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager,
             LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
@@ -69,7 +72,7 @@ public class JpaMailboxManagerProvider {
 
         return new OpenJPAMailboxManager(mf, sessionProvider,
             messageParser, new DefaultMessageId.Factory(),
-            delegatingListener, annotationManager,
+            eventBus, annotationManager,
             storeRightManager, quotaComponents, index);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/lucene/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/lucene/pom.xml b/mailbox/lucene/pom.xml
index becd7c2..5e802ee 100644
--- a/mailbox/lucene/pom.xml
+++ b/mailbox/lucene/pom.xml
@@ -44,6 +44,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-memory</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 28f80da..9dffa1d 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
@@ -19,9 +19,10 @@
 
 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
@@ -35,10 +36,10 @@ 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.metrics.api.NoopMetricFactory;
 import org.apache.lucene.store.RAMDirectory;
 import org.junit.Ignore;
 
@@ -54,8 +55,8 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
         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);
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
 
         SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, FakeAuthorizator.defaultReject());
@@ -72,7 +73,7 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
             new JVMMailboxPathLocker(),
             new MessageParser(),
             messageIdFactory,
-            delegatingListener,
+            eventBus,
             annotationManager,
             storeRightManager,
             quotaComponents,
@@ -81,12 +82,12 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
         messageIdManager = new StoreMessageIdManager(
             storeMailboxManager,
             storeMailboxManager.getMapperFactory(),
-            storeMailboxManager.getDelegationListener(),
+            eventBus,
             storeMailboxManager.getMessageIdFactory(),
             quotaComponents.getQuotaManager(),
             quotaComponents.getQuotaRootResolver());
 
-        delegatingListener.addGlobalListener(luceneMessageSearchIndex, MailboxSessionUtil.create("admin"));
+        eventBus.register(luceneMessageSearchIndex);
         this.messageSearchIndex = luceneMessageSearchIndex;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/maildir/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/maildir/pom.xml b/mailbox/maildir/pom.xml
index b2a6b61..84d3bba 100644
--- a/mailbox/maildir/pom.xml
+++ b/mailbox/maildir/pom.xml
@@ -44,6 +44,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-store</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 6980f6d..13a40a0 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
@@ -41,7 +41,7 @@
         <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="6" ref="event-bus" />
         <constructor-arg index="7" ref="storeRightManager" />
         <constructor-arg index="8" ref="quotaComponents" />
         <constructor-arg index="9" ref="indexer" />

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 365967f..5eb0490 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
@@ -26,6 +26,8 @@ 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
@@ -35,13 +37,13 @@ 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.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.api.NoopMetricFactory;
 import org.junit.rules.TemporaryFolder;
 
 public class MaildirMailboxManagerProvider {
@@ -56,8 +58,9 @@ public class MaildirMailboxManagerProvider {
         MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
         GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
         MessageParser messageParser = new MessageParser();
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mf, aclResolver, groupMembershipResolver, delegatingListener);
+
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mf, aclResolver, groupMembershipResolver, eventBus);
 
         Authenticator noAuthenticator = null;
         Authorizator noAuthorizator = null;
@@ -68,7 +71,7 @@ public class MaildirMailboxManagerProvider {
         MessageSearchIndex index = new SimpleMessageSearchIndex(mf, mf, new DefaultTextExtractor());
 
         StoreMailboxManager manager = new StoreMailboxManager(mf, sessionProvider, new JVMMailboxPathLocker(),
-            messageParser, new DefaultMessageId.Factory(), annotationManager, delegatingListener, storeRightManager,
+            messageParser, new DefaultMessageId.Factory(), annotationManager, eventBus, storeRightManager,
             quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
 
         return manager;

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 d83e75e..f6f6387 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
@@ -25,6 +25,7 @@ import javax.inject.Inject;
 
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -33,7 +34,6 @@ import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 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;
@@ -52,13 +52,13 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
     @Inject
     public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider,
                                   MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory,
-                                  DelegatingMailboxListener delegatingMailboxListener,
+                                  EventBus eventBus,
                                   StoreMailboxAnnotationManager annotationManager,
                                   StoreRightManager storeRightManager,
                                   QuotaComponents quotaComponents,
                                   MessageSearchIndex searchIndex) {
         super(mailboxSessionMapperFactory, sessionProvider, locker, messageParser, messageIdFactory,
-            annotationManager, delegatingMailboxListener, storeRightManager, quotaComponents, searchIndex, MailboxManagerConfiguration.DEFAULT);
+            annotationManager, eventBus, storeRightManager, quotaComponents, searchIndex, MailboxManagerConfiguration.DEFAULT);
     }
 
     @Override
@@ -75,7 +75,7 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
     protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) {
         return new InMemoryMessageManager(getMapperFactory(),
             getMessageSearchIndex(),
-            getDelegationListener(),
+            getEventBus(),
             getLocker(),
             mailbox,
             getQuotaComponents().getQuotaManager(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
index e2ef5cf..c331b6a 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
@@ -6,6 +6,7 @@ import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MessageAttachment;
 import org.apache.james.mailbox.model.MessageId;
@@ -15,7 +16,6 @@ import org.apache.james.mailbox.store.BatchSizes;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.StoreMessageManager;
 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.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -29,7 +29,7 @@ public class InMemoryMessageManager extends StoreMessageManager {
 
     public InMemoryMessageManager(MailboxSessionMapperFactory mapperFactory,
                                   MessageSearchIndex index,
-                                  DelegatingMailboxListener delegatingMailboxListener,
+                                  EventBus eventBus,
                                   MailboxPathLocker locker,
                                   Mailbox mailbox,
                                   QuotaManager quotaManager,
@@ -39,7 +39,7 @@ public class InMemoryMessageManager extends StoreMessageManager {
                                   BatchSizes batchSizes,
                                   StoreRightManager storeRightManager) {
 
-        super(InMemoryMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, delegatingMailboxListener, locker, mailbox, quotaManager, quotaRootResolver,
+        super(InMemoryMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, eventBus, locker, mailbox, quotaManager, quotaRootResolver,
             messageParser, messageIdFactory, batchSizes, storeRightManager);
         this.mapperFactory = (InMemoryMailboxSessionMapperFactory) mapperFactory;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 c9b1147..4366588 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
@@ -37,7 +37,7 @@
         <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="5" ref="event-bus" />
         <constructor-arg index="6" ref="storeMailboxAnnotationManager" />
         <constructor-arg index="7" ref="storeRightManager" />
         <constructor-arg index="8" ref="quotaComponents" />


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


[09/27] james-project git commit: JAMES-2641 Remove MailboxListenerRegistry

Posted by bt...@apache.org.
JAMES-2641 Remove MailboxListenerRegistry


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

Branch: refs/heads/master
Commit: 90f18c4b9377cbe41cf76012bd2c9d7463f619a8
Parents: 89f168d
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 14:30:16 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../store/event/MailboxListenerRegistry.java    |  71 ----------
 .../event/MailboxListenerRegistryTest.java      | 142 -------------------
 .../modules/mailbox/DefaultEventModule.java     |   2 -
 .../modules/mailbox/MailboxListenerFactory.java |   6 +-
 .../modules/mailbox/MailboxListenersLoader.java |   5 +-
 .../mailbox/MailboxListenersLoaderImpl.java     |  19 ++-
 .../modules/mailbox/NoopMailboxListener.java    |   2 +-
 .../mailbox/MailboxListenersLoaderImplTest.java |  15 +-
 8 files changed, 22 insertions(+), 240 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/90f18c4b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java
deleted file mode 100644
index 83461e6..0000000
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java
+++ /dev/null
@@ -1,71 +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.mailbox.store.event;
-
-import java.util.List;
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.model.MailboxId;
-
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
-
-public class MailboxListenerRegistry {
-
-    private final Multimap<MailboxId, MailboxListener> listeners;
-    private final ConcurrentLinkedQueue<MailboxListener> globalListeners;
-
-    public MailboxListenerRegistry() {
-        this.globalListeners = new ConcurrentLinkedQueue<>();
-        this.listeners = Multimaps.synchronizedMultimap(HashMultimap.create());
-    }
-
-    public void addListener(MailboxId mailboxId, MailboxListener listener) {
-        listeners.put(mailboxId, listener);
-    }
-
-    public void addGlobalListener(MailboxListener listener) {
-        globalListeners.add(listener);
-    }
-
-    public void removeListener(MailboxId mailboxId, MailboxListener listener) {
-        listeners.remove(mailboxId, listener);
-    }
-
-    public void removeGlobalListener(MailboxListener listener) {
-        globalListeners.remove(listener);
-    }
-
-    public List<MailboxListener> getLocalMailboxListeners(MailboxId mailboxId) {
-        return ImmutableList.copyOf(listeners.get(mailboxId));
-    }
-
-    public List<MailboxListener> getGlobalListeners() {
-        return ImmutableList.copyOf(globalListeners);
-    }
-
-    public void deleteRegistryFor(MailboxId mailboxId) {
-        listeners.removeAll(mailboxId);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/90f18c4b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java
deleted file mode 100644
index 04d2b1a..0000000
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java
+++ /dev/null
@@ -1,142 +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.mailbox.store.event;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-
-import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.TestId;
-import org.junit.Before;
-import org.junit.Test;
-
-public class MailboxListenerRegistryTest {
-    private static final MailboxId MAILBOX_ID = TestId.of(42);
-    private static final MailboxId OTHER_MAILBOX_ID = TestId.of(43);
-
-    private MailboxListenerRegistry testee;
-    private MailboxListener mailboxListener;
-    private MailboxListener otherMailboxListener;
-
-    @Before
-    public void setUp() {
-        testee = new MailboxListenerRegistry();
-        mailboxListener = mock(MailboxListener.class);
-        otherMailboxListener = mock(MailboxListener.class);
-    }
-
-    @Test
-    public void getGlobalListenersShouldBeEmpty() {
-        assertThat(testee.getGlobalListeners()).isEmpty();
-    }
-
-    @Test
-    public void getLocalMailboxListenersShouldReturnEmptyList() {
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).isEmpty();
-    }
-
-    @Test
-    public void addGlobalListenerShouldAddAGlobalListener() {
-        testee.addGlobalListener(mailboxListener);
-
-        assertThat(testee.getGlobalListeners()).containsOnly(mailboxListener);
-    }
-
-    @Test
-    public void addListenerShouldAddAListener() {
-        testee.addListener(MAILBOX_ID, mailboxListener);
-
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).containsOnly(mailboxListener);
-    }
-
-    @Test
-    public void addListenerTwiceShouldAddAListenerOnlyOnce() {
-        testee.addListener(MAILBOX_ID, mailboxListener);
-        testee.addListener(MAILBOX_ID, mailboxListener);
-
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).containsExactly(mailboxListener);
-    }
-
-    @Test
-    public void addListenerShouldAddAListenerOnCorrectPath() {
-        testee.addListener(MAILBOX_ID, mailboxListener);
-
-        assertThat(testee.getLocalMailboxListeners(OTHER_MAILBOX_ID)).isEmpty();
-    }
-
-    @Test
-    public void removeGlobalListenerShouldWork() throws Exception {
-        testee.addGlobalListener(mailboxListener);
-
-        testee.removeGlobalListener(mailboxListener);
-
-        assertThat(testee.getGlobalListeners()).isEmpty();
-    }
-
-    @Test
-    public void removeListenerShouldWork() {
-        testee.addListener(MAILBOX_ID, mailboxListener);
-
-        testee.removeListener(MAILBOX_ID, mailboxListener);
-
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).isEmpty();
-    }
-
-    @Test
-    public void removeGlobalListenerShouldNotRemoveOtherListeners() {
-        testee.addGlobalListener(mailboxListener);
-        testee.addGlobalListener(otherMailboxListener);
-
-        testee.removeGlobalListener(mailboxListener);
-
-        assertThat(testee.getGlobalListeners()).containsOnly(otherMailboxListener);
-    }
-
-    @Test
-    public void removeListenerShouldNotRemoveOtherListeners() {
-        testee.addListener(MAILBOX_ID, mailboxListener);
-        testee.addListener(MAILBOX_ID, otherMailboxListener);
-
-        testee.removeListener(MAILBOX_ID, mailboxListener);
-
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).containsOnly(otherMailboxListener);
-    }
-
-    @Test
-    public void deleteRegistryForShouldRemoveAllListeners() {
-        testee.addListener(MAILBOX_ID, mailboxListener);
-        testee.addListener(MAILBOX_ID, otherMailboxListener);
-
-        testee.deleteRegistryFor(MAILBOX_ID);
-
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).isEmpty();
-    }
-
-    @Test
-    public void removeGlobalListenerShouldNotThrowOnAbsentListener() {
-        testee.removeGlobalListener(mailboxListener);
-    }
-
-    @Test
-    public void removeListenerShouldNotThrowOnAbsentListener() {
-        testee.removeListener(MAILBOX_ID, mailboxListener);
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/90f18c4b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
index 3ec0a61..79d2dab 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
@@ -31,7 +31,6 @@ import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.events.delivery.EventDelivery;
 import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
-import org.apache.james.mailbox.store.event.MailboxListenerRegistry;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
@@ -53,7 +52,6 @@ public class DefaultEventModule extends AbstractModule {
 
         bind(MailboxListenerFactory.class).in(Scopes.SINGLETON);
         bind(MailboxListenersLoaderImpl.class).in(Scopes.SINGLETON);
-        bind(MailboxListenerRegistry.class).in(Scopes.SINGLETON);
         bind(MailboxListenersLoader.class).to(MailboxListenersLoaderImpl.class);
         Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/90f18c4b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
index 4c39661..9af26be 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
@@ -32,7 +32,7 @@ public class MailboxListenerFactory {
 
     public static class MailboxListenerBuilder {
         private final Injector injector;
-        private Optional<Class<MailboxListener>> clazz;
+        private Optional<Class<MailboxListener.GroupMailboxListener>> clazz;
         private Optional<MailboxListener.ExecutionMode> executionMode;
         private Optional<HierarchicalConfiguration> configuration;
 
@@ -63,12 +63,12 @@ public class MailboxListenerFactory {
             return this;
         }
 
-        public MailboxListenerBuilder clazz(Class<MailboxListener> clazz) {
+        public MailboxListenerBuilder clazz(Class<MailboxListener.GroupMailboxListener> clazz) {
             this.clazz = Optional.of(clazz);
             return this;
         }
 
-        public MailboxListener build() {
+        public MailboxListener.GroupMailboxListener build() {
             Preconditions.checkState(clazz.isPresent(), "'clazz' is mandatory");
             return injector.createChildInjector(
                 binder -> binder.bind(MailboxListener.ExecutionMode.class)

http://git-wip-us.apache.org/repos/asf/james-project/blob/90f18c4b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
index 46757a9..1909a3f 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
@@ -21,8 +21,7 @@ package org.apache.james.modules.mailbox;
 import org.apache.james.mailbox.MailboxListener;
 
 public interface MailboxListenersLoader {
+    MailboxListener.GroupMailboxListener createListener(ListenerConfiguration configuration);
 
-    MailboxListener createListener(ListenerConfiguration configuration);
-
-    void register(MailboxListener listener);
+    void register(MailboxListener.GroupMailboxListener listener);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/90f18c4b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
index 44dc178..b4bf0fa 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
@@ -23,7 +23,7 @@ import java.util.Set;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.store.event.MailboxListenerRegistry;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.utils.ExtendedClassLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,19 +31,18 @@ import org.slf4j.LoggerFactory;
 import com.google.inject.Inject;
 
 public class MailboxListenersLoaderImpl implements Configurable, MailboxListenersLoader {
-
     private static final Logger LOGGER = LoggerFactory.getLogger(MailboxListenersLoaderImpl.class);
 
     private final MailboxListenerFactory mailboxListenerFactory;
-    private final MailboxListenerRegistry registry;
+    private final EventBus eventBus;
     private final ExtendedClassLoader classLoader;
-    private final Set<MailboxListener> guiceDefinedListeners;
+    private final Set<MailboxListener.GroupMailboxListener> guiceDefinedListeners;
 
     @Inject
-    public MailboxListenersLoaderImpl(MailboxListenerFactory mailboxListenerFactory, MailboxListenerRegistry registry,
-                                  ExtendedClassLoader classLoader, Set<MailboxListener> guiceDefinedListeners) {
+    public MailboxListenersLoaderImpl(MailboxListenerFactory mailboxListenerFactory, EventBus eventBus,
+                                  ExtendedClassLoader classLoader, Set<MailboxListener.GroupMailboxListener> guiceDefinedListeners) {
         this.mailboxListenerFactory = mailboxListenerFactory;
-        this.registry = registry;
+        this.eventBus = eventBus;
         this.classLoader = classLoader;
         this.guiceDefinedListeners = guiceDefinedListeners;
     }
@@ -62,12 +61,12 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
     }
 
     @Override
-    public void register(MailboxListener listener) {
-        registry.addGlobalListener(listener);
+    public void register(MailboxListener.GroupMailboxListener listener) {
+        eventBus.register(listener);
     }
 
     @Override
-    public MailboxListener createListener(ListenerConfiguration configuration) {
+    public MailboxListener.GroupMailboxListener createListener(ListenerConfiguration configuration) {
         String listenerClass = configuration.getClazz();
         try {
             LOGGER.info("Loading user registered mailbox listener {}", listenerClass);

http://git-wip-us.apache.org/repos/asf/james-project/blob/90f18c4b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
index f5c10d5..1c1f555 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
@@ -25,7 +25,7 @@ import org.apache.james.mailbox.events.Group;
 public class NoopMailboxListener implements MailboxListener.GroupMailboxListener {
     private static class NoopMailboxListenerGroup extends Group {}
 
-    public static final Group GROUP = new NoopMailboxListenerGroup();
+    static final Group GROUP = new NoopMailboxListenerGroup();
 
     @Override
     public ListenerType getType() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/90f18c4b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
index c1d6f5f..a9f454d 100644
--- a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
+++ b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
@@ -32,7 +32,9 @@ import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.store.event.MailboxListenerRegistry;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.utils.ExtendedClassLoader;
 import org.junit.Before;
 import org.junit.Test;
@@ -42,7 +44,7 @@ import com.google.inject.Guice;
 
 public class MailboxListenersLoaderImplTest {
 
-    private MailboxListenerRegistry registry;
+    private InVMEventBus eventBus;
     private MailboxListenersLoaderImpl testee;
 
     @Before
@@ -51,8 +53,8 @@ public class MailboxListenersLoaderImplTest {
         when(fileSystem.getFile(anyString()))
             .thenThrow(new FileNotFoundException());
 
-        registry = new MailboxListenerRegistry();
-        testee = new MailboxListenersLoaderImpl(new MailboxListenerFactory(Guice.createInjector()), registry,
+        eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        testee = new MailboxListenersLoaderImpl(new MailboxListenerFactory(Guice.createInjector()), eventBus,
             new ExtendedClassLoader(fileSystem), ImmutableSet.of());
     }
 
@@ -95,14 +97,11 @@ public class MailboxListenersLoaderImplTest {
                     "<listener>" +
                         "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
                     "</listener>" +
-                    "<listener>" +
-                        "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
-                    "</listener>" +
                 "</listeners>");
 
         testee.configure(configuration);
 
-        assertThat(registry.getGlobalListeners()).hasSize(2);
+        assertThat(eventBus.registeredGroups()).containsExactly(NoopMailboxListener.GROUP);
     }
 
     private DefaultConfigurationBuilder toConfigutation(String configurationString) throws ConfigurationException {


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


[19/27] james-project git commit: JAMES-2641 Allow specifying group of registered listeners

Posted by bt...@apache.org.
JAMES-2641 Allow specifying group of registered listeners

This allow duplicate listeners to be registered, a feature used by over-quota mailing
to specify several thresholds.


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

Branch: refs/heads/master
Commit: 8d66bb110a21a7a473dc3fcea84fb5a5399499b3
Parents: 24fe28f
Author: Benoit Tellier <bt...@linagora.com>
Authored: Mon Jan 14 10:44:20 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:09 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxListener.java   |  2 +-
 .../apache/james/mailbox/events/EventBus.java   |  2 +-
 .../james/mailbox/events/GenericGroup.java      | 45 ++++++++++++++++++++
 .../org/apache/james/mailbox/events/Group.java  |  4 +-
 .../apache/james/mailbox/events/GroupTest.java  |  7 +++
 .../james/mailbox/util/EventCollector.java      |  2 +-
 .../CacheInvalidatingMailboxListener.java       |  2 +-
 .../MailboxOperationLoggingListener.java        |  2 +-
 ...lasticSearchListeningMessageSearchIndex.java |  2 +-
 .../lucene/search/LuceneMessageSearchIndex.java |  2 +-
 .../QuotaThresholdCrossingListener.java         |  2 +-
 .../ElasticSearchQuotaMailboxListener.java      |  2 +-
 .../spamassassin/SpamAssassinListener.java      |  2 +-
 .../store/event/MailboxAnnotationListener.java  |  2 +-
 .../quota/ListeningCurrentQuotaUpdater.java     |  2 +-
 .../store/search/LazyMessageSearchIndex.java    |  2 +-
 .../modules/mailbox/CassandraQuotaModule.java   |  2 +-
 .../modules/mailbox/ListenerConfiguration.java  | 13 ++++--
 .../modules/mailbox/MailboxListenerFactory.java |  6 +--
 .../modules/mailbox/MailboxListenersLoader.java |  6 ++-
 .../mailbox/MailboxListenersLoaderImpl.java     | 29 ++++++++++---
 .../modules/mailbox/NoopMailboxListener.java    |  2 +-
 .../mailbox/ListenerConfigurationTest.java      | 25 ++++++++++-
 .../mailbox/MailboxListenersLoaderImplTest.java | 39 ++++++++++++++++-
 .../src/test/resources/listeners.xml            |  2 +
 .../src/test/resources/listeners.xml            |  2 +
 .../src/test/resources/listeners.xml            |  2 +
 .../event/PropagateLookupRightListener.java     |  2 +-
 28 files changed, 176 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index fd79dd9..d845154 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -50,7 +50,7 @@ import com.google.common.collect.ImmutableMap;
 public interface MailboxListener {
 
     interface GroupMailboxListener extends MailboxListener {
-        Group getGroup();
+        Group getDefaultGroup();
     }
 
     enum ExecutionMode {

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
index 70275cc..6b25f1b 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
@@ -40,6 +40,6 @@ public interface EventBus {
     }
 
     default Registration register(MailboxListener.GroupMailboxListener groupMailboxListener) {
-        return register(groupMailboxListener, groupMailboxListener.getGroup());
+        return register(groupMailboxListener, groupMailboxListener.getDefaultGroup());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
new file mode 100644
index 0000000..ed36568
--- /dev/null
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
@@ -0,0 +1,45 @@
+/****************************************************************
+ * 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 java.util.Objects;
+
+public class GenericGroup extends Group {
+    private final String groupName;
+
+    public GenericGroup(String groupName) {
+        this.groupName = groupName;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof GenericGroup) {
+            GenericGroup that = (GenericGroup) o;
+
+            return Objects.equals(this.groupName, that.groupName);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(groupName);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
index 33df511..2da5cb4 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
@@ -23,7 +23,7 @@ import java.util.Objects;
 
 public class Group {
     @Override
-    public final boolean equals(Object o) {
+    public boolean equals(Object o) {
         if (o == null) {
             return false;
         }
@@ -31,7 +31,7 @@ public class Group {
     }
 
     @Override
-    public final int hashCode() {
+    public int hashCode() {
         return Objects.hash(getClass());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
index 80a7029..0acb141 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
@@ -58,4 +58,11 @@ class GroupTest {
     void equalsShouldReturnFalseOnParentClass() {
         assertThat(new GroupC()).isNotEqualTo(new GroupA());
     }
+
+    @Test
+    void genericGroupShouldMatchBeanContract() {
+        EqualsVerifier.forClass(GenericGroup.class)
+            .withRedefinedSuperclass()
+            .verify();
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
index c88eefb..f2f3c42 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
@@ -34,7 +34,7 @@ public class EventCollector implements MailboxListener.GroupMailboxListener {
     private final List<Event> events = new ArrayList<>();
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
index 1c98ce1..e3f38c8 100644
--- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
+++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
@@ -27,7 +27,7 @@ public class CacheInvalidatingMailboxListener implements MailboxListener.GroupMa
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
index bf1822a..660a748 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
@@ -40,7 +40,7 @@ public class MailboxOperationLoggingListener implements MailboxListener.GroupMai
     private static final Group GROUP = new MailboxOperationLoggingListenerGroup();
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/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 010b7e7..398e792 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
@@ -82,7 +82,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/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 3952deb..6ede59f 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
@@ -402,7 +402,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
     }
 
     @Override
-    public org.apache.james.mailbox.events.Group getGroup() {
+    public org.apache.james.mailbox.events.Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
index ee8546b..73c6b1c 100644
--- a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
+++ b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
@@ -66,7 +66,7 @@ public class QuotaThresholdCrossingListener implements MailboxListener.GroupMail
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index 03b5d6f..a546492 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -51,7 +51,7 @@ public class ElasticSearchQuotaMailboxListener implements MailboxListener.GroupM
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
index 8efc15c..5427320 100644
--- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
+++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
@@ -72,7 +72,7 @@ public class SpamAssassinListener implements SpamEventListener {
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/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 eff61a7..b026186 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
@@ -51,7 +51,7 @@ public class MailboxAnnotationListener implements MailboxListener.GroupMailboxLi
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index 26fea63..251541b 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -60,7 +60,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/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 9145620..6a44864 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
@@ -73,7 +73,7 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex {
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/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 6cdef0f..1684aa6 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
@@ -65,7 +65,7 @@ public class CassandraQuotaModule extends AbstractModule {
 
         bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
         bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ListeningCurrentQuotaUpdater.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
index ec99546..2eea8a2 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
@@ -31,11 +31,12 @@ public class ListenerConfiguration {
         String listenerClass = configuration.getString("class");
         Preconditions.checkState(!Strings.isNullOrEmpty(listenerClass), "class name is mandatory");
         Optional<Boolean> isAsync = Optional.ofNullable(configuration.getBoolean("async", null));
-        return new ListenerConfiguration(listenerClass, extractSubconfiguration(configuration), isAsync);
+        Optional<String> group = Optional.ofNullable(configuration.getString("group", null));
+        return new ListenerConfiguration(listenerClass, group, extractSubconfiguration(configuration), isAsync);
     }
 
     public static ListenerConfiguration forClass(String clazz) {
-        return new ListenerConfiguration(clazz, Optional.empty(), Optional.empty());
+        return new ListenerConfiguration(clazz, Optional.empty(), Optional.empty(), Optional.empty());
     }
 
     private static Optional<HierarchicalConfiguration> extractSubconfiguration(HierarchicalConfiguration configuration) {
@@ -45,15 +46,21 @@ public class ListenerConfiguration {
     }
 
     private final String clazz;
+    private final Optional<String> group;
     private final Optional<HierarchicalConfiguration> configuration;
     private final Optional<Boolean> isAsync;
 
-    private ListenerConfiguration(String clazz, Optional<HierarchicalConfiguration> configuration, Optional<Boolean> isAsync) {
+    private ListenerConfiguration(String clazz, Optional<String> group, Optional<HierarchicalConfiguration> configuration, Optional<Boolean> isAsync) {
         this.clazz = clazz;
+        this.group = group;
         this.configuration = configuration;
         this.isAsync = isAsync;
     }
 
+    public Optional<String> getGroup() {
+        return group;
+    }
+
     public String getClazz() {
         return clazz;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
index 9af26be..4c39661 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
@@ -32,7 +32,7 @@ public class MailboxListenerFactory {
 
     public static class MailboxListenerBuilder {
         private final Injector injector;
-        private Optional<Class<MailboxListener.GroupMailboxListener>> clazz;
+        private Optional<Class<MailboxListener>> clazz;
         private Optional<MailboxListener.ExecutionMode> executionMode;
         private Optional<HierarchicalConfiguration> configuration;
 
@@ -63,12 +63,12 @@ public class MailboxListenerFactory {
             return this;
         }
 
-        public MailboxListenerBuilder clazz(Class<MailboxListener.GroupMailboxListener> clazz) {
+        public MailboxListenerBuilder clazz(Class<MailboxListener> clazz) {
             this.clazz = Optional.of(clazz);
             return this;
         }
 
-        public MailboxListener.GroupMailboxListener build() {
+        public MailboxListener build() {
             Preconditions.checkState(clazz.isPresent(), "'clazz' is mandatory");
             return injector.createChildInjector(
                 binder -> binder.bind(MailboxListener.ExecutionMode.class)

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
index 1909a3f..0f0b458 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
@@ -18,10 +18,12 @@
  ****************************************************************/
 package org.apache.james.modules.mailbox;
 
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.Group;
 
 public interface MailboxListenersLoader {
-    MailboxListener.GroupMailboxListener createListener(ListenerConfiguration configuration);
+    Pair<Group, MailboxListener> createListener(ListenerConfiguration configuration);
 
-    void register(MailboxListener.GroupMailboxListener listener);
+    void register(Pair<Group, MailboxListener> listener);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
index b4bf0fa..e1721fb 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
@@ -21,13 +21,17 @@ package org.apache.james.modules.mailbox;
 import java.util.Set;
 
 import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.GenericGroup;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.utils.ExtendedClassLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Preconditions;
 import com.google.inject.Inject;
 
 public class MailboxListenersLoaderImpl implements Configurable, MailboxListenersLoader {
@@ -39,7 +43,7 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
     private final Set<MailboxListener.GroupMailboxListener> guiceDefinedListeners;
 
     @Inject
-    public MailboxListenersLoaderImpl(MailboxListenerFactory mailboxListenerFactory, EventBus eventBus,
+    MailboxListenersLoaderImpl(MailboxListenerFactory mailboxListenerFactory, EventBus eventBus,
                                   ExtendedClassLoader classLoader, Set<MailboxListener.GroupMailboxListener> guiceDefinedListeners) {
         this.mailboxListenerFactory = mailboxListenerFactory;
         this.eventBus = eventBus;
@@ -53,7 +57,7 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
 
         ListenersConfiguration listenersConfiguration = ListenersConfiguration.from(configuration);
 
-        guiceDefinedListeners.forEach(this::register);
+        guiceDefinedListeners.forEach(eventBus::register);
 
         listenersConfiguration.getListenersConfiguration().stream()
             .map(this::createListener)
@@ -61,26 +65,39 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
     }
 
     @Override
-    public void register(MailboxListener.GroupMailboxListener listener) {
-        eventBus.register(listener);
+    public void register(Pair<Group, MailboxListener> listener) {
+        eventBus.register(listener.getRight(), listener.getLeft());
     }
 
     @Override
-    public MailboxListener.GroupMailboxListener createListener(ListenerConfiguration configuration) {
+    public Pair<Group, MailboxListener> createListener(ListenerConfiguration configuration) {
         String listenerClass = configuration.getClazz();
         try {
             LOGGER.info("Loading user registered mailbox listener {}", listenerClass);
-            return mailboxListenerFactory.newInstance()
+            MailboxListener mailboxListener = mailboxListenerFactory.newInstance()
                 .withConfiguration(configuration.getConfiguration())
                 .withExecutionMode(configuration.isAsync().map(this::getExecutionMode))
                 .clazz(classLoader.locateClass(listenerClass))
                 .build();
+
+
+            return configuration.getGroup()
+                .map(GenericGroup::new)
+                .map(group -> Pair.<Group, MailboxListener>of(group, mailboxListener))
+                .orElseGet(() -> withDefaultGroup(mailboxListener));
         } catch (ClassNotFoundException e) {
             LOGGER.error("Error while loading user registered global listener {}", listenerClass, e);
             throw new RuntimeException(e);
         }
     }
 
+    private Pair<Group, MailboxListener> withDefaultGroup(MailboxListener mailboxListener) {
+        Preconditions.checkArgument(mailboxListener instanceof MailboxListener.GroupMailboxListener);
+
+        MailboxListener.GroupMailboxListener groupMailboxListener = (MailboxListener.GroupMailboxListener) mailboxListener;
+        return Pair.of(groupMailboxListener.getDefaultGroup(), groupMailboxListener);
+    }
+
     private MailboxListener.ExecutionMode getExecutionMode(boolean isAsync) {
         if (isAsync) {
             return MailboxListener.ExecutionMode.ASYNCHRONOUS;

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
index 14dd45d..70a544d 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
@@ -28,7 +28,7 @@ public class NoopMailboxListener implements MailboxListener.GroupMailboxListener
     static final Group GROUP = new NoopMailboxListenerGroup();
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
index b2db84c..5184717 100644
--- a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
+++ b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
@@ -57,12 +57,33 @@ public class ListenerConfigurationTest {
     @Test
     public void isAsyncShouldReturnConfiguredValue() {
         DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
-        String expectedClazz = "MyClassName";
-        configuration.addProperty("class", expectedClazz);
+        configuration.addProperty("class", "MyClassName");
         configuration.addProperty("async", "false");
 
         ListenerConfiguration listenerConfiguration = ListenerConfiguration.from(configuration);
 
         assertThat(listenerConfiguration.isAsync()).contains(false);
     }
+
+    @Test
+    public void getGroupShouldBeEmptyByDefault() {
+        DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
+        configuration.addProperty("class", "MyClassName");
+
+        ListenerConfiguration listenerConfiguration = ListenerConfiguration.from(configuration);
+
+        assertThat(listenerConfiguration.getGroup()).isEmpty();
+    }
+
+    @Test
+    public void getGroupShouldContainsConfiguredValue() {
+        String groupName = "Avengers";
+        DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
+        configuration.addProperty("class", "MyClassName");
+        configuration.addProperty("group", groupName);
+
+        ListenerConfiguration listenerConfiguration = ListenerConfiguration.from(configuration);
+
+        assertThat(listenerConfiguration.getGroup()).contains(groupName);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
index a9f454d..bcdbcc6 100644
--- a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
+++ b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
@@ -30,8 +30,11 @@ import java.nio.charset.StandardCharsets;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.GenericGroup;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.metrics.api.NoopMetricFactory;
@@ -86,9 +89,9 @@ public class MailboxListenersLoaderImplTest {
     public void createListenerShouldReturnMailboxListenerWhenConfigurationIsGood() {
         ListenerConfiguration configuration = ListenerConfiguration.forClass("org.apache.james.modules.mailbox.NoopMailboxListener");
 
-        MailboxListener listener = testee.createListener(configuration);
+        Pair<Group, MailboxListener> listener = testee.createListener(configuration);
 
-        assertThat(listener).isInstanceOf(NoopMailboxListener.class);
+        assertThat(listener.getRight()).isInstanceOf(NoopMailboxListener.class);
     }
 
     @Test
@@ -104,6 +107,38 @@ public class MailboxListenersLoaderImplTest {
         assertThat(eventBus.registeredGroups()).containsExactly(NoopMailboxListener.GROUP);
     }
 
+    @Test
+    public void customGroupCanBePassed() throws ConfigurationException {
+        DefaultConfigurationBuilder configuration = toConfigutation("<listeners>" +
+                    "<listener>" +
+                        "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
+                        "<group>Avengers</group>" +
+                    "</listener>" +
+                "</listeners>");
+
+        testee.configure(configuration);
+
+        assertThat(eventBus.registeredGroups()).containsExactly(new GenericGroup("Avengers"));
+    }
+
+    @Test
+    public void aListenerCanBeRegisteredOnSeveralGroups() throws ConfigurationException {
+        DefaultConfigurationBuilder configuration = toConfigutation("<listeners>" +
+                    "<listener>" +
+                        "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
+                        "<group>Avengers</group>" +
+                    "</listener>" +
+                    "<listener>" +
+                        "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
+                        "<group>Fantastic 4</group>" +
+                    "</listener>" +
+                "</listeners>");
+
+        testee.configure(configuration);
+
+        assertThat(eventBus.registeredGroups()).containsExactlyInAnyOrder(new GenericGroup("Avengers"), new GenericGroup("Fantastic 4"));
+    }
+
     private DefaultConfigurationBuilder toConfigutation(String configurationString) throws ConfigurationException {
         DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
         configuration.load(new ByteArrayInputStream(configurationString.getBytes(StandardCharsets.UTF_8)));

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
index 7227803..9d0f61b 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
@@ -30,6 +30,7 @@
   </listener>
   <listener>
     <class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+    <group>QuotaThresholdCrossingListener-lower-threshold</group>
     <configuration>
       <thresholds>
         <threshold>
@@ -41,6 +42,7 @@
   </listener>
   <listener>
     <class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+    <group>QuotaThresholdCrossingListener-upper-threshold</group>
     <configuration>
       <thresholds>
         <threshold>

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
index cd9acd6..2145b25 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
@@ -27,6 +27,7 @@
   </listener>
   <listener>
     <class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+    <group>QuotaThresholdCrossingListener-lower-threshold</group>
     <configuration>
       <thresholds>
         <threshold>
@@ -38,6 +39,7 @@
   </listener>
   <listener>
     <class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+    <group>QuotaThresholdCrossingListener-upper-threshold</group>
     <configuration>
       <thresholds>
         <threshold>

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml
index 7227803..9d0f61b 100644
--- a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml
@@ -30,6 +30,7 @@
   </listener>
   <listener>
     <class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+    <group>QuotaThresholdCrossingListener-lower-threshold</group>
     <configuration>
       <thresholds>
         <threshold>
@@ -41,6 +42,7 @@
   </listener>
   <listener>
     <class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+    <group>QuotaThresholdCrossingListener-upper-threshold</group>
     <configuration>
       <thresholds>
         <threshold>

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
index 4f6dc0c..2ab0273 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
@@ -54,7 +54,7 @@ public class PropagateLookupRightListener implements MailboxListener.GroupMailbo
     }
 
     @Override
-    public Group getGroup() {
+    public Group getDefaultGroup() {
         return GROUP;
     }
 


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


[14/27] james-project git commit: JAMES-2641 SetMessagesMethodTest should be using EventCollector

Posted by bt...@apache.org.
JAMES-2641 SetMessagesMethodTest should be using EventCollector

Rather than implementing its own


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

Branch: refs/heads/master
Commit: 7e0fdc6a6822098b04312e6e8190370b6b1ce6b7
Parents: 0a3b38a
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 10:50:06 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../jmap-integration-testing-common/pom.xml       |  6 ++++++
 .../integration/SetMessagesMethodTest.java        | 18 ++++--------------
 .../memory-jmap-integration-testing/pom.xml       |  6 ++++++
 .../rabbitmq-jmap-integration-testing/pom.xml     |  6 ++++++
 4 files changed, 22 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7e0fdc6a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
index d414034..8c52940 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
@@ -35,6 +35,12 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-api</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-spamassassin</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7e0fdc6a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 0dfd667..c8028bf 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -96,6 +96,7 @@ import org.apache.james.mailbox.model.SerializableQuotaValue;
 import org.apache.james.mailbox.probe.ACLProbe;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
+import org.apache.james.mailbox.util.EventCollector;
 import org.apache.james.modules.ACLProbeImpl;
 import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.modules.QuotaProbesImpl;
@@ -123,7 +124,6 @@ import org.junit.experimental.categories.Category;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
 import com.google.common.io.ByteStreams;
 
 import io.restassured.RestAssured;
@@ -2307,18 +2307,8 @@ public abstract class SetMessagesMethodTest {
             "  ]" +
             "]";
 
-        List<Event> events = Lists.newArrayList();
-        jmapServer.getProbe(JmapGuiceProbe.class).addMailboxListener(new MailboxListener() {
-            @Override
-            public ListenerType getType() {
-                return ListenerType.ONCE;
-            }
-
-            @Override
-            public void event(Event event) {
-                events.add(event);
-            }
-        });
+        EventCollector eventCollector = new EventCollector();
+        jmapServer.getProbe(JmapGuiceProbe.class).addMailboxListener(eventCollector);
 
         String messageId = with()
             .header("Authorization", accessToken.serialize())
@@ -2332,7 +2322,7 @@ public abstract class SetMessagesMethodTest {
 
 
 
-        calmlyAwait.atMost(5, TimeUnit.SECONDS).until(() -> events.stream()
+        calmlyAwait.atMost(5, TimeUnit.SECONDS).until(() -> eventCollector.getEvents().stream()
             .anyMatch(event -> isAddedToOutboxEvent(messageId, event, outboxId)));
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7e0fdc6a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml
index 9ed0bc9..7a653b6 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml
@@ -35,6 +35,12 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-api</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-spamassassin</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7e0fdc6a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/pom.xml b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/pom.xml
index f20a989..c210fd0 100644
--- a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/pom.xml
+++ b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/pom.xml
@@ -37,6 +37,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-api</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-scanning-search</artifactId>
             <type>test-jar</type>
             <scope>test</scope>


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


[26/27] james-project git commit: JAMES-2642 add a few more alias mapping integration tests

Posted by bt...@apache.org.
JAMES-2642 add a few more alias mapping integration 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/1819ae1c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1819ae1c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1819ae1c

Branch: refs/heads/master
Commit: 1819ae1cbdf2b91e1a74ee4bbd7d2cba6a13240f
Parents: a0793f5
Author: Rene Cordier <rc...@linagora.com>
Authored: Wed Jan 16 15:06:30 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:10 2019 +0700

----------------------------------------------------------------------
 .../transport/mailets/AliasMappingTest.java     | 56 ++++++++++++++++++++
 1 file changed, 56 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1819ae1c/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
index 45f4a2f..e400712 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
@@ -136,6 +136,7 @@ public class AliasMappingTest {
 
         jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, BOB_ADDRESS, "INBOX");
         jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, ALICE_ADDRESS, "INBOX");
+        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, CEDRIC_ADDRESS, "INBOX");
 
         WebAdminGuiceProbe webAdminGuiceProbe = jamesServer.getProbe(WebAdminGuiceProbe.class);
         webAdminGuiceProbe.await();
@@ -285,4 +286,59 @@ public class AliasMappingTest {
     }
 
 
+    @Test
+    public void messageShouldRedirectFromAliasContainingSlash() throws Exception {
+        String aliasWithSlash = "bob/alias@" + DOMAIN;
+        String aliasWithEncodedSlash = "bob%2Falias@" + DOMAIN;
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + aliasWithEncodedSlash);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(aliasWithSlash));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(BOB_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+    }
+
+    @Test
+    public void messageShouldRedirectToUserContainingSlash() throws Exception {
+        String userWithSlash = "bob/a@" + DOMAIN;
+        dataProbe.addUser(userWithSlash, PASSWORD);
+        String userWithEncodedSlash = "bob%2Fa@" + DOMAIN;
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + userWithEncodedSlash + "/sources/" + BOB_ALIAS);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(BOB_ALIAS));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(userWithSlash, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+    }
+
+    @Test
+    public void messageShouldRedirectToUserWhenEncodingAt() throws Exception {
+        String userWithEncodedAt = "bob%40" + DOMAIN;
+        String aliasWithEncodedAt = "bob-alias%40" + DOMAIN;
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + userWithEncodedAt + "/sources/" + aliasWithEncodedAt);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(BOB_ALIAS));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(BOB_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+    }
+
 }


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


[17/27] james-project git commit: JAMES-2641 Remove now useless ListenerType

Posted by bt...@apache.org.
JAMES-2641 Remove now useless ListenerType


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

Branch: refs/heads/master
Commit: f063b4862d78436fb0473ee72c17c4a443e946c1
Parents: 90f18c4
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 14:58:06 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../org/apache/james/mailbox/MailboxListener.java    |  8 --------
 .../james/mailbox/MailboxManagerStressTest.java      | 15 ++++-----------
 .../james/mailbox/events/ErrorHandlingContract.java  |  5 -----
 .../james/mailbox/events/EventBusTestFixture.java    |  5 -----
 .../apache/james/mailbox/util/EventCollector.java    | 15 ---------------
 .../caching/CacheInvalidatingMailboxListener.java    |  4 ----
 .../cassandra/MailboxOperationLoggingListener.java   |  5 -----
 .../quota/CassandraCurrentQuotaManager.java          |  6 ------
 .../ElasticSearchListeningMessageSearchIndex.java    |  5 -----
 .../mailbox/jpa/quota/JpaCurrentQuotaManager.java    |  6 ------
 .../lucene/search/LuceneMessageSearchIndex.java      |  5 -----
 .../inmemory/quota/InMemoryCurrentQuotaManager.java  |  6 ------
 .../listeners/QuotaThresholdCrossingListener.java    |  5 -----
 .../events/ElasticSearchQuotaMailboxListener.java    |  5 -----
 .../mailbox/spamassassin/SpamAssassinListener.java   |  5 -----
 .../store/event/MailboxAnnotationListener.java       |  5 -----
 .../store/quota/ListeningCurrentQuotaUpdater.java    |  5 -----
 .../store/quota/StoreCurrentQuotaManager.java        |  3 ---
 .../mailbox/store/search/LazyMessageSearchIndex.java |  5 -----
 .../apache/james/imap/processor/IdleProcessor.java   |  5 -----
 .../imap/processor/base/SelectedMailboxImpl.java     |  5 -----
 .../james/modules/mailbox/NoopMailboxListener.java   |  5 -----
 .../jmap/event/PropagateLookupRightListener.java     |  5 -----
 .../jmap/event/PropagateLookupRightListenerTest.java |  5 -----
 24 files changed, 4 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index 253347c..fd79dd9 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -53,19 +53,11 @@ public interface MailboxListener {
         Group getGroup();
     }
 
-    enum ListenerType {
-        ONCE,
-        EACH_NODE,
-        MAILBOX
-    }
-
     enum ExecutionMode {
         SYNCHRONOUS,
         ASYNCHRONOUS
     }
 
-    ListenerType getType();
-
     default ExecutionMode getExecutionMode() {
         return ExecutionMode.SYNCHRONOUS;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
index ce1f83c..d769815 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
@@ -66,18 +66,11 @@ public abstract class MailboxManagerStressTest {
         mailboxManager.startProcessingRequest(session);
         MailboxPath path = MailboxPath.forUser(username, "INBOX");
         MailboxId mailboxId = mailboxManager.createMailbox(path, session).get();
-        mailboxManager.register(new MailboxListener() {
-            @Override
-            public ListenerType getType() {
-                return ListenerType.MAILBOX;
-            }
-
-            @Override
-            public void event(Event event) {
-                MessageUid u = ((Added) event).getUids().iterator().next();
+        mailboxManager.register(
+            event -> {
+                MessageUid u = ((MailboxListener.Added) event).getUids().iterator().next();
                 uList.add(u);
-            }
-        }, mailboxId);
+            }, mailboxId);
         mailboxManager.endProcessingRequest(session);
         mailboxManager.logout(session, false);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/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
index 3f0cdf7..39d7729 100644
--- 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
@@ -50,11 +50,6 @@ interface ErrorHandlingContract extends EventBusContract {
         }
 
         @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");

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/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 85c798b..acac797 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
@@ -46,11 +46,6 @@ public interface EventBusTestFixture {
         private final AtomicInteger calls = new AtomicInteger(0);
 
         @Override
-        public ListenerType getType() {
-            return ListenerType.ONCE;
-        }
-
-        @Override
         public void event(Event event) {
             calls.incrementAndGet();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
index 7b8cffa..c88eefb 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
@@ -33,26 +33,11 @@ public class EventCollector implements MailboxListener.GroupMailboxListener {
 
     private final List<Event> events = new ArrayList<>();
 
-    private final ListenerType listenerType;
-
-    public EventCollector(ListenerType listenerType) {
-        this.listenerType = listenerType;
-    }
-
-    public EventCollector() {
-        this(ListenerType.EACH_NODE);
-    }
-
     @Override
     public Group getGroup() {
         return GROUP;
     }
 
-    @Override
-    public ListenerType getType() {
-        return listenerType;
-    }
-
     public List<Event> getEvents() {
         return events;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
index f693c7a..1c98ce1 100644
--- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
+++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
@@ -41,10 +41,6 @@ public class CacheInvalidatingMailboxListener implements MailboxListener.GroupMa
         eventBus.register(this);
     }
 
-    @Override
-    public ListenerType getType() {
-        return ListenerType.EACH_NODE;
-    }
 
     @Override
     public void event(Event event) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
index 2d96b04..bf1822a 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
@@ -40,11 +40,6 @@ public class MailboxOperationLoggingListener implements MailboxListener.GroupMai
     private static final Group GROUP = new MailboxOperationLoggingListenerGroup();
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.ONCE;
-    }
-
-    @Override
     public Group getGroup() {
         return GROUP;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java
index 79f8aa2..873cc9c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java
@@ -30,7 +30,6 @@ 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.cassandra.table.CassandraCurrentQuota;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.QuotaRoot;
@@ -69,11 +68,6 @@ public class CassandraCurrentQuotaManager implements StoreCurrentQuotaManager {
     }
 
     @Override
-    public MailboxListener.ListenerType getAssociatedListenerType() {
-        return MailboxListener.ListenerType.ONCE;
-    }
-
-    @Override
     public void increase(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
         checkArguments(count, size);
         session.execute(increaseStatement.bind(count, size, quotaRoot.getValue()));

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/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 644a5ee..010b7e7 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
@@ -82,11 +82,6 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
     }
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.ONCE;
-    }
-
-    @Override
     public Group getGroup() {
         return GROUP;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
index 222a96b..bca9406 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
@@ -28,7 +28,6 @@ import javax.persistence.EntityManagerFactory;
 import org.apache.james.backends.jpa.TransactionRunner;
 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.exception.MailboxException;
 import org.apache.james.mailbox.jpa.quota.model.JpaCurrentQuota;
 import org.apache.james.mailbox.model.QuotaRoot;
@@ -51,11 +50,6 @@ public class JpaCurrentQuotaManager implements StoreCurrentQuotaManager {
     }
 
     @Override
-    public MailboxListener.ListenerType getAssociatedListenerType() {
-        return MailboxListener.ListenerType.ONCE;
-    }
-
-    @Override
     public QuotaCount getCurrentMessageCount(QuotaRoot quotaRoot) {
         EntityManager entityManager = entityManagerFactory.createEntityManager();
         return Optional.ofNullable(retrieveUserQuota(entityManager, quotaRoot))

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/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 8ab47aa..3952deb 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
@@ -407,11 +407,6 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
     }
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.EACH_NODE;
-    }
-
-    @Override
     public EnumSet<SearchCapabilities> getSupportedCapabilities(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities) {
         return EnumSet.of(SearchCapabilities.MultimailboxSearch);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/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 3bc7d36..85d914d 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
@@ -26,7 +26,6 @@ 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.exception.MailboxException;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.SessionProvider;
@@ -53,11 +52,6 @@ public class InMemoryCurrentQuotaManager implements StoreCurrentQuotaManager {
     }
 
     @Override
-    public MailboxListener.ListenerType getAssociatedListenerType() {
-        return MailboxListener.ListenerType.EACH_NODE;
-    }
-
-    @Override
     public void increase(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
         checkArguments(count, size);
         doIncrease(quotaRoot, count, size);

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
index cb87c55..ee8546b 100644
--- a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
+++ b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
@@ -71,11 +71,6 @@ public class QuotaThresholdCrossingListener implements MailboxListener.GroupMail
     }
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.ONCE;
-    }
-
-    @Override
     public void event(Event event) {
         try {
             if (event instanceof QuotaUsageUpdatedEvent) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index ac9fed0..03b5d6f 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -56,11 +56,6 @@ public class ElasticSearchQuotaMailboxListener implements MailboxListener.GroupM
     }
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.ONCE;
-    }
-
-    @Override
     public void event(Event event) {
         try {
             if (event instanceof QuotaUsageUpdatedEvent) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
index f64061c..8efc15c 100644
--- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
+++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
@@ -77,11 +77,6 @@ public class SpamAssassinListener implements SpamEventListener {
     }
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.ONCE;
-    }
-
-    @Override
     public ExecutionMode getExecutionMode() {
         return executionMode;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/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 09e30f8..eff61a7 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
@@ -56,11 +56,6 @@ public class MailboxAnnotationListener implements MailboxListener.GroupMailboxLi
     }
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.EACH_NODE;
-    }
-
-    @Override
     public void event(Event event) {
         if (event instanceof MailboxDeletion) {
             try {

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index 97cfdea..272ced8 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -65,11 +65,6 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
     }
 
     @Override
-    public ListenerType getType() {
-        return currentQuotaManager.getAssociatedListenerType();
-    }
-
-    @Override
     public void event(Event event) {
         try {
             if (event instanceof Added) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java
index de7b306..d977dd2 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java
@@ -19,15 +19,12 @@
 
 package org.apache.james.mailbox.store.quota;
 
-import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 
 public interface StoreCurrentQuotaManager extends CurrentQuotaManager {
 
-    MailboxListener.ListenerType getAssociatedListenerType();
-
     void increase(QuotaRoot quotaRoot, long count, long size) throws MailboxException;
 
     void decrease(QuotaRoot quotaRoot, long count, long size) throws MailboxException;

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/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 7ad6fce..9145620 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
@@ -76,11 +76,6 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex {
     public Group getGroup() {
         return GROUP;
     }
-
-    @Override
-    public ListenerType getType() {
-        return index.getType();
-    }
     
     @Override
     public EnumSet<SearchCapabilities> getSupportedCapabilities(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index ce886e5..9913da9 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -172,11 +172,6 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
                 unsolicitedResponses(session, responder, false);
             }
         }
-
-        @Override
-        public ListenerType getType() {
-            return ListenerType.MAILBOX;
-        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
index 7adacec..e9fc609 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
@@ -95,11 +95,6 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
     }
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.MAILBOX;
-    }
-
-    @Override
     public synchronized Optional<MessageUid> getFirstUid() {
         return uidMsnConverter.getFirstUid();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
index 1c1f555..14dd45d 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
@@ -28,11 +28,6 @@ public class NoopMailboxListener implements MailboxListener.GroupMailboxListener
     static final Group GROUP = new NoopMailboxListenerGroup();
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.ONCE;
-    }
-
-    @Override
     public Group getGroup() {
         return GROUP;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
index 53cd813..4f6dc0c 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
@@ -59,11 +59,6 @@ public class PropagateLookupRightListener implements MailboxListener.GroupMailbo
     }
 
     @Override
-    public ListenerType getType() {
-        return ListenerType.ONCE;
-    }
-
-    @Override
     public void event(Event event) {
         try {
             MailboxSession mailboxSession = createMailboxSession(event);

http://git-wip-us.apache.org/repos/asf/james-project/blob/f063b486/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
index 7ebeaa8..f5f7787 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
@@ -93,11 +93,6 @@ public class PropagateLookupRightListenerTest {
     }
 
     @Test
-    public void getTypeShouldReturnOnce() throws Exception {
-        assertThat(testee.getType()).isEqualTo(MailboxListener.ListenerType.ONCE);
-    }
-
-    @Test
     public void getExecutionModeShouldReturnAsynchronous() throws Exception {
         assertThat(testee.getExecutionMode()).isEqualTo(MailboxListener.ExecutionMode.SYNCHRONOUS);
     }


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


[24/27] james-project git commit: MAILBOX-377 remove unused method in EventBus ErrorHandling contract

Posted by bt...@apache.org.
MAILBOX-377 remove unused method in EventBus ErrorHandling contract


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

Branch: refs/heads/master
Commit: 7cc4a1989895572be30cad7c8b1c5f3399d59258
Parents: 8d66bb1
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 15 10:38:03 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:09 2019 +0700

----------------------------------------------------------------------
 .../james/mailbox/events/ErrorHandlingContract.java     | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7cc4a198/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
index 39d7729..0b5055b 100644
--- 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
@@ -29,7 +29,6 @@ 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;
@@ -37,13 +36,10 @@ 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 final List<Instant> timeElapsed;
 
         private ThrowingListener() {
             timeElapsed = new ArrayList<>();
@@ -64,12 +60,6 @@ interface ErrorHandlingContract extends EventBusContract {
         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();


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


[10/27] james-project git commit: JAMES-2641 DefaultImapProcessorFactory have many unused fields/methods

Posted by bt...@apache.org.
JAMES-2641 DefaultImapProcessorFactory have many unused fields/methods

Only 2 static methods are used


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

Branch: refs/heads/master
Commit: 9e34f173c6aca3f03c1e9e8aaa2fd46fb884c1e7
Parents: d35e8a6
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 15:27:40 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../main/DefaultImapProcessorFactory.java       | 69 ++------------------
 1 file changed, 4 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9e34f173/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
index 3af2b8e..ff6d78f 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
@@ -32,9 +32,6 @@ import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.metrics.api.MetricFactory;
 
-/**
- * 
- */
 public class DefaultImapProcessorFactory {
 
     public static ImapProcessor createDefaultProcessor(MailboxManager mailboxManager, SubscriptionManager subscriptionManager, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver,
@@ -44,72 +41,14 @@ public class DefaultImapProcessorFactory {
 
     public static ImapProcessor createXListSupportingProcessor(MailboxManager mailboxManager, SubscriptionManager subscriptionManager,
             MailboxTyper mailboxTyper, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) {
+
         final StatusResponseFactory statusResponseFactory = new UnpooledStatusResponseFactory();
         final UnknownRequestProcessor unknownRequestImapProcessor = new UnknownRequestProcessor(statusResponseFactory);
-        final ImapProcessor imap4rev1Chain = DefaultProcessorChain.createDefaultChain(unknownRequestImapProcessor, mailboxManager, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, metricFactory);
-        return new ImapResponseMessageProcessor(imap4rev1Chain);
-    }
-
-    private MailboxManager mailboxManager;
-    private SubscriptionManager subscriptionManager;
-    private MailboxTyper mailboxTyper;
-    private QuotaManager quotaManager;
-    private QuotaRootResolver quotaRootResolver;
-    private MetricFactory metricFactory;
-
-    public final void setMailboxManager(MailboxManager mailboxManager) {
-        this.mailboxManager = mailboxManager;
-    }
-
-    public final void setSubscriptionManager(SubscriptionManager subscriptionManager) {
-        this.subscriptionManager = subscriptionManager;
-    }
-
-    public void setMailboxTyper(MailboxTyper mailboxTyper) {
-        this.mailboxTyper = mailboxTyper;
-    }
-
-    public void setQuotaManager(QuotaManager quotaManager) {
-        this.quotaManager = quotaManager;
-    }
-
-    public void setQuotaRootResolver(QuotaRootResolver quotaRootResolver) {
-        this.quotaRootResolver = quotaRootResolver;
-    }
 
-    public final MailboxManager getMailboxManager() {
-        return mailboxManager;
-    }
-
-    public final SubscriptionManager getSubscriptionManager() {
-        return subscriptionManager;
-    }
-
-    public MailboxTyper getMailboxTyper() {
-        return mailboxTyper;
-    }
-
-    public QuotaManager getQuotaManager() {
-        return quotaManager;
-    }
+        final ImapProcessor imap4rev1Chain = DefaultProcessorChain.createDefaultChain(unknownRequestImapProcessor,
+            mailboxManager, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, metricFactory);
 
-    public QuotaRootResolver getQuotaRootResolver() {
-        return quotaRootResolver;
-    }
-
-    public MetricFactory getMetricFactory() {
-        return metricFactory;
-    }
-
-    public void setMetricFactory(MetricFactory metricFactory) {
-        this.metricFactory = metricFactory;
-    }
-
-    /**
-     * Create the {@link ImapProcessor}
-     */
-    public ImapProcessor buildImapProcessor() {
-        return createDefaultProcessor(mailboxManager, subscriptionManager, quotaManager, quotaRootResolver, metricFactory);
+        return new ImapResponseMessageProcessor(imap4rev1Chain);
     }
 
 }


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


[07/27] james-project git commit: JAMES-2641 EventBus caller should block to await dispatching to be done

Posted by bt...@apache.org.
JAMES-2641 EventBus caller should block to await dispatching to be done


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

Branch: refs/heads/master
Commit: 24fe28f024c2989cd7ce5584359a5b93c537872b
Parents: 4c14a75
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 16:29:53 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../QuotaThresholdListenersTestSystem.java      |  2 +-
 .../mailbox/store/StoreMailboxManager.java      | 12 ++-
 .../mailbox/store/StoreMessageIdManager.java    | 36 +++++---
 .../mailbox/store/StoreMessageManager.java      | 93 +++++++++++---------
 .../james/mailbox/store/StoreRightManager.java  |  6 +-
 .../quota/ListeningCurrentQuotaUpdater.java     |  6 +-
 6 files changed, 91 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/24fe28f0/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
index c399025..ae4e936 100644
--- a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
+++ b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
@@ -53,6 +53,6 @@ class QuotaThresholdListenersTestSystem {
     }
 
     void event(Event event) {
-        eventBus.dispatch(event, NO_KEYS);
+        eventBus.dispatch(event, NO_KEYS).block();
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/24fe28f0/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 df08dee..7e46527 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
@@ -348,7 +348,8 @@ public class StoreMailboxManager implements MailboxManager {
                                 .mailboxSession(mailboxSession)
                                 .mailbox(m)
                                 .build(),
-                                new MailboxIdRegistrationKey(m.getMailboxId()));
+                                new MailboxIdRegistrationKey(m.getMailboxId()))
+                                .block();
                         } catch (MailboxExistsException e) {
                             LOGGER.info("{} mailbox was created concurrently", m.generateAssociatedPath());
                         }
@@ -400,7 +401,8 @@ public class StoreMailboxManager implements MailboxManager {
                 .quotaCount(QuotaCount.count(messageCount))
                 .quotaSize(QuotaSize.size(totalSize))
                 .build(),
-                new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+                new MailboxIdRegistrationKey(mailbox.getMailboxId()))
+                .block();
             return m;
         });
 
@@ -446,7 +448,8 @@ public class StoreMailboxManager implements MailboxManager {
             .oldPath(from)
             .newPath(to)
             .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()))
+            .block();
 
         // rename submailboxes
         MailboxPath children = new MailboxPath(from.getNamespace(), from.getUser(), from.getName() + getDelimiter() + "%");
@@ -465,7 +468,8 @@ public class StoreMailboxManager implements MailboxManager {
                     .oldPath(fromPath)
                     .newPath(sub.generateAssociatedPath())
                     .build(),
-                    new MailboxIdRegistrationKey(sub.getMailboxId()));
+                    new MailboxIdRegistrationKey(sub.getMailboxId()))
+                    .block();
 
                 LOGGER.debug("Rename mailbox sub-mailbox {} to {}", subOriginalName, subNewName);
             }

http://git-wip-us.apache.org/repos/asf/james-project/blob/24fe28f0/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
index 04478cd..55a82fe 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
@@ -75,6 +75,9 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
 public class StoreMessageIdManager implements MessageIdManager {
 
     private static class MetadataWithMailboxId {
@@ -218,15 +221,18 @@ public class StoreMessageIdManager implements MessageIdManager {
                     MailboxMessage::getMailboxId)));
 
         MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
-        for (MetadataWithMailboxId metadataWithMailboxId : metadataWithMailbox) {
-            eventBus.dispatch(EventFactory.expunged()
-                .randomEventId()
-                .mailboxSession(mailboxSession)
-                .mailbox(mailboxMapper.findMailboxById(metadataWithMailboxId.mailboxId))
-                .addMetaData(metadataWithMailboxId.messageMetaData)
-                .build(),
-                new MailboxIdRegistrationKey(metadataWithMailboxId.mailboxId));
-        }
+        Flux.fromIterable(metadataWithMailbox)
+            .flatMap(Throwing.<StoreMessageIdManager.MetadataWithMailboxId, Mono<Void>>function(
+                metadataWithMailboxId -> eventBus.dispatch(EventFactory.expunged()
+                    .randomEventId()
+                    .mailboxSession(mailboxSession)
+                    .mailbox(mailboxMapper.findMailboxById(metadataWithMailboxId.mailboxId))
+                    .addMetaData(metadataWithMailboxId.messageMetaData)
+                    .build(),
+                new MailboxIdRegistrationKey(metadataWithMailboxId.mailboxId)))
+                .sneakyThrow())
+            .then()
+            .block();
     }
 
     @Override
@@ -295,7 +301,8 @@ public class StoreMessageIdManager implements MessageIdManager {
             .build(),
             messageMoves.impactedMailboxIds()
                 .map(MailboxIdRegistrationKey::new)
-                .collect(Guavate.toImmutableSet()));
+                .collect(Guavate.toImmutableSet()))
+            .block();
     }
 
     private void removeMessageFromMailboxes(MailboxMessage message, Set<MailboxId> mailboxesToRemove, MailboxSession mailboxSession) throws MailboxException {
@@ -311,7 +318,8 @@ public class StoreMessageIdManager implements MessageIdManager {
                 .mailbox(mailboxMapper.findMailboxById(mailboxId))
                 .addMetaData(eventPayload)
                 .build(),
-                new MailboxIdRegistrationKey(mailboxId));
+                new MailboxIdRegistrationKey(mailboxId))
+            .block();
         }
     }
 
@@ -329,7 +337,8 @@ public class StoreMessageIdManager implements MessageIdManager {
                 .mailbox(mailbox)
                 .updatedFlag(updatedFlags)
                 .build(),
-                new MailboxIdRegistrationKey(mailboxId));
+                new MailboxIdRegistrationKey(mailboxId))
+                .block();
         }
     }
 
@@ -397,7 +406,8 @@ public class StoreMessageIdManager implements MessageIdManager {
                 .mailbox(mailboxMapper.findMailboxById(mailboxId))
                 .addMessage(copy)
                 .build(),
-                new MailboxIdRegistrationKey(mailboxId));
+                new MailboxIdRegistrationKey(mailboxId))
+                .block();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/24fe28f0/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index e38a291..1b4b20e 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -96,6 +96,8 @@ import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSortedMap;
 
+import reactor.core.publisher.Flux;
+
 /**
  * Base class for {@link org.apache.james.mailbox.MessageManager}
  * implementations.
@@ -264,7 +266,8 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             .mailbox(getMailboxEntity())
             .metaData(ImmutableSortedMap.copyOf(uids))
             .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()))
+            .block();
         return uids.keySet().iterator();
     }
 
@@ -412,7 +415,8 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
                             .mailbox(mailbox)
                             .addMessage(copy)
                             .build(),
-                            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+                            new MailboxIdRegistrationKey(mailbox.getMailboxId()))
+                            .block();
                         return new ComposedMessageId(mailbox.getMailboxId(), data.getMessageId(), data.getUid());
                     }, true);
                 }
@@ -575,7 +579,8 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             .mailbox(getMailboxEntity())
             .updatedFlags(updatedFlags)
             .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()))
+            .block();
 
         return updatedFlags.stream().collect(Guavate.toImmutableMap(
             UpdatedFlags::getUid,
@@ -734,22 +739,24 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             messageIds.add(message.getMessageId());
         }
 
-        eventBus.dispatch(EventFactory.added()
-            .randomEventId()
-            .mailboxSession(session)
-            .mailbox(to.getMailboxEntity())
-            .metaData(copiedUids)
-            .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
-        eventBus.dispatch(EventFactory.moved()
-            .session(session)
-            .messageMoves(MessageMoves.builder()
-                .previousMailboxIds(getMailboxEntity().getMailboxId())
-                .targetMailboxIds(to.getMailboxEntity().getMailboxId(), getMailboxEntity().getMailboxId())
-                .build())
-            .messageId(messageIds.build())
-            .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+        Flux.merge(
+            eventBus.dispatch(EventFactory.added()
+                    .randomEventId()
+                    .mailboxSession(session)
+                    .mailbox(to.getMailboxEntity())
+                    .metaData(copiedUids)
+                    .build(),
+                new MailboxIdRegistrationKey(to.getMailboxEntity().getMailboxId())),
+            eventBus.dispatch(EventFactory.moved()
+                    .session(session)
+                    .messageMoves(MessageMoves.builder()
+                        .previousMailboxIds(getMailboxEntity().getMailboxId())
+                        .targetMailboxIds(to.getMailboxEntity().getMailboxId(), getMailboxEntity().getMailboxId())
+                        .build())
+                    .messageId(messageIds.build())
+                    .build(),
+                new MailboxIdRegistrationKey(mailbox.getMailboxId())))
+            .then().block();
 
         return copiedUids;
     }
@@ -765,29 +772,31 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             messageIds.add(message.getMessageId());
         }
 
-        eventBus.dispatch(EventFactory.added()
-            .randomEventId()
-            .mailboxSession(session)
-            .mailbox(to.getMailboxEntity())
-            .metaData(moveUids)
-            .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
-        eventBus.dispatch(EventFactory.expunged()
-            .randomEventId()
-            .mailboxSession(session)
-            .mailbox(getMailboxEntity())
-            .addMetaData(moveResult.getOriginalMessages())
-            .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
-        eventBus.dispatch(EventFactory.moved()
-            .messageMoves(MessageMoves.builder()
-                .previousMailboxIds(getMailboxEntity().getMailboxId())
-                .targetMailboxIds(to.getMailboxEntity().getMailboxId())
-                .build())
-            .messageId(messageIds.build())
-            .session(session)
-            .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+        Flux.merge(
+            eventBus.dispatch(EventFactory.added()
+                    .randomEventId()
+                    .mailboxSession(session)
+                    .mailbox(to.getMailboxEntity())
+                    .metaData(moveUids)
+                    .build(),
+                new MailboxIdRegistrationKey(to.getMailboxEntity().getMailboxId())),
+            eventBus.dispatch(EventFactory.expunged()
+                    .randomEventId()
+                    .mailboxSession(session)
+                    .mailbox(getMailboxEntity())
+                    .addMetaData(moveResult.getOriginalMessages())
+                    .build(),
+                new MailboxIdRegistrationKey(mailbox.getMailboxId())),
+            eventBus.dispatch(EventFactory.moved()
+                    .messageMoves(MessageMoves.builder()
+                        .previousMailboxIds(getMailboxEntity().getMailboxId())
+                        .targetMailboxIds(to.getMailboxEntity().getMailboxId())
+                        .build())
+                    .messageId(messageIds.build())
+                    .session(session)
+                    .build(),
+                new MailboxIdRegistrationKey(mailbox.getMailboxId())))
+            .then().block();
 
         return moveUids;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/24fe28f0/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
index 25a8bdc..6cb00f4 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
@@ -146,7 +146,8 @@ public class StoreRightManager implements RightManager {
             .mailbox(mailbox)
             .aclDiff(aclDiff)
             .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()))
+            .block();
     }
 
     private void assertSharesBelongsToUserDomain(String user, ACLCommand mailboxACLCommand) throws DifferentDomainException {
@@ -230,7 +231,8 @@ public class StoreRightManager implements RightManager {
             .mailbox(mailbox)
             .aclDiff(aclDiff)
             .build(),
-            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()))
+            .block();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/24fe28f0/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index 272ced8..26fea63 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -105,7 +105,8 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
                 .quotaSize(quotaManager.getStorageQuota(quotaRoot))
                 .instant(Instant.now())
                 .build(),
-            NO_REGISTRATION_KEYS);
+            NO_REGISTRATION_KEYS)
+            .block();
     }
 
     private void handleAddedEvent(Added added, QuotaRoot quotaRoot) throws MailboxException {
@@ -128,7 +129,8 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
                 .quotaSize(quotaManager.getStorageQuota(quotaRoot))
                 .instant(Instant.now())
                 .build(),
-            NO_REGISTRATION_KEYS);
+            NO_REGISTRATION_KEYS)
+            .block();
     }
 
     private void handleMailboxDeletionEvent(MailboxDeletion mailboxDeletionEvent) throws MailboxException {


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


[06/27] james-project git commit: JAMES-2641 Introduce GroupMailboxListener

Posted by bt...@apache.org.
JAMES-2641 Introduce GroupMailboxListener

That is mailboxListener carrying their default execution group around.


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

Branch: refs/heads/master
Commit: 0a3b38abea5ee8b030a6973ec812ee4fe5c1790c
Parents: 8cf25c7
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 10:49:06 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/MailboxListener.java   |  5 +++++
 .../org/apache/james/mailbox/util/EventCollector.java    | 11 ++++++++++-
 .../caching/CacheInvalidatingMailboxListener.java        | 10 +++++++++-
 .../cassandra/MailboxOperationLoggingListener.java       | 11 ++++++++++-
 .../events/ElasticSearchListeningMessageSearchIndex.java |  8 ++++++++
 .../mailbox/lucene/search/LuceneMessageSearchIndex.java  |  8 ++++++++
 .../listeners/QuotaThresholdCrossingListener.java        | 11 ++++++++++-
 .../events/ElasticSearchQuotaMailboxListener.java        | 10 +++++++++-
 .../james/mailbox/spamassassin/SpamAssassinListener.java |  8 ++++++++
 .../james/mailbox/store/event/SpamEventListener.java     |  2 +-
 .../store/quota/ListeningCurrentQuotaUpdater.java        | 10 +++++++++-
 .../mailbox/store/search/LazyMessageSearchIndex.java     |  8 ++++++++
 .../store/search/ListeningMessageSearchIndex.java        |  2 +-
 .../james/modules/mailbox/NoopMailboxListener.java       | 11 ++++++++++-
 .../james/jmap/event/PropagateLookupRightListener.java   | 11 ++++++++++-
 15 files changed, 116 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index 7eb3709..253347c 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -30,6 +30,7 @@ import org.apache.james.core.User;
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.acl.ACLDiff;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageMetaData;
@@ -48,6 +49,10 @@ import com.google.common.collect.ImmutableMap;
  */
 public interface MailboxListener {
 
+    interface GroupMailboxListener extends MailboxListener {
+        Group getGroup();
+    }
+
     enum ListenerType {
         ONCE,
         EACH_NODE,

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
index 7152cf3..7b8cffa 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
@@ -24,8 +24,12 @@ import java.util.List;
 
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.Group;
 
-public class EventCollector implements MailboxListener {
+public class EventCollector implements MailboxListener.GroupMailboxListener {
+    private static class EventCollectorGroup extends Group {}
+
+    private static final Group GROUP = new EventCollectorGroup();
 
     private final List<Event> events = new ArrayList<>();
 
@@ -40,6 +44,11 @@ public class EventCollector implements MailboxListener {
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public ListenerType getType() {
         return listenerType;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
index fdbf311..02b436b 100644
--- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
+++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
@@ -3,6 +3,7 @@ package org.apache.james.mailbox.caching;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxListenerSupport;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -11,9 +12,11 @@ import org.slf4j.LoggerFactory;
  * A MailboxListener that invalidates the configured caches in response to Events
  *
  */
-public class CacheInvalidatingMailboxListener implements MailboxListener {
+public class CacheInvalidatingMailboxListener implements MailboxListener.GroupMailboxListener {
+    private static class CacheInvalidatingMailboxListenerGroup extends Group {}
 
     private static final Logger LOGGER = LoggerFactory.getLogger(CacheInvalidatingMailboxListener.class);
+    private static final Group GROUP = new CacheInvalidatingMailboxListenerGroup();
 
     private final MailboxByPathCache mailboxCacheByPath;
     private final MailboxMetadataCache mailboxMetadataCache;
@@ -23,6 +26,11 @@ public class CacheInvalidatingMailboxListener implements MailboxListener {
         this.mailboxMetadataCache = mailboxMetadataCache;
     }
 
+    @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
     /**
      * Used to register the CacheInvalidatingMailboxListener as a global listener
      * into the main MailboxListener

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
index 8d8ae40..2d96b04 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
@@ -25,15 +25,19 @@ import static org.apache.james.mailbox.cassandra.GhostMailbox.TYPE;
 
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.Group;
 
 /**
  * See https://issues.apache.org/jira/browse/MAILBOX-322 for reading about the Ghost mailbox bug.
  *
  * This class logs mailboxes writes in order to give context to analyse ghost mailbox bug.
  */
-public class MailboxOperationLoggingListener implements MailboxListener {
+public class MailboxOperationLoggingListener implements MailboxListener.GroupMailboxListener {
+    private static class MailboxOperationLoggingListenerGroup extends Group {}
+
     public static final String ADDED = "Added";
     public static final String REMOVED = "Removed";
+    private static final Group GROUP = new MailboxOperationLoggingListenerGroup();
 
     @Override
     public ListenerType getType() {
@@ -41,6 +45,11 @@ public class MailboxOperationLoggingListener implements MailboxListener {
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public void event(Event event) {
         if (event instanceof MailboxRenamed) {
             MailboxRenamed mailboxRenamed = (MailboxRenamed) event;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/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 6d4929e..644a5ee 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
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
 import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
@@ -59,9 +60,11 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSearchIndex {
+    private static class ElasticSearchListeningMessageSearchIndexGroup extends Group {}
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchListeningMessageSearchIndex.class);
     private static final String ID_SEPARATOR = ":";
+    private static final Group GROUP = new ElasticSearchListeningMessageSearchIndexGroup();
 
     private final ElasticSearchIndexer elasticSearchIndexer;
     private final ElasticSearchSearcher searcher;
@@ -84,6 +87,11 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public EnumSet<SearchCapabilities> getSupportedCapabilities(EnumSet<MessageCapabilities> messageCapabilities) {
         return EnumSet.of(
             SearchCapabilities.MultimailboxSearch,

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/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 7fffb74..8ab47aa 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
@@ -131,9 +131,12 @@ import com.google.common.collect.ImmutableList;
  * @param 
  */
 public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
+    private static class LuceneMessageSearchIndexGroup extends org.apache.james.mailbox.events.Group {}
+
     private static final Logger LOGGER = LoggerFactory.getLogger(LuceneMessageSearchIndex.class);
     private static final Date MAX_DATE;
     private static final Date MIN_DATE;
+    private static final org.apache.james.mailbox.events.Group GROUP = new LuceneMessageSearchIndexGroup();
     
     static {
         Calendar cal = Calendar.getInstance();
@@ -399,6 +402,11 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
     }
 
     @Override
+    public org.apache.james.mailbox.events.Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public ListenerType getType() {
         return ListenerType.EACH_NODE;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
index 3f421c3..cb87c55 100644
--- a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
+++ b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
@@ -30,6 +30,7 @@ import org.apache.james.eventsourcing.eventstore.EventStore;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.quota.mailing.QuotaMailingListenerConfiguration;
 import org.apache.james.mailbox.quota.mailing.commands.DetectThresholdCrossing;
 import org.apache.james.mailbox.quota.mailing.commands.DetectThresholdCrossingHandler;
@@ -41,8 +42,11 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableSet;
 
-public class QuotaThresholdCrossingListener implements MailboxListener {
+public class QuotaThresholdCrossingListener implements MailboxListener.GroupMailboxListener {
+    private static class QuotaThresholdCrossingListenerGroup extends Group {}
+
     private static final Logger LOGGER = LoggerFactory.getLogger(QuotaThresholdCrossingListener.class);
+    private static final Group GROUP = new QuotaThresholdCrossingListenerGroup();
 
     private final EventSourcingSystem eventSourcingSystem;
 
@@ -62,6 +66,11 @@ public class QuotaThresholdCrossingListener implements MailboxListener {
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public ListenerType getType() {
         return ListenerType.ONCE;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index f901cfd..ac9fed0 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -25,6 +25,7 @@ import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.core.User;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.slf4j.Logger;
@@ -32,9 +33,11 @@ import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 
-public class ElasticSearchQuotaMailboxListener implements MailboxListener {
+public class ElasticSearchQuotaMailboxListener implements MailboxListener.GroupMailboxListener {
+    private static class ElasticSearchQuotaMailboxListenerGroup extends Group {}
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchQuotaMailboxListener.class);
+    private static final Group GROUP = new ElasticSearchQuotaMailboxListenerGroup();
 
     private final ElasticSearchIndexer indexer;
     private final QuotaRatioToElasticSearchJson quotaRatioToElasticSearchJson;
@@ -48,6 +51,11 @@ public class ElasticSearchQuotaMailboxListener implements MailboxListener {
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public ListenerType getType() {
         return ListenerType.ONCE;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
index b6ffcd4..f64061c 100644
--- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
+++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
@@ -30,6 +30,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageMoveEvent;
 import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.SystemMailboxesProvider;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageRange;
@@ -49,9 +50,11 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 
 public class SpamAssassinListener implements SpamEventListener {
+    private static class SpamAssassinListenerGroup extends Group {}
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SpamAssassinListener.class);
     private static final int LIMIT = 1;
+    private static final Group GROUP = new SpamAssassinListenerGroup();
 
     private final SpamAssassin spamAssassin;
     private final SystemMailboxesProvider systemMailboxesProvider;
@@ -69,6 +72,11 @@ public class SpamAssassinListener implements SpamEventListener {
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public ListenerType getType() {
         return ListenerType.ONCE;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SpamEventListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SpamEventListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SpamEventListener.java
index 94321c7..d908a98 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SpamEventListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SpamEventListener.java
@@ -20,6 +20,6 @@ package org.apache.james.mailbox.store.event;
 
 import org.apache.james.mailbox.MailboxListener;
 
-public interface SpamEventListener extends MailboxListener {
+public interface SpamEventListener extends MailboxListener.GroupMailboxListener {
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index e00c087..c084bcd 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -26,6 +26,7 @@ import javax.inject.Inject;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.quota.QuotaManager;
@@ -35,9 +36,11 @@ import org.apache.james.mailbox.store.event.EventFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdater {
+public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailboxListener, QuotaUpdater {
+    private static class ListeningCurrentQuotaUpdaterGroup extends Group {}
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ListeningCurrentQuotaUpdater.class);
+    private static final Group GROUP = new ListeningCurrentQuotaUpdaterGroup();
 
     private final StoreCurrentQuotaManager currentQuotaManager;
     private final QuotaRootResolver quotaRootResolver;
@@ -53,6 +56,11 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdat
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public ListenerType getType() {
         return currentQuotaManager.getAssociatedListenerType();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/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 32f9d32..7ad6fce 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
@@ -28,6 +28,7 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.UnsupportedSearchException;
 import org.apache.james.mailbox.model.MailboxId;
@@ -55,8 +56,10 @@ import com.google.common.base.Preconditions;
  *
  */
 public class LazyMessageSearchIndex extends ListeningMessageSearchIndex {
+    private static class LazyMessageSearchIndexGroup extends Group {}
 
     private static final Logger LOGGER = LoggerFactory.getLogger(LazyMessageSearchIndex.class);
+    private static final Group GROUP = new LazyMessageSearchIndexGroup();
 
     private final ListeningMessageSearchIndex index;
     private final ConcurrentHashMap<MailboxId, Object> indexed = new ConcurrentHashMap<>();
@@ -70,6 +73,11 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex {
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public ListenerType getType() {
         return index.getType();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/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 25d9952..c6301c2 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
@@ -45,7 +45,7 @@ import com.google.common.collect.ImmutableList;
  * 
  *
  */
-public abstract class ListeningMessageSearchIndex implements MessageSearchIndex, MailboxListener {
+public abstract class ListeningMessageSearchIndex implements MessageSearchIndex, MailboxListener.GroupMailboxListener {
     private static final Logger LOGGER = LoggerFactory.getLogger(ListeningMessageSearchIndex.class);
 
     private static final int UNLIMITED = -1;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
index 003c56e..f5c10d5 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
@@ -20,8 +20,12 @@ package org.apache.james.modules.mailbox;
 
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.Group;
 
-public class NoopMailboxListener implements MailboxListener {
+public class NoopMailboxListener implements MailboxListener.GroupMailboxListener {
+    private static class NoopMailboxListenerGroup extends Group {}
+
+    public static final Group GROUP = new NoopMailboxListenerGroup();
 
     @Override
     public ListenerType getType() {
@@ -29,6 +33,11 @@ public class NoopMailboxListener implements MailboxListener {
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public void event(Event event) {
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/0a3b38ab/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
index f890c4a..53cd813 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.RightManager;
 import org.apache.james.mailbox.acl.ACLDiff;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxACL.Entry;
@@ -37,8 +38,11 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class PropagateLookupRightListener implements MailboxListener {
+public class PropagateLookupRightListener implements MailboxListener.GroupMailboxListener {
+    private static class PropagateLookupRightListenerGroup extends Group {}
+
     private static final Logger LOGGER = LoggerFactory.getLogger(PropagateLookupRightListener.class);
+    private static final Group GROUP = new PropagateLookupRightListenerGroup();
 
     private final RightManager rightManager;
     private final MailboxManager mailboxManager;
@@ -50,6 +54,11 @@ public class PropagateLookupRightListener implements MailboxListener {
     }
 
     @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
+    @Override
     public ListenerType getType() {
         return ListenerType.ONCE;
     }


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


[15/27] james-project git commit: JAMES-2641 MailboxManager should no more implement MailboxListener support

Posted by bt...@apache.org.
JAMES-2641 MailboxManager should no more implement MailboxListener support

It should rather expose proxy method for the event bus.

Note that these proxy method can be temporarily implemented on top of the Delegating Listener


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

Branch: refs/heads/master
Commit: c82c13844e7ee19ee06a8d8a57cd8c70ed437e6a
Parents: 7e0fdc6
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 10:53:15 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxManager.java    |  10 +-
 .../james/mailbox/MailboxManagerStressTest.java |  17 ++-
 .../james/mailbox/MailboxManagerTest.java       |  20 +--
 .../CassandraMessageIdManagerTestSystem.java    |   2 +-
 ...ticSearchQuotaSearchTestSystemExtension.java |   4 +-
 .../mailbox/store/StoreMailboxManager.java      |  62 +++++---
 .../james/imap/processor/IdleProcessor.java     | 144 ++++++++-----------
 .../processor/base/SelectedMailboxImpl.java     |  30 ++--
 .../processor/base/SelectedMailboxImplTest.java |   4 +-
 .../org/apache/james/utils/JmapGuiceProbe.java  |   4 +-
 .../event/PropagateLookupRightListenerTest.java |   2 +-
 .../ElasticSearchQuotaSearchExtension.java      |   4 +-
 12 files changed, 146 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index 1aedc86..be6c107 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -23,6 +23,8 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.Optional;
 
+import org.apache.james.mailbox.events.Group;
+import org.apache.james.mailbox.events.Registration;
 import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
@@ -68,7 +70,7 @@ import org.apache.james.mailbox.model.search.MailboxQuery;
  * </p>
  */
 
-public interface MailboxManager extends RequestAware, MailboxListenerSupport, RightManager, MailboxAnnotationManager {
+public interface MailboxManager extends RequestAware, RightManager, MailboxAnnotationManager {
 
     int MAX_MAILBOX_NAME_LENGTH = 200;
 
@@ -344,4 +346,10 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport, Ri
     List<MailboxPath> list(MailboxSession session) throws MailboxException;
 
     boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException;
+
+    Registration register(MailboxListener listener, MailboxId registrationKey);
+
+    Registration register(MailboxListener listener, Group group);
+
+    Registration register(MailboxListener.GroupMailboxListener groupMailboxListener);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
index 41819a9..ce1f83c 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
@@ -22,7 +22,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
-import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.CountDownLatch;
@@ -59,15 +58,15 @@ public abstract class MailboxManagerStressTest {
     public void testStressTest() throws InterruptedException, MailboxException {
         ThreadFactory threadFactory = NamedThreadFactory.withClassName(getClass());
 
-        final CountDownLatch latch = new CountDownLatch(APPEND_OPERATIONS);
-        final ExecutorService pool = Executors.newFixedThreadPool(APPEND_OPERATIONS / 20, threadFactory);
-        final Collection<MessageUid> uList = new ConcurrentLinkedDeque<>();
-        final String username = "username";
+        CountDownLatch latch = new CountDownLatch(APPEND_OPERATIONS);
+        ExecutorService pool = Executors.newFixedThreadPool(APPEND_OPERATIONS / 20, threadFactory);
+        Collection<MessageUid> uList = new ConcurrentLinkedDeque<>();
+        String username = "username";
         MailboxSession session = mailboxManager.createSystemSession(username);
         mailboxManager.startProcessingRequest(session);
-        final MailboxPath path = MailboxPath.forUser(username, "INBOX");
-        Optional<MailboxId> mailboxId = mailboxManager.createMailbox(path, session);
-        mailboxManager.addListener(mailboxId.get(), new MailboxListener() {
+        MailboxPath path = MailboxPath.forUser(username, "INBOX");
+        MailboxId mailboxId = mailboxManager.createMailbox(path, session).get();
+        mailboxManager.register(new MailboxListener() {
             @Override
             public ListenerType getType() {
                 return ListenerType.MAILBOX;
@@ -78,7 +77,7 @@ public abstract class MailboxManagerStressTest {
                 MessageUid u = ((Added) event).getUids().iterator().next();
                 uList.add(u);
             }
-        }, session);
+        }, mailboxId);
         mailboxManager.endProcessingRequest(session);
         mailboxManager.logout(session, false);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index e8dd5a3..0172ac7 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -382,7 +382,7 @@ public abstract class MailboxManagerTest {
         @Test
         void deleteMailboxShouldFireMailboxDeletionEvent() throws Exception {
             assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota));
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
 
             mailboxManager.deleteMailbox(inbox, session);
 
@@ -400,7 +400,7 @@ public abstract class MailboxManagerTest {
         @Test
         void createMailboxShouldFireMailboxAddedEvent() throws Exception {
             assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota));
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
 
             Optional<MailboxId> newId = mailboxManager.createMailbox(newPath, session);
 
@@ -415,7 +415,7 @@ public abstract class MailboxManagerTest {
         @Test
         void addingMessageShouldFireQuotaUpdateEvent() throws Exception {
             assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota));
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
 
             inboxManager.appendMessage(MessageManager.AppendCommand.builder()
                     .build(message), session);
@@ -438,7 +438,7 @@ public abstract class MailboxManagerTest {
 
         @Test
         void addingMessageShouldFireAddedEvent() throws Exception {
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
             inboxManager.appendMessage(MessageManager.AppendCommand.builder()
                     .build(message), session);
 
@@ -456,7 +456,7 @@ public abstract class MailboxManagerTest {
             inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session);
             inboxManager.setFlags(new Flags(Flags.Flag.DELETED), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session);
 
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
             inboxManager.expunge(MessageRange.all(), session);
 
             assertThat(listener.getEvents())
@@ -472,7 +472,7 @@ public abstract class MailboxManagerTest {
         void setFlagsShouldFireFlagsUpdatedEvent() throws Exception {
             inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session);
 
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
             inboxManager.setFlags(new Flags(Flags.Flag.FLAGGED), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session);
 
             assertThat(listener.getEvents())
@@ -490,7 +490,7 @@ public abstract class MailboxManagerTest {
             Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
             mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -508,7 +508,7 @@ public abstract class MailboxManagerTest {
             mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
             mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -525,7 +525,7 @@ public abstract class MailboxManagerTest {
             Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
             mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -542,7 +542,7 @@ public abstract class MailboxManagerTest {
             mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            mailboxManager.addGlobalListener(listener, session);
+            mailboxManager.register(listener);
             mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/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 ede1fe2..d09d540 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
@@ -47,7 +47,7 @@ public class CassandraMessageIdManagerTestSystem {
         ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(
             (StoreCurrentQuotaManager) currentQuotaManager,
             mailboxManager.getQuotaComponents().getQuotaRootResolver(), mailboxManager.getDelegationListener(), quotaManager);
-        mailboxManager.addGlobalListener(listeningCurrentQuotaUpdater, mailboxManager.createSystemSession("System"));
+        mailboxManager.register(listeningCurrentQuotaUpdater);
         return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getDelegationListener()),
             new CassandraMessageId.Factory(),
             mapperFactory,

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/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 ae50774..4cc91e0 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
@@ -30,7 +30,6 @@ import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.utils.TestingClientProvider;
 import org.apache.james.dnsservice.api.DNSService;
 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;
@@ -79,8 +78,7 @@ public class ElasticSearchQuotaSearchTestSystemExtension implements ParameterRes
                     QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE),
                 new QuotaRatioToElasticSearchJson());
 
-            resources.getMailboxManager()
-                .addGlobalListener(listener, MailboxSessionUtil.create("ANY"));
+            resources.getMailboxManager().register(listener);
 
             QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/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 c097f99..2145f1f 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
@@ -39,6 +39,8 @@ import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.StandardMailboxMetaDataComparator;
+import org.apache.james.mailbox.events.Group;
+import org.apache.james.mailbox.events.Registration;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -605,11 +607,6 @@ public class StoreMailboxManager implements MailboxManager {
 
     }
 
-    @Override
-    public void addListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException {
-        delegatingListener.addListener(mailboxId, listener, session);
-    }
-
     /**
      * End processing of Request for session
      */
@@ -636,22 +633,6 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     @Override
-    public void addGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException {
-        delegatingListener.addGlobalListener(listener, session);
-    }
-
-    @Override
-    public void removeListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException {
-        delegatingListener.removeListener(mailboxId, listener, session);
-
-    }
-
-    @Override
-    public void removeGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException {
-        delegatingListener.removeGlobalListener(listener, session);
-    }
-
-    @Override
     public boolean hasRight(MailboxPath mailboxPath, Right right, MailboxSession session) throws MailboxException {
         return storeRightManager.hasRight(mailboxPath, right, session);
     }
@@ -737,4 +718,43 @@ public class StoreMailboxManager implements MailboxManager {
         Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
         return mapper.hasChildren(mailbox, session.getPathDelimiter());
     }
+
+    @Override
+    public Registration register(MailboxListener listener, MailboxId registrationKey) {
+        MailboxSession session = createSystemSession("admin");
+        try {
+            delegatingListener.addListener(registrationKey, listener, session);
+        } catch (MailboxException e) {
+            throw new RuntimeException(e);
+        }
+        return () -> {
+            try {
+                delegatingListener.removeListener(registrationKey, listener, session);
+            } catch (MailboxException e) {
+                throw new RuntimeException(e);
+            }
+        };
+    }
+
+    @Override
+    public Registration register(MailboxListener listener, Group group) {
+        MailboxSession session = createSystemSession("admin");
+        try {
+            delegatingListener.addGlobalListener(listener, session);
+        } catch (MailboxException e) {
+            throw new RuntimeException(e);
+        }
+        return () -> {
+            try {
+                delegatingListener.removeGlobalListener(listener, session);
+            } catch (MailboxException e) {
+                throw new RuntimeException(e);
+            }
+        };
+    }
+
+    @Override
+    public Registration register(MailboxListener.GroupMailboxListener groupMailboxListener) {
+        return register(groupMailboxListener, groupMailboxListener.getGroup());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index 7700d28..ce886e5 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -33,7 +33,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapConfiguration;
 import org.apache.james.imap.api.ImapSessionState;
-import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.api.message.response.StatusResponse;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
@@ -46,22 +45,18 @@ import org.apache.james.imap.message.response.ContinuationResponse;
 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.events.Registration;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.util.MDCBuilder;
 import org.apache.james.util.concurrent.NamedThreadFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableList;
 
 public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> implements CapabilityImplementingProcessor {
-    private static final Logger LOGGER = LoggerFactory.getLogger(IdleProcessor.class);
-
     private static final List<String> CAPS = ImmutableList.of(SUPPORTS_IDLE);
     public static final int DEFAULT_SCHEDULED_POOL_CORE_SIZE = 5;
     private static final String DONE = "DONE";
+
     private TimeUnit heartbeatIntervalUnit;
     private long heartbeatInterval;
     private boolean enableIdle;
@@ -86,89 +81,74 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
     }
 
     @Override
-    protected void doProcess(IdleRequest message, final ImapSession session, final String tag, final ImapCommand command, final Responder responder) {
-
-        try {
-          
-            final MailboxManager mailboxManager = getMailboxManager();
-            final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
-            final SelectedMailbox sm = session.getSelected();
-            final IdleMailboxListener idleListener;
-            if (sm != null) {
-                idleListener = new IdleMailboxListener(session, responder);
-                mailboxManager.addListener(sm.getMailboxId(), idleListener, mailboxSession);
-            } else {
-                idleListener = null;
-            }
+    protected void doProcess(IdleRequest message, ImapSession session, String tag, ImapCommand command, Responder responder) {
+        MailboxManager mailboxManager = getMailboxManager();
+        SelectedMailbox sm = session.getSelected();
+        Registration registration;
+        if (sm != null) {
+            registration = mailboxManager.register(new IdleMailboxListener(session, responder), sm.getMailboxId());
+        } else {
+            registration = null;
+        }
 
-            final AtomicBoolean idleActive = new AtomicBoolean(true);
-            
-            session.pushLineHandler(new ImapLineHandler() {
-                @Override
-                public void onLine(ImapSession session, byte[] data) {
-                    String line;
-                    if (data.length > 2) {
-                        line = new String(data, 0, data.length - 2);
-                    } else {
-                        line = "";
-                    }
+        final AtomicBoolean idleActive = new AtomicBoolean(true);
 
-                    if (idleListener != null) {
-                        try {
-                            mailboxManager.removeListener(sm.getMailboxId(), idleListener, mailboxSession);
-                        } catch (MailboxException e) {
-                                LOGGER.error("Unable to remove idle listener for mailbox {}", sm.getMailboxId(), e);
-                        }
-                    }
-                    session.popLineHandler();
-                    if (!DONE.equals(line.toUpperCase(Locale.US))) {
-                        StatusResponse response = getStatusResponseFactory().taggedBad(tag, command, HumanReadableText.INVALID_COMMAND);
-                        responder.respond(response);
-                    } else {
-                        okComplete(command, tag, responder);
+        session.pushLineHandler(new ImapLineHandler() {
+            @Override
+            public void onLine(ImapSession session, byte[] data) {
+                String line;
+                if (data.length > 2) {
+                    line = new String(data, 0, data.length - 2);
+                } else {
+                    line = "";
+                }
 
-                    }
-                    idleActive.set(false);
+                if (registration != null) {
+                    registration.unregister();
                 }
-            });
-
-            // Check if we should send heartbeats
-            if (enableIdle) {
-                heartbeatExecutor.schedule(new Runnable() {
-
-                    @Override
-                    public void run() {
-                        // check if we need to cancel the Runnable
-                        // See IMAP-275
-                        if (session.getState() != ImapSessionState.LOGOUT && idleActive.get()) {
-                            // Send a heartbeat to the client to make sure we
-                            // reset the idle timeout. This is kind of the same
-                            // workaround as dovecot use.
-                            //
-                            // This is mostly needed because of the broken
-                            // outlook client, but can't harm for other clients
-                            // too.
-                            // See IMAP-272
-                            StatusResponse response = getStatusResponseFactory().untaggedOk(HumanReadableText.HEARTBEAT);
-                            responder.respond(response);
-                            
-                            // schedule the heartbeat again for the next interval
-                            heartbeatExecutor.schedule(this, heartbeatInterval, heartbeatIntervalUnit);
-                        }
-                    }
-                }, heartbeatInterval, heartbeatIntervalUnit);
+                session.popLineHandler();
+                if (!DONE.equals(line.toUpperCase(Locale.US))) {
+                    StatusResponse response = getStatusResponseFactory().taggedBad(tag, command, HumanReadableText.INVALID_COMMAND);
+                    responder.respond(response);
+                } else {
+                    okComplete(command, tag, responder);
+
+                }
+                idleActive.set(false);
             }
-            
-            // Write the response after the listener was add
-            // IMAP-341
-            responder.respond(new ContinuationResponse(HumanReadableText.IDLING));
-            unsolicitedResponses(session, responder, false);
+        });
+
+        // Check if we should send heartbeats
+        if (enableIdle) {
+            heartbeatExecutor.schedule(new Runnable() {
 
+                @Override
+                public void run() {
+                    // check if we need to cancel the Runnable
+                    // See IMAP-275
+                    if (session.getState() != ImapSessionState.LOGOUT && idleActive.get()) {
+                        // Send a heartbeat to the client to make sure we
+                        // reset the idle timeout. This is kind of the same
+                        // workaround as dovecot use.
+                        //
+                        // This is mostly needed because of the broken
+                        // outlook client, but can't harm for other clients
+                        // too.
+                        // See IMAP-272
+                        StatusResponse response = getStatusResponseFactory().untaggedOk(HumanReadableText.HEARTBEAT);
+                        responder.respond(response);
 
-        } catch (MailboxException e) {
-            LOGGER.error("Enable idle for {} failed", session.getSelected().getMailboxId(), e);
-            no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
+                        // schedule the heartbeat again for the next interval
+                        heartbeatExecutor.schedule(this, heartbeatInterval, heartbeatIntervalUnit);
+                    }
+                }
+            }, heartbeatInterval, heartbeatIntervalUnit);
         }
+
+        // Write the response after the listener was add
+        // IMAP-341
+        responder.respond(new ContinuationResponse(HumanReadableText.IDLING));
+        unsolicitedResponses(session, responder, false);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
index 67da6dd..7adacec 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
@@ -40,13 +40,12 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.Registration;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.UpdatedFlags;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableList;
 
@@ -54,31 +53,24 @@ import com.google.common.collect.ImmutableList;
  * Default implementation of {@link SelectedMailbox}
  */
 public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
-    private static final Logger LOGGER = LoggerFactory.getLogger(SelectedMailboxImpl.class);
-
-    private final Set<MessageUid> recentUids = new TreeSet<>();
-
-    private boolean recentUidRemoved = false;
-
+    private final Registration registration;
     private final MailboxManager mailboxManager;
-
     private final MailboxId mailboxId;
-
     private final ImapSession session;
-
     private final MailboxSession.SessionId sessionId;
+    private final MailboxSession mailboxSession;
+    private final UidMsnConverter uidMsnConverter;
+    private final Set<MessageUid> recentUids = new TreeSet<>();
     private final Set<MessageUid> flagUpdateUids = new TreeSet<>();
     private final Flags.Flag uninterestingFlag = Flags.Flag.RECENT;
     private final Set<MessageUid> expungedUids = new TreeSet<>();
-    private final UidMsnConverter uidMsnConverter;
 
+    private boolean recentUidRemoved = false;
     private boolean isDeletedByOtherSession = false;
     private boolean sizeChanged = false;
     private boolean silentFlagChanges = false;
     private final Flags applicableFlags;
-
     private boolean applicableFlagsChanged;
-    private final MailboxSession mailboxSession;
 
     public SelectedMailboxImpl(MailboxManager mailboxManager, ImapSession session, MailboxPath path) throws MailboxException {
         this.session = session;
@@ -95,7 +87,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
         MessageManager messageManager = mailboxManager.getMailbox(path, mailboxSession);
         mailboxId = messageManager.getId();
 
-        mailboxManager.addListener(mailboxId, this, mailboxSession);
+        registration = mailboxManager.register(this, mailboxId);
 
         applicableFlags = messageManager.getApplicableFlags(mailboxSession);
         uidMsnConverter.addAll(ImmutableList.copyOf(
@@ -119,13 +111,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
 
     @Override
     public synchronized void deselect() {
-        MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
-
-        try {
-            mailboxManager.removeListener(mailboxId, this, mailboxSession);
-        } catch (MailboxException e) {
-            LOGGER.error("Unable to remove listener {} from mailbox while closing it", this, e);
-        }
+        registration.unregister();
         
         uidMsnConverter.clear();
         flagUpdateUids.clear();

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
index 0b4a0a8..073528f 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
@@ -112,7 +112,7 @@ public class SelectedMailboxImplTest {
         final AtomicInteger successCount = new AtomicInteger(0);
         doAnswer(generateEmitEventAnswer(successCount))
             .when(mailboxManager)
-            .addListener(eq(mailboxId), any(MailboxListener.class), any(MailboxSession.class));
+            .register(any(MailboxListener.class), eq(mailboxId));
 
         SelectedMailboxImpl selectedMailbox = new SelectedMailboxImpl(
             mailboxManager,
@@ -127,7 +127,7 @@ public class SelectedMailboxImplTest {
         final AtomicInteger successCount = new AtomicInteger(0);
         doAnswer(generateEmitEventAnswer(successCount))
             .when(mailboxManager)
-            .addListener(eq(mailboxId), any(MailboxListener.class), any(MailboxSession.class));
+            .register(any(MailboxListener.class), eq(mailboxId));
 
         new SelectedMailboxImpl(
             mailboxManager,

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
index 854d590..4c82971 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
@@ -55,8 +55,8 @@ public class JmapGuiceProbe implements GuiceProbe {
         return jmapServer.getPort();
     }
 
-    public void addMailboxListener(MailboxListener listener) throws MailboxException {
-        mailboxManager.addGlobalListener(listener, mailboxManager.createSystemSession("jmap"));
+    public void addMailboxListener(MailboxListener.GroupMailboxListener listener) {
+        mailboxManager.register(listener);
     }
 
     public void modifyVacation(AccountId accountId, VacationPatch vacationPatch) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
index e3ddb29..7ebeaa8 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
@@ -81,7 +81,7 @@ public class PropagateLookupRightListenerTest {
         mailboxMapper = storeMailboxManager.getMapperFactory();
 
         testee = new PropagateLookupRightListener(storeRightManager, storeMailboxManager);
-        storeMailboxManager.addGlobalListener(testee, mailboxSession);
+        storeMailboxManager.register(testee);
 
         parentMailboxId = storeMailboxManager.createMailbox(PARENT_MAILBOX, mailboxSession).get();
         parentMailboxId1 = storeMailboxManager.createMailbox(PARENT_MAILBOX1, mailboxSession).get();

http://git-wip-us.apache.org/repos/asf/james-project/blob/c82c1384/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 4db355b..59677e8 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
@@ -30,7 +30,6 @@ import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.utils.TestingClientProvider;
 import org.apache.james.dnsservice.api.DNSService;
 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;
@@ -82,8 +81,7 @@ public class ElasticSearchQuotaSearchExtension implements ParameterResolver, Bef
                     QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE),
                 new QuotaRatioToElasticSearchJson());
 
-            resources.getMailboxManager()
-                .addGlobalListener(listener, MailboxSessionUtil.create("ANY"));
+            resources.getMailboxManager().register(listener);
 
             QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
 


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


[02/27] james-project git commit: JAMES-2641 Delete DefaultDelegatingMailboxListenerTest

Posted by bt...@apache.org.
JAMES-2641 Delete DefaultDelegatingMailboxListenerTest


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

Branch: refs/heads/master
Commit: 0947b1b300b731139212c0a821fa44520adfff5c
Parents: 1f390f4
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 10:05:52 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:40 2019 +0700

----------------------------------------------------------------------
 .../DefaultDelegatingMailboxListenerTest.java   | 196 -------------------
 1 file changed, 196 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0947b1b3/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
deleted file mode 100644
index 9490f63..0000000
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
+++ /dev/null
@@ -1,196 +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.mailbox.store.event;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import org.apache.james.core.User;
-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.MailboxSession;
-import org.apache.james.mailbox.MailboxSessionUtil;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxId;
-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.util.EventCollector;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableSortedMap;
-
-public class DefaultDelegatingMailboxListenerTest {
-
-    private static final MailboxPath MAILBOX_PATH = new MailboxPath("namespace", "user", "name");
-    private static final MailboxPath OTHER_MAILBOX_PATH = new MailboxPath("namespace", "other", "name");
-    private static final MailboxId MAILBOX_ID = TestId.of(100);
-    private static final MailboxId OTHER_MAILBOX_ID = TestId.of(42);
-
-    private DefaultDelegatingMailboxListener defaultDelegatingMailboxListener;
-    private EventCollector mailboxEventCollector;
-    private EventCollector eachNodeEventCollector;
-    private EventCollector onceEventCollector;
-
-    @Before
-    public void setUp() throws Exception {
-        mailboxEventCollector = new EventCollector(MailboxListener.ListenerType.MAILBOX);
-        eachNodeEventCollector = new EventCollector(MailboxListener.ListenerType.EACH_NODE);
-        onceEventCollector = new EventCollector(MailboxListener.ListenerType.ONCE);
-        defaultDelegatingMailboxListener = new DefaultDelegatingMailboxListener();
-        defaultDelegatingMailboxListener.addListener(MAILBOX_ID, mailboxEventCollector, null);
-        defaultDelegatingMailboxListener.addGlobalListener(onceEventCollector, null);
-        defaultDelegatingMailboxListener.addGlobalListener(eachNodeEventCollector, null);
-    }
-
-    @Test(expected = MailboxException.class)
-    public void addListenerShouldThrowOnEACH_NODEListenerType() throws Exception {
-        MailboxListener mailboxListener = new EventCollector(MailboxListener.ListenerType.EACH_NODE);
-        defaultDelegatingMailboxListener.addListener(MAILBOX_ID, mailboxListener, null);
-    }
-
-    @Test(expected = MailboxException.class)
-    public void addListenerShouldThrowOnONCEListenerType() throws Exception {
-        MailboxListener mailboxListener = new EventCollector(MailboxListener.ListenerType.ONCE);
-        defaultDelegatingMailboxListener.addListener(MAILBOX_ID, mailboxListener, null);
-    }
-
-    @Test(expected = MailboxException.class)
-    public void addGlobalListenerShouldThrowOnMAILBOXListenerType() throws Exception {
-        MailboxListener mailboxListener = new EventCollector(MailboxListener.ListenerType.MAILBOX);
-        defaultDelegatingMailboxListener.addGlobalListener(mailboxListener, null);
-    }
-
-    @Test
-    public void eventShouldWork() {
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(event);
-        assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
-        assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
-        assertThat(onceEventCollector.getEvents()).containsExactly(event);
-    }
-
-    @Test
-    public void eventShouldOnlyTriggerMAILBOXListenerRelatedToTheEvent() {
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, OTHER_MAILBOX_PATH, OTHER_MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(event);
-        assertThat(mailboxEventCollector.getEvents()).isEmpty();
-        assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
-        assertThat(onceEventCollector.getEvents()).containsExactly(event);
-    }
-
-    @Test
-    public void mailboxDeletionShouldUnregisterMAILBOXListeners() {
-        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", null);
-        QuotaCount deletedMessageCount = QuotaCount.count(123);
-        QuotaSize totalDeletedSize = QuotaSize.size(456);
-        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, null, MAILBOX_PATH, quotaRoot, deletedMessageCount, totalDeletedSize, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(event);
-        MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(secondEvent);
-        assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
-        assertThat(eachNodeEventCollector.getEvents()).containsOnly(event, secondEvent);
-        assertThat(onceEventCollector.getEvents()).containsExactly(event, secondEvent);
-    }
-
-    @Test
-    public void mailboxDeletionShouldNotRegisterMAILBOXListenerToOtherPaths() {
-        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", null);
-        QuotaCount quotaCount = QuotaCount.count(123);
-        QuotaSize quotaSize = QuotaSize.size(456);
-        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, null, MAILBOX_PATH, quotaRoot, quotaCount, quotaSize, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(event);
-        MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxAdded(null, null, OTHER_MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(secondEvent);
-        assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
-        assertThat(eachNodeEventCollector.getEvents()).containsOnly(event, secondEvent);
-        assertThat(onceEventCollector.getEvents()).containsExactly(event, secondEvent);
-    }
-
-    @Test
-    public void removeListenerShouldWork() {
-        defaultDelegatingMailboxListener.removeListener(MAILBOX_ID, mailboxEventCollector, null);
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(event);
-        assertThat(mailboxEventCollector.getEvents()).isEmpty();
-        assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
-        assertThat(onceEventCollector.getEvents()).containsExactly(event);
-    }
-
-    @Test
-    public void removeListenerShouldNotRemoveAListenerFromADifferentPath() {
-        defaultDelegatingMailboxListener.removeListener(OTHER_MAILBOX_ID, mailboxEventCollector, null);
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(event);
-        assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
-        assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
-        assertThat(onceEventCollector.getEvents()).containsExactly(event);
-    }
-
-    @Test
-    public void removeGlobalListenerShouldWorkForONCE() {
-        defaultDelegatingMailboxListener.removeGlobalListener(eachNodeEventCollector, null);
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(event);
-        assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
-        assertThat(eachNodeEventCollector.getEvents()).isEmpty();
-        assertThat(onceEventCollector.getEvents()).containsExactly(event);
-    }
-
-    @Test
-    public void removeGlobalListenerShouldWorkForEACH_NODE() throws Exception {
-        defaultDelegatingMailboxListener.removeGlobalListener(onceEventCollector, null);
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
-        defaultDelegatingMailboxListener.event(event);
-        assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
-        assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
-        assertThat(onceEventCollector.getEvents()).isEmpty();
-    }
-
-    @Test
-    public void listenersErrorsShouldNotBePropageted() throws Exception {
-        MailboxSession session = MailboxSessionUtil.create("benwa");
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(session.getSessionId(),
-            session.getUser(), MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
-        MailboxListener mockedListener = mock(MailboxListener.class);
-        when(mockedListener.getType()).thenReturn(MailboxListener.ListenerType.ONCE);
-        doThrow(new RuntimeException()).when(mockedListener).event(event);
-
-        defaultDelegatingMailboxListener.addGlobalListener(mockedListener, null);
-
-        defaultDelegatingMailboxListener.event(event);
-    }
-
-
-    @Test
-    public void listenersShouldReceiveEvents() {
-        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());
-
-        defaultDelegatingMailboxListener.event(noopEvent);
-
-        assertThat(onceEventCollector.getEvents()).isEmpty();
-    }
-
-}


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


[11/27] james-project git commit: JAMES-2641 Drop Delegating mailbox listener and rather use the EventBus

Posted by bt...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
index 0ea9730..50ffb55 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
@@ -39,6 +39,9 @@ import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
 import org.apache.james.mailbox.MessageMoveEvent;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.OverQuotaException;
 import org.apache.james.mailbox.fixture.MailboxFixture;
@@ -50,10 +53,9 @@ import org.apache.james.mailbox.model.Quota;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.quota.QuotaManager;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.util.EventCollector;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.assertj.core.api.AbstractListAssert;
 import org.assertj.core.api.ObjectAssert;
 import org.junit.Rule;
@@ -72,7 +74,6 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     private static final MessageUid messageUid2 = MessageUid.of(113);
 
     private static final Flags FLAGS = new Flags();
-    private static final MailboxSession SESSION = MailboxSessionUtil.create("any");
 
     @Rule
     public ExpectedException expectedException = ExpectedException.none();
@@ -85,17 +86,17 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     private QuotaManager quotaManager;
     private MessageIdManagerTestSystem testingData;
     private EventCollector eventCollector;
-    private DefaultDelegatingMailboxListener delegatingMailboxListener;
+    private EventBus eventBus;
 
-    protected abstract MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) throws Exception;
+    protected abstract MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, EventBus eventBus) throws Exception;
 
     public void setUp() throws Exception {
-        delegatingMailboxListener = new DefaultDelegatingMailboxListener();
+        eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
         eventCollector = new EventCollector();
         quotaManager = mock(QuotaManager.class);
 
         session = MailboxSessionUtil.create(ALICE);
-        testingData = createTestSystem(quotaManager, delegatingMailboxListener);
+        testingData = createTestSystem(quotaManager, eventBus);
         messageIdManager = testingData.getMessageIdManager();
 
         mailbox1 = testingData.createMailbox(MailboxFixture.INBOX_ALICE, session);
@@ -111,7 +112,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         MessageResult messageResult = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session).get(0);
         MessageMetaData simpleMessageMetaData = messageResult.messageMetaData();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents())
@@ -136,7 +137,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         MessageResult messageResult2 = messageIdManager.getMessages(ImmutableList.of(messageId2), FetchGroupImpl.MINIMAL, session).get(0);
         MessageMetaData simpleMessageMetaData2 = messageResult2.messageMetaData();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(ImmutableList.of(messageId1, messageId2), session);
 
         AbstractListAssert<?, List<? extends MailboxListener.Expunged>, MailboxListener.Expunged, ObjectAssert<MailboxListener.Expunged>> events =
@@ -155,7 +156,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -166,7 +167,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -177,7 +178,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).hasSize(2);
@@ -192,7 +193,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId(), mailbox3.getMailboxId()), session);
 
         messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session);
@@ -228,7 +229,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         List<MessageResult> messageResults = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session);
         assertThat(messageResults).hasSize(2);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox3.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).hasSize(3);
@@ -247,7 +248,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, newFlags, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -260,7 +261,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, newFlags, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -272,7 +273,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -284,7 +285,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -297,7 +298,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).hasSize(2).allSatisfy(event -> assertThat(event).isInstanceOf(MailboxListener.FlagsUpdated.class));
@@ -308,7 +309,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -337,7 +338,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -348,7 +349,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(ImmutableList.of(messageId), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -359,7 +360,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(FLAGS, FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -370,7 +371,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
index 6cc6933..1661de2 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
@@ -28,6 +28,7 @@ import javax.mail.util.SharedByteArrayInputStream;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxId;
@@ -82,12 +83,13 @@ public class MessageIdManagerTestSystem {
             Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
             MailboxMessage message = createMessage(mailboxId, flags, messageId, uid);
             mapperFactory.getMessageMapper(mailboxSession).add(mailbox, message);
-            mailboxManager.getDelegationListener().event(EventFactory.added()
+            mailboxManager.getEventBus().dispatch(EventFactory.added()
                 .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailbox)
                 .addMessage(message)
-                .build());
+                .build(),
+                new MailboxIdRegistrationKey(mailboxId));
             return messageId;
         } catch (Exception e) {
             throw new RuntimeException(e);

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 86d4df3..b5b5ca1 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
@@ -29,6 +29,8 @@ 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -42,7 +44,6 @@ import org.apache.james.mailbox.model.MessageId.Factory;
 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;
@@ -50,6 +51,7 @@ 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.api.NoopMetricFactory;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -79,10 +81,10 @@ public class StoreMailboxManagerTest {
         authenticator.addUser(CURRENT_USER, CURRENT_USER_PASSWORD);
         authenticator.addUser(ADMIN, ADMIN_PASSWORD);
 
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
 
         StoreRightManager storeRightManager = new StoreRightManager(mockedMapperFactory, new UnionMailboxACLResolver(),
-                                                                    new SimpleGroupMembershipResolver(), delegatingListener);
+                                                                    new SimpleGroupMembershipResolver(), eventBus);
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mockedMapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, FakeAuthorizator.forUserAndAdmin(ADMIN, CURRENT_USER));
@@ -91,7 +93,7 @@ public class StoreMailboxManagerTest {
 
         storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, sessionProvider,
                 new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
-                annotationManager, delegatingListener, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
+                annotationManager, eventBus, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
     }
 
     @Test(expected = MailboxNotFoundException.class)

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
index 5643181..6329e56 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
@@ -36,6 +36,7 @@ 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.events.EventBus;
 import org.apache.james.mailbox.exception.DifferentDomainException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -46,7 +47,6 @@ import org.apache.james.mailbox.model.MailboxACL.ACLCommand;
 import org.apache.james.mailbox.model.MailboxACL.Right;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
@@ -69,11 +69,11 @@ public class StoreRightManagerTest {
         mockedMailboxMapper = mock(MailboxMapper.class);
         mailboxAclResolver = new UnionMailboxACLResolver();
         groupMembershipResolver = new SimpleGroupMembershipResolver();
-        DelegatingMailboxListener delegatingMailboxListener = mock(DelegatingMailboxListener.class);
+        EventBus eventBus = mock(EventBus.class);
         when(mockedMapperFactory.getMailboxMapper(aliceSession))
             .thenReturn(mockedMailboxMapper);
 
-        storeRightManager = new StoreRightManager(mockedMapperFactory, mailboxAclResolver, groupMembershipResolver, delegatingMailboxListener);
+        storeRightManager = new StoreRightManager(mockedMapperFactory, mailboxAclResolver, groupMembershipResolver, eventBus);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
index 27a38b2..b942af1 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.mailbox.store.quota;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anySet;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -34,21 +36,24 @@ import javax.mail.Flags;
 import org.apache.james.core.User;
 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.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.TestId;
 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.mail.model.DefaultMessageId;
 import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.collect.Lists;
 
+import reactor.core.publisher.Mono;
+
 public class ListeningCurrentQuotaUpdaterTest {
 
     private static final int SIZE = 45;
@@ -65,8 +70,10 @@ public class ListeningCurrentQuotaUpdaterTest {
     public void setUp() throws Exception {
         mockedQuotaRootResolver = mock(QuotaRootResolver.class);
         mockedCurrentQuotaManager = mock(StoreCurrentQuotaManager.class);
+        EventBus eventBus = mock(EventBus.class);
+        when(eventBus.dispatch(any(Event.class), anySet())).thenReturn(Mono.empty());
         testee = new ListeningCurrentQuotaUpdater(mockedCurrentQuotaManager, mockedQuotaRootResolver,
-            mock(DelegatingMailboxListener.class), mock(QuotaManager.class));
+            eventBus, mock(QuotaManager.class));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/pom.xml b/mpt/impl/imap-mailbox/cassandra/pom.xml
index 39b0ebc..27d1dbb 100644
--- a/mpt/impl/imap-mailbox/cassandra/pom.xml
+++ b/mpt/impl/imap-mailbox/cassandra/pom.xml
@@ -53,6 +53,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mpt-imapmailbox-core</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 5ce4b21..76ed7ea 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
@@ -38,6 +38,8 @@ import org.apache.james.mailbox.cassandra.quota.CassandraGlobalMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerDomainMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
@@ -45,7 +47,6 @@ 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;
-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;
@@ -54,6 +55,7 @@ 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.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -89,8 +91,9 @@ public class CassandraHostSystem extends JamesImapHostSystem {
             cassandra.getTypesProvider(),
             messageIdFactory);
 
-        DefaultDelegatingMailboxListener delegatingMailboxListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
+
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
 
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
@@ -102,16 +105,16 @@ public class CassandraHostSystem extends JamesImapHostSystem {
             new CassandraGlobalMaxQuotaDao(session));
         CassandraCurrentQuotaManager currentQuotaManager = new CassandraCurrentQuotaManager(session);
         StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, perUserMaxQuotaManager);
-        ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingMailboxListener, quotaManager);
+        ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, eventBus, 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, index, MailboxManagerConfiguration.DEFAULT);
+            eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
 
-        delegatingMailboxListener.addGlobalListener(quotaUpdater, sessionProvider.createSystemSession("admin"));
+        eventBus.register(quotaUpdater);
 
         SubscriptionManager subscriptionManager = new StoreSubscriptionManager(mapperFactory);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/elasticsearch/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/pom.xml b/mpt/impl/imap-mailbox/elasticsearch/pom.xml
index c3a8bd5..dc0f12b 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/pom.xml
+++ b/mpt/impl/imap-mailbox/elasticsearch/pom.xml
@@ -56,6 +56,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-memory</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 f20d56b..c12e44d 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
@@ -38,7 +38,6 @@ 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.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
@@ -49,6 +48,8 @@ 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
@@ -60,12 +61,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.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.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -106,8 +107,8 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
         InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
 
         InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingListener);
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
 
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
@@ -135,13 +136,13 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
             new JVMMailboxPathLocker(),
             new MessageParser(),
             messageIdFactory,
-            delegatingListener,
+            eventBus,
             annotationManager,
             storeRightManager,
             quotaComponents,
             searchIndex);
 
-        delegatingListener.addGlobalListener(searchIndex, MailboxSessionUtil.create("admin"));
+        eventBus.register(searchIndex);
 
         ImapProcessor defaultImapProcessorFactory =
             DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager,

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/jpa/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/pom.xml b/mpt/impl/imap-mailbox/jpa/pom.xml
index fdb9b1f..6f28763 100644
--- a/mpt/impl/imap-mailbox/jpa/pom.xml
+++ b/mpt/impl/imap-mailbox/jpa/pom.xml
@@ -39,6 +39,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-jpa</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 cf3c594..c15466d 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
@@ -35,6 +35,8 @@ 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.jpa.JPAMailboxFixture;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
 import org.apache.james.mailbox.jpa.JPASubscriptionManager;
@@ -48,7 +50,6 @@ 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;
 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;
@@ -59,6 +60,7 @@ 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.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -101,23 +103,24 @@ public class JPAHostSystem extends JamesImapHostSystem {
         GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
         MessageParser messageParser = new MessageParser();
 
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
+
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, eventBus);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
         DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, 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);
+        ListeningCurrentQuotaUpdater quotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, eventBus, 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, index);
+            eventBus, annotationManager, storeRightManager, quotaComponents, index);
 
-        delegatingListener.addGlobalListener(quotaUpdater, sessionProvider.createSystemSession("admin"));
-        delegatingListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
+        eventBus.register(quotaUpdater);
+        eventBus.register(new MailboxAnnotationListener(mapperFactory, sessionProvider));
 
         SubscriptionManager subscriptionManager = new JPASubscriptionManager(mapperFactory);
         

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/lucenesearch/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/pom.xml b/mpt/impl/imap-mailbox/lucenesearch/pom.xml
index 875ca8a..beeaf79 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/pom.xml
+++ b/mpt/impl/imap-mailbox/lucenesearch/pom.xml
@@ -37,6 +37,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-memory</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 8163306..2035304 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
@@ -35,7 +35,8 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.SubscriptionManager;
 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
@@ -46,11 +47,11 @@ 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;
-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.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -98,10 +99,10 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
     private void initFields() {
        
         try {
-            DefaultDelegatingMailboxListener delegatingMailboxListener = new DefaultDelegatingMailboxListener();
+            InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
 
             InMemoryMailboxSessionMapperFactory mapperFactory = new InMemoryMailboxSessionMapperFactory();
-            StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
+            StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
             JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
             InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
             SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
@@ -113,7 +114,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
                 locker,
                 new MessageParser(),
                 messageIdFactory,
-                delegatingMailboxListener,
+                eventBus,
                 new StoreMailboxAnnotationManager(mapperFactory, rightManager),
                 rightManager,
                 QuotaComponents.disabled(sessionProvider, mapperFactory),
@@ -121,7 +122,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
 
             searchIndex.setEnableSuffixMatch(true);
 
-            delegatingMailboxListener.addGlobalListener(searchIndex, sessionProvider.createSystemSession("admin"));
+            eventBus.register(searchIndex);
 
             SubscriptionManager subscriptionManager = new StoreSubscriptionManager(mapperFactory);
 
@@ -137,7 +138,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
                 new DefaultImapEncoderFactory().buildImapEncoder(),
                 defaultImapProcessorFactory);
 
-        } catch (IOException | MailboxException e) {
+        } catch (IOException e) {
             throw new RuntimeException(e);
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/maildir/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/pom.xml b/mpt/impl/imap-mailbox/maildir/pom.xml
index 41b0584..8f66a55 100644
--- a/mpt/impl/imap-mailbox/maildir/pom.xml
+++ b/mpt/impl/imap-mailbox/maildir/pom.xml
@@ -33,6 +33,11 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-maildir</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 de93a3d..688fe71 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
@@ -33,6 +33,8 @@ 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.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.maildir.MaildirMailboxSessionMapperFactory;
 import org.apache.james.mailbox.maildir.MaildirStore;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
@@ -42,13 +44,13 @@ 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.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.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -56,15 +58,11 @@ import org.apache.james.mpt.host.JamesImapHostSystem;
 
 public class MaildirHostSystem extends JamesImapHostSystem {
 
-    public static final String META_DATA_DIRECTORY = "target/user-meta-data";
+    private static final String META_DATA_DIRECTORY = "target/user-meta-data";
     private static final String MAILDIR_HOME = "target/Maildir";
     private static final ImapFeatures SUPPORTED_FEATURES = ImapFeatures.of();
     
     private StoreMailboxManager mailboxManager;
-
-    public static JamesImapHostSystem build() throws Exception {
-        return new MaildirHostSystem();
-    }
     
     @Override
     public void beforeTest() throws Exception {
@@ -78,15 +76,15 @@ public class MaildirHostSystem extends JamesImapHostSystem {
         GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
         MessageParser messageParser = new MessageParser();
 
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
+        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, eventBus);
         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,
+            messageParser, new DefaultMessageId.Factory(), annotationManager, eventBus, storeRightManager, quotaComponents,
             index, MailboxManagerConfiguration.DEFAULT);
 
         ImapProcessor defaultImapProcessorFactory =

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 f060891..9480061 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
@@ -22,8 +22,8 @@ package org.apache.james.app.spring;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.container.spring.context.JamesServerApplicationContext;
-import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.events.Group;
+import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.assertj.core.api.Condition;
 import org.junit.After;
@@ -31,10 +31,10 @@ import org.junit.Before;
 import org.junit.Test;
 
 public class JamesSpringContextTest {
-    private static final Condition<MailboxListener> QUOTA_UPDATER_LISTENER = new Condition<MailboxListener>() {
+    private static final Condition<Group> QUOTA_UPDATER_LISTENER = new Condition<Group>() {
         @Override
-        public boolean matches(MailboxListener mailboxListener) {
-            return mailboxListener instanceof ListeningCurrentQuotaUpdater;
+        public boolean matches(Group group) {
+            return ListeningCurrentQuotaUpdater.GROUP.equals(group);
         }
     };
     private static final int ONCE = 1;
@@ -55,9 +55,9 @@ public class JamesSpringContextTest {
 
     @Test
     public void springShouldLoadAndAddOnlyOneQuotaUpdaterListener() {
-        DefaultDelegatingMailboxListener mailboxListener = context.getBean(DefaultDelegatingMailboxListener.class);
+        InVMEventBus eventBus = context.getBean(InVMEventBus.class);
 
-        assertThat(mailboxListener.getRegistry().getGlobalListeners())
+        assertThat(eventBus.registeredGroups())
             .areExactly(ONCE, QUOTA_UPDATER_LISTENER);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 c9a8f4c..6c95c9c 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
@@ -185,7 +185,7 @@ public class CassandraMailboxModule extends AbstractModule {
 
         Multibinder.newSetBinder(binder(), MailboxManagerDefinition.class).addBinding().to(CassandraMailboxManagerDefinition.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(MailboxAnnotationListener.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 eaadda6..006d323 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
@@ -74,7 +74,7 @@ public class ElasticSearchMailboxModule extends AbstractModule {
         bind(MessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class);
         bind(ListeningMessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ElasticSearchListeningMessageSearchIndex.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
index 78bc752..80f2575 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
@@ -51,7 +51,7 @@ public class ElasticSearchQuotaSearcherModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ElasticSearchQuotaMailboxListener.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 bbe0590..1ceeb0d 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
@@ -106,7 +106,7 @@ public class JPAMailboxModule extends AbstractModule {
         
         Multibinder.newSetBinder(binder(), MailboxManagerDefinition.class).addBinding().to(JPAMailboxManagerDefinition.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(MailboxAnnotationListener.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 118adf1..925ea99 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
@@ -55,7 +55,7 @@ public class JpaQuotaModule extends AbstractModule {
 
         bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
         bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ListeningCurrentQuotaUpdater.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 79ea234..4b93211 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
@@ -43,7 +43,7 @@ public class LuceneSearchMailboxModule extends AbstractModule {
         bind(MessageSearchIndex.class).to(LuceneMessageSearchIndex.class);
         bind(ListeningMessageSearchIndex.class).to(LuceneMessageSearchIndex.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(LuceneMessageSearchIndex.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/mailbox/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/pom.xml b/server/container/guice/mailbox/pom.xml
index 51053c1..32b6591 100644
--- a/server/container/guice/mailbox/pom.xml
+++ b/server/container/guice/mailbox/pom.xml
@@ -38,6 +38,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-guice-configuration</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
index 9921b23..3ec0a61 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
@@ -26,10 +26,10 @@ import javax.inject.Inject;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.events.delivery.EventDelivery;
 import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
-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.event.MailboxListenerRegistry;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
@@ -45,8 +45,6 @@ import com.google.inject.multibindings.Multibinder;
 public class DefaultEventModule extends AbstractModule {
     @Override
     protected void configure() {
-        bind(DefaultDelegatingMailboxListener.class).in(Scopes.SINGLETON);
-        bind(DelegatingMailboxListener.class).to(DefaultDelegatingMailboxListener.class);
 
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(ListenerRegistrationPerformer.class);
 
@@ -57,10 +55,13 @@ public class DefaultEventModule extends AbstractModule {
         bind(MailboxListenersLoaderImpl.class).in(Scopes.SINGLETON);
         bind(MailboxListenerRegistry.class).in(Scopes.SINGLETON);
         bind(MailboxListenersLoader.class).to(MailboxListenersLoaderImpl.class);
-        Multibinder.newSetBinder(binder(), MailboxListener.class);
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class);
 
         bind(InVmEventDelivery.class).in(Scopes.SINGLETON);
         bind(EventDelivery.class).to(InVmEventDelivery.class);
+
+        bind(InVMEventBus.class).in(Scopes.SINGLETON);
+        bind(EventBus.class).to(InVMEventBus.class);
     }
 
     @Singleton

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 2432baa..3bb2430 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
@@ -122,7 +122,7 @@ public class MemoryMailboxModule extends AbstractModule {
             .addBinding()
             .to(MemoryMailboxManagerDefinition.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(MailboxAnnotationListener.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 5bd73fc..9216f78 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
@@ -55,7 +55,7 @@ public class MemoryQuotaModule extends AbstractModule {
 
         bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
         bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ListeningCurrentQuotaUpdater.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
index c35225b..307f4b5 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
@@ -102,7 +102,7 @@ public class JMAPModule extends AbstractModule {
 
         bind(MailQueueItemDecoratorFactory.class).to(PostDequeueDecoratorFactory.class).in(Scopes.SINGLETON);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class).addBinding().to(PropagateLookupRightListener.class);
+        Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class).addBinding().to(PropagateLookupRightListener.class);
     }
 
     @Provides


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


[20/27] james-project git commit: JAMES-2641 Harden MailboxManagerTest for events and do some fix

Posted by bt...@apache.org.
JAMES-2641 Harden MailboxManagerTest for events and do some fix

We need to also ensure the right dispatch key is being used...


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

Branch: refs/heads/master
Commit: 5a1d9d7b4ab55175c435afb5711c4bb8ee6f3294
Parents: 3f8b8f6
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 15 17:35:51 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:09 2019 +0700

----------------------------------------------------------------------
 .../james/mailbox/MailboxManagerTest.java       | 85 ++++++++++++++++++--
 .../mailbox/store/StoreMessageManager.java      | 22 ++---
 2 files changed, 90 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5a1d9d7b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 57c1b34..8a3d351 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -36,10 +36,12 @@ import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxManager.MailboxCapabilities;
 import org.apache.james.mailbox.MessageManager.AppendCommand;
 import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.exception.AnnotationException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;
 import org.apache.james.mailbox.mock.DataProvisioner;
+import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
@@ -385,7 +387,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
         @Test
         void deleteMailboxShouldFireMailboxDeletionEvent() throws Exception {
             assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota));
-            retrieveEventBus(mailboxManager).register(listener);
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId));
 
             mailboxManager.deleteMailbox(inbox, session);
 
@@ -441,7 +443,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
 
         @Test
         void addingMessageShouldFireAddedEvent() throws Exception {
-            retrieveEventBus(mailboxManager).register(listener);
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId));
             inboxManager.appendMessage(MessageManager.AppendCommand.builder()
                     .build(message), session);
 
@@ -459,7 +461,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
             inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session);
             inboxManager.setFlags(new Flags(Flags.Flag.DELETED), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session);
 
-            retrieveEventBus(mailboxManager).register(listener);
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId));
             inboxManager.expunge(MessageRange.all(), session);
 
             assertThat(listener.getEvents())
@@ -475,7 +477,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
         void setFlagsShouldFireFlagsUpdatedEvent() throws Exception {
             inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session);
 
-            retrieveEventBus(mailboxManager).register(listener);
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId));
             inboxManager.setFlags(new Flags(Flags.Flag.FLAGGED), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session);
 
             assertThat(listener.getEvents())
@@ -493,7 +495,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
             Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            retrieveEventBus(mailboxManager).register(listener);
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(targetMailboxId.get()));
             mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -511,7 +513,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
             mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            retrieveEventBus(mailboxManager).register(listener);
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId));
             mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -528,7 +530,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
             Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            retrieveEventBus(mailboxManager).register(listener);
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(targetMailboxId.get()));
             mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -541,6 +543,75 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
         }
 
         @Test
+        void copyShouldFireMovedEventInTargetMailbox() throws Exception {
+            assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID));
+
+            Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session);
+            ComposedMessageId messageId = inboxManager.appendMessage(AppendCommand.builder().build(message), session);
+
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(targetMailboxId.get()));
+            mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session);
+
+            assertThat(listener.getEvents())
+                .filteredOn(event -> event instanceof MessageMoveEvent)
+                .hasSize(1)
+                .extracting(event -> (MessageMoveEvent) event)
+                .element(0)
+                .satisfies(event -> assertThat(event.getMessageIds()).containsExactly(messageId.getMessageId()));
+        }
+
+        @Test
+        void copyShouldNotFireMovedEventInOriginMailbox() throws Exception {
+            assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID));
+
+            mailboxManager.createMailbox(newPath, session);
+            inboxManager.appendMessage(AppendCommand.builder().build(message), session);
+
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId));
+            mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session);
+
+            assertThat(listener.getEvents())
+                .filteredOn(event -> event instanceof MessageMoveEvent)
+                .isEmpty();;
+        }
+
+        @Test
+        void moveShouldFireMovedEventInTargetMailbox() throws Exception {
+            assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID));
+
+            Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session);
+            ComposedMessageId messageId = inboxManager.appendMessage(AppendCommand.builder().build(message), session);
+
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(targetMailboxId.get()));
+            mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session);
+
+            assertThat(listener.getEvents())
+                .filteredOn(event -> event instanceof MessageMoveEvent)
+                .hasSize(1)
+                .extracting(event -> (MessageMoveEvent) event)
+                .element(0)
+                .satisfies(event -> assertThat(event.getMessageIds()).containsExactly(messageId.getMessageId()));
+        }
+
+        @Test
+        void moveShouldFireMovedEventInOriginMailbox() throws Exception {
+            assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID));
+
+            mailboxManager.createMailbox(newPath, session);
+            ComposedMessageId messageId = inboxManager.appendMessage(AppendCommand.builder().build(message), session);
+
+            retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId));
+            mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session);
+
+            assertThat(listener.getEvents())
+                .filteredOn(event -> event instanceof MessageMoveEvent)
+                .hasSize(1)
+                .extracting(event -> (MessageMoveEvent) event)
+                .element(0)
+                .satisfies(event -> assertThat(event.getMessageIds()).containsExactly(messageId.getMessageId()));
+        }
+
+        @Test
         void copyShouldNotFireExpungedEventInOriginMailbox() throws Exception {
             mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);

http://git-wip-us.apache.org/repos/asf/james-project/blob/5a1d9d7b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index 1b4b20e..81fc691 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -739,6 +739,10 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             messageIds.add(message.getMessageId());
         }
 
+        MessageMoves messageMoves = MessageMoves.builder()
+            .previousMailboxIds(getMailboxEntity().getMailboxId())
+            .targetMailboxIds(to.getMailboxEntity().getMailboxId(), getMailboxEntity().getMailboxId())
+            .build();
         Flux.merge(
             eventBus.dispatch(EventFactory.added()
                     .randomEventId()
@@ -749,13 +753,10 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
                 new MailboxIdRegistrationKey(to.getMailboxEntity().getMailboxId())),
             eventBus.dispatch(EventFactory.moved()
                     .session(session)
-                    .messageMoves(MessageMoves.builder()
-                        .previousMailboxIds(getMailboxEntity().getMailboxId())
-                        .targetMailboxIds(to.getMailboxEntity().getMailboxId(), getMailboxEntity().getMailboxId())
-                        .build())
+                    .messageMoves(messageMoves)
                     .messageId(messageIds.build())
                     .build(),
-                new MailboxIdRegistrationKey(mailbox.getMailboxId())))
+                messageMoves.impactedMailboxIds().map(MailboxIdRegistrationKey::new).collect(Guavate.toImmutableSet())))
             .then().block();
 
         return copiedUids;
@@ -772,6 +773,10 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             messageIds.add(message.getMessageId());
         }
 
+        MessageMoves messageMoves = MessageMoves.builder()
+            .previousMailboxIds(getMailboxEntity().getMailboxId())
+            .targetMailboxIds(to.getMailboxEntity().getMailboxId())
+            .build();
         Flux.merge(
             eventBus.dispatch(EventFactory.added()
                     .randomEventId()
@@ -788,14 +793,11 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
                     .build(),
                 new MailboxIdRegistrationKey(mailbox.getMailboxId())),
             eventBus.dispatch(EventFactory.moved()
-                    .messageMoves(MessageMoves.builder()
-                        .previousMailboxIds(getMailboxEntity().getMailboxId())
-                        .targetMailboxIds(to.getMailboxEntity().getMailboxId())
-                        .build())
+                    .messageMoves(messageMoves)
                     .messageId(messageIds.build())
                     .session(session)
                     .build(),
-                new MailboxIdRegistrationKey(mailbox.getMailboxId())))
+                messageMoves.impactedMailboxIds().map(MailboxIdRegistrationKey::new).collect(Guavate.toImmutableSet())))
             .then().block();
 
         return moveUids;


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


[04/27] james-project git commit: JAMES-2641 DefaultProcessorChain should not use final variable/parameters

Posted by bt...@apache.org.
JAMES-2641 DefaultProcessorChain should not use final variable/parameters


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

Branch: refs/heads/master
Commit: 352f92a72affb0f03ae2f91be54e6d3f0fd13c8b
Parents: 9e34f17
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 15:29:39 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../imap/processor/DefaultProcessorChain.java   | 88 ++++++++++----------
 1 file changed, 44 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/352f92a7/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
index 93946ae..201dbec 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
@@ -35,80 +35,80 @@ import org.apache.james.metrics.api.MetricFactory;
 public class DefaultProcessorChain {
 
     public static ImapProcessor createDefaultChain(ImapProcessor chainEndProcessor,
-                  final MailboxManager mailboxManager, SubscriptionManager subscriptionManager,
-                  final StatusResponseFactory statusResponseFactory, MailboxTyper mailboxTyper, QuotaManager quotaManager,
-                  final QuotaRootResolver quotaRootResolver,
+                  MailboxManager mailboxManager, SubscriptionManager subscriptionManager,
+                  StatusResponseFactory statusResponseFactory, MailboxTyper mailboxTyper, QuotaManager quotaManager,
+                  QuotaRootResolver quotaRootResolver,
                   MetricFactory metricFactory) {
-        final SystemMessageProcessor systemProcessor = new SystemMessageProcessor(chainEndProcessor, mailboxManager);
-        final LogoutProcessor logoutProcessor = new LogoutProcessor(systemProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        SystemMessageProcessor systemProcessor = new SystemMessageProcessor(chainEndProcessor, mailboxManager);
+        LogoutProcessor logoutProcessor = new LogoutProcessor(systemProcessor, mailboxManager, statusResponseFactory, metricFactory);
 
-        final CapabilityProcessor capabilityProcessor = new CapabilityProcessor(logoutProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final CheckProcessor checkProcessor = new CheckProcessor(capabilityProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final LoginProcessor loginProcessor = new LoginProcessor(checkProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        CapabilityProcessor capabilityProcessor = new CapabilityProcessor(logoutProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        CheckProcessor checkProcessor = new CheckProcessor(capabilityProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        LoginProcessor loginProcessor = new LoginProcessor(checkProcessor, mailboxManager, statusResponseFactory, metricFactory);
         // so it can announce the LOGINDISABLED if needed
         capabilityProcessor.addProcessor(loginProcessor);
         
-        final RenameProcessor renameProcessor = new RenameProcessor(loginProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final DeleteProcessor deleteProcessor = new DeleteProcessor(renameProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final CreateProcessor createProcessor = new CreateProcessor(deleteProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final CloseProcessor closeProcessor = new CloseProcessor(createProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final UnsubscribeProcessor unsubscribeProcessor = new UnsubscribeProcessor(closeProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory);
-        final SubscribeProcessor subscribeProcessor;
+        RenameProcessor renameProcessor = new RenameProcessor(loginProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        DeleteProcessor deleteProcessor = new DeleteProcessor(renameProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        CreateProcessor createProcessor = new CreateProcessor(deleteProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        CloseProcessor closeProcessor = new CloseProcessor(createProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        UnsubscribeProcessor unsubscribeProcessor = new UnsubscribeProcessor(closeProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory);
+        SubscribeProcessor subscribeProcessor;
         if (mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Annotation)) {
-            final SetAnnotationProcessor setAnnotationProcessor = new SetAnnotationProcessor(unsubscribeProcessor, mailboxManager, statusResponseFactory, metricFactory);
+            SetAnnotationProcessor setAnnotationProcessor = new SetAnnotationProcessor(unsubscribeProcessor, mailboxManager, statusResponseFactory, metricFactory);
             capabilityProcessor.addProcessor(setAnnotationProcessor);
-            final GetAnnotationProcessor getAnnotationProcessor = new GetAnnotationProcessor(setAnnotationProcessor, mailboxManager, statusResponseFactory, metricFactory);
+            GetAnnotationProcessor getAnnotationProcessor = new GetAnnotationProcessor(setAnnotationProcessor, mailboxManager, statusResponseFactory, metricFactory);
             capabilityProcessor.addProcessor(getAnnotationProcessor);
             subscribeProcessor = new SubscribeProcessor(getAnnotationProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory);
         } else {
             subscribeProcessor = new SubscribeProcessor(unsubscribeProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory);
         }
-        final CopyProcessor copyProcessor = new CopyProcessor(subscribeProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        CopyProcessor copyProcessor = new CopyProcessor(subscribeProcessor, mailboxManager, statusResponseFactory, metricFactory);
         AuthenticateProcessor authenticateProcessor;
         if (mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)) {
-            final MoveProcessor moveProcessor = new MoveProcessor(copyProcessor, mailboxManager, statusResponseFactory, metricFactory);
+            MoveProcessor moveProcessor = new MoveProcessor(copyProcessor, mailboxManager, statusResponseFactory, metricFactory);
             authenticateProcessor = new AuthenticateProcessor(moveProcessor, mailboxManager, statusResponseFactory, metricFactory);
             capabilityProcessor.addProcessor(moveProcessor);
         } else {
             authenticateProcessor = new AuthenticateProcessor(copyProcessor, mailboxManager, statusResponseFactory, metricFactory);
         }
-        final ExpungeProcessor expungeProcessor = new ExpungeProcessor(authenticateProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final ExamineProcessor examineProcessor = new ExamineProcessor(expungeProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final AppendProcessor appendProcessor = new AppendProcessor(examineProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final StoreProcessor storeProcessor = new StoreProcessor(appendProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final NoopProcessor noopProcessor = new NoopProcessor(storeProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final IdleProcessor idleProcessor = new IdleProcessor(noopProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final StatusProcessor statusProcessor = new StatusProcessor(idleProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final LSubProcessor lsubProcessor = new LSubProcessor(statusProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory);
-        final XListProcessor xlistProcessor = new XListProcessor(lsubProcessor, mailboxManager, statusResponseFactory, mailboxTyper, metricFactory);
-        final ListProcessor listProcessor = new ListProcessor(xlistProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final SearchProcessor searchProcessor = new SearchProcessor(listProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        ExpungeProcessor expungeProcessor = new ExpungeProcessor(authenticateProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        ExamineProcessor examineProcessor = new ExamineProcessor(expungeProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        AppendProcessor appendProcessor = new AppendProcessor(examineProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        StoreProcessor storeProcessor = new StoreProcessor(appendProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        NoopProcessor noopProcessor = new NoopProcessor(storeProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        IdleProcessor idleProcessor = new IdleProcessor(noopProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        StatusProcessor statusProcessor = new StatusProcessor(idleProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        LSubProcessor lsubProcessor = new LSubProcessor(statusProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory);
+        XListProcessor xlistProcessor = new XListProcessor(lsubProcessor, mailboxManager, statusResponseFactory, mailboxTyper, metricFactory);
+        ListProcessor listProcessor = new ListProcessor(xlistProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        SearchProcessor searchProcessor = new SearchProcessor(listProcessor, mailboxManager, statusResponseFactory, metricFactory);
         // WITHIN extension
         capabilityProcessor.addProcessor(searchProcessor);
 
-        final SelectProcessor selectProcessor = new SelectProcessor(searchProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final NamespaceProcessor namespaceProcessor = new NamespaceProcessor(selectProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        SelectProcessor selectProcessor = new SelectProcessor(searchProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        NamespaceProcessor namespaceProcessor = new NamespaceProcessor(selectProcessor, mailboxManager, statusResponseFactory, metricFactory);
 
         capabilityProcessor.addProcessor(xlistProcessor);
 
-        final ImapProcessor fetchProcessor = new FetchProcessor(namespaceProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final StartTLSProcessor startTLSProcessor = new StartTLSProcessor(fetchProcessor, statusResponseFactory);
+        ImapProcessor fetchProcessor = new FetchProcessor(namespaceProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        StartTLSProcessor startTLSProcessor = new StartTLSProcessor(fetchProcessor, statusResponseFactory);
 
-        final UnselectProcessor unselectProcessor = new UnselectProcessor(startTLSProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        UnselectProcessor unselectProcessor = new UnselectProcessor(startTLSProcessor, mailboxManager, statusResponseFactory, metricFactory);
 
-        final CompressProcessor compressProcessor = new CompressProcessor(unselectProcessor, statusResponseFactory);
+        CompressProcessor compressProcessor = new CompressProcessor(unselectProcessor, statusResponseFactory);
         
-        final GetACLProcessor getACLProcessor = new GetACLProcessor(compressProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final SetACLProcessor setACLProcessor = new SetACLProcessor(getACLProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final DeleteACLProcessor deleteACLProcessor = new DeleteACLProcessor(setACLProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final ListRightsProcessor listRightsProcessor = new ListRightsProcessor(deleteACLProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final MyRightsProcessor myRightsProcessor = new MyRightsProcessor(listRightsProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        GetACLProcessor getACLProcessor = new GetACLProcessor(compressProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        SetACLProcessor setACLProcessor = new SetACLProcessor(getACLProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        DeleteACLProcessor deleteACLProcessor = new DeleteACLProcessor(setACLProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        ListRightsProcessor listRightsProcessor = new ListRightsProcessor(deleteACLProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        MyRightsProcessor myRightsProcessor = new MyRightsProcessor(listRightsProcessor, mailboxManager, statusResponseFactory, metricFactory);
         
-        final EnableProcessor enableProcessor = new EnableProcessor(myRightsProcessor, mailboxManager, statusResponseFactory, metricFactory, capabilityProcessor);
+        EnableProcessor enableProcessor = new EnableProcessor(myRightsProcessor, mailboxManager, statusResponseFactory, metricFactory, capabilityProcessor);
 
-        final GetQuotaProcessor getQuotaProcessor = new GetQuotaProcessor(enableProcessor, mailboxManager, statusResponseFactory, quotaManager, quotaRootResolver, metricFactory);
-        final SetQuotaProcessor setQuotaProcessor = new SetQuotaProcessor(getQuotaProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        final GetQuotaRootProcessor getQuotaRootProcessor = new GetQuotaRootProcessor(setQuotaProcessor, mailboxManager, statusResponseFactory, quotaRootResolver, quotaManager, metricFactory);
+        GetQuotaProcessor getQuotaProcessor = new GetQuotaProcessor(enableProcessor, mailboxManager, statusResponseFactory, quotaManager, quotaRootResolver, metricFactory);
+        SetQuotaProcessor setQuotaProcessor = new SetQuotaProcessor(getQuotaProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        GetQuotaRootProcessor getQuotaRootProcessor = new GetQuotaRootProcessor(setQuotaProcessor, mailboxManager, statusResponseFactory, quotaRootResolver, quotaManager, metricFactory);
         // add for QRESYNC
         enableProcessor.addProcessor(selectProcessor);
         


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


[08/27] james-project git commit: JAMES-2641 IMAP components should use the EventBus directly

Posted by bt...@apache.org.
JAMES-2641 IMAP components should use the EventBus directly

This enables the MailboxManager to no more be an EventBus proxy


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

Branch: refs/heads/master
Commit: 4c14a757d46267827932474f17870aea50745971
Parents: f398e3f
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 15:57:25 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../james/mailbox/MailboxManagerStressTest.java       | 13 ++++++++-----
 .../cassandra/CassandraMailboxManagerStressTest.java  | 12 ++++++++----
 .../mailbox/jpa/JpaMailboxManagerStressTest.java      | 14 +++++++++-----
 .../DomainUserMaildirMailboxManagerStressTest.java    | 11 ++++++++---
 .../FullUserMaildirMailboxManagerStressTest.java      | 12 ++++++++----
 .../maildir/UserMaildirMailboxManagerStressTest.java  | 12 ++++++++----
 .../inmemory/MemoryMailboxManagerStressTest.java      | 12 ++++++++----
 7 files changed, 57 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4c14a757/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
index d769815..12dcce1 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
@@ -31,6 +31,8 @@ import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxId;
@@ -41,14 +43,15 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableSet;
 
-public abstract class MailboxManagerStressTest {
+public abstract class MailboxManagerStressTest<T extends MailboxManager> {
 
     private static final int APPEND_OPERATIONS = 200;
 
-    private MailboxManager mailboxManager;
+    private T mailboxManager;
 
-    protected abstract MailboxManager provideManager() throws MailboxException;
+    protected abstract T provideManager() throws MailboxException;
 
+    protected abstract EventBus retrieveEventBus(T mailboxManager);
     
     public void setUp() throws Exception {
         this.mailboxManager = provideManager();
@@ -66,11 +69,11 @@ public abstract class MailboxManagerStressTest {
         mailboxManager.startProcessingRequest(session);
         MailboxPath path = MailboxPath.forUser(username, "INBOX");
         MailboxId mailboxId = mailboxManager.createMailbox(path, session).get();
-        mailboxManager.register(
+        retrieveEventBus(mailboxManager).register(
             event -> {
                 MessageUid u = ((MailboxListener.Added) event).getUids().iterator().next();
                 uList.add(u);
-            }, mailboxId);
+            }, new MailboxIdRegistrationKey(mailboxId));
         mailboxManager.endProcessingRequest(session);
         mailboxManager.logout(session, false);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/4c14a757/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java
index 75b7b3c..94d3092 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java
@@ -21,16 +21,16 @@ package org.apache.james.mailbox.cassandra;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerStressTest;
 import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule;
+import org.apache.james.mailbox.events.EventBus;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 
-public class CassandraMailboxManagerStressTest extends MailboxManagerStressTest {
+public class CassandraMailboxManagerStressTest extends MailboxManagerStressTest<CassandraMailboxManager> {
     
     @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
 
@@ -47,13 +47,17 @@ public class CassandraMailboxManagerStressTest extends MailboxManagerStressTest
     }
     
     @Override
-    protected MailboxManager provideManager() {
+    protected CassandraMailboxManager provideManager() {
         return CassandraMailboxManagerProvider.provideMailboxManager(cassandra.getConf(), cassandra.getTypesProvider());
     }
 
+    @Override
+    protected EventBus retrieveEventBus(CassandraMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 
     @After
-    public void tearDown() throws Exception {
+    public void tearDown() {
         cassandra.clearTables();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/4c14a757/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerStressTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerStressTest.java
index 758bd66..f3a262a 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerStressTest.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerStressTest.java
@@ -22,14 +22,13 @@ package org.apache.james.mailbox.jpa;
 import java.util.Optional;
 
 import org.apache.james.backends.jpa.JpaTestCluster;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerStressTest;
-import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
 import org.junit.After;
 import org.junit.Before;
 
-public class JpaMailboxManagerStressTest extends MailboxManagerStressTest {
+public class JpaMailboxManagerStressTest extends MailboxManagerStressTest<OpenJPAMailboxManager> {
 
     private static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAMailboxFixture.MAILBOX_PERSISTANCE_CLASSES);
     private Optional<OpenJPAMailboxManager> openJPAMailboxManager = Optional.empty();
@@ -41,15 +40,20 @@ public class JpaMailboxManagerStressTest extends MailboxManagerStressTest {
     }
     
     @Override
-    protected MailboxManager provideManager() {
+    protected OpenJPAMailboxManager provideManager() {
         if (!openJPAMailboxManager.isPresent()) {
             openJPAMailboxManager = Optional.of(JpaMailboxManagerProvider.provideMailboxManager(JPA_TEST_CLUSTER));
         }
         return openJPAMailboxManager.get();
     }
 
+    @Override
+    protected EventBus retrieveEventBus(OpenJPAMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
+
     @After
-    public void tearDown() throws MailboxException {
+    public void tearDown() {
         JPA_TEST_CLUSTER.clear(JPAMailboxFixture.MAILBOX_TABLE_NAMES);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4c14a757/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerStressTest.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerStressTest.java
index 6e385e2..aaa895c 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerStressTest.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerStressTest.java
@@ -19,13 +19,14 @@
 
 package org.apache.james.mailbox.maildir;
 
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerStressTest;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.rules.TemporaryFolder;
 
-public class DomainUserMaildirMailboxManagerStressTest extends MailboxManagerStressTest {
+public class DomainUserMaildirMailboxManagerStressTest extends MailboxManagerStressTest<StoreMailboxManager> {
     @Rule
     public TemporaryFolder tmpFolder = new TemporaryFolder();
     
@@ -36,7 +37,7 @@ public class DomainUserMaildirMailboxManagerStressTest extends MailboxManagerStr
     }
     
     @Override
-    protected MailboxManager provideManager() {
+    protected StoreMailboxManager provideManager() {
         try {
             return MaildirMailboxManagerProvider.createMailboxManager("/%domain/%user", tmpFolder);
         } catch (Exception e) {
@@ -44,4 +45,8 @@ public class DomainUserMaildirMailboxManagerStressTest extends MailboxManagerStr
         }
     }
 
+    @Override
+    protected EventBus retrieveEventBus(StoreMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4c14a757/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerStressTest.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerStressTest.java
index dafe7e0..5eacedc 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerStressTest.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerStressTest.java
@@ -19,13 +19,14 @@
 
 package org.apache.james.mailbox.maildir;
 
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerStressTest;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.rules.TemporaryFolder;
 
-public class FullUserMaildirMailboxManagerStressTest extends MailboxManagerStressTest {
+public class FullUserMaildirMailboxManagerStressTest extends MailboxManagerStressTest<StoreMailboxManager> {
     @Rule
     public TemporaryFolder tmpFolder = new TemporaryFolder();
     
@@ -36,7 +37,7 @@ public class FullUserMaildirMailboxManagerStressTest extends MailboxManagerStres
     }
     
     @Override
-    protected MailboxManager provideManager() {
+    protected StoreMailboxManager provideManager() {
         try {
             return MaildirMailboxManagerProvider.createMailboxManager("/%fulluser", tmpFolder);
         } catch (Exception e) {
@@ -44,5 +45,8 @@ public class FullUserMaildirMailboxManagerStressTest extends MailboxManagerStres
         }
     }
 
-
+    @Override
+    protected EventBus retrieveEventBus(StoreMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4c14a757/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/UserMaildirMailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/UserMaildirMailboxManagerStressTest.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/UserMaildirMailboxManagerStressTest.java
index 05f55fe..457f12d 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/UserMaildirMailboxManagerStressTest.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/UserMaildirMailboxManagerStressTest.java
@@ -19,13 +19,14 @@
 
 package org.apache.james.mailbox.maildir;
 
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerStressTest;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.rules.TemporaryFolder;
 
-public class UserMaildirMailboxManagerStressTest extends MailboxManagerStressTest {
+public class UserMaildirMailboxManagerStressTest extends MailboxManagerStressTest<StoreMailboxManager> {
     @Rule
     public TemporaryFolder tmpFolder = new TemporaryFolder();
     
@@ -36,7 +37,7 @@ public class UserMaildirMailboxManagerStressTest extends MailboxManagerStressTes
     }
     
     @Override
-    protected MailboxManager provideManager() {
+    protected StoreMailboxManager provideManager() {
         try {
             return MaildirMailboxManagerProvider.createMailboxManager("/%user", tmpFolder);
         } catch (Exception e) {
@@ -44,5 +45,8 @@ public class UserMaildirMailboxManagerStressTest extends MailboxManagerStressTes
         }
     }
 
-
+    @Override
+    protected EventBus retrieveEventBus(StoreMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4c14a757/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerStressTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerStressTest.java
index bc0f1e3..f264ef3 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerStressTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerStressTest.java
@@ -19,12 +19,11 @@
 
 package org.apache.james.mailbox.inmemory;
 
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerStressTest;
-import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.events.EventBus;
 import org.junit.Before;
 
-public class MemoryMailboxManagerStressTest extends MailboxManagerStressTest {
+public class MemoryMailboxManagerStressTest extends MailboxManagerStressTest<InMemoryMailboxManager> {
     
     @Override
     @Before
@@ -33,7 +32,12 @@ public class MemoryMailboxManagerStressTest extends MailboxManagerStressTest {
     }
     
     @Override
-    protected MailboxManager provideManager() throws MailboxException {
+    protected InMemoryMailboxManager provideManager() {
         return MemoryMailboxManagerProvider.provideMailboxManager();
     }
+
+    @Override
+    protected EventBus retrieveEventBus(InMemoryMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }


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


[18/27] james-project git commit: MAILBOX-377 Slightly improve InVMEventDelivery

Posted by bt...@apache.org.
MAILBOX-377 Slightly improve InVMEventDelivery


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

Branch: refs/heads/master
Commit: 3f8b8f6a57fdcf15bdeb5a17056147212602fe22
Parents: 897a206
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Jan 15 11:00:00 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:09 2019 +0700

----------------------------------------------------------------------
 .../events/delivery/InVmEventDelivery.java      | 26 ++++++++------------
 1 file changed, 10 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3f8b8f6a/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 63edafb..c59a8b8 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
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.events.delivery;
 
 import java.time.Duration;
 import java.util.Collection;
+import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
@@ -31,12 +32,11 @@ import org.apache.james.metrics.api.TimeMetric;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ImmutableList;
 
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
+import reactor.core.publisher.MonoProcessor;
 import reactor.core.scheduler.Schedulers;
 
 public class InVmEventDelivery implements EventDelivery {
@@ -56,27 +56,21 @@ public class InVmEventDelivery implements EventDelivery {
 
     @Override
     public ExecutionStages deliver(Collection<MailboxListener> mailboxListeners, Event event) {
-        Mono<Void> synchronousListeners = doDeliver(
-            filterByExecutionMode(mailboxListeners, MailboxListener.ExecutionMode.SYNCHRONOUS), event)
-            .cache();
-        Mono<Void> asyncListener = doDeliver(
-            filterByExecutionMode(mailboxListeners, MailboxListener.ExecutionMode.ASYNCHRONOUS), event)
-            .cache();
-
-        synchronousListeners.subscribe();
-        asyncListener.subscribe();
+        Mono<Void> synchronousListeners = doDeliver(filterByExecutionMode(mailboxListeners, MailboxListener.ExecutionMode.SYNCHRONOUS), event)
+            .subscribeWith(MonoProcessor.create());
+        Mono<Void> asyncListener = doDeliver(filterByExecutionMode(mailboxListeners, MailboxListener.ExecutionMode.ASYNCHRONOUS), event)
+            .subscribeWith(MonoProcessor.create());
 
         return new ExecutionStages(synchronousListeners, asyncListener);
     }
 
-    private ImmutableList<MailboxListener> filterByExecutionMode(Collection<MailboxListener> mailboxListeners, MailboxListener.ExecutionMode executionMode) {
+    private Stream<MailboxListener> filterByExecutionMode(Collection<MailboxListener> mailboxListeners, MailboxListener.ExecutionMode executionMode) {
         return mailboxListeners.stream()
-            .filter(listener -> listener.getExecutionMode() == executionMode)
-            .collect(Guavate.toImmutableList());
+            .filter(listener -> listener.getExecutionMode() == executionMode);
     }
 
-    private Mono<Void> doDeliver(Collection<MailboxListener> mailboxListeners, Event event) {
-        return Flux.fromIterable(mailboxListeners)
+    private Mono<Void> doDeliver(Stream<MailboxListener> mailboxListeners, Event event) {
+        return Flux.fromStream(mailboxListeners)
             .flatMap(mailboxListener -> deliveryWithRetries(event, mailboxListener))
             .then()
             .subscribeOn(Schedulers.elastic());


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


[23/27] james-project git commit: JAMES-2642 alias webadmin integration test

Posted by bt...@apache.org.
JAMES-2642 alias webadmin integration test


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

Branch: refs/heads/master
Commit: 3a00fa2adeb956ede1daf3fbad393d8b62170cb9
Parents: 9fd0b6a
Author: Rene Cordier <rc...@linagora.com>
Authored: Tue Jan 15 10:36:05 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:09 2019 +0700

----------------------------------------------------------------------
 .../james/cli/probe/impl/JmxDataProbe.java      | 22 ++++++++++++
 .../org/apache/james/utils/DataProbeImpl.java   | 12 +++++++
 .../java/org/apache/james/probe/DataProbe.java  |  4 +++
 .../RecipientRewriteTableManagementMBean.java   | 36 ++++++++++++++++----
 .../lib/RecipientRewriteTableManagement.java    | 12 +++++++
 .../WebAdminServerIntegrationTest.java          | 16 +++++++++
 6 files changed, 96 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3a00fa2a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
----------------------------------------------------------------------
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
index fae65ac..cb50af9 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
@@ -281,4 +281,26 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
             virtualUserTableProxy.removeGroupMapping(toUser, toDomain, fromAddress);
         }
     }
+
+    @Override
+    public void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception {
+        try (Closeable closeable =
+                 MDCBuilder.create()
+                     .addContext(MDCBuilder.PROTOCOL, JMX)
+                     .addContext(MDCBuilder.ACTION, "addAliasMapping")
+                     .build()) {
+            virtualUserTableProxy.addAliasMapping(fromAlias, fromDomain, toAddress);
+        }
+    }
+
+    @Override
+    public void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception {
+        try (Closeable closeable =
+                 MDCBuilder.create()
+                     .addContext(MDCBuilder.PROTOCOL, JMX)
+                     .addContext(MDCBuilder.ACTION, "removeAliasMapping")
+                     .build()) {
+            virtualUserTableProxy.removeAliasMapping(fromAlias, fromDomain, toAddress);
+        }
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a00fa2a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
index 314ec07..e56c8b5 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
@@ -168,4 +168,16 @@ public class DataProbeImpl implements GuiceProbe, DataProbe {
         MappingSource source = MappingSource.fromUser(toUser, toDomain);
         recipientRewriteTable.removeGroupMapping(source, fromAddress);
     }
+
+    @Override
+    public void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception {
+        MappingSource source = MappingSource.fromUser(fromAlias, fromDomain);
+        recipientRewriteTable.addAliasMapping(source, toAddress);
+    }
+
+    @Override
+    public void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception {
+        MappingSource source = MappingSource.fromUser(fromAlias, fromDomain);
+        recipientRewriteTable.removeAliasMapping(source, toAddress);
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a00fa2a/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java b/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
index 6832fcd..cdaf8fc 100644
--- a/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
+++ b/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
@@ -92,4 +92,8 @@ public interface DataProbe {
     void addGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception;
 
     void removeGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception;
+
+    void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception;
+
+    void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a00fa2a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
index 30dac12..7afc90b 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
@@ -188,11 +188,11 @@ public interface RecipientRewriteTableManagementMBean {
     /***
      * Add forward mapping
      *
-     * @param toUser
+     * @param user
      *            the username part of the mail address destination defined for this forward.
-     * @param toDomain
+     * @param domain
      *            the domain part of the mail address destination defined for this forward.
-     * @param fromAddress The base address of the forward. Mails for this address will be sent to the added forward destination.
+     * @param address The base address of the forward. Mails for this address will be sent to the added forward destination.
      * @throws Exception If an error occurred
      */
     void addForwardMapping(String user, String domain, String address) throws Exception;
@@ -212,11 +212,11 @@ public interface RecipientRewriteTableManagementMBean {
     /***
      * Add group mapping
      *
-     * @param toUser
+     * @param user
      *            the username part of the mail address destination defined for this group.
-     * @param toDomain
+     * @param domain
      *            the domain part of the mail address destination defined for this group.
-     * @param fromAddress The base address of the group. Mails for this address will be sent to the added group destination.
+     * @param address The base address of the group. Mails for this address will be sent to the added group destination.
      * @throws Exception If an error occurred
      */
     void addGroupMapping(String user, String domain, String address) throws Exception;
@@ -232,4 +232,28 @@ public interface RecipientRewriteTableManagementMBean {
      * @throws Exception If an error occurred
      */
     void removeGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception;
+
+    /***
+     * Add alias mapping
+     *
+     * @param fromAlias
+     *            the name part of the alias source.
+     * @param fromDomain
+     *            the domain part of the alias source.
+     * @param toAddress the mail address destination of the alias. Mails sent to the alias will be redirected to this destination mail.
+     * @throws Exception If an error occurred
+     */
+    void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception;
+
+    /**
+     * Remove alias mapping
+     *
+     * @param fromAlias
+     *            the name part of the alias source.
+     * @param fromDomain
+     *            the domain part of the alias source.
+     * @param toAddress the mail address destination of the alias. Mails sent to the alias will not be redirected anymore to this destination mail.
+     * @throws Exception If an error occurred
+     */
+    void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception;
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a00fa2a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
index 92cf309..fe18351 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
@@ -144,4 +144,16 @@ public class RecipientRewriteTableManagement extends StandardMBean implements Re
         MappingSource source = MappingSource.fromUser(toUser, toDomain);
         rrt.removeForwardMapping(source, fromAddress);
     }
+
+    @Override
+    public void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws RecipientRewriteTableException {
+        MappingSource source = MappingSource.fromUser(fromAlias, fromDomain);
+        rrt.addAliasMapping(source, toAddress);
+    }
+
+    @Override
+    public void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws RecipientRewriteTableException {
+        MappingSource source = MappingSource.fromUser(fromAlias, fromDomain);
+        rrt.removeAliasMapping(source, toAddress);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a00fa2a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
index 23c0e2e..33b53da 100644
--- a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
@@ -310,6 +310,22 @@ public class WebAdminServerIntegrationTest {
     }
 
     @Test
+    public void addressAliasesEndpointShouldListAliasesAddresses() throws Exception {
+        dataProbe.addAliasMapping("alias1", "domain.com", "to1@domain.com");
+        dataProbe.addAliasMapping("alias2", "domain.com", "to2@domain.com");
+
+        List<String> members = when()
+            .get("/address/aliases")
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(JSON_CONTENT_TYPE)
+            .extract()
+            .jsonPath()
+            .getList(".");
+        assertThat(members).containsOnly("to1@domain.com", "to2@domain.com");
+    }
+
+    @Test
     public void getSwaggerShouldReturnJsonDataForSwagger() {
         when()
             .get(SwaggerRoutes.SWAGGER_ENDPOINT)


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


[25/27] james-project git commit: JAMES-2642 Add basic alias mapping integration tests

Posted by bt...@apache.org.
JAMES-2642 Add basic alias mapping integration 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/a0793f5b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a0793f5b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a0793f5b

Branch: refs/heads/master
Commit: a0793f5bbcf321c69541d78144e231503250dbcc
Parents: 3a00fa2
Author: Rene Cordier <rc...@linagora.com>
Authored: Wed Jan 16 11:54:29 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:10 2019 +0700

----------------------------------------------------------------------
 .../transport/mailets/AliasMappingTest.java     | 288 +++++++++++++++++++
 1 file changed, 288 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a0793f5b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
new file mode 100644
index 0000000..45f4a2f
--- /dev/null
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
@@ -0,0 +1,288 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import static io.restassured.RestAssured.given;
+import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
+import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
+import static org.apache.james.mailets.configuration.Constants.PASSWORD;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.james.jmap.mailet.VacationMailet;
+import org.apache.james.jmap.mailet.filter.JMAPFiltering;
+import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailets.TemporaryJamesServer;
+import org.apache.james.mailets.configuration.CommonProcessors;
+import org.apache.james.mailets.configuration.MailetConfiguration;
+import org.apache.james.mailets.configuration.MailetContainer;
+import org.apache.james.mailets.configuration.ProcessorConfiguration;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.MailboxProbeImpl;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
+import org.apache.james.probe.DataProbe;
+import org.apache.james.transport.matchers.All;
+import org.apache.james.transport.matchers.IsSenderInRRTLoop;
+import org.apache.james.transport.matchers.RecipientIsLocal;
+import org.apache.james.utils.DataProbeImpl;
+import org.apache.james.utils.IMAPMessageReader;
+import org.apache.james.utils.SMTPMessageSender;
+import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.routes.AliasRoutes;
+import org.apache.mailet.base.test.FakeMail;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import io.restassured.specification.RequestSpecification;
+
+public class AliasMappingTest {
+    private static final String DOMAIN = "domain.tld";
+
+    private static final String BOB_USER = "bob";
+    private static final String ALICE_USER = "alice";
+    private static final String CEDRIC_USER = "cedric";
+
+    private static final String BOB_ADDRESS = BOB_USER + "@" + DOMAIN;
+    private static final String ALICE_ADDRESS = ALICE_USER + "@" + DOMAIN;
+    private static final String CEDRIC_ADDRESS = CEDRIC_USER + "@" + DOMAIN;
+
+    private static final String GROUP = "group";
+    private static final String GROUP_ADDRESS = GROUP + "@" + DOMAIN;
+
+    private static final String BOB_ALIAS = BOB_USER + "-alias@" + DOMAIN;
+    private static final String BOB_ALIAS_2 = BOB_USER + "-alias2@" + DOMAIN;
+    private static final String GROUP_ALIAS = GROUP + "-alias@" + DOMAIN;
+
+    private static final String MESSAGE_CONTENT = "any text";
+    private static final String RRT_ERROR = "rrt-error";
+    private static final MailRepositoryUrl RRT_ERROR_REPOSITORY = MailRepositoryUrl.from("file://var/mail/rrt-error/");
+
+    private TemporaryJamesServer jamesServer;
+    private MimeMessage message;
+    private DataProbe dataProbe;
+    private RequestSpecification webAdminApi;
+
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+    @Rule
+    public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
+    @Rule
+    public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
+
+    @Before
+    public void setup() throws Exception {
+        MailetContainer.Builder mailetContainer = TemporaryJamesServer.SIMPLE_MAILET_CONTAINER_CONFIGURATION
+            .putProcessor(ProcessorConfiguration.transport()
+                .addMailet(MailetConfiguration.builder()
+                    .matcher(All.class)
+                    .mailet(RecipientRewriteTable.class)
+                    .addProperty("errorProcessor", RRT_ERROR))
+                .addMailet(MailetConfiguration.builder()
+                    .matcher(RecipientIsLocal.class)
+                    .mailet(VacationMailet.class))
+                .addMailet(MailetConfiguration.builder()
+                    .matcher(RecipientIsLocal.class)
+                    .mailet(JMAPFiltering.class))
+                .addMailetsFrom(CommonProcessors.deliverOnlyTransport()))
+            .putProcessor(ProcessorConfiguration.builder()
+                .state(RRT_ERROR)
+                .addMailet(MailetConfiguration.builder()
+                    .matcher(All.class)
+                    .mailet(ToRepository.class)
+                    .addProperty("passThrough", "true")
+                    .addProperty("repositoryPath", RRT_ERROR_REPOSITORY.asString()))
+                .addMailet(MailetConfiguration.builder()
+                    .matcher(IsSenderInRRTLoop.class)
+                    .mailet(Null.class))
+                .addMailet(MailetConfiguration.builder()
+                    .matcher(All.class)
+                    .mailet(Bounce.class)));
+
+        jamesServer = TemporaryJamesServer.builder()
+            .withMailetContainer(mailetContainer)
+            .build(temporaryFolder);
+
+        dataProbe = jamesServer.getProbe(DataProbeImpl.class);
+        dataProbe.addDomain(DOMAIN);
+
+        dataProbe.addUser(BOB_ADDRESS, PASSWORD);
+        dataProbe.addUser(ALICE_ADDRESS, PASSWORD);
+        dataProbe.addUser(CEDRIC_ADDRESS, PASSWORD);
+
+        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, BOB_ADDRESS, "INBOX");
+        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, ALICE_ADDRESS, "INBOX");
+
+        WebAdminGuiceProbe webAdminGuiceProbe = jamesServer.getProbe(WebAdminGuiceProbe.class);
+        webAdminGuiceProbe.await();
+        webAdminApi = given()
+            .spec(WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort()).build());
+
+        message = MimeMessageBuilder.mimeMessageBuilder()
+            .setSubject("test")
+            .setText(MESSAGE_CONTENT)
+            .build();
+    }
+
+    @After
+    public void tearDown() {
+        jamesServer.shutdown();
+    }
+
+    @Test
+    public void messageShouldRedirectToUserWhenSentToHisAlias() throws Exception {
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(BOB_ALIAS));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(BOB_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+        assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
+    }
+
+    @Test
+    public void messageShouldRedirectToForwardOfUserWhenSentToHisAlias() throws Exception {
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
+        dataProbe.addForwardMapping(BOB_USER, DOMAIN, CEDRIC_ADDRESS);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(BOB_ALIAS));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(CEDRIC_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+        assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
+    }
+
+    @Test
+    public void messageShouldRedirectToUserWhenForwardedToHisAlias() throws Exception {
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
+        dataProbe.addForwardMapping(ALICE_USER, DOMAIN, BOB_ALIAS);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(CEDRIC_ADDRESS)
+                .recipient(ALICE_ADDRESS));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(BOB_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+        assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
+    }
+
+    @Test
+    public void messageShouldRedirectToUserWhenHisAliasIsPartOfGroup() throws Exception {
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
+        dataProbe.addGroupMapping(GROUP, DOMAIN, BOB_ALIAS);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(GROUP_ADDRESS));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(BOB_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+        assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
+    }
+
+    @Test
+    public void messageShouldRedirectToMembersWhenSentToGroupAlias() throws Exception {
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + GROUP_ADDRESS + "/sources/" + GROUP_ALIAS);
+        dataProbe.addGroupMapping(GROUP, DOMAIN, BOB_ADDRESS);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(GROUP_ALIAS));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(BOB_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+        assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
+    }
+
+    @Test
+    public void messageShouldRedirectToUserWhithAliasesCascading() throws Exception {
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ALIAS + "/sources/" + BOB_ALIAS_2);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(BOB_ALIAS_2));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(BOB_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+        assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
+    }
+
+    @Test
+    public void messageShouldRedirectToUsersSharingSameAlias() throws Exception {
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + ALICE_ADDRESS + "/sources/" + BOB_ALIAS);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(CEDRIC_ADDRESS)
+                .recipient(BOB_ALIAS));
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(BOB_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+        assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
+
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
+            .login(ALICE_ADDRESS, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitAtMostOneMinute);
+        assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
+    }
+
+
+}


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


[03/27] james-project git commit: JAMES-2641 Re-order fields of AbstractSelectionProcessor

Posted by bt...@apache.org.
JAMES-2641 Re-order fields of AbstractSelectionProcessor


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

Branch: refs/heads/master
Commit: 7a37651ec27bad6be3328f5ed567a57ead4939cb
Parents: 352f92a
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 15:38:28 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../apache/james/imap/processor/AbstractSelectionProcessor.java | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7a37651e/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
index 5d817b5..1172979 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
@@ -61,11 +61,10 @@ import com.google.common.collect.ImmutableList;
 
 abstract class AbstractSelectionProcessor<M extends AbstractMailboxSelectionRequest> extends AbstractMailboxProcessor<M> implements PermitEnableCapabilityProcessor {
     private static final Logger LOGGER = LoggerFactory.getLogger(AbstractSelectionProcessor.class);
+    private static final List<String> CAPS = ImmutableList.of(ImapConstants.SUPPORTS_QRESYNC, ImapConstants.SUPPORTS_CONDSTORE);
 
-    final StatusResponseFactory statusResponseFactory;
-
+    private final StatusResponseFactory statusResponseFactory;
     private final boolean openReadOnly;
-    private static final List<String> CAPS = ImmutableList.of(ImapConstants.SUPPORTS_QRESYNC, ImapConstants.SUPPORTS_CONDSTORE);
 
     
     public AbstractSelectionProcessor(Class<M> acceptableClass, ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, boolean openReadOnly,


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


[12/27] james-project git commit: JAMES-2641 Drop Delegating mailbox listener and rather use the EventBus

Posted by bt...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 668cfbe..2cc6bae 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
@@ -28,6 +28,8 @@ import java.io.InputStream;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
@@ -40,13 +42,13 @@ 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;
 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.apache.james.metrics.api.NoopMetricFactory;
 import org.junit.Before;
 
 public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManagerAttachmentTest {
@@ -62,11 +64,11 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager
         mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
         Authenticator noAuthenticator = null;
         Authorizator noAuthorizator = null;
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
         MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
         GroupMembershipResolver groupMembershipResolver = null;
         UnionMailboxACLResolver aclResolver = new UnionMailboxACLResolver();
-        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, delegatingListener);
+        StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, eventBus);
 
         SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator);
         QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
@@ -74,12 +76,12 @@ 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);
+                new MessageParser(), messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, index);
         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);
+            failingMessageParser, messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, index);
         super.setUp();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 d2d57b1..2e1a3de 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
@@ -23,6 +23,8 @@ import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
@@ -45,7 +47,6 @@ import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 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;
@@ -56,6 +57,7 @@ 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.api.NoopMetricFactory;
 
 public class InMemoryIntegrationResources implements IntegrationResources<StoreMailboxManager> {
 
@@ -104,17 +106,17 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
     private SimpleGroupMembershipResolver groupMembershipResolver;
 
     @Override
-    public InMemoryMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver) throws MailboxException {
+    public InMemoryMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver) {
         return createResources(groupMembershipResolver).mailboxManager;
     }
 
-    public Resources createResources(GroupMembershipResolver groupMembershipResolver) throws MailboxException {
+    public Resources createResources(GroupMembershipResolver groupMembershipResolver) {
         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 {
+    public Resources createResources(GroupMembershipResolver groupMembershipResolver, int limitAnnotationCount, int limitAnnotationSize) {
         FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
         fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
         fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
@@ -122,22 +124,22 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         return createResources(groupMembershipResolver, fakeAuthenticator, FakeAuthorizator.defaultReject(), limitAnnotationCount, limitAnnotationSize);
     }
 
-    public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) throws MailboxException {
+    public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) {
         return createResources(groupMembershipResolver, authenticator, authorizator).mailboxManager;
     }
 
-    public Resources createResources(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) throws MailboxException {
+    public Resources createResources(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) {
         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 {
+                                      int limitAnnotationCount, int limitAnnotationSize) {
 
         InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
-        DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(),
-            groupMembershipResolver, delegatingListener);
+            groupMembershipResolver, eventBus);
         StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager, limitAnnotationCount, limitAnnotationSize);
 
         SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
@@ -146,7 +148,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         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);
+        ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, eventBus, quotaManager);
         QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, quotaManager, quotaRootResolver, listeningCurrentQuotaUpdater);
 
         MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
@@ -157,20 +159,16 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
             new JVMMailboxPathLocker(),
             new MessageParser(),
             new InMemoryMessageId.Factory(),
-            delegatingListener,
+            eventBus,
             annotationManager,
             storeRightManager,
             quotaComponents,
             index);
 
-        delegatingListener.addGlobalListener((ListeningCurrentQuotaUpdater) quotaComponents.getQuotaUpdater(), sessionProvider.createSystemSession("admin"));
-        delegatingListener.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider), sessionProvider.createSystemSession("admin"));
+        eventBus.register(listeningCurrentQuotaUpdater);
+        eventBus.register(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider));
 
-        try {
-            return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory(), currentQuotaManager, quotaRootResolver, maxQuotaManager);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
+        return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory(), currentQuotaManager, quotaRootResolver, maxQuotaManager);
     }
 
     @Override
@@ -183,7 +181,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         return new StoreMessageIdManager(
             mailboxManager,
             mailboxManager.getMapperFactory(),
-            mailboxManager.getDelegationListener(),
+            mailboxManager.getEventBus(),
             factory,
             quotaComponents.getQuotaManager(),
             quotaComponents.getQuotaRootResolver());

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 8f32bf8..e270749 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
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.inmemory.manager;
 
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
@@ -35,7 +36,6 @@ 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.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;
@@ -55,7 +55,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
     }
 
     @Override
-    protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) {
+    protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, EventBus eventBus) {
         InMemoryMailboxSessionMapperFactory mapperFactory = new InMemoryMailboxSessionMapperFactory();
 
         FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
@@ -63,7 +63,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
         fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
         FakeAuthorizator fakeAuthorizator = FakeAuthorizator.defaultReject();
 
-        StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener);
+        StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
         JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
         InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
         SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, fakeAuthorizator);
@@ -76,7 +76,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
             locker,
             new MessageParser(),
             messageIdFactory,
-            delegatingMailboxListener,
+            eventBus,
             new StoreMailboxAnnotationManager(mapperFactory, rightManager),
             rightManager,
             quotaComponents,
@@ -84,7 +84,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan
         StoreMessageIdManager messageIdManager = new StoreMessageIdManager(
             mailboxManager,
             mapperFactory,
-            delegatingMailboxListener,
+            eventBus,
             messageIdFactory,
             quotaManager,
             quotaComponents.getQuotaRootResolver());

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/plugin/quota-mailing/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/pom.xml b/mailbox/plugin/quota-mailing/pom.xml
index b9f5fbd..a0071ae 100644
--- a/mailbox/plugin/quota-mailing/pom.xml
+++ b/mailbox/plugin/quota-mailing/pom.xml
@@ -44,6 +44,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-store</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
index fc5f31c..c399025 100644
--- a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
+++ b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
@@ -22,33 +22,37 @@ package org.apache.james.mailbox.quota.mailing.listeners;
 import org.apache.james.eventsourcing.eventstore.EventStore;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mailbox.Event;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MailboxSessionUtil;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.RegistrationKey;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.quota.mailing.QuotaMailingListenerConfiguration;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.server.core.JamesServerResourceLoader;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.apache.james.user.memory.MemoryUsersRepository;
 import org.apache.mailet.MailetContext;
 
-public class QuotaThresholdListenersTestSystem {
+import com.google.common.collect.ImmutableSet;
 
-    private final DefaultDelegatingMailboxListener delegatingListener;
+class QuotaThresholdListenersTestSystem {
+    private static final ImmutableSet<RegistrationKey> NO_KEYS = ImmutableSet.of();
 
-    public QuotaThresholdListenersTestSystem(MailetContext mailetContext, EventStore eventStore, QuotaMailingListenerConfiguration configuration) throws MailboxException {
-        delegatingListener = new DefaultDelegatingMailboxListener();
+    private final EventBus eventBus;
+
+    QuotaThresholdListenersTestSystem(MailetContext mailetContext, EventStore eventStore, QuotaMailingListenerConfiguration configuration) throws MailboxException {
+        eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
 
         FileSystem fileSystem = new FileSystemImpl(new JamesServerResourceLoader("."));
 
         QuotaThresholdCrossingListener thresholdCrossingListener =
             new QuotaThresholdCrossingListener(mailetContext, MemoryUsersRepository.withVirtualHosting(), fileSystem, eventStore, configuration);
 
-        MailboxSession mailboxSession = MailboxSessionUtil.create("system");
-        delegatingListener.addGlobalListener(thresholdCrossingListener, mailboxSession);
+        eventBus.register(thresholdCrossingListener);
     }
 
-    public void event(Event event) {
-        delegatingListener.event(event);
+    void event(Event event) {
+        eventBus.dispatch(event, NO_KEYS);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 92e6995..38cd886 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
@@ -32,7 +32,7 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest
     }
 
     @Override
-    protected void initializeMailboxManager() throws Exception {
+    protected void initializeMailboxManager() {
         storeMailboxManager = new InMemoryIntegrationResources()
             .createMailboxManager(new SimpleGroupMembershipResolver());
 
@@ -44,7 +44,7 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest
         messageIdManager = new StoreMessageIdManager(
             storeMailboxManager,
             storeMailboxManager.getMapperFactory(),
-            storeMailboxManager.getDelegationListener(),
+            storeMailboxManager.getEventBus(),
             storeMailboxManager.getMessageIdFactory(),
             storeMailboxManager.getQuotaComponents().getQuotaManager(),
             storeMailboxManager.getQuotaComponents().getQuotaRootResolver());

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/spring/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/spring/pom.xml b/mailbox/spring/pom.xml
index f4247f1..048fa96 100644
--- a/mailbox/spring/pom.xml
+++ b/mailbox/spring/pom.xml
@@ -44,6 +44,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-jpa</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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
index 9527a4a..49029e6 100644
--- 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
@@ -22,11 +22,9 @@ 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.events.EventBus;
 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;
@@ -35,37 +33,35 @@ import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 public class MailboxInitializer {
     private final SessionProvider sessionProvider;
-    private final DelegatingMailboxListener delegatingMailboxListener;
+    private final EventBus eventBus;
     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) {
+    public MailboxInitializer(SessionProvider sessionProvider, EventBus eventBus, MessageSearchIndex messageSearchIndex, QuotaUpdater quotaUpdater, MailboxManager mailboxManager, MailboxSessionMapperFactory mapperFactory) {
         this.sessionProvider = sessionProvider;
-        this.delegatingMailboxListener = delegatingMailboxListener;
+        this.eventBus = eventBus;
         this.messageSearchIndex = messageSearchIndex;
         this.quotaUpdater = quotaUpdater;
         this.mailboxManager = mailboxManager;
         this.mapperFactory = mapperFactory;
     }
 
-    public void init() throws MailboxException {
-        MailboxSession session = sessionProvider.createSystemSession("admin");
-
+    public void init() {
         if (messageSearchIndex instanceof ListeningMessageSearchIndex) {
             ListeningMessageSearchIndex index = (ListeningMessageSearchIndex) messageSearchIndex;
-            delegatingMailboxListener.addGlobalListener(index, session);
+            eventBus.register(index);
         }
 
         if (quotaUpdater instanceof ListeningCurrentQuotaUpdater) {
             ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = (ListeningCurrentQuotaUpdater) quotaUpdater;
-            delegatingMailboxListener.addGlobalListener(listeningCurrentQuotaUpdater, session);
+            eventBus.register(listeningCurrentQuotaUpdater);
         }
 
         if (mailboxManager.getSupportedMailboxCapabilities().contains(MailboxManager.MailboxCapabilities.Annotation)) {
-            delegatingMailboxListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), session);
+            eventBus.register(new MailboxAnnotationListener(mapperFactory, sessionProvider));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 f21a0b7..ff0447a 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,15 +23,11 @@
        xsi:schemaLocation="
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
-    <bean id="delegating-listener" class="org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener" lazy-init="true">
+    <bean id="event-bus" class="org.apache.james.mailbox.events.InVMEventBus" lazy-init="true">
         <constructor-arg index="0" ref="event-delivery"/>
-        <constructor-arg index="1" ref="event-registry"/>
     </bean>
-
     <bean id="event-delivery" class="org.apache.james.mailbox.events.delivery.InVmEventDelivery" lazy-init="true">
         <constructor-arg index="0" ref="metricFactory"/>
     </bean>
 
-    <bean id="event-registry" class="org.apache.james.mailbox.store.event.MailboxListenerRegistry"/>
-
 </beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 9cb5a2c..c9e1ae7 100644
--- a/mailbox/spring/src/main/resources/META-INF/spring/quota.xml
+++ b/mailbox/spring/src/main/resources/META-INF/spring/quota.xml
@@ -54,7 +54,7 @@
     <bean id="eventQuotaUpdater" class="org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater" lazy-init="true">
         <constructor-arg index="0" ref="currentQuotaManager"/>
         <constructor-arg index="1" ref="quotaRootResolver"/>
-        <constructor-arg index="2" ref="delegating-listener"/>
+        <constructor-arg index="2" ref="event-bus"/>
         <constructor-arg index="3" ref="storeQuotaManager"/>
     </bean>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 bedb91a..e9c5cf7 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
@@ -63,7 +63,7 @@
         <constructor-arg index="0" ref="messageMapperFactory" />
         <constructor-arg index="1" ref="aclResolver" />
         <constructor-arg index="2" ref="groupMembershipResolver" />
-        <constructor-arg index="3" ref="delegating-listener" />
+        <constructor-arg index="3" ref="event-bus" />
     </bean>
 
     <bean id="sessionProvider" class="org.apache.james.mailbox.store.SessionProvider" >
@@ -73,7 +73,7 @@
 
     <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="1" ref="event-bus" />
         <constructor-arg index="2" ref="indexer" />
         <constructor-arg index="3" ref="quotaUpdater" />
         <constructor-arg index="4" ref="mailboxmanager" />

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 2145f1f..fdf2ffb 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
@@ -39,7 +39,8 @@ import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.StandardMailboxMetaDataComparator;
-import org.apache.james.mailbox.events.Group;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.events.Registration;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
@@ -64,7 +65,6 @@ import org.apache.james.mailbox.model.search.MailboxNameExpression;
 import org.apache.james.mailbox.model.search.MailboxQuery;
 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.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
@@ -101,7 +101,7 @@ public class StoreMailboxManager implements MailboxManager {
     private static final SecureRandom RANDOM = new SecureRandom();
 
     private final StoreRightManager storeRightManager;
-    private final DelegatingMailboxListener delegatingListener;
+    private final EventBus eventBus;
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
     private final MailboxAnnotationManager annotationManager;
     private final MailboxPathLocker locker;
@@ -118,9 +118,9 @@ public class StoreMailboxManager implements MailboxManager {
     public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider,
                                MailboxPathLocker locker, MessageParser messageParser,
                                MessageId.Factory messageIdFactory, MailboxAnnotationManager annotationManager,
-                               DelegatingMailboxListener delegatingListener, StoreRightManager storeRightManager,
+                               EventBus eventBus, StoreRightManager storeRightManager,
                                QuotaComponents quotaComponents, MessageSearchIndex searchIndex, MailboxManagerConfiguration configuration) {
-        Preconditions.checkNotNull(delegatingListener);
+        Preconditions.checkNotNull(eventBus);
         Preconditions.checkNotNull(mailboxSessionMapperFactory);
 
         this.annotationManager = annotationManager;
@@ -129,7 +129,7 @@ public class StoreMailboxManager implements MailboxManager {
         this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
         this.messageParser = messageParser;
         this.messageIdFactory = messageIdFactory;
-        this.delegatingListener = delegatingListener;
+        this.eventBus = eventBus;
         this.storeRightManager = storeRightManager;
         this.quotaRootResolver = quotaComponents.getQuotaRootResolver();
         this.quotaManager = quotaComponents.getQuotaManager();
@@ -166,12 +166,12 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     /**
-     * Return the {@link DelegatingMailboxListener} which is used by this {@link MailboxManager}
+     * Return the {@link EventBus} which is used by this {@link MailboxManager}
      *
      * @return delegatingListener
      */
-    public DelegatingMailboxListener getDelegationListener() {
-        return delegatingListener;
+    public EventBus getEventBus() {
+        return eventBus;
     }
 
     /**
@@ -250,7 +250,7 @@ public class StoreMailboxManager implements MailboxManager {
      * @return storeMailbox
      */
     protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException {
-        return new StoreMessageManager(DEFAULT_NO_MESSAGE_CAPABILITIES, getMapperFactory(), getMessageSearchIndex(), getDelegationListener(),
+        return new StoreMessageManager(DEFAULT_NO_MESSAGE_CAPABILITIES, getMapperFactory(), getMessageSearchIndex(), getEventBus(),
                 getLocker(), mailbox, quotaManager,
             getQuotaComponents().getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), configuration.getBatchSizes(),
             getStoreRightManager());
@@ -345,11 +345,12 @@ public class StoreMailboxManager implements MailboxManager {
                         try {
                             mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(m))));
                             // notify listeners
-                            delegatingListener.event(EventFactory.mailboxAdded()
+                            eventBus.dispatch(EventFactory.mailboxAdded()
                                 .randomEventId()
                                 .mailboxSession(mailboxSession)
                                 .mailbox(m)
-                                .build());
+                                .build(),
+                                new MailboxIdRegistrationKey(m.getMailboxId()));
                         } catch (MailboxExistsException e) {
                             LOGGER.info("{} mailbox was created concurrently", m.generateAssociatedPath());
                         }
@@ -393,14 +394,15 @@ public class StoreMailboxManager implements MailboxManager {
             // mailbox once we remove it
             SimpleMailbox m = new SimpleMailbox(mailbox);
             mailboxMapper.delete(mailbox);
-            delegatingListener.event(EventFactory.mailboxDeleted()
+            eventBus.dispatch(EventFactory.mailboxDeleted()
                 .randomEventId()
                 .mailboxSession(session)
                 .mailbox(mailbox)
                 .quotaRoot(quotaRoot)
                 .quotaCount(QuotaCount.count(messageCount))
                 .quotaSize(QuotaSize.size(totalSize))
-                .build());
+                .build(),
+                new MailboxIdRegistrationKey(mailbox.getMailboxId()));
             return m;
         });
 
@@ -439,13 +441,14 @@ public class StoreMailboxManager implements MailboxManager {
         mailbox.setName(to.getName());
         mapper.save(mailbox);
 
-        delegatingListener.event(EventFactory.mailboxRenamed()
+        eventBus.dispatch(EventFactory.mailboxRenamed()
             .randomEventId()
             .mailboxSession(session)
             .mailboxId(mailbox.getMailboxId())
             .oldPath(from)
             .newPath(to)
-            .build());
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
 
         // rename submailboxes
         MailboxPath children = new MailboxPath(from.getNamespace(), from.getUser(), from.getName() + getDelimiter() + "%");
@@ -457,13 +460,14 @@ public class StoreMailboxManager implements MailboxManager {
                 MailboxPath fromPath = new MailboxPath(children, subOriginalName);
                 sub.setName(subNewName);
                 mapper.save(sub);
-                delegatingListener.event(EventFactory.mailboxRenamed()
+                eventBus.dispatch(EventFactory.mailboxRenamed()
                     .randomEventId()
                     .mailboxSession(session)
                     .mailboxId(sub.getMailboxId())
                     .oldPath(fromPath)
                     .newPath(sub.generateAssociatedPath())
-                    .build());
+                    .build(),
+                    new MailboxIdRegistrationKey(sub.getMailboxId()));
 
                 LOGGER.debug("Rename mailbox sub-mailbox {} to {}", subOriginalName, subNewName);
             }
@@ -721,40 +725,6 @@ public class StoreMailboxManager implements MailboxManager {
 
     @Override
     public Registration register(MailboxListener listener, MailboxId registrationKey) {
-        MailboxSession session = createSystemSession("admin");
-        try {
-            delegatingListener.addListener(registrationKey, listener, session);
-        } catch (MailboxException e) {
-            throw new RuntimeException(e);
-        }
-        return () -> {
-            try {
-                delegatingListener.removeListener(registrationKey, listener, session);
-            } catch (MailboxException e) {
-                throw new RuntimeException(e);
-            }
-        };
-    }
-
-    @Override
-    public Registration register(MailboxListener listener, Group group) {
-        MailboxSession session = createSystemSession("admin");
-        try {
-            delegatingListener.addGlobalListener(listener, session);
-        } catch (MailboxException e) {
-            throw new RuntimeException(e);
-        }
-        return () -> {
-            try {
-                delegatingListener.removeGlobalListener(listener, session);
-            } catch (MailboxException e) {
-                throw new RuntimeException(e);
-            }
-        };
-    }
-
-    @Override
-    public Registration register(MailboxListener.GroupMailboxListener groupMailboxListener) {
-        return register(groupMailboxListener, groupMailboxListener.getGroup());
+        return eventBus.register(listener, new MailboxIdRegistrationKey(registrationKey));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
index 3efdb14..04478cd 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
@@ -37,6 +37,8 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.DeleteResult;
@@ -51,7 +53,6 @@ import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.UpdatedFlags;
 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.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageIdMapper;
@@ -101,18 +102,18 @@ public class StoreMessageIdManager implements MessageIdManager {
 
     private final MailboxManager mailboxManager;
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
-    private final DelegatingMailboxListener delegatingMailboxListener;
+    private final EventBus eventBus;
     private final MessageId.Factory messageIdFactory;
     private final QuotaManager quotaManager;
     private final QuotaRootResolver quotaRootResolver;
 
     @Inject
     public StoreMessageIdManager(MailboxManager mailboxManager, MailboxSessionMapperFactory mailboxSessionMapperFactory,
-                                 DelegatingMailboxListener delegatingMailboxListener, MessageId.Factory messageIdFactory,
+                                 EventBus eventBus, MessageId.Factory messageIdFactory,
                                  QuotaManager quotaManager, QuotaRootResolver quotaRootResolver) {
         this.mailboxManager = mailboxManager;
         this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
-        this.delegatingMailboxListener = delegatingMailboxListener;
+        this.eventBus = eventBus;
         this.messageIdFactory = messageIdFactory;
         this.quotaManager = quotaManager;
         this.quotaRootResolver = quotaRootResolver;
@@ -218,12 +219,13 @@ public class StoreMessageIdManager implements MessageIdManager {
 
         MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
         for (MetadataWithMailboxId metadataWithMailboxId : metadataWithMailbox) {
-            delegatingMailboxListener.event(EventFactory.expunged()
+            eventBus.dispatch(EventFactory.expunged()
                 .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailboxMapper.findMailboxById(metadataWithMailboxId.mailboxId))
                 .addMetaData(metadataWithMailboxId.messageMetaData)
-                .build());
+                .build(),
+                new MailboxIdRegistrationKey(metadataWithMailboxId.mailboxId));
         }
     }
 
@@ -286,11 +288,14 @@ public class StoreMessageIdManager implements MessageIdManager {
         addMessageToMailboxes(mailboxMessage, messageMoves.addedMailboxIds(), mailboxSession);
         removeMessageFromMailboxes(mailboxMessage, messageMoves.removedMailboxIds(), mailboxSession);
 
-        delegatingMailboxListener.event(EventFactory.moved()
+        eventBus.dispatch(EventFactory.moved()
             .session(mailboxSession)
             .messageMoves(messageMoves)
             .messageId(mailboxMessage.getMessageId())
-            .build());
+            .build(),
+            messageMoves.impactedMailboxIds()
+                .map(MailboxIdRegistrationKey::new)
+                .collect(Guavate.toImmutableSet()));
     }
 
     private void removeMessageFromMailboxes(MailboxMessage message, Set<MailboxId> mailboxesToRemove, MailboxSession mailboxSession) throws MailboxException {
@@ -300,12 +305,13 @@ public class StoreMessageIdManager implements MessageIdManager {
 
         for (MailboxId mailboxId: mailboxesToRemove) {
             messageIdMapper.delete(message.getMessageId(), mailboxesToRemove);
-            delegatingMailboxListener.event(EventFactory.expunged()
+            eventBus.dispatch(EventFactory.expunged()
                 .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailboxMapper.findMailboxById(mailboxId))
                 .addMetaData(eventPayload)
-                .build());
+                .build(),
+                new MailboxIdRegistrationKey(mailboxId));
         }
     }
 
@@ -317,12 +323,13 @@ public class StoreMessageIdManager implements MessageIdManager {
         if (updatedFlags.flagsChanged()) {
             Mailbox mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
 
-            delegatingMailboxListener.event(EventFactory.flagsUpdated()
+            eventBus.dispatch(EventFactory.flagsUpdated()
                 .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailbox)
                 .updatedFlag(updatedFlags)
-                .build());
+                .build(),
+                new MailboxIdRegistrationKey(mailboxId));
         }
     }
 
@@ -384,12 +391,13 @@ public class StoreMessageIdManager implements MessageIdManager {
                     .build();
             save(mailboxSession, messageIdMapper, copy);
 
-            delegatingMailboxListener.event(EventFactory.added()
+            eventBus.dispatch(EventFactory.added()
                 .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailboxMapper.findMailboxById(mailboxId))
                 .addMessage(copy)
-                .build());
+                .build(),
+                new MailboxIdRegistrationKey(mailboxId));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index a92914c..e38a291 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -46,6 +46,8 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.ReadOnlyException;
 import org.apache.james.mailbox.model.ComposedMessageId;
@@ -65,7 +67,6 @@ import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.UpdatedFlags;
 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.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
@@ -133,7 +134,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
     private static final Logger LOG = LoggerFactory.getLogger(StoreMessageManager.class);
 
     private final EnumSet<MailboxManager.MessageCapabilities> messageCapabilities;
-    private final DelegatingMailboxListener delegatingMailboxListener;
+    private final EventBus eventBus;
     private final Mailbox mailbox;
     private final MailboxSessionMapperFactory mapperFactory;
     private final MessageSearchIndex index;
@@ -145,12 +146,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
     private final Factory messageIdFactory;
     private final BatchSizes batchSizes;
 
-    public StoreMessageManager(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities, MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, DelegatingMailboxListener delegatingMailboxListener,
+    public StoreMessageManager(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities, MailboxSessionMapperFactory mapperFactory,
+                               MessageSearchIndex index, EventBus eventBus,
                                MailboxPathLocker locker, Mailbox mailbox,
                                QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes,
                                StoreRightManager storeRightManager) {
         this.messageCapabilities = messageCapabilities;
-        this.delegatingMailboxListener = delegatingMailboxListener;
+        this.eventBus = eventBus;
         this.mailbox = mailbox;
         this.mapperFactory = mapperFactory;
         this.index = index;
@@ -228,7 +230,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
      * 
      * In this implementation, all permanent flags are shared, ergo we simply
      * return {@link #getPermanentFlags(MailboxSession)}
-     * 
+     *
      * @see UnionMailboxACLResolver#isReadWrite(MailboxACLRights, Flags)
      * 
      * @param session
@@ -256,12 +258,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
         }
         Map<MessageUid, MessageMetaData> uids = deleteMarkedInMailbox(set, mailboxSession);
 
-        delegatingMailboxListener.event(EventFactory.expunged()
+        eventBus.dispatch(EventFactory.expunged()
             .randomEventId()
             .mailboxSession(mailboxSession)
             .mailbox(getMailboxEntity())
             .metaData(ImmutableSortedMap.copyOf(uids))
-            .build());
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
         return uids.keySet().iterator();
     }
 
@@ -403,12 +406,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
 
                         Mailbox mailbox = getMailboxEntity();
                         MailboxMessage copy = copyMessage(message);
-                        delegatingMailboxListener.event(EventFactory.added()
+                        eventBus.dispatch(EventFactory.added()
                             .randomEventId()
                             .mailboxSession(mailboxSession)
                             .mailbox(mailbox)
                             .addMessage(copy)
-                            .build());
+                            .build(),
+                            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
                         return new ComposedMessageId(mailbox.getMailboxId(), data.getMessageId(), data.getUid());
                     }, true);
                 }
@@ -565,12 +569,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
         Iterator<UpdatedFlags> it = messageMapper.execute(() -> messageMapper.updateFlags(getMailboxEntity(), new FlagsUpdateCalculator(flags, flagsUpdateMode), set));
         List<UpdatedFlags> updatedFlags = Iterators.toStream(it).collect(Guavate.toImmutableList());
 
-        delegatingMailboxListener.event(EventFactory.flagsUpdated()
+        eventBus.dispatch(EventFactory.flagsUpdated()
             .randomEventId()
             .mailboxSession(mailboxSession)
             .mailbox(getMailboxEntity())
             .updatedFlags(updatedFlags)
-            .build());
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
 
         return updatedFlags.stream().collect(Guavate.toImmutableMap(
             UpdatedFlags::getUid,
@@ -729,20 +734,22 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             messageIds.add(message.getMessageId());
         }
 
-        delegatingMailboxListener.event(EventFactory.added()
+        eventBus.dispatch(EventFactory.added()
             .randomEventId()
             .mailboxSession(session)
             .mailbox(to.getMailboxEntity())
             .metaData(copiedUids)
-            .build());
-        delegatingMailboxListener.event(EventFactory.moved()
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+        eventBus.dispatch(EventFactory.moved()
             .session(session)
             .messageMoves(MessageMoves.builder()
                 .previousMailboxIds(getMailboxEntity().getMailboxId())
                 .targetMailboxIds(to.getMailboxEntity().getMailboxId(), getMailboxEntity().getMailboxId())
                 .build())
             .messageId(messageIds.build())
-            .build());
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
 
         return copiedUids;
     }
@@ -758,26 +765,29 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             messageIds.add(message.getMessageId());
         }
 
-        delegatingMailboxListener.event(EventFactory.added()
+        eventBus.dispatch(EventFactory.added()
             .randomEventId()
             .mailboxSession(session)
             .mailbox(to.getMailboxEntity())
             .metaData(moveUids)
-            .build());
-        delegatingMailboxListener.event(EventFactory.expunged()
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+        eventBus.dispatch(EventFactory.expunged()
             .randomEventId()
             .mailboxSession(session)
             .mailbox(getMailboxEntity())
             .addMetaData(moveResult.getOriginalMessages())
-            .build());
-        delegatingMailboxListener.event(EventFactory.moved()
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
+        eventBus.dispatch(EventFactory.moved()
             .messageMoves(MessageMoves.builder()
                 .previousMailboxIds(getMailboxEntity().getMailboxId())
                 .targetMailboxIds(to.getMailboxEntity().getMailboxId())
                 .build())
             .messageId(messageIds.build())
             .session(session)
-            .build());
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
 
         return moveUids;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
index 84bc1f0..25a8bdc 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
@@ -32,6 +32,8 @@ import org.apache.james.mailbox.RightManager;
 import org.apache.james.mailbox.acl.ACLDiff;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.exception.DifferentDomainException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.UnsupportedRightException;
@@ -43,7 +45,6 @@ import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights;
 import org.apache.james.mailbox.model.MailboxACL.Right;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -55,7 +56,7 @@ import com.google.common.collect.ImmutableMap;
 public class StoreRightManager implements RightManager {
     public static final boolean GROUP_FOLDER = true;
 
-    private final DelegatingMailboxListener delegatingMailboxListener;
+    private final EventBus eventBus;
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
     private final MailboxACLResolver aclResolver;
     private final GroupMembershipResolver groupMembershipResolver;
@@ -64,11 +65,11 @@ public class StoreRightManager implements RightManager {
     public StoreRightManager(MailboxSessionMapperFactory mailboxSessionMapperFactory,
                              MailboxACLResolver aclResolver,
                              GroupMembershipResolver groupMembershipResolver,
-                             DelegatingMailboxListener delegatingMailboxListener) {
+                             EventBus eventBus) {
         this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
         this.aclResolver = aclResolver;
         this.groupMembershipResolver = groupMembershipResolver;
-        this.delegatingMailboxListener = delegatingMailboxListener;
+        this.eventBus = eventBus;
     }
 
     @Override
@@ -139,12 +140,13 @@ public class StoreRightManager implements RightManager {
         Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
         ACLDiff aclDiff = mapper.updateACL(mailbox, mailboxACLCommand);
 
-        delegatingMailboxListener.event(EventFactory.aclUpdated()
+        eventBus.dispatch(EventFactory.aclUpdated()
             .randomEventId()
             .mailboxSession(session)
             .mailbox(mailbox)
             .aclDiff(aclDiff)
-            .build());
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
     }
 
     private void assertSharesBelongsToUserDomain(String user, ACLCommand mailboxACLCommand) throws DifferentDomainException {
@@ -222,12 +224,13 @@ public class StoreRightManager implements RightManager {
     private void setRights(MailboxACL mailboxACL, MailboxMapper mapper, Mailbox mailbox, MailboxSession session) throws MailboxException {
         ACLDiff aclDiff = mapper.setACL(mailbox, mailboxACL);
 
-        delegatingMailboxListener.event(EventFactory.aclUpdated()
+        eventBus.dispatch(EventFactory.aclUpdated()
             .randomEventId()
             .mailboxSession(session)
             .mailbox(mailbox)
             .aclDiff(aclDiff)
-            .build());
+            .build(),
+            new MailboxIdRegistrationKey(mailbox.getMailboxId()));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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
deleted file mode 100644
index 1cc0319..0000000
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
+++ /dev/null
@@ -1,126 +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.mailbox.store.event;
-
-import java.util.Collection;
-
-import javax.inject.Inject;
-
-import org.apache.james.mailbox.Event;
-import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.events.delivery.EventDelivery;
-import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxId;
-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
- *
- * This is a mono instance Thread safe implementation for DelegatingMailboxListener
- */
-public class DefaultDelegatingMailboxListener implements DelegatingMailboxListener {
-
-    private final MailboxListenerRegistry registry;
-    private final EventDelivery eventDelivery;
-
-    @Override
-    public ListenerType getType() {
-        return ListenerType.EACH_NODE;
-    }
-
-    @VisibleForTesting
-    public DefaultDelegatingMailboxListener() {
-        this(new InVmEventDelivery(new NoopMetricFactory()),
-            new MailboxListenerRegistry());
-    }
-
-    @Inject
-    public DefaultDelegatingMailboxListener(EventDelivery eventDelivery, MailboxListenerRegistry registry) {
-        this.registry = registry;
-        this.eventDelivery = eventDelivery;
-    }
-
-    @Override
-    public void addListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException {
-        if (listener.getType() != ListenerType.MAILBOX) {
-            throw new MailboxException(listener.getClass().getCanonicalName() + " registred on specific MAILBOX operation while its listener type was " + listener.getType());
-        }
-        registry.addListener(mailboxId, listener);
-    }
-
-    @Override
-    public void addGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException {
-        if (listener.getType() != ListenerType.EACH_NODE && listener.getType() != ListenerType.ONCE) {
-            throw new MailboxException(listener.getClass().getCanonicalName() + " registered on global event dispatching while its listener type was " + listener.getType());
-        }
-        registry.addGlobalListener(listener);
-    }
-
-    @Override
-    public void removeListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) {
-        registry.removeListener(mailboxId, listener);
-    }
-
-    @Override
-    public void removeGlobalListener(MailboxListener listener, MailboxSession session) {
-        registry.removeGlobalListener(listener);
-    }
-
-    @Override
-    public void event(Event event) {
-        if (!event.isNoop()) {
-            ImmutableList<MailboxListener> listeners = ImmutableList.<MailboxListener>builder()
-                .addAll(registry.getGlobalListeners())
-                .addAll(registeredMailboxListeners(event))
-                .build();
-
-            eventDelivery.deliver(listeners, event)
-                .synchronousListenerFuture()
-                .onErrorResume(throwable -> Mono.empty()) // suppress InVmEventDelivery delivery errors. This class will be removed soon
-                .block();
-
-            if (event instanceof MailboxDeletion) {
-                MailboxDeletion deletion = (MailboxDeletion) event;
-                registry.deleteRegistryFor(deletion.getMailboxId());
-            }
-        }
-    }
-
-    private Collection<MailboxListener> registeredMailboxListeners(Event event) {
-        if (event instanceof MailboxEvent) {
-            MailboxEvent mailboxEvent = (MailboxEvent) event;
-
-            return registry.getLocalMailboxListeners(mailboxEvent.getMailboxId());
-        }
-        return ImmutableList.of();
-    }
-
-    public MailboxListenerRegistry getRegistry() {
-        return registry;
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DelegatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DelegatingMailboxListener.java
deleted file mode 100644
index 15b4e84..0000000
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DelegatingMailboxListener.java
+++ /dev/null
@@ -1,27 +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.mailbox.store.event;
-
-import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxListenerSupport;
-
-public interface DelegatingMailboxListener extends MailboxListenerSupport, MailboxListener{
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/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 2514a40..09e30f8 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
@@ -25,6 +25,7 @@ import javax.inject.Inject;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxId;
@@ -34,8 +35,12 @@ import org.apache.james.mailbox.store.mail.AnnotationMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class MailboxAnnotationListener implements MailboxListener {
+public class MailboxAnnotationListener implements MailboxListener.GroupMailboxListener {
+    private static final class MailboxAnnotationListenerGroup extends Group {}
+
     private static final Logger logger = LoggerFactory.getLogger(MailboxAnnotationListener.class);
+    private static final Group GROUP = new MailboxAnnotationListenerGroup();
+
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
     private final SessionProvider sessionProvider;
 
@@ -44,7 +49,12 @@ public class MailboxAnnotationListener implements MailboxListener {
         this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
         this.sessionProvider = sessionProvider;
     }
-    
+
+    @Override
+    public Group getGroup() {
+        return GROUP;
+    }
+
     @Override
     public ListenerType getType() {
         return ListenerType.EACH_NODE;

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index c084bcd..97cfdea 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -26,32 +26,36 @@ import javax.inject.Inject;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.Group;
+import org.apache.james.mailbox.events.RegistrationKey;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.QuotaRoot;
 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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableSet;
+
 public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailboxListener, QuotaUpdater {
     private static class ListeningCurrentQuotaUpdaterGroup extends Group {}
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ListeningCurrentQuotaUpdater.class);
-    private static final Group GROUP = new ListeningCurrentQuotaUpdaterGroup();
+    public static final Group GROUP = new ListeningCurrentQuotaUpdaterGroup();
+    private static final ImmutableSet<RegistrationKey> NO_REGISTRATION_KEYS = ImmutableSet.of();
 
     private final StoreCurrentQuotaManager currentQuotaManager;
     private final QuotaRootResolver quotaRootResolver;
-    private final DelegatingMailboxListener delegatingMailboxListener;
+    private final EventBus eventBus;
     private final QuotaManager quotaManager;
 
     @Inject
-    public ListeningCurrentQuotaUpdater(StoreCurrentQuotaManager currentQuotaManager, QuotaRootResolver quotaRootResolver, DelegatingMailboxListener delegatingMailboxListener, QuotaManager quotaManager) {
+    public ListeningCurrentQuotaUpdater(StoreCurrentQuotaManager currentQuotaManager, QuotaRootResolver quotaRootResolver, EventBus eventBus, QuotaManager quotaManager) {
         this.currentQuotaManager = currentQuotaManager;
         this.quotaRootResolver = quotaRootResolver;
-        this.delegatingMailboxListener = delegatingMailboxListener;
+        this.eventBus = eventBus;
         this.quotaManager = quotaManager;
     }
 
@@ -97,7 +101,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
         if (addedCount != 0 && addedSize != 0) {
             currentQuotaManager.decrease(quotaRoot, addedCount, addedSize);
         }
-        delegatingMailboxListener.event(
+        eventBus.dispatch(
             EventFactory.quotaUpdated()
                 .randomEventId()
                 .user(expunged.getUser())
@@ -105,7 +109,8 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
                 .quotaCount(quotaManager.getMessageQuota(quotaRoot))
                 .quotaSize(quotaManager.getStorageQuota(quotaRoot))
                 .instant(Instant.now())
-                .build());
+                .build(),
+            NO_REGISTRATION_KEYS);
     }
 
     private void handleAddedEvent(Added added, QuotaRoot quotaRoot) throws MailboxException {
@@ -119,7 +124,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
         if (addedCount != 0 && addedSize != 0) {
             currentQuotaManager.increase(quotaRoot, addedCount, addedSize);
         }
-        delegatingMailboxListener.event(
+        eventBus.dispatch(
             EventFactory.quotaUpdated()
                 .randomEventId()
                 .user(added.getUser())
@@ -127,7 +132,8 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
                 .quotaCount(quotaManager.getMessageQuota(quotaRoot))
                 .quotaSize(quotaManager.getStorageQuota(quotaRoot))
                 .instant(Instant.now())
-                .build());
+                .build(),
+            NO_REGISTRATION_KEYS);
     }
 
     private void handleMailboxDeletionEvent(MailboxDeletion mailboxDeletionEvent) throws MailboxException {


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


[05/27] james-project git commit: JAMES-2641 IMAP components should use the EventBus directly

Posted by bt...@apache.org.
JAMES-2641 IMAP components should use the EventBus directly

This enables the MailboxManager to no more be an EventBus proxy


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

Branch: refs/heads/master
Commit: f398e3fa82285aa1949e9368017d94981d3d7804
Parents: 7a37651
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 15:46:11 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxManager.java    |  3 ---
 .../mailbox/store/StoreMailboxManager.java      |  7 ------
 .../cassandra/host/CassandraHostSystem.java     |  2 +-
 .../host/ElasticSearchHostSystem.java           |  1 +
 .../inmemory/host/InMemoryHostSystem.java       |  2 +-
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java |  3 ++-
 .../host/LuceneSearchHostSystem.java            |  1 +
 .../maildir/host/MaildirHostSystem.java         |  3 ++-
 .../processor/AbstractSelectionProcessor.java   |  8 ++++---
 .../imap/processor/DefaultProcessorChain.java   | 20 ++++++++++------
 .../james/imap/processor/ExamineProcessor.java  |  7 +++---
 .../james/imap/processor/IdleProcessor.java     |  9 ++++---
 .../james/imap/processor/SelectProcessor.java   |  7 +++---
 .../processor/base/SelectedMailboxImpl.java     |  6 +++--
 .../main/DefaultImapProcessorFactory.java       | 18 +++++++-------
 .../base/MailboxEventAnalyserTest.java          |  6 ++++-
 .../processor/base/SelectedMailboxImplTest.java | 25 +++++++++++++-------
 .../modules/protocols/IMAPServerModule.java     |  7 +++---
 .../META-INF/spring/imapserver-context.xml      | 11 +++++----
 19 files changed, 85 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index e2d7cda..3af341c 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -23,7 +23,6 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.Optional;
 
-import org.apache.james.mailbox.events.Registration;
 import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
@@ -345,6 +344,4 @@ public interface MailboxManager extends RequestAware, RightManager, MailboxAnnot
     List<MailboxPath> list(MailboxSession session) throws MailboxException;
 
     boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException;
-
-    Registration register(MailboxListener listener, MailboxId registrationKey);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/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 fdf2ffb..df08dee 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
@@ -32,7 +32,6 @@ import javax.inject.Inject;
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxAnnotationManager;
-import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
@@ -41,7 +40,6 @@ import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.StandardMailboxMetaDataComparator;
 import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
-import org.apache.james.mailbox.events.Registration;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -722,9 +720,4 @@ public class StoreMailboxManager implements MailboxManager {
         Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
         return mapper.hasChildren(mailbox, session.getPathDelimiter());
     }
-
-    @Override
-    public Registration register(MailboxListener listener, MailboxId registrationKey) {
-        return eventBus.register(listener, new MailboxIdRegistrationKey(registrationKey));
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/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 76ed7ea..2b4d901 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
@@ -120,7 +120,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
 
         configure(new DefaultImapDecoderFactory().buildImapDecoder(),
                 new DefaultImapEncoderFactory().buildImapEncoder(),
-                DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, subscriptionManager, quotaManager, quotaRootResolver, new DefaultMetricFactory()));
+                DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, eventBus, subscriptionManager, quotaManager, quotaRootResolver, new DefaultMetricFactory()));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/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 c12e44d..d599899 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
@@ -146,6 +146,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
 
         ImapProcessor defaultImapProcessorFactory =
             DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager,
+                eventBus,
                 new StoreSubscriptionManager(mailboxManager.getMapperFactory()),
                 new NoQuotaManager(),
                 new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory()),

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/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 740f385..952823f 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
@@ -56,7 +56,7 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
         this.mailboxManager = resources.getMailboxManager();
         this.perUserMaxQuotaManager = resources.getMaxQuotaManager();
 
-        ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new StoreSubscriptionManager(mailboxManager.getMapperFactory()),
+        ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager,  mailboxManager.getEventBus(), new StoreSubscriptionManager(mailboxManager.getMapperFactory()),
             mailboxManager.getQuotaComponents().getQuotaManager(), mailboxManager.getQuotaComponents().getQuotaRootResolver(), new DefaultMetricFactory());
 
         configure(new DefaultImapDecoderFactory().buildImapDecoder(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/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 c15466d..8f16a51 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
@@ -126,7 +126,8 @@ public class JPAHostSystem extends JamesImapHostSystem {
         
         ImapProcessor defaultImapProcessorFactory =
                 DefaultImapProcessorFactory.createDefaultProcessor(
-                        mailboxManager, 
+                        mailboxManager,
+                        eventBus,
                         subscriptionManager, 
                         storeQuotaManager,
                         quotaRootResolver,

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/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 2035304..52756d6 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
@@ -129,6 +129,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
             ImapProcessor defaultImapProcessorFactory =
                 DefaultImapProcessorFactory.createDefaultProcessor(
                     mailboxManager,
+                    eventBus,
                     subscriptionManager,
                     new NoQuotaManager(),
                     new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory),

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/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 688fe71..ae23921 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,8 @@ public class MaildirHostSystem extends JamesImapHostSystem {
 
         ImapProcessor defaultImapProcessorFactory =
                 DefaultImapProcessorFactory.createDefaultProcessor(
-                        mailboxManager, 
+                        mailboxManager,
+                        eventBus,
                         sm, 
                         quotaComponents.getQuotaManager(),
                         quotaComponents.getQuotaRootResolver(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
index 1172979..3abf4e7 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
@@ -47,6 +47,7 @@ import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageManager.MetaData;
 import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.exception.MessageRangeException;
@@ -65,14 +66,15 @@ abstract class AbstractSelectionProcessor<M extends AbstractMailboxSelectionRequ
 
     private final StatusResponseFactory statusResponseFactory;
     private final boolean openReadOnly;
-
+    private final EventBus eventBus;
     
     public AbstractSelectionProcessor(Class<M> acceptableClass, ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, boolean openReadOnly,
-            MetricFactory metricFactory) {
+                                      MetricFactory metricFactory, EventBus eventBus) {
         super(acceptableClass, next, mailboxManager, statusResponseFactory, metricFactory);
         this.statusResponseFactory = statusResponseFactory;
         this.openReadOnly = openReadOnly;
 
+        this.eventBus = eventBus;
     }
 
     @Override
@@ -406,7 +408,7 @@ abstract class AbstractSelectionProcessor<M extends AbstractMailboxSelectionRequ
             if (currentMailbox != null) {
                 getStatusResponseFactory().untaggedOk(HumanReadableText.QRESYNC_CLOSED, ResponseCode.closed());
             }
-            session.selected(new SelectedMailboxImpl(getMailboxManager(),  session, mailboxPath));
+            session.selected(new SelectedMailboxImpl(getMailboxManager(), eventBus, session, mailboxPath));
 
             sessionMailbox = session.getSelected();
             

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
index 201dbec..89f1fd2 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
@@ -25,6 +25,7 @@ import org.apache.james.imap.api.process.MailboxTyper;
 import org.apache.james.imap.processor.fetch.FetchProcessor;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.SubscriptionManager;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.metrics.api.MetricFactory;
@@ -35,10 +36,15 @@ import org.apache.james.metrics.api.MetricFactory;
 public class DefaultProcessorChain {
 
     public static ImapProcessor createDefaultChain(ImapProcessor chainEndProcessor,
-                  MailboxManager mailboxManager, SubscriptionManager subscriptionManager,
-                  StatusResponseFactory statusResponseFactory, MailboxTyper mailboxTyper, QuotaManager quotaManager,
-                  QuotaRootResolver quotaRootResolver,
-                  MetricFactory metricFactory) {
+                                                   MailboxManager mailboxManager,
+                                                   EventBus eventBus,
+                                                   SubscriptionManager subscriptionManager,
+                                                   StatusResponseFactory statusResponseFactory,
+                                                   MailboxTyper mailboxTyper,
+                                                   QuotaManager quotaManager,
+                                                   QuotaRootResolver quotaRootResolver,
+                                                   MetricFactory metricFactory) {
+
         SystemMessageProcessor systemProcessor = new SystemMessageProcessor(chainEndProcessor, mailboxManager);
         LogoutProcessor logoutProcessor = new LogoutProcessor(systemProcessor, mailboxManager, statusResponseFactory, metricFactory);
 
@@ -73,11 +79,11 @@ public class DefaultProcessorChain {
             authenticateProcessor = new AuthenticateProcessor(copyProcessor, mailboxManager, statusResponseFactory, metricFactory);
         }
         ExpungeProcessor expungeProcessor = new ExpungeProcessor(authenticateProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        ExamineProcessor examineProcessor = new ExamineProcessor(expungeProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        ExamineProcessor examineProcessor = new ExamineProcessor(expungeProcessor, mailboxManager, eventBus, statusResponseFactory, metricFactory);
         AppendProcessor appendProcessor = new AppendProcessor(examineProcessor, mailboxManager, statusResponseFactory, metricFactory);
         StoreProcessor storeProcessor = new StoreProcessor(appendProcessor, mailboxManager, statusResponseFactory, metricFactory);
         NoopProcessor noopProcessor = new NoopProcessor(storeProcessor, mailboxManager, statusResponseFactory, metricFactory);
-        IdleProcessor idleProcessor = new IdleProcessor(noopProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        IdleProcessor idleProcessor = new IdleProcessor(noopProcessor, mailboxManager, eventBus, statusResponseFactory, metricFactory);
         StatusProcessor statusProcessor = new StatusProcessor(idleProcessor, mailboxManager, statusResponseFactory, metricFactory);
         LSubProcessor lsubProcessor = new LSubProcessor(statusProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory);
         XListProcessor xlistProcessor = new XListProcessor(lsubProcessor, mailboxManager, statusResponseFactory, mailboxTyper, metricFactory);
@@ -86,7 +92,7 @@ public class DefaultProcessorChain {
         // WITHIN extension
         capabilityProcessor.addProcessor(searchProcessor);
 
-        SelectProcessor selectProcessor = new SelectProcessor(searchProcessor, mailboxManager, statusResponseFactory, metricFactory);
+        SelectProcessor selectProcessor = new SelectProcessor(searchProcessor, mailboxManager, eventBus, statusResponseFactory, metricFactory);
         NamespaceProcessor namespaceProcessor = new NamespaceProcessor(selectProcessor, mailboxManager, statusResponseFactory, metricFactory);
 
         capabilityProcessor.addProcessor(xlistProcessor);

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
index 69e7644..eaed119 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
@@ -27,14 +27,15 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.message.request.ExamineRequest;
 import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.util.MDCBuilder;
 
 public class ExamineProcessor extends AbstractSelectionProcessor<ExamineRequest> {
 
-    public ExamineProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory,
-            MetricFactory metricFactory) {
-        super(ExamineRequest.class, next, mailboxManager, statusResponseFactory, true, metricFactory);
+    public ExamineProcessor(ImapProcessor next, MailboxManager mailboxManager, EventBus eventBus, StatusResponseFactory statusResponseFactory,
+                            MetricFactory metricFactory) {
+        super(ExamineRequest.class, next, mailboxManager, statusResponseFactory, true, metricFactory, eventBus);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index 9913da9..5c2ad2b 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -45,6 +45,8 @@ import org.apache.james.imap.message.response.ContinuationResponse;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.events.Registration;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.util.MDCBuilder;
@@ -57,14 +59,16 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
     public static final int DEFAULT_SCHEDULED_POOL_CORE_SIZE = 5;
     private static final String DONE = "DONE";
 
+    private final EventBus eventBus;
     private TimeUnit heartbeatIntervalUnit;
     private long heartbeatInterval;
     private boolean enableIdle;
     private ScheduledExecutorService heartbeatExecutor;
 
-    public IdleProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory,
+    public IdleProcessor(ImapProcessor next, MailboxManager mailboxManager, EventBus eventBus, StatusResponseFactory factory,
             MetricFactory metricFactory) {
         super(IdleRequest.class, next, mailboxManager, factory, metricFactory);
+        this.eventBus = eventBus;
     }
 
     @Override
@@ -82,11 +86,10 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
 
     @Override
     protected void doProcess(IdleRequest message, ImapSession session, String tag, ImapCommand command, Responder responder) {
-        MailboxManager mailboxManager = getMailboxManager();
         SelectedMailbox sm = session.getSelected();
         Registration registration;
         if (sm != null) {
-            registration = mailboxManager.register(new IdleMailboxListener(session, responder), sm.getMailboxId());
+            registration = eventBus.register(new IdleMailboxListener(session, responder), new MailboxIdRegistrationKey(sm.getMailboxId()));
         } else {
             registration = null;
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
index fc200d7..6d9bb18 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
@@ -27,14 +27,15 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.message.request.SelectRequest;
 import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.util.MDCBuilder;
 
 public class SelectProcessor extends AbstractSelectionProcessor<SelectRequest> {
 
-    public SelectProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory,
-            MetricFactory metricFactory) {
-        super(SelectRequest.class, next, mailboxManager, statusResponseFactory, false, metricFactory);
+    public SelectProcessor(ImapProcessor next, MailboxManager mailboxManager, EventBus eventBus, StatusResponseFactory statusResponseFactory,
+                           MetricFactory metricFactory) {
+        super(SelectRequest.class, next, mailboxManager, statusResponseFactory, false, metricFactory, eventBus);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
index e9fc609..287e18d 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
@@ -40,6 +40,8 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.events.Registration;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
@@ -72,7 +74,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
     private final Flags applicableFlags;
     private boolean applicableFlagsChanged;
 
-    public SelectedMailboxImpl(MailboxManager mailboxManager, ImapSession session, MailboxPath path) throws MailboxException {
+    public SelectedMailboxImpl(MailboxManager mailboxManager, EventBus eventBus, ImapSession session, MailboxPath path) throws MailboxException {
         this.session = session;
         this.sessionId = ImapSessionUtils.getMailboxSession(session).getSessionId();
         this.mailboxManager = mailboxManager;
@@ -87,7 +89,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
         MessageManager messageManager = mailboxManager.getMailbox(path, mailboxSession);
         mailboxId = messageManager.getId();
 
-        registration = mailboxManager.register(this, mailboxId);
+        registration = eventBus.register(this, new MailboxIdRegistrationKey(mailboxId));
 
         applicableFlags = messageManager.getApplicableFlags(mailboxSession);
         uidMsnConverter.addAll(ImmutableList.copyOf(

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
index ff6d78f..e561d4d 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
@@ -28,25 +28,27 @@ import org.apache.james.imap.processor.base.ImapResponseMessageProcessor;
 import org.apache.james.imap.processor.base.UnknownRequestProcessor;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.SubscriptionManager;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.metrics.api.MetricFactory;
 
 public class DefaultImapProcessorFactory {
 
-    public static ImapProcessor createDefaultProcessor(MailboxManager mailboxManager, SubscriptionManager subscriptionManager, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver,
+    public static ImapProcessor createDefaultProcessor(MailboxManager mailboxManager, EventBus eventBus, SubscriptionManager subscriptionManager, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver,
             MetricFactory metricFactory) {
-        return createXListSupportingProcessor(mailboxManager, subscriptionManager, null, quotaManager, quotaRootResolver, metricFactory);
+        return createXListSupportingProcessor(mailboxManager, eventBus, subscriptionManager, null, quotaManager, quotaRootResolver, metricFactory);
     }
 
-    public static ImapProcessor createXListSupportingProcessor(MailboxManager mailboxManager, SubscriptionManager subscriptionManager,
-            MailboxTyper mailboxTyper, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) {
+    public static ImapProcessor createXListSupportingProcessor(MailboxManager mailboxManager,
+                                                               EventBus eventBus, SubscriptionManager subscriptionManager,
+                                                               MailboxTyper mailboxTyper, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) {
 
-        final StatusResponseFactory statusResponseFactory = new UnpooledStatusResponseFactory();
-        final UnknownRequestProcessor unknownRequestImapProcessor = new UnknownRequestProcessor(statusResponseFactory);
+        StatusResponseFactory statusResponseFactory = new UnpooledStatusResponseFactory();
+        UnknownRequestProcessor unknownRequestImapProcessor = new UnknownRequestProcessor(statusResponseFactory);
 
-        final ImapProcessor imap4rev1Chain = DefaultProcessorChain.createDefaultChain(unknownRequestImapProcessor,
-            mailboxManager, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, metricFactory);
+        ImapProcessor imap4rev1Chain = DefaultProcessorChain.createDefaultChain(unknownRequestImapProcessor, mailboxManager,
+            eventBus, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, metricFactory);
 
         return new ImapResponseMessageProcessor(imap4rev1Chain);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
index b6eff37..0baae20 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
@@ -39,6 +39,8 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
@@ -50,6 +52,7 @@ import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -127,6 +130,7 @@ public class MailboxEventAnalyserTest {
     @Before
     public void setUp() throws MailboxException {
         ImapSession imapSession = mock(ImapSession.class);
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
         when(imapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY))
             .thenReturn(MAILBOX_SESSION);
         when(imapSession.getState()).thenReturn(ImapSessionState.AUTHENTICATED);
@@ -152,7 +156,7 @@ public class MailboxEventAnalyserTest {
         when(messageManager.getMessages(any(), any(), any()))
             .thenReturn(new SingleMessageResultIterator(messageResult));
 
-        testee = new SelectedMailboxImpl(mailboxManager, imapSession, MAILBOX_PATH);
+        testee = new SelectedMailboxImpl(mailboxManager, eventBus, imapSession, MAILBOX_PATH);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
index 073528f..a307c27 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
@@ -43,6 +43,8 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageMetaData;
@@ -76,6 +78,8 @@ public class SelectedMailboxImplTest {
     private ImapSession imapSession;
     private Mailbox mailbox;
     private TestId mailboxId;
+    private EventBus eventBus;
+    private MailboxIdRegistrationKey mailboxIdRegistrationKey;
 
     @Before
     public void setUp() throws Exception {
@@ -87,6 +91,8 @@ public class SelectedMailboxImplTest {
         imapSession = mock(ImapSession.class);
         mailbox = mock(Mailbox.class);
         mailboxId = TestId.of(42);
+        mailboxIdRegistrationKey = new MailboxIdRegistrationKey(mailboxId);
+        eventBus = mock(EventBus.class);
 
         when(mailboxManager.getMailbox(eq(mailboxPath), any(MailboxSession.class)))
             .thenReturn(messageManager);
@@ -109,13 +115,13 @@ public class SelectedMailboxImplTest {
 
     @Test
     public void concurrentEventShouldNotSkipAddedEventsEmittedDuringInitialisation() throws Exception {
-        final AtomicInteger successCount = new AtomicInteger(0);
+        AtomicInteger successCount = new AtomicInteger(0);
         doAnswer(generateEmitEventAnswer(successCount))
-            .when(mailboxManager)
-            .register(any(MailboxListener.class), eq(mailboxId));
-
+            .when(eventBus)
+            .register(any(MailboxListener.class), eq(mailboxIdRegistrationKey));
         SelectedMailboxImpl selectedMailbox = new SelectedMailboxImpl(
             mailboxManager,
+            eventBus,
             imapSession,
             mailboxPath);
 
@@ -124,13 +130,14 @@ public class SelectedMailboxImplTest {
 
     @Test
     public void concurrentEventShouldBeProcessedSuccessfullyDuringInitialisation() throws Exception {
-        final AtomicInteger successCount = new AtomicInteger(0);
+        AtomicInteger successCount = new AtomicInteger(0);
         doAnswer(generateEmitEventAnswer(successCount))
-            .when(mailboxManager)
-            .register(any(MailboxListener.class), eq(mailboxId));
+            .when(eventBus)
+            .register(any(MailboxListener.class), eq(mailboxIdRegistrationKey));
 
         new SelectedMailboxImpl(
             mailboxManager,
+            eventBus,
             imapSession,
             mailboxPath);
 
@@ -146,10 +153,10 @@ public class SelectedMailboxImplTest {
         };
     }
 
-    private Answer<Iterator<MessageUid>> generateEmitEventAnswer(final AtomicInteger success) {
+    private Answer<Iterator<MessageUid>> generateEmitEventAnswer(AtomicInteger success) {
         return invocation -> {
             Object[] args = invocation.getArguments();
-            final MailboxListener mailboxListener = (MailboxListener) args[1];
+            MailboxListener mailboxListener = (MailboxListener) args[0];
             executorService.submit(() -> {
                 try {
                     emitEvent(mailboxListener);

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
index 0e2ac9a..2880864 100644
--- a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
+++ b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
@@ -31,10 +31,10 @@ import org.apache.james.imapserver.netty.OioIMAPServerFactory;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.SubscriptionManager;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.metrics.api.MetricFactory;
-import org.apache.james.modules.Names;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
@@ -46,7 +46,6 @@ import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
-import com.google.inject.name.Named;
 
 public class IMAPServerModule extends AbstractModule {
 
@@ -61,13 +60,15 @@ public class IMAPServerModule extends AbstractModule {
 
     @Provides
     ImapProcessor provideImapProcessor(
-            @Named(Names.MAILBOXMANAGER_NAME)MailboxManager mailboxManager,
+            MailboxManager mailboxManager,
+            EventBus eventBus,
             SubscriptionManager subscriptionManager,
             QuotaManager quotaManager,
             QuotaRootResolver quotaRootResolver,
             MetricFactory metricFactory) {
         return DefaultImapProcessorFactory.createXListSupportingProcessor(
                 mailboxManager,
+                eventBus,
                 subscriptionManager,
                 null,
                 quotaManager,

http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml b/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml
index 49a52a6..5d0ee12 100644
--- a/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml
+++ b/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml
@@ -32,12 +32,13 @@
     <bean id="imapProcessor" class="org.apache.james.imap.processor.main.DefaultImapProcessorFactory"
           factory-method="createXListSupportingProcessor">
         <constructor-arg index="0" ref="mailboxmanager"/>
-        <constructor-arg index="1" ref="subscriptionManager"/>
+        <constructor-arg index="1" ref="event-bus"/>
+        <constructor-arg index="2" ref="subscriptionManager"/>
         <!-- The mailboxTyper -->
-        <constructor-arg index="2" value="#{null}"/>
-        <constructor-arg index="3" ref="quotaManager"/>
-        <constructor-arg index="4" ref="quotaRootResolver"/>
-        <constructor-arg index="5" ref="timeMetricFactory"/>
+        <constructor-arg index="3" value="#{null}"/>
+        <constructor-arg index="4" ref="quotaManager"/>
+        <constructor-arg index="5" ref="quotaRootResolver"/>
+        <constructor-arg index="6" ref="timeMetricFactory"/>
     </bean>
 
     <bean id="imapDecoderFactory" class="org.apache.james.imap.main.DefaultImapDecoderFactory"/>


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


[27/27] james-project git commit: JAMES-2642 Refactor and cleanup code for alias, group and forward integration tests

Posted by bt...@apache.org.
JAMES-2642 Refactor and cleanup code for alias, group and forward integration 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/21cde6d2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/21cde6d2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/21cde6d2

Branch: refs/heads/master
Commit: 21cde6d28b4b81dc9b01ccb45e2579ad4bb30e7e
Parents: 1819ae1
Author: Rene Cordier <rc...@linagora.com>
Authored: Wed Jan 16 16:27:46 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:10 2019 +0700

----------------------------------------------------------------------
 .../james/cli/probe/impl/JmxDataProbe.java      | 66 ------------------
 .../org/apache/james/utils/DataProbeImpl.java   | 36 ----------
 .../java/org/apache/james/probe/DataProbe.java  | 12 ----
 .../RecipientRewriteTableManagementMBean.java   | 72 --------------------
 .../lib/RecipientRewriteTableManagement.java    | 36 ----------
 .../RecipientRewriteTableIntegrationTest.java   | 18 ++++-
 .../transport/mailets/AliasMappingTest.java     | 46 +++++++++----
 .../transport/mailets/GroupMappingTest.java     |  5 +-
 .../WebAdminServerIntegrationTest.java          | 43 ++++++++----
 9 files changed, 82 insertions(+), 252 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
----------------------------------------------------------------------
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
index cb50af9..6006916 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
@@ -237,70 +237,4 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
             virtualUserTableProxy.addDomainMapping(aliasDomain, deliveryDomain);
         }
     }
-
-    @Override
-    public void addForwardMapping(String user, String domain, String address) throws Exception {
-        try (Closeable closeable =
-                MDCBuilder.create()
-                    .addContext(MDCBuilder.PROTOCOL, JMX)
-                    .addContext(MDCBuilder.ACTION, "addForwardMapping")
-                    .build()) {
-           virtualUserTableProxy.addForwardMapping(user, domain, address);
-        }
-    }
-
-    @Override
-    public void removeForwardMapping(String user, String domain, String address) throws Exception {
-        try (Closeable closeable =
-                MDCBuilder.create()
-                    .addContext(MDCBuilder.PROTOCOL, JMX)
-                    .addContext(MDCBuilder.ACTION, "removeForwardMapping")
-                    .build()) {
-           virtualUserTableProxy.removeForwardMapping(user, domain, address);
-        }
-    }
-
-    @Override
-    public void addGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception {
-        try (Closeable closeable =
-                 MDCBuilder.create()
-                     .addContext(MDCBuilder.PROTOCOL, JMX)
-                     .addContext(MDCBuilder.ACTION, "removeForwardMapping")
-                     .build()) {
-            virtualUserTableProxy.addGroupMapping(toUser, toDomain, fromAddress);
-        }
-    }
-
-    @Override
-    public void removeGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception {
-        try (Closeable closeable =
-                 MDCBuilder.create()
-                     .addContext(MDCBuilder.PROTOCOL, JMX)
-                     .addContext(MDCBuilder.ACTION, "removeForwardMapping")
-                     .build()) {
-            virtualUserTableProxy.removeGroupMapping(toUser, toDomain, fromAddress);
-        }
-    }
-
-    @Override
-    public void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception {
-        try (Closeable closeable =
-                 MDCBuilder.create()
-                     .addContext(MDCBuilder.PROTOCOL, JMX)
-                     .addContext(MDCBuilder.ACTION, "addAliasMapping")
-                     .build()) {
-            virtualUserTableProxy.addAliasMapping(fromAlias, fromDomain, toAddress);
-        }
-    }
-
-    @Override
-    public void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception {
-        try (Closeable closeable =
-                 MDCBuilder.create()
-                     .addContext(MDCBuilder.PROTOCOL, JMX)
-                     .addContext(MDCBuilder.ACTION, "removeAliasMapping")
-                     .build()) {
-            virtualUserTableProxy.removeAliasMapping(fromAlias, fromDomain, toAddress);
-        }
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
index e56c8b5..ec318b1 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
@@ -144,40 +144,4 @@ public class DataProbeImpl implements GuiceProbe, DataProbe {
     public void addDomainAliasMapping(String aliasDomain, String deliveryDomain) throws Exception {
         recipientRewriteTable.addAliasDomainMapping(MappingSource.fromDomain(Domain.of(aliasDomain)), Domain.of(deliveryDomain));
     }
-
-    @Override
-    public void addForwardMapping(String user, String domain, String address) throws Exception {
-        MappingSource source = MappingSource.fromUser(user, domain);
-        recipientRewriteTable.addForwardMapping(source, address);
-    }
-
-    @Override
-    public void removeForwardMapping(String user, String domain, String address) throws Exception {
-        MappingSource source = MappingSource.fromUser(user, domain);
-        recipientRewriteTable.removeForwardMapping(source, address);
-    }
-
-    @Override
-    public void addGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception {
-        MappingSource source = MappingSource.fromUser(toUser, toDomain);
-        recipientRewriteTable.addGroupMapping(source, fromAddress);
-    }
-
-    @Override
-    public void removeGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception {
-        MappingSource source = MappingSource.fromUser(toUser, toDomain);
-        recipientRewriteTable.removeGroupMapping(source, fromAddress);
-    }
-
-    @Override
-    public void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception {
-        MappingSource source = MappingSource.fromUser(fromAlias, fromDomain);
-        recipientRewriteTable.addAliasMapping(source, toAddress);
-    }
-
-    @Override
-    public void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception {
-        MappingSource source = MappingSource.fromUser(fromAlias, fromDomain);
-        recipientRewriteTable.removeAliasMapping(source, toAddress);
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java b/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
index cdaf8fc..30d8050 100644
--- a/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
+++ b/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
@@ -84,16 +84,4 @@ public interface DataProbe {
     void removeRegexMapping(String user, String domain, String regex) throws Exception;
 
     void addDomainAliasMapping(String aliasDomain, String deliveryDomain) throws Exception;
-
-    void addForwardMapping(String toUser, String toDomain, String fromAddress) throws Exception;
-
-    void removeForwardMapping(String toUser, String toDomain, String fromAddress) throws Exception;
-
-    void addGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception;
-
-    void removeGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception;
-
-    void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception;
-
-    void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
index 7afc90b..e49a162 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
@@ -184,76 +184,4 @@ public interface RecipientRewriteTableManagementMBean {
      *            If an error occurred
      */
     Map<String, Mappings> getAllMappings() throws Exception;
-
-    /***
-     * Add forward mapping
-     *
-     * @param user
-     *            the username part of the mail address destination defined for this forward.
-     * @param domain
-     *            the domain part of the mail address destination defined for this forward.
-     * @param address The base address of the forward. Mails for this address will be sent to the added forward destination.
-     * @throws Exception If an error occurred
-     */
-    void addForwardMapping(String user, String domain, String address) throws Exception;
-
-    /**
-     * Remove forward mapping
-     * 
-     * @param toUser
-     *            the username part of the mail address destination defined for this forward.
-     * @param toDomain
-     *            the domain part of the mail address destination defined for this forward.
-     * @param fromAddress The base address of the forward. Mails for this address will no more sent to the removed forward destination.
-     * @throws Exception If an error occurred
-     */
-    void removeForwardMapping(String toUser, String toDomain, String fromAddress) throws Exception;
-
-    /***
-     * Add group mapping
-     *
-     * @param user
-     *            the username part of the mail address destination defined for this group.
-     * @param domain
-     *            the domain part of the mail address destination defined for this group.
-     * @param address The base address of the group. Mails for this address will be sent to the added group destination.
-     * @throws Exception If an error occurred
-     */
-    void addGroupMapping(String user, String domain, String address) throws Exception;
-
-    /**
-     * Remove group mapping
-     *
-     * @param toUser
-     *            the username part of the mail address destination defined for this group.
-     * @param toDomain
-     *            the domain part of the mail address destination defined for this group.
-     * @param fromAddress The base address of the forward. Mails for this address will no more sent to the removed group destination.
-     * @throws Exception If an error occurred
-     */
-    void removeGroupMapping(String toUser, String toDomain, String fromAddress) throws Exception;
-
-    /***
-     * Add alias mapping
-     *
-     * @param fromAlias
-     *            the name part of the alias source.
-     * @param fromDomain
-     *            the domain part of the alias source.
-     * @param toAddress the mail address destination of the alias. Mails sent to the alias will be redirected to this destination mail.
-     * @throws Exception If an error occurred
-     */
-    void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception;
-
-    /**
-     * Remove alias mapping
-     *
-     * @param fromAlias
-     *            the name part of the alias source.
-     * @param fromDomain
-     *            the domain part of the alias source.
-     * @param toAddress the mail address destination of the alias. Mails sent to the alias will not be redirected anymore to this destination mail.
-     * @throws Exception If an error occurred
-     */
-    void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws Exception;
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
index fe18351..2fb789c 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
@@ -120,40 +120,4 @@ public class RecipientRewriteTableManagement extends StandardMBean implements Re
                     entry -> entry.getKey().asString(),
                     entry -> entry.getValue()));
     }
-
-    @Override
-    public void addForwardMapping(String user, String domain, String address) throws RecipientRewriteTableException {
-        MappingSource source = MappingSource.fromUser(user, domain);
-        rrt.addForwardMapping(source, address);
-    }
-
-    @Override
-    public void removeForwardMapping(String user, String domain, String address) throws RecipientRewriteTableException {
-        MappingSource source = MappingSource.fromUser(user, domain);
-        rrt.removeForwardMapping(source, address);
-    }
-
-    @Override
-    public void addGroupMapping(String toUser, String toDomain, String fromAddress) throws RecipientRewriteTableException {
-        MappingSource source = MappingSource.fromUser(toUser, toDomain);
-        rrt.addGroupMapping(source, fromAddress);
-    }
-
-    @Override
-    public void removeGroupMapping(String toUser, String toDomain, String fromAddress) throws RecipientRewriteTableException {
-        MappingSource source = MappingSource.fromUser(toUser, toDomain);
-        rrt.removeForwardMapping(source, fromAddress);
-    }
-
-    @Override
-    public void addAliasMapping(String fromAlias, String fromDomain, String toAddress) throws RecipientRewriteTableException {
-        MappingSource source = MappingSource.fromUser(fromAlias, fromDomain);
-        rrt.addAliasMapping(source, toAddress);
-    }
-
-    @Override
-    public void removeAliasMapping(String fromAlias, String fromDomain, String toAddress) throws RecipientRewriteTableException {
-        MappingSource source = MappingSource.fromUser(fromAlias, fromDomain);
-        rrt.removeAliasMapping(source, toAddress);
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
index 2b5d709..5f60ecb 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailets;
 
+import static io.restassured.RestAssured.given;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
@@ -31,12 +32,17 @@ import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
 import org.apache.james.utils.SMTPMessageSender;
+import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.routes.ForwardRoutes;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
+import io.restassured.specification.RequestSpecification;
+
 public class RecipientRewriteTableIntegrationTest {
     private static final String JAMES_ANOTHER_DOMAIN = "james.com";
 
@@ -60,6 +66,7 @@ public class RecipientRewriteTableIntegrationTest {
 
     private TemporaryJamesServer jamesServer;
     private DataProbe dataProbe;
+    private RequestSpecification webAdminApi;
 
     @Before
     public void setup() throws Exception {
@@ -72,6 +79,11 @@ public class RecipientRewriteTableIntegrationTest {
         dataProbe.addUser(RECIPIENT, PASSWORD);
         dataProbe.addUser(ANY_AT_JAMES, PASSWORD);
         dataProbe.addUser(OTHER_AT_JAMES, PASSWORD);
+
+        WebAdminGuiceProbe webAdminGuiceProbe = jamesServer.getProbe(WebAdminGuiceProbe.class);
+        webAdminGuiceProbe.await();
+        webAdminApi = given()
+            .spec(WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort()).build());
     }
 
     @After
@@ -182,8 +194,8 @@ public class RecipientRewriteTableIntegrationTest {
 
     @Test
     public void rrtServiceShouldDeliverEmailToForwardRecipients() throws Exception {
-        dataProbe.addForwardMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, ANY_AT_JAMES);
-        dataProbe.addForwardMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, OTHER_AT_JAMES);
+        webAdminApi.put(ForwardRoutes.ROOT_PATH + "/" + RECIPIENT + "/targets/" + ANY_AT_JAMES);
+        webAdminApi.put(ForwardRoutes.ROOT_PATH + "/" + RECIPIENT + "/targets/" + OTHER_AT_JAMES);
 
         messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
@@ -203,7 +215,7 @@ public class RecipientRewriteTableIntegrationTest {
     public void rrtServiceShouldFollowForwardWhenSendingToAGroup() throws Exception {
         dataProbe.addAddressMapping(GROUP_LOCAL_PART, DEFAULT_DOMAIN, ANY_AT_JAMES);
 
-        dataProbe.addForwardMapping(ANY_LOCAL_PART, DEFAULT_DOMAIN, OTHER_AT_JAMES);
+        webAdminApi.put(ForwardRoutes.ROOT_PATH + "/" + ANY_AT_JAMES + "/targets/" + OTHER_AT_JAMES);
 
         messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, GROUP);

http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
index e400712..05d2dcd 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
@@ -32,6 +32,7 @@ import org.apache.james.core.builder.MimeMessageBuilder;
 import org.apache.james.jmap.mailet.VacationMailet;
 import org.apache.james.jmap.mailet.filter.JMAPFiltering;
 import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.CommonProcessors;
 import org.apache.james.mailets.configuration.MailetConfiguration;
@@ -47,10 +48,13 @@ import org.apache.james.transport.matchers.IsSenderInRRTLoop;
 import org.apache.james.transport.matchers.RecipientIsLocal;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
+import org.apache.james.utils.MailRepositoryProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
 import org.apache.james.utils.WebAdminGuiceProbe;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.routes.AliasRoutes;
+import org.apache.james.webadmin.routes.ForwardRoutes;
+import org.apache.james.webadmin.routes.GroupsRoutes;
 import org.apache.mailet.base.test.FakeMail;
 import org.junit.After;
 import org.junit.Before;
@@ -118,10 +122,7 @@ public class AliasMappingTest {
                     .addProperty("repositoryPath", RRT_ERROR_REPOSITORY.asString()))
                 .addMailet(MailetConfiguration.builder()
                     .matcher(IsSenderInRRTLoop.class)
-                    .mailet(Null.class))
-                .addMailet(MailetConfiguration.builder()
-                    .matcher(All.class)
-                    .mailet(Bounce.class)));
+                    .mailet(Null.class)));
 
         jamesServer = TemporaryJamesServer.builder()
             .withMailetContainer(mailetContainer)
@@ -134,9 +135,9 @@ public class AliasMappingTest {
         dataProbe.addUser(ALICE_ADDRESS, PASSWORD);
         dataProbe.addUser(CEDRIC_ADDRESS, PASSWORD);
 
-        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, BOB_ADDRESS, "INBOX");
-        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, ALICE_ADDRESS, "INBOX");
-        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, CEDRIC_ADDRESS, "INBOX");
+        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxPath.forUser(BOB_ADDRESS, MailboxConstants.INBOX));
+        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxPath.forUser(ALICE_ADDRESS, MailboxConstants.INBOX));
+        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxPath.forUser(CEDRIC_ADDRESS, MailboxConstants.INBOX));
 
         WebAdminGuiceProbe webAdminGuiceProbe = jamesServer.getProbe(WebAdminGuiceProbe.class);
         webAdminGuiceProbe.await();
@@ -174,7 +175,7 @@ public class AliasMappingTest {
     @Test
     public void messageShouldRedirectToForwardOfUserWhenSentToHisAlias() throws Exception {
         webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
-        dataProbe.addForwardMapping(BOB_USER, DOMAIN, CEDRIC_ADDRESS);
+        webAdminApi.put(ForwardRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/targets/" + CEDRIC_ADDRESS);
 
         messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
@@ -192,7 +193,7 @@ public class AliasMappingTest {
     @Test
     public void messageShouldRedirectToUserWhenForwardedToHisAlias() throws Exception {
         webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
-        dataProbe.addForwardMapping(ALICE_USER, DOMAIN, BOB_ALIAS);
+        webAdminApi.put(ForwardRoutes.ROOT_PATH + "/" + ALICE_ADDRESS + "/targets/" + BOB_ALIAS);
 
         messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
@@ -210,7 +211,7 @@ public class AliasMappingTest {
     @Test
     public void messageShouldRedirectToUserWhenHisAliasIsPartOfGroup() throws Exception {
         webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
-        dataProbe.addGroupMapping(GROUP, DOMAIN, BOB_ALIAS);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ADDRESS + "/" + BOB_ALIAS);
 
         messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
@@ -228,7 +229,7 @@ public class AliasMappingTest {
     @Test
     public void messageShouldRedirectToMembersWhenSentToGroupAlias() throws Exception {
         webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + GROUP_ADDRESS + "/sources/" + GROUP_ALIAS);
-        dataProbe.addGroupMapping(GROUP, DOMAIN, BOB_ADDRESS);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ADDRESS + "/" + BOB_ADDRESS);
 
         messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
@@ -244,7 +245,7 @@ public class AliasMappingTest {
     }
 
     @Test
-    public void messageShouldRedirectToUserWhithAliasesCascading() throws Exception {
+    public void messageShouldRedirectToUserWithAliasesCascading() throws Exception {
         webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ADDRESS + "/sources/" + BOB_ALIAS);
         webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ALIAS + "/sources/" + BOB_ALIAS_2);
 
@@ -341,4 +342,25 @@ public class AliasMappingTest {
             .awaitMessage(awaitAtMostOneMinute);
     }
 
+    @Test
+    public void messageShouldBeStoredInRepositoryWhenAliasLoopMapping() throws Exception {
+        String bobAlias3 = BOB_USER + "-alias3@" + DOMAIN;
+
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ALIAS_2 + "/sources/" + BOB_ALIAS);
+
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + bobAlias3 + "/sources/" + BOB_ALIAS_2);
+
+        webAdminApi.put(AliasRoutes.ROOT_PATH + "/" + BOB_ALIAS + "/sources/" + bobAlias3);
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .sendMessage(FakeMail.builder()
+                .mimeMessage(message)
+                .sender(ALICE_ADDRESS)
+                .recipient(BOB_ALIAS));
+
+        awaitAtMostOneMinute.until(
+            () -> jamesServer.getProbe(MailRepositoryProbeImpl.class)
+                .getRepositoryMailCount(RRT_ERROR_REPOSITORY) == 1);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
index a2ff045..6dde31f 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
@@ -32,6 +32,7 @@ import org.apache.james.core.builder.MimeMessageBuilder;
 import org.apache.james.jmap.mailet.VacationMailet;
 import org.apache.james.jmap.mailet.filter.JMAPFiltering;
 import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.CommonProcessors;
 import org.apache.james.mailets.configuration.MailetConfiguration;
@@ -130,8 +131,8 @@ public class GroupMappingTest {
         dataProbe.addUser(USER_DOMAIN1, PASSWORD);
         dataProbe.addUser(USER_DOMAIN2, PASSWORD);
 
-        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, USER_DOMAIN1, "INBOX");
-        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxConstants.USER_NAMESPACE, USER_DOMAIN2, "INBOX");
+        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxPath.forUser(USER_DOMAIN1, MailboxConstants.INBOX));
+        jamesServer.getProbe(MailboxProbeImpl.class).createMailbox(MailboxPath.forUser(USER_DOMAIN2, MailboxConstants.INBOX));
 
         WebAdminGuiceProbe webAdminGuiceProbe = jamesServer.getProbe(WebAdminGuiceProbe.class);
         webAdminGuiceProbe.await();

http://git-wip-us.apache.org/repos/asf/james-project/blob/21cde6d2/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
index 33b53da..153a76e 100644
--- a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
@@ -40,7 +40,10 @@ import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.WebAdminGuiceProbe;
 import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.routes.AliasRoutes;
 import org.apache.james.webadmin.routes.DomainsRoutes;
+import org.apache.james.webadmin.routes.ForwardRoutes;
+import org.apache.james.webadmin.routes.GroupsRoutes;
 import org.apache.james.webadmin.routes.HealthCheckRoutes;
 import org.apache.james.webadmin.routes.MailQueueRoutes;
 import org.apache.james.webadmin.routes.MailRepositoriesRoutes;
@@ -60,6 +63,8 @@ public class WebAdminServerIntegrationTest {
 
     private static final String DOMAIN = "domain";
     private static final String USERNAME = "username@" + DOMAIN;
+    private static final String USERNAME_2 = "username2@" + DOMAIN;
+    private static final String GROUP = "group@" + DOMAIN;
     private static final String SPECIFIC_DOMAIN = DomainsRoutes.DOMAINS + SEPARATOR + DOMAIN;
     private static final String SPECIFIC_USER = UserRoutes.USERS + SEPARATOR + USERNAME;
     private static final String MAILBOX = "mailbox";
@@ -279,50 +284,62 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void addressGroupsEndpointShouldHandleRequests() throws Exception {
-        dataProbe.addGroupMapping("group", "domain.com", "user1@domain.com");
-        dataProbe.addGroupMapping("group", "domain.com", "user2@domain.com");
+        dataProbe.addDomain(DOMAIN);
+
+        with()
+            .put(GroupsRoutes.ROOT_PATH + SEPARATOR + GROUP + SEPARATOR + USERNAME);
+        with()
+            .put(GroupsRoutes.ROOT_PATH + SEPARATOR + GROUP + SEPARATOR + USERNAME_2);
 
         List<String> members = when()
-            .get("/address/groups/group@domain.com")
+            .get(GroupsRoutes.ROOT_PATH + SEPARATOR + GROUP)
         .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(JSON_CONTENT_TYPE)
             .extract()
             .jsonPath()
             .getList(".");
-        assertThat(members).containsOnly("user1@domain.com", "user2@domain.com");
+        assertThat(members).containsOnly(USERNAME, USERNAME_2);
     }
 
     @Test
     public void addressForwardsEndpointShouldListForwardAddresses() throws Exception {
-        dataProbe.addForwardMapping("from1", "domain.com", "user1@domain.com");
-        dataProbe.addForwardMapping("from2", "domain.com", "user2@domain.com");
+        dataProbe.addDomain(DOMAIN);
+        dataProbe.addUser(USERNAME, "anyPassword");
+        dataProbe.addUser(USERNAME_2, "anyPassword");
+
+        with()
+            .put(ForwardRoutes.ROOT_PATH + SEPARATOR + USERNAME + "/targets/to1@domain.com");
+        with()
+            .put(ForwardRoutes.ROOT_PATH + SEPARATOR + USERNAME_2 + "/targets/to2@domain.com");
 
         List<String> members = when()
-            .get("/address/forwards")
+            .get(ForwardRoutes.ROOT_PATH)
         .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(JSON_CONTENT_TYPE)
             .extract()
             .jsonPath()
             .getList(".");
-        assertThat(members).containsOnly("from1@domain.com", "from2@domain.com");
+        assertThat(members).containsOnly(USERNAME, USERNAME_2);
     }
 
     @Test
-    public void addressAliasesEndpointShouldListAliasesAddresses() throws Exception {
-        dataProbe.addAliasMapping("alias1", "domain.com", "to1@domain.com");
-        dataProbe.addAliasMapping("alias2", "domain.com", "to2@domain.com");
+    public void addressAliasesEndpointShouldListAliasesAddresses() {
+        with()
+            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME + "/sources/alias1@domain.com");
+        with()
+            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME_2 + "/sources/alias2@domain.com");
 
         List<String> members = when()
-            .get("/address/aliases")
+            .get(AliasRoutes.ROOT_PATH)
         .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(JSON_CONTENT_TYPE)
             .extract()
             .jsonPath()
             .getList(".");
-        assertThat(members).containsOnly("to1@domain.com", "to2@domain.com");
+        assertThat(members).containsOnly(USERNAME, USERNAME_2);
     }
 
     @Test


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


[16/27] james-project git commit: JAMES-2641 MailboxManager should not expose group registration

Posted by bt...@apache.org.
JAMES-2641 MailboxManager should not expose group registration


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

Branch: refs/heads/master
Commit: d35e8a64590ba14fd88af33f9667556fb4952849
Parents: f063b48
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 10 15:21:10 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 10:23:41 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxManager.java    |  2 --
 .../james/mailbox/MailboxManagerTest.java       | 29 +++++++++++---------
 .../cassandra/CassandraMailboxManagerTest.java  | 11 ++++++--
 .../CassandraMessageIdManagerTestSystem.java    |  2 +-
 .../mailbox/jpa/JPAMailboxManagerTest.java      | 10 +++++--
 .../DomainUserMaildirMailboxManagerTest.java    | 11 ++++++--
 .../FullUserMaildirMailboxManagerTest.java      | 12 ++++++--
 .../inmemory/MemoryMailboxManagerProvider.java  |  4 +--
 .../inmemory/MemoryMailboxManagerTest.java      | 12 +++++---
 ...ticSearchQuotaSearchTestSystemExtension.java |  2 +-
 .../org/apache/james/utils/JmapGuiceProbe.java  |  7 +++--
 .../event/PropagateLookupRightListenerTest.java |  2 +-
 .../ElasticSearchQuotaSearchExtension.java      |  2 +-
 13 files changed, 66 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index 3b5f36c..e2d7cda 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -347,6 +347,4 @@ public interface MailboxManager extends RequestAware, RightManager, MailboxAnnot
     boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException;
 
     Registration register(MailboxListener listener, MailboxId registrationKey);
-
-    Registration register(MailboxListener.GroupMailboxListener groupMailboxListener);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 0172ac7..57c1b34 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -35,6 +35,7 @@ import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxManager.MailboxCapabilities;
 import org.apache.james.mailbox.MessageManager.AppendCommand;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.AnnotationException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;
@@ -74,16 +75,18 @@ import com.google.common.collect.ImmutableSet;
  * implement the test methods.
  * 
  */
-public abstract class MailboxManagerTest {
+public abstract class MailboxManagerTest<T extends MailboxManager> {
     public static final String USER_1 = "USER_1";
     public static final String USER_2 = "USER_2";
     private static final int DEFAULT_MAXIMUM_LIMIT = 256;
 
-    private MailboxManager mailboxManager;
+    private T mailboxManager;
     private MailboxSession session;
     private Message.Builder message;
 
-    protected abstract MailboxManager provideMailboxManager() throws MailboxException;
+    protected abstract T provideMailboxManager();
+
+    protected abstract EventBus retrieveEventBus(T mailboxManager);
 
     @BeforeEach
     void setUp() throws Exception {
@@ -382,7 +385,7 @@ public abstract class MailboxManagerTest {
         @Test
         void deleteMailboxShouldFireMailboxDeletionEvent() throws Exception {
             assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota));
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
 
             mailboxManager.deleteMailbox(inbox, session);
 
@@ -400,7 +403,7 @@ public abstract class MailboxManagerTest {
         @Test
         void createMailboxShouldFireMailboxAddedEvent() throws Exception {
             assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota));
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
 
             Optional<MailboxId> newId = mailboxManager.createMailbox(newPath, session);
 
@@ -415,7 +418,7 @@ public abstract class MailboxManagerTest {
         @Test
         void addingMessageShouldFireQuotaUpdateEvent() throws Exception {
             assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota));
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
 
             inboxManager.appendMessage(MessageManager.AppendCommand.builder()
                     .build(message), session);
@@ -438,7 +441,7 @@ public abstract class MailboxManagerTest {
 
         @Test
         void addingMessageShouldFireAddedEvent() throws Exception {
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
             inboxManager.appendMessage(MessageManager.AppendCommand.builder()
                     .build(message), session);
 
@@ -456,7 +459,7 @@ public abstract class MailboxManagerTest {
             inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session);
             inboxManager.setFlags(new Flags(Flags.Flag.DELETED), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session);
 
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
             inboxManager.expunge(MessageRange.all(), session);
 
             assertThat(listener.getEvents())
@@ -472,7 +475,7 @@ public abstract class MailboxManagerTest {
         void setFlagsShouldFireFlagsUpdatedEvent() throws Exception {
             inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session);
 
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
             inboxManager.setFlags(new Flags(Flags.Flag.FLAGGED), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session);
 
             assertThat(listener.getEvents())
@@ -490,7 +493,7 @@ public abstract class MailboxManagerTest {
             Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
             mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -508,7 +511,7 @@ public abstract class MailboxManagerTest {
             mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
             mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -525,7 +528,7 @@ public abstract class MailboxManagerTest {
             Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
             mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())
@@ -542,7 +545,7 @@ public abstract class MailboxManagerTest {
             mailboxManager.createMailbox(newPath, session);
             inboxManager.appendMessage(AppendCommand.builder().build(message), session);
 
-            mailboxManager.register(listener);
+            retrieveEventBus(mailboxManager).register(listener);
             mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session);
 
             assertThat(listener.getEvents())

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
index b44e40d..0408aa6 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
@@ -19,19 +19,24 @@
 package org.apache.james.mailbox.cassandra;
 
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerTest;
 import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule;
+import org.apache.james.mailbox.events.EventBus;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class CassandraMailboxManagerTest extends MailboxManagerTest {
+public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMailboxManager> {
     @RegisterExtension
     static CassandraClusterExtension cassandra = new CassandraClusterExtension(MailboxAggregateModule.MODULE_WITH_QUOTA);
 
     @Override
-    protected MailboxManager provideMailboxManager() {
+    protected CassandraMailboxManager provideMailboxManager() {
         return CassandraMailboxManagerProvider.provideMailboxManager(
             cassandra.getCassandraCluster().getConf(),
             cassandra.getCassandraCluster().getTypesProvider());
     }
+
+    @Override
+    protected EventBus retrieveEventBus(CassandraMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/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 3cc5809..0bdeb45 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
@@ -47,7 +47,7 @@ class CassandraMessageIdManagerTestSystem {
         ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(
             (StoreCurrentQuotaManager) currentQuotaManager,
             mailboxManager.getQuotaComponents().getQuotaRootResolver(), mailboxManager.getEventBus(), quotaManager);
-        mailboxManager.register(listeningCurrentQuotaUpdater);
+        mailboxManager.getEventBus().register(listeningCurrentQuotaUpdater);
         return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getEventBus()),
             new CassandraMessageId.Factory(),
             mapperFactory,

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
index 8775a0e..b9e5073 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
@@ -21,20 +21,20 @@ package org.apache.james.mailbox.jpa;
 import java.util.Optional;
 
 import org.apache.james.backends.jpa.JpaTestCluster;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerTest;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
-public class JPAMailboxManagerTest extends MailboxManagerTest {
+public class JPAMailboxManagerTest extends MailboxManagerTest<OpenJPAMailboxManager> {
 
     private static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAMailboxFixture.MAILBOX_PERSISTANCE_CLASSES);
     private Optional<OpenJPAMailboxManager> openJPAMailboxManager = Optional.empty();
     
     @Override
-    protected MailboxManager provideMailboxManager() {
+    protected OpenJPAMailboxManager provideMailboxManager() {
         if (!openJPAMailboxManager.isPresent()) {
             openJPAMailboxManager = Optional.of(JpaMailboxManagerProvider.provideMailboxManager(JPA_TEST_CLUSTER));
         }
@@ -53,4 +53,8 @@ public class JPAMailboxManagerTest extends MailboxManagerTest {
 
     }
 
+    @Override
+    protected EventBus retrieveEventBus(OpenJPAMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java
index cc494f1..d5be3b6 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java
@@ -19,17 +19,18 @@
 package org.apache.james.mailbox.maildir;
 
 import org.apache.james.junit.TemporaryFolderExtension;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerTest;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class DomainUserMaildirMailboxManagerTest extends MailboxManagerTest {
+public class DomainUserMaildirMailboxManagerTest extends MailboxManagerTest<StoreMailboxManager> {
 
     @RegisterExtension
     TemporaryFolderExtension temporaryFolder = new TemporaryFolderExtension();
     
     @Override
-    protected MailboxManager provideMailboxManager() {
+    protected StoreMailboxManager provideMailboxManager() {
         try {
             return MaildirMailboxManagerProvider.createMailboxManager("/%domain/%user", temporaryFolder.getTemporaryFolder().getTempDir());
         } catch (Exception e) {
@@ -37,4 +38,8 @@ public class DomainUserMaildirMailboxManagerTest extends MailboxManagerTest {
         }
     }
 
+    @Override
+    protected EventBus retrieveEventBus(StoreMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java
index e08097f..08faae2 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java
@@ -19,20 +19,26 @@
 package org.apache.james.mailbox.maildir;
 
 import org.apache.james.junit.TemporaryFolderExtension;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerTest;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class FullUserMaildirMailboxManagerTest extends MailboxManagerTest {
+public class FullUserMaildirMailboxManagerTest extends MailboxManagerTest<StoreMailboxManager> {
     @RegisterExtension
     TemporaryFolderExtension temporaryFolder = new TemporaryFolderExtension();
     
     @Override
-    protected MailboxManager provideMailboxManager() {
+    protected StoreMailboxManager provideMailboxManager() {
         try {
             return MaildirMailboxManagerProvider.createMailboxManager("/%fulluser", temporaryFolder.getTemporaryFolder().getTempDir());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }
+
+    @Override
+    protected EventBus retrieveEventBus(StoreMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerProvider.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerProvider.java
index 4bcadff..7504574 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerProvider.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerProvider.java
@@ -19,16 +19,14 @@
 
 package org.apache.james.mailbox.inmemory;
 
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 
 public class MemoryMailboxManagerProvider {
     private static final int LIMIT_ANNOTATIONS = 3;
     private static final int LIMIT_ANNOTATION_SIZE = 30;
 
-    public static MailboxManager provideMailboxManager() throws MailboxException {
+    public static InMemoryMailboxManager provideMailboxManager() {
         return new InMemoryIntegrationResources()
             .createResources(new SimpleGroupMembershipResolver(),
                 LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE)

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerTest.java
index 1a5f78a..7ad8bcf 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerTest.java
@@ -19,13 +19,17 @@
 
 package org.apache.james.mailbox.inmemory;
 
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerTest;
-import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.events.EventBus;
 
-public class MemoryMailboxManagerTest extends MailboxManagerTest {
+public class MemoryMailboxManagerTest extends MailboxManagerTest<InMemoryMailboxManager> {
     @Override
-    protected MailboxManager provideMailboxManager() throws MailboxException {
+    protected InMemoryMailboxManager provideMailboxManager() {
         return MemoryMailboxManagerProvider.provideMailboxManager();
     }
+
+    @Override
+    protected EventBus retrieveEventBus(InMemoryMailboxManager mailboxManager) {
+        return mailboxManager.getEventBus();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/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 4cc91e0..33657b7 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
@@ -78,7 +78,7 @@ public class ElasticSearchQuotaSearchTestSystemExtension implements ParameterRes
                     QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE),
                 new QuotaRatioToElasticSearchJson());
 
-            resources.getMailboxManager().register(listener);
+            resources.getMailboxManager().getEventBus().register(listener);
 
             QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
index 4c82971..247aa86 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
@@ -32,6 +32,7 @@ import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
@@ -42,13 +43,15 @@ public class JmapGuiceProbe implements GuiceProbe {
     private final JMAPServer jmapServer;
     private final MessageIdManager messageIdManager;
     private final MailboxManager mailboxManager;
+    private final EventBus eventBus;
 
     @Inject
-    private JmapGuiceProbe(VacationRepository vacationRepository, JMAPServer jmapServer, MessageIdManager messageIdManager, MailboxManager mailboxManager) {
+    private JmapGuiceProbe(VacationRepository vacationRepository, JMAPServer jmapServer, MessageIdManager messageIdManager, MailboxManager mailboxManager, EventBus eventBus) {
         this.vacationRepository = vacationRepository;
         this.jmapServer = jmapServer;
         this.messageIdManager = messageIdManager;
         this.mailboxManager = mailboxManager;
+        this.eventBus = eventBus;
     }
 
     public int getJmapPort() {
@@ -56,7 +59,7 @@ public class JmapGuiceProbe implements GuiceProbe {
     }
 
     public void addMailboxListener(MailboxListener.GroupMailboxListener listener) {
-        mailboxManager.register(listener);
+        eventBus.register(listener);
     }
 
     public void modifyVacation(AccountId accountId, VacationPatch vacationPatch) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
index f5f7787..60e9532 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
@@ -81,7 +81,7 @@ public class PropagateLookupRightListenerTest {
         mailboxMapper = storeMailboxManager.getMapperFactory();
 
         testee = new PropagateLookupRightListener(storeRightManager, storeMailboxManager);
-        storeMailboxManager.register(testee);
+        storeMailboxManager.getEventBus().register(testee);
 
         parentMailboxId = storeMailboxManager.createMailbox(PARENT_MAILBOX, mailboxSession).get();
         parentMailboxId1 = storeMailboxManager.createMailbox(PARENT_MAILBOX1, mailboxSession).get();

http://git-wip-us.apache.org/repos/asf/james-project/blob/d35e8a64/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 59677e8..6928ac1 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
@@ -81,7 +81,7 @@ public class ElasticSearchQuotaSearchExtension implements ParameterResolver, Bef
                     QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE),
                 new QuotaRatioToElasticSearchJson());
 
-            resources.getMailboxManager().register(listener);
+            resources.getMailboxManager().getEventBus().register(listener);
 
             QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
 


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


[22/27] james-project git commit: JAMES-2641 Add a missing import after rebase

Posted by bt...@apache.org.
JAMES-2641 Add a missing import after rebase


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

Branch: refs/heads/master
Commit: 9fd0b6a4b37d09e86183ee2a4babe607fb96579c
Parents: 5a1d9d7
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Jan 17 10:25:04 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:09 2019 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/events/ErrorHandlingContract.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9fd0b6a4/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
index 0b5055b..f4c0768 100644
--- 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
@@ -29,6 +29,7 @@ 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;


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