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 <btell...@linagora.com>
Authored: Thu Jan 10 14:16:30 2019 +0700
Committer: Benoit Tellier <btell...@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-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to