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