JAMES-2641 IMAP components should use the EventBus directly This enables the MailboxManager to no more be an EventBus proxy
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f398e3fa Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f398e3fa Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f398e3fa Branch: refs/heads/master Commit: f398e3fa82285aa1949e9368017d94981d3d7804 Parents: 7a37651 Author: Benoit Tellier <btell...@linagora.com> Authored: Thu Jan 10 15:46:11 2019 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Thu Jan 17 10:23:41 2019 +0700 ---------------------------------------------------------------------- .../apache/james/mailbox/MailboxManager.java | 3 --- .../mailbox/store/StoreMailboxManager.java | 7 ------ .../cassandra/host/CassandraHostSystem.java | 2 +- .../host/ElasticSearchHostSystem.java | 1 + .../inmemory/host/InMemoryHostSystem.java | 2 +- .../mpt/imapmailbox/jpa/host/JPAHostSystem.java | 3 ++- .../host/LuceneSearchHostSystem.java | 1 + .../maildir/host/MaildirHostSystem.java | 3 ++- .../processor/AbstractSelectionProcessor.java | 8 ++++--- .../imap/processor/DefaultProcessorChain.java | 20 ++++++++++------ .../james/imap/processor/ExamineProcessor.java | 7 +++--- .../james/imap/processor/IdleProcessor.java | 9 ++++--- .../james/imap/processor/SelectProcessor.java | 7 +++--- .../processor/base/SelectedMailboxImpl.java | 6 +++-- .../main/DefaultImapProcessorFactory.java | 18 +++++++------- .../base/MailboxEventAnalyserTest.java | 6 ++++- .../processor/base/SelectedMailboxImplTest.java | 25 +++++++++++++------- .../modules/protocols/IMAPServerModule.java | 7 +++--- .../META-INF/spring/imapserver-context.xml | 11 +++++---- 19 files changed, 85 insertions(+), 61 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java index e2d7cda..3af341c 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java @@ -23,7 +23,6 @@ import java.util.EnumSet; import java.util.List; import java.util.Optional; -import org.apache.james.mailbox.events.Registration; import org.apache.james.mailbox.exception.BadCredentialsException; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxExistsException; @@ -345,6 +344,4 @@ public interface MailboxManager extends RequestAware, RightManager, MailboxAnnot List<MailboxPath> list(MailboxSession session) throws MailboxException; boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException; - - Registration register(MailboxListener listener, MailboxId registrationKey); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index fdf2ffb..df08dee 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -32,7 +32,6 @@ import javax.inject.Inject; import org.apache.james.core.quota.QuotaCount; import org.apache.james.core.quota.QuotaSize; import org.apache.james.mailbox.MailboxAnnotationManager; -import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution; @@ -41,7 +40,6 @@ import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.StandardMailboxMetaDataComparator; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.events.MailboxIdRegistrationKey; -import org.apache.james.mailbox.events.Registration; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxExistsException; import org.apache.james.mailbox.exception.MailboxNotFoundException; @@ -722,9 +720,4 @@ public class StoreMailboxManager implements MailboxManager { Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); return mapper.hasChildren(mailbox, session.getPathDelimiter()); } - - @Override - public Registration register(MailboxListener listener, MailboxId registrationKey) { - return eventBus.register(listener, new MailboxIdRegistrationKey(registrationKey)); - } } http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java index 76ed7ea..2b4d901 100644 --- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java +++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java @@ -120,7 +120,7 @@ public class CassandraHostSystem extends JamesImapHostSystem { configure(new DefaultImapDecoderFactory().buildImapDecoder(), new DefaultImapEncoderFactory().buildImapEncoder(), - DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, subscriptionManager, quotaManager, quotaRootResolver, new DefaultMetricFactory())); + DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, eventBus, subscriptionManager, quotaManager, quotaRootResolver, new DefaultMetricFactory())); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java index c12e44d..d599899 100644 --- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java +++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java @@ -146,6 +146,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem { ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, + eventBus, new StoreSubscriptionManager(mailboxManager.getMapperFactory()), new NoQuotaManager(), new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory()), http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java index 740f385..952823f 100644 --- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java +++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java @@ -56,7 +56,7 @@ public class InMemoryHostSystem extends JamesImapHostSystem { this.mailboxManager = resources.getMailboxManager(); this.perUserMaxQuotaManager = resources.getMaxQuotaManager(); - ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new StoreSubscriptionManager(mailboxManager.getMapperFactory()), + ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, mailboxManager.getEventBus(), new StoreSubscriptionManager(mailboxManager.getMapperFactory()), mailboxManager.getQuotaComponents().getQuotaManager(), mailboxManager.getQuotaComponents().getQuotaRootResolver(), new DefaultMetricFactory()); configure(new DefaultImapDecoderFactory().buildImapDecoder(), http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java index c15466d..8f16a51 100644 --- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java +++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java @@ -126,7 +126,8 @@ public class JPAHostSystem extends JamesImapHostSystem { ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor( - mailboxManager, + mailboxManager, + eventBus, subscriptionManager, storeQuotaManager, quotaRootResolver, http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java index 2035304..52756d6 100644 --- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java +++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java @@ -129,6 +129,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem { ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor( mailboxManager, + eventBus, subscriptionManager, new NoQuotaManager(), new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory), http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java index 688fe71..ae23921 100644 --- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java +++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java @@ -89,7 +89,8 @@ public class MaildirHostSystem extends JamesImapHostSystem { ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor( - mailboxManager, + mailboxManager, + eventBus, sm, quotaComponents.getQuotaManager(), quotaComponents.getQuotaRootResolver(), http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java index 1172979..3abf4e7 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java @@ -47,6 +47,7 @@ import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageManager.MetaData; import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.exception.MessageRangeException; @@ -65,14 +66,15 @@ abstract class AbstractSelectionProcessor<M extends AbstractMailboxSelectionRequ private final StatusResponseFactory statusResponseFactory; private final boolean openReadOnly; - + private final EventBus eventBus; public AbstractSelectionProcessor(Class<M> acceptableClass, ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, boolean openReadOnly, - MetricFactory metricFactory) { + MetricFactory metricFactory, EventBus eventBus) { super(acceptableClass, next, mailboxManager, statusResponseFactory, metricFactory); this.statusResponseFactory = statusResponseFactory; this.openReadOnly = openReadOnly; + this.eventBus = eventBus; } @Override @@ -406,7 +408,7 @@ abstract class AbstractSelectionProcessor<M extends AbstractMailboxSelectionRequ if (currentMailbox != null) { getStatusResponseFactory().untaggedOk(HumanReadableText.QRESYNC_CLOSED, ResponseCode.closed()); } - session.selected(new SelectedMailboxImpl(getMailboxManager(), session, mailboxPath)); + session.selected(new SelectedMailboxImpl(getMailboxManager(), eventBus, session, mailboxPath)); sessionMailbox = session.getSelected(); http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java index 201dbec..89f1fd2 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java @@ -25,6 +25,7 @@ import org.apache.james.imap.api.process.MailboxTyper; import org.apache.james.imap.processor.fetch.FetchProcessor; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.SubscriptionManager; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.metrics.api.MetricFactory; @@ -35,10 +36,15 @@ import org.apache.james.metrics.api.MetricFactory; public class DefaultProcessorChain { public static ImapProcessor createDefaultChain(ImapProcessor chainEndProcessor, - MailboxManager mailboxManager, SubscriptionManager subscriptionManager, - StatusResponseFactory statusResponseFactory, MailboxTyper mailboxTyper, QuotaManager quotaManager, - QuotaRootResolver quotaRootResolver, - MetricFactory metricFactory) { + MailboxManager mailboxManager, + EventBus eventBus, + SubscriptionManager subscriptionManager, + StatusResponseFactory statusResponseFactory, + MailboxTyper mailboxTyper, + QuotaManager quotaManager, + QuotaRootResolver quotaRootResolver, + MetricFactory metricFactory) { + SystemMessageProcessor systemProcessor = new SystemMessageProcessor(chainEndProcessor, mailboxManager); LogoutProcessor logoutProcessor = new LogoutProcessor(systemProcessor, mailboxManager, statusResponseFactory, metricFactory); @@ -73,11 +79,11 @@ public class DefaultProcessorChain { authenticateProcessor = new AuthenticateProcessor(copyProcessor, mailboxManager, statusResponseFactory, metricFactory); } ExpungeProcessor expungeProcessor = new ExpungeProcessor(authenticateProcessor, mailboxManager, statusResponseFactory, metricFactory); - ExamineProcessor examineProcessor = new ExamineProcessor(expungeProcessor, mailboxManager, statusResponseFactory, metricFactory); + ExamineProcessor examineProcessor = new ExamineProcessor(expungeProcessor, mailboxManager, eventBus, statusResponseFactory, metricFactory); AppendProcessor appendProcessor = new AppendProcessor(examineProcessor, mailboxManager, statusResponseFactory, metricFactory); StoreProcessor storeProcessor = new StoreProcessor(appendProcessor, mailboxManager, statusResponseFactory, metricFactory); NoopProcessor noopProcessor = new NoopProcessor(storeProcessor, mailboxManager, statusResponseFactory, metricFactory); - IdleProcessor idleProcessor = new IdleProcessor(noopProcessor, mailboxManager, statusResponseFactory, metricFactory); + IdleProcessor idleProcessor = new IdleProcessor(noopProcessor, mailboxManager, eventBus, statusResponseFactory, metricFactory); StatusProcessor statusProcessor = new StatusProcessor(idleProcessor, mailboxManager, statusResponseFactory, metricFactory); LSubProcessor lsubProcessor = new LSubProcessor(statusProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory); XListProcessor xlistProcessor = new XListProcessor(lsubProcessor, mailboxManager, statusResponseFactory, mailboxTyper, metricFactory); @@ -86,7 +92,7 @@ public class DefaultProcessorChain { // WITHIN extension capabilityProcessor.addProcessor(searchProcessor); - SelectProcessor selectProcessor = new SelectProcessor(searchProcessor, mailboxManager, statusResponseFactory, metricFactory); + SelectProcessor selectProcessor = new SelectProcessor(searchProcessor, mailboxManager, eventBus, statusResponseFactory, metricFactory); NamespaceProcessor namespaceProcessor = new NamespaceProcessor(selectProcessor, mailboxManager, statusResponseFactory, metricFactory); capabilityProcessor.addProcessor(xlistProcessor); http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java index 69e7644..eaed119 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java @@ -27,14 +27,15 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.message.request.ExamineRequest; import org.apache.james.mailbox.MailboxManager; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.MDCBuilder; public class ExamineProcessor extends AbstractSelectionProcessor<ExamineRequest> { - public ExamineProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, - MetricFactory metricFactory) { - super(ExamineRequest.class, next, mailboxManager, statusResponseFactory, true, metricFactory); + public ExamineProcessor(ImapProcessor next, MailboxManager mailboxManager, EventBus eventBus, StatusResponseFactory statusResponseFactory, + MetricFactory metricFactory) { + super(ExamineRequest.class, next, mailboxManager, statusResponseFactory, true, metricFactory, eventBus); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java index 9913da9..5c2ad2b 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java @@ -45,6 +45,8 @@ import org.apache.james.imap.message.response.ContinuationResponse; import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxManager; +import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.events.Registration; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.MDCBuilder; @@ -57,14 +59,16 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme public static final int DEFAULT_SCHEDULED_POOL_CORE_SIZE = 5; private static final String DONE = "DONE"; + private final EventBus eventBus; private TimeUnit heartbeatIntervalUnit; private long heartbeatInterval; private boolean enableIdle; private ScheduledExecutorService heartbeatExecutor; - public IdleProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, + public IdleProcessor(ImapProcessor next, MailboxManager mailboxManager, EventBus eventBus, StatusResponseFactory factory, MetricFactory metricFactory) { super(IdleRequest.class, next, mailboxManager, factory, metricFactory); + this.eventBus = eventBus; } @Override @@ -82,11 +86,10 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme @Override protected void doProcess(IdleRequest message, ImapSession session, String tag, ImapCommand command, Responder responder) { - MailboxManager mailboxManager = getMailboxManager(); SelectedMailbox sm = session.getSelected(); Registration registration; if (sm != null) { - registration = mailboxManager.register(new IdleMailboxListener(session, responder), sm.getMailboxId()); + registration = eventBus.register(new IdleMailboxListener(session, responder), new MailboxIdRegistrationKey(sm.getMailboxId())); } else { registration = null; } http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java index fc200d7..6d9bb18 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java @@ -27,14 +27,15 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.message.request.SelectRequest; import org.apache.james.mailbox.MailboxManager; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.MDCBuilder; public class SelectProcessor extends AbstractSelectionProcessor<SelectRequest> { - public SelectProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory statusResponseFactory, - MetricFactory metricFactory) { - super(SelectRequest.class, next, mailboxManager, statusResponseFactory, false, metricFactory); + public SelectProcessor(ImapProcessor next, MailboxManager mailboxManager, EventBus eventBus, StatusResponseFactory statusResponseFactory, + MetricFactory metricFactory) { + super(SelectRequest.class, next, mailboxManager, statusResponseFactory, false, metricFactory, eventBus); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java index e9fc609..287e18d 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java @@ -40,6 +40,8 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.events.Registration; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxId; @@ -72,7 +74,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener { private final Flags applicableFlags; private boolean applicableFlagsChanged; - public SelectedMailboxImpl(MailboxManager mailboxManager, ImapSession session, MailboxPath path) throws MailboxException { + public SelectedMailboxImpl(MailboxManager mailboxManager, EventBus eventBus, ImapSession session, MailboxPath path) throws MailboxException { this.session = session; this.sessionId = ImapSessionUtils.getMailboxSession(session).getSessionId(); this.mailboxManager = mailboxManager; @@ -87,7 +89,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener { MessageManager messageManager = mailboxManager.getMailbox(path, mailboxSession); mailboxId = messageManager.getId(); - registration = mailboxManager.register(this, mailboxId); + registration = eventBus.register(this, new MailboxIdRegistrationKey(mailboxId)); applicableFlags = messageManager.getApplicableFlags(mailboxSession); uidMsnConverter.addAll(ImmutableList.copyOf( http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java index ff6d78f..e561d4d 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java @@ -28,25 +28,27 @@ import org.apache.james.imap.processor.base.ImapResponseMessageProcessor; import org.apache.james.imap.processor.base.UnknownRequestProcessor; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.SubscriptionManager; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.metrics.api.MetricFactory; public class DefaultImapProcessorFactory { - public static ImapProcessor createDefaultProcessor(MailboxManager mailboxManager, SubscriptionManager subscriptionManager, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, + public static ImapProcessor createDefaultProcessor(MailboxManager mailboxManager, EventBus eventBus, SubscriptionManager subscriptionManager, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) { - return createXListSupportingProcessor(mailboxManager, subscriptionManager, null, quotaManager, quotaRootResolver, metricFactory); + return createXListSupportingProcessor(mailboxManager, eventBus, subscriptionManager, null, quotaManager, quotaRootResolver, metricFactory); } - public static ImapProcessor createXListSupportingProcessor(MailboxManager mailboxManager, SubscriptionManager subscriptionManager, - MailboxTyper mailboxTyper, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) { + public static ImapProcessor createXListSupportingProcessor(MailboxManager mailboxManager, + EventBus eventBus, SubscriptionManager subscriptionManager, + MailboxTyper mailboxTyper, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) { - final StatusResponseFactory statusResponseFactory = new UnpooledStatusResponseFactory(); - final UnknownRequestProcessor unknownRequestImapProcessor = new UnknownRequestProcessor(statusResponseFactory); + StatusResponseFactory statusResponseFactory = new UnpooledStatusResponseFactory(); + UnknownRequestProcessor unknownRequestImapProcessor = new UnknownRequestProcessor(statusResponseFactory); - final ImapProcessor imap4rev1Chain = DefaultProcessorChain.createDefaultChain(unknownRequestImapProcessor, - mailboxManager, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, metricFactory); + ImapProcessor imap4rev1Chain = DefaultProcessorChain.createDefaultChain(unknownRequestImapProcessor, mailboxManager, + eventBus, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, metricFactory); return new ImapResponseMessageProcessor(imap4rev1Chain); } http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java index b6eff37..0baae20 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java @@ -39,6 +39,8 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.events.InVMEventBus; +import org.apache.james.mailbox.events.delivery.InVmEventDelivery; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; @@ -50,6 +52,7 @@ import org.apache.james.mailbox.model.UpdatedFlags; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox; +import org.apache.james.metrics.api.NoopMetricFactory; import org.junit.Before; import org.junit.Test; @@ -127,6 +130,7 @@ public class MailboxEventAnalyserTest { @Before public void setUp() throws MailboxException { ImapSession imapSession = mock(ImapSession.class); + InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory())); when(imapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)) .thenReturn(MAILBOX_SESSION); when(imapSession.getState()).thenReturn(ImapSessionState.AUTHENTICATED); @@ -152,7 +156,7 @@ public class MailboxEventAnalyserTest { when(messageManager.getMessages(any(), any(), any())) .thenReturn(new SingleMessageResultIterator(messageResult)); - testee = new SelectedMailboxImpl(mailboxManager, imapSession, MAILBOX_PATH); + testee = new SelectedMailboxImpl(mailboxManager, eventBus, imapSession, MAILBOX_PATH); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java index 073528f..a307c27 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java @@ -43,6 +43,8 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageMetaData; @@ -76,6 +78,8 @@ public class SelectedMailboxImplTest { private ImapSession imapSession; private Mailbox mailbox; private TestId mailboxId; + private EventBus eventBus; + private MailboxIdRegistrationKey mailboxIdRegistrationKey; @Before public void setUp() throws Exception { @@ -87,6 +91,8 @@ public class SelectedMailboxImplTest { imapSession = mock(ImapSession.class); mailbox = mock(Mailbox.class); mailboxId = TestId.of(42); + mailboxIdRegistrationKey = new MailboxIdRegistrationKey(mailboxId); + eventBus = mock(EventBus.class); when(mailboxManager.getMailbox(eq(mailboxPath), any(MailboxSession.class))) .thenReturn(messageManager); @@ -109,13 +115,13 @@ public class SelectedMailboxImplTest { @Test public void concurrentEventShouldNotSkipAddedEventsEmittedDuringInitialisation() throws Exception { - final AtomicInteger successCount = new AtomicInteger(0); + AtomicInteger successCount = new AtomicInteger(0); doAnswer(generateEmitEventAnswer(successCount)) - .when(mailboxManager) - .register(any(MailboxListener.class), eq(mailboxId)); - + .when(eventBus) + .register(any(MailboxListener.class), eq(mailboxIdRegistrationKey)); SelectedMailboxImpl selectedMailbox = new SelectedMailboxImpl( mailboxManager, + eventBus, imapSession, mailboxPath); @@ -124,13 +130,14 @@ public class SelectedMailboxImplTest { @Test public void concurrentEventShouldBeProcessedSuccessfullyDuringInitialisation() throws Exception { - final AtomicInteger successCount = new AtomicInteger(0); + AtomicInteger successCount = new AtomicInteger(0); doAnswer(generateEmitEventAnswer(successCount)) - .when(mailboxManager) - .register(any(MailboxListener.class), eq(mailboxId)); + .when(eventBus) + .register(any(MailboxListener.class), eq(mailboxIdRegistrationKey)); new SelectedMailboxImpl( mailboxManager, + eventBus, imapSession, mailboxPath); @@ -146,10 +153,10 @@ public class SelectedMailboxImplTest { }; } - private Answer<Iterator<MessageUid>> generateEmitEventAnswer(final AtomicInteger success) { + private Answer<Iterator<MessageUid>> generateEmitEventAnswer(AtomicInteger success) { return invocation -> { Object[] args = invocation.getArguments(); - final MailboxListener mailboxListener = (MailboxListener) args[1]; + MailboxListener mailboxListener = (MailboxListener) args[0]; executorService.submit(() -> { try { emitEvent(mailboxListener); http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java index 0e2ac9a..2880864 100644 --- a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java +++ b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java @@ -31,10 +31,10 @@ import org.apache.james.imapserver.netty.OioIMAPServerFactory; import org.apache.james.lifecycle.api.Configurable; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.SubscriptionManager; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.metrics.api.MetricFactory; -import org.apache.james.modules.Names; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.utils.ConfigurationPerformer; import org.apache.james.utils.GuiceProbe; @@ -46,7 +46,6 @@ import com.google.inject.Provides; import com.google.inject.Scopes; import com.google.inject.Singleton; import com.google.inject.multibindings.Multibinder; -import com.google.inject.name.Named; public class IMAPServerModule extends AbstractModule { @@ -61,13 +60,15 @@ public class IMAPServerModule extends AbstractModule { @Provides ImapProcessor provideImapProcessor( - @Named(Names.MAILBOXMANAGER_NAME)MailboxManager mailboxManager, + MailboxManager mailboxManager, + EventBus eventBus, SubscriptionManager subscriptionManager, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) { return DefaultImapProcessorFactory.createXListSupportingProcessor( mailboxManager, + eventBus, subscriptionManager, null, quotaManager, http://git-wip-us.apache.org/repos/asf/james-project/blob/f398e3fa/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml ---------------------------------------------------------------------- diff --git a/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml b/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml index 49a52a6..5d0ee12 100644 --- a/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml +++ b/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml @@ -32,12 +32,13 @@ <bean id="imapProcessor" class="org.apache.james.imap.processor.main.DefaultImapProcessorFactory" factory-method="createXListSupportingProcessor"> <constructor-arg index="0" ref="mailboxmanager"/> - <constructor-arg index="1" ref="subscriptionManager"/> + <constructor-arg index="1" ref="event-bus"/> + <constructor-arg index="2" ref="subscriptionManager"/> <!-- The mailboxTyper --> - <constructor-arg index="2" value="#{null}"/> - <constructor-arg index="3" ref="quotaManager"/> - <constructor-arg index="4" ref="quotaRootResolver"/> - <constructor-arg index="5" ref="timeMetricFactory"/> + <constructor-arg index="3" value="#{null}"/> + <constructor-arg index="4" ref="quotaManager"/> + <constructor-arg index="5" ref="quotaRootResolver"/> + <constructor-arg index="6" ref="timeMetricFactory"/> </bean> <bean id="imapDecoderFactory" class="org.apache.james.imap.main.DefaultImapDecoderFactory"/> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org