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/03/20 11:54:28 UTC
[james-project] 20/33: JAMES-2687 Use InMemoryIntegrationResources
for MPT search host systems
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit be2ea2efe6f033bc6f411717ba11cc8ee789325a
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Mar 15 14:20:09 2019 +0700
JAMES-2687 Use InMemoryIntegrationResources for MPT search host systems
---
.../host/ElasticSearchHostSystem.java | 83 +++++++---------------
mpt/impl/imap-mailbox/lucenesearch/pom.xml | 5 ++
.../lucenesearch/host/LuceneSearchHostSystem.java | 59 +++++----------
3 files changed, 46 insertions(+), 101 deletions(-)
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 7dd9141..eafd2dc 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -38,8 +38,6 @@ import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
import org.apache.james.imap.main.DefaultImapDecoderFactory;
import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
-import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
import org.apache.james.mailbox.elasticsearch.IndexAttachments;
import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
@@ -48,26 +46,13 @@ import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
import org.apache.james.mailbox.elasticsearch.query.CriterionConverter;
import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
-import org.apache.james.mailbox.events.InVMEventBus;
-import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
-import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.inmemory.InMemoryId;
-import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
-import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
-import org.apache.james.mailbox.store.JVMMailboxPathLocker;
-import org.apache.james.mailbox.store.PreDeletionHooks;
-import org.apache.james.mailbox.store.SessionProvider;
-import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
+import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
import org.apache.james.mailbox.store.StoreMailboxManager;
-import org.apache.james.mailbox.store.StoreRightManager;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
import org.apache.james.mailbox.store.quota.NoQuotaManager;
-import org.apache.james.mailbox.store.quota.QuotaComponents;
-import org.apache.james.metrics.api.NoopMetricFactory;
import org.apache.james.metrics.logger.DefaultMetricFactory;
import org.apache.james.mpt.api.ImapFeatures;
import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -100,58 +85,38 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
FileUtils.deleteDirectory(tempDirectory.toFile());
}
- private void initFields() throws MailboxException {
+ private void initFields() {
Client client = MailboxIndexCreationUtil.prepareDefaultClient(
new TestingClientProvider(embeddedElasticSearch.getNode()).get(),
- ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
-
+ ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
-
- InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
- InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
- StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
- StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
-
- SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
- QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
-
-
ThreadFactory threadFactory = NamedThreadFactory.withClassName(getClass());
- ElasticSearchListeningMessageSearchIndex searchIndex = new ElasticSearchListeningMessageSearchIndex(
- mailboxSessionMapperFactory,
- new ElasticSearchIndexer(client,
- Executors.newSingleThreadExecutor(threadFactory),
- MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
- MailboxElasticSearchConstants.MESSAGE_TYPE),
- new ElasticSearchSearcher(client,
- new QueryConverter(new CriterionConverter()),
- ElasticSearchSearcher.DEFAULT_SEARCH_SIZE,
- new InMemoryId.Factory(), messageIdFactory,
- MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS, MailboxElasticSearchConstants.MESSAGE_TYPE),
- new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.systemDefault(), IndexAttachments.YES),
- new SessionProvider(authenticator, authorizator));
-
- mailboxManager = new InMemoryMailboxManager(
- mailboxSessionMapperFactory,
- sessionProvider,
- new JVMMailboxPathLocker(),
- new MessageParser(),
- messageIdFactory,
- eventBus,
- annotationManager,
- storeRightManager,
- quotaComponents,
- searchIndex,
- PreDeletionHooks.NO_PRE_DELETION_HOOK);
-
- eventBus.register(searchIndex);
+
+ InMemoryIntegrationResources resources = new InMemoryIntegrationResources.Factory()
+ .withAuthenticator(authenticator)
+ .withAuthorizator(authorizator)
+ .withSearchIndex(preInstanciationStage -> new ElasticSearchListeningMessageSearchIndex(
+ preInstanciationStage.getMapperFactory(),
+ new ElasticSearchIndexer(client,
+ Executors.newSingleThreadExecutor(threadFactory),
+ MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
+ MailboxElasticSearchConstants.MESSAGE_TYPE),
+ new ElasticSearchSearcher(client, new QueryConverter(new CriterionConverter()), ElasticSearchSearcher.DEFAULT_SEARCH_SIZE,
+ new InMemoryId.Factory(), messageIdFactory,
+ MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
+ MailboxElasticSearchConstants.MESSAGE_TYPE),
+ new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES),
+ preInstanciationStage.getSessionProvider()))
+ .create();
+
+ mailboxManager = resources.getMailboxManager();
ImapProcessor defaultImapProcessorFactory =
DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager,
- eventBus,
+ resources.getMailboxManager().getEventBus(),
new StoreSubscriptionManager(mailboxManager.getMapperFactory()),
new NoQuotaManager(),
- new DefaultUserQuotaRootResolver(mailboxManager.getSessionProvider(), mailboxManager.getMapperFactory()),
+ resources.getDefaultUserQuotaRootResolver(),
new DefaultMetricFactory());
configure(new DefaultImapDecoderFactory().buildImapDecoder(),
new DefaultImapEncoderFactory().buildImapEncoder(),
diff --git a/mpt/impl/imap-mailbox/lucenesearch/pom.xml b/mpt/impl/imap-mailbox/lucenesearch/pom.xml
index 6db9320..befdd90 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/pom.xml
+++ b/mpt/impl/imap-mailbox/lucenesearch/pom.xml
@@ -37,6 +37,11 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-mailbox-api</artifactId>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-event-memory</artifactId>
</dependency>
<dependency>
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 b6b24b2..a3bef4e 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
@@ -33,33 +33,20 @@ import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.SubscriptionManager;
-import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
-import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
-import org.apache.james.mailbox.events.InVMEventBus;
-import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
-import org.apache.james.mailbox.extension.PreDeletionHook;
import org.apache.james.mailbox.inmemory.InMemoryId;
import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
-import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
+import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
import org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex;
-import org.apache.james.mailbox.store.JVMMailboxPathLocker;
-import org.apache.james.mailbox.store.PreDeletionHooks;
-import org.apache.james.mailbox.store.SessionProvider;
-import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
-import org.apache.james.mailbox.store.StoreRightManager;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
import org.apache.james.mailbox.store.quota.NoQuotaManager;
-import org.apache.james.mailbox.store.quota.QuotaComponents;
-import org.apache.james.metrics.api.NoopMetricFactory;
import org.apache.james.metrics.logger.DefaultMetricFactory;
import org.apache.james.mpt.api.ImapFeatures;
import org.apache.james.mpt.api.ImapFeatures.Feature;
import org.apache.james.mpt.host.JamesImapHostSystem;
import org.apache.lucene.store.FSDirectory;
+import com.github.fge.lambdas.Throwing;
import com.google.common.io.Files;
public class LuceneSearchHostSystem extends JamesImapHostSystem {
@@ -99,43 +86,31 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
}
private void initFields() {
-
try {
- InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory()));
-
- InMemoryMailboxSessionMapperFactory mapperFactory = new InMemoryMailboxSessionMapperFactory();
- StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus);
- JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
- InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
- SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator);
FSDirectory fsDirectory = FSDirectory.open(tempFile);
- searchIndex = new LuceneMessageSearchIndex(mapperFactory, new InMemoryId.Factory(), fsDirectory, messageIdFactory, sessionProvider);
-
- mailboxManager = new InMemoryMailboxManager(mapperFactory,
- sessionProvider,
- locker,
- new MessageParser(),
- messageIdFactory,
- eventBus,
- new StoreMailboxAnnotationManager(mapperFactory, rightManager),
- rightManager,
- QuotaComponents.disabled(sessionProvider, mapperFactory),
- searchIndex,
- PreDeletionHooks.NO_PRE_DELETION_HOOK);
- searchIndex.setEnableSuffixMatch(true);
+ InMemoryIntegrationResources resources = new InMemoryIntegrationResources.Factory()
+ .withAuthorizator(authorizator)
+ .withAuthenticator(authenticator)
+ .withSearchIndex(Throwing.function(preInstanciationStage -> new LuceneMessageSearchIndex(
+ preInstanciationStage.getMapperFactory(), new InMemoryId.Factory(), fsDirectory,
+ new InMemoryMessageId.Factory(),
+ preInstanciationStage.getSessionProvider())))
+ .create();
- eventBus.register(searchIndex);
+ mailboxManager = resources.getMailboxManager();
- SubscriptionManager subscriptionManager = new StoreSubscriptionManager(mapperFactory);
+ searchIndex = (LuceneMessageSearchIndex) resources.getSearchIndex();
+ searchIndex.setEnableSuffixMatch(true);
+ SubscriptionManager subscriptionManager = new StoreSubscriptionManager(mailboxManager.getMapperFactory());
ImapProcessor defaultImapProcessorFactory =
DefaultImapProcessorFactory.createDefaultProcessor(
mailboxManager,
- eventBus,
+ resources.getMailboxManager().getEventBus(),
subscriptionManager,
new NoQuotaManager(),
- new DefaultUserQuotaRootResolver(sessionProvider, mapperFactory),
+ resources.getDefaultUserQuotaRootResolver(),
new DefaultMetricFactory());
configure(new DefaultImapDecoderFactory().buildImapDecoder(),
@@ -158,7 +133,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
}
@Override
- public void setQuotaLimits(QuotaCount maxMessageQuota, QuotaSize maxStorageQuota) throws Exception {
+ public void setQuotaLimits(QuotaCount maxMessageQuota, QuotaSize maxStorageQuota) {
throw new NotImplementedException();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org