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