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 0aecc7e08f99b50746095bb3f9baceaaff15a631 Author: Benoit Tellier <[email protected]> AuthorDate: Tue Mar 5 10:06:43 2019 +0700 JAMES-2665 When none configured, we should use a default MailRepository configuration This should be "per implementation" as the MailRepository available vary. This is required to start a default James server with the vault. --- .../modules/data/CassandraMailRepositoryModule.java | 13 +++++++++++++ .../james/modules/server/MailStoreRepositoryModule.java | 16 ++++++++++++++-- .../james/modules/data/JPAMailRepositoryModule.java | 13 +++++++++++++ .../org/apache/james/modules/data/MemoryDataModule.java | 11 +++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java index 60fa72f..4472a53 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java @@ -19,9 +19,12 @@ package org.apache.james.modules.data; +import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.james.backends.cassandra.components.CassandraModule; import org.apache.james.mailrepository.api.MailRepositoryProvider; import org.apache.james.mailrepository.api.MailRepositoryUrlStore; +import org.apache.james.mailrepository.api.Protocol; +import org.apache.james.mailrepository.cassandra.CassandraMailRepository; import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryCountDAO; import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryKeysDAO; import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryMailDAO; @@ -31,12 +34,20 @@ import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryProvider import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlModule; import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlStore; import org.apache.james.mailrepository.cassandra.MergingCassandraMailRepositoryMailDao; +import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration; +import org.apache.james.modules.server.MailStoreRepositoryModule; +import com.google.common.collect.ImmutableList; import com.google.inject.AbstractModule; import com.google.inject.Scopes; import com.google.inject.multibindings.Multibinder; public class CassandraMailRepositoryModule extends AbstractModule { + private static final MailRepositoryStoreConfiguration.Item CASSANDRA_MAILREPOSITORY_DEFAULT_DECLARATION = new MailRepositoryStoreConfiguration.Item( + ImmutableList.of(new Protocol("cassandra")), + CassandraMailRepository.class.getName(), + new HierarchicalConfiguration()); + @Override protected void configure() { bind(CassandraMailRepositoryUrlStore.class).in(Scopes.SINGLETON); @@ -52,6 +63,8 @@ public class CassandraMailRepositoryModule extends AbstractModule { Multibinder<MailRepositoryProvider> multibinder = Multibinder.newSetBinder(binder(), MailRepositoryProvider.class); multibinder.addBinding().to(CassandraMailRepositoryProvider.class); + bind(MailStoreRepositoryModule.DefaultItemSupplier.class).toInstance(() -> CASSANDRA_MAILREPOSITORY_DEFAULT_DECLARATION); + Multibinder<CassandraModule> cassandraModuleBinder = Multibinder.newSetBinder(binder(), CassandraModule.class); cassandraModuleBinder.addBinding().toInstance(org.apache.james.mailrepository.cassandra.CassandraMailRepositoryModule.MODULE); cassandraModuleBinder.addBinding().toInstance(CassandraMailRepositoryUrlModule.MODULE); diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java index 66bc204..809756a 100644 --- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java +++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java @@ -20,6 +20,7 @@ package org.apache.james.modules.server; import java.util.List; +import java.util.function.Supplier; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; @@ -33,6 +34,8 @@ import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.utils.ConfigurationPerformer; import org.apache.james.utils.GuiceProbe; import org.apache.james.utils.MailRepositoryProbeImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.collect.ImmutableList; import com.google.inject.AbstractModule; @@ -44,6 +47,10 @@ import com.google.inject.multibindings.Multibinder; public class MailStoreRepositoryModule extends AbstractModule { + public static final Logger LOGGER = LoggerFactory.getLogger(MailStoreRepositoryModule.class); + + public interface DefaultItemSupplier extends Supplier<MailRepositoryStoreConfiguration.Item> {} + @Override protected void configure() { bind(MemoryMailRepositoryStore.class).in(Scopes.SINGLETON); @@ -57,9 +64,14 @@ public class MailStoreRepositoryModule extends AbstractModule { @Provides @Singleton - MailRepositoryStoreConfiguration provideConfiguration(ConfigurationProvider configurationProvider) throws ConfigurationException { + MailRepositoryStoreConfiguration provideConfiguration(ConfigurationProvider configurationProvider, DefaultItemSupplier defaultItemSupplier) throws ConfigurationException { HierarchicalConfiguration configuration = configurationProvider.getConfiguration("mailrepositorystore"); - return MailRepositoryStoreConfiguration.parse(configuration); + MailRepositoryStoreConfiguration userConfiguration = MailRepositoryStoreConfiguration.parse(configuration); + if (!userConfiguration.getItems().isEmpty()) { + return userConfiguration; + } + LOGGER.warn("Empty MailRepository store configuration supplied. Defaulting to default configuration for this product"); + return MailRepositoryStoreConfiguration.forItems(defaultItemSupplier.get()); } @Singleton diff --git a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java index 5e9f398..7bcfc4f 100644 --- a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java +++ b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java @@ -19,17 +19,30 @@ package org.apache.james.modules.data; +import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.james.mailrepository.api.MailRepositoryUrlStore; +import org.apache.james.mailrepository.api.Protocol; +import org.apache.james.mailrepository.file.FileMailRepository; import org.apache.james.mailrepository.jpa.JPAMailRepositoryUrlStore; +import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration; +import org.apache.james.modules.server.MailStoreRepositoryModule; +import com.google.common.collect.ImmutableList; import com.google.inject.AbstractModule; import com.google.inject.Scopes; public class JPAMailRepositoryModule extends AbstractModule { + private static final MailRepositoryStoreConfiguration.Item FILE_MAILREPOSITORY_DEFAULT_DECLARATION = new MailRepositoryStoreConfiguration.Item( + ImmutableList.of(new Protocol("file")), + FileMailRepository.class.getName(), + new HierarchicalConfiguration()); + @Override protected void configure() { bind(JPAMailRepositoryUrlStore.class).in(Scopes.SINGLETON); bind(MailRepositoryUrlStore.class).to(JPAMailRepositoryUrlStore.class); + + bind(MailStoreRepositoryModule.DefaultItemSupplier.class).toInstance(() -> FILE_MAILREPOSITORY_DEFAULT_DECLARATION); } } diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java index d5a2a90..96f89c4 100644 --- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java +++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java @@ -22,6 +22,7 @@ package org.apache.james.modules.data; import java.util.List; import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.james.dlp.api.DLPConfigurationStore; import org.apache.james.dlp.eventsourcing.EventSourcingDLPConfigurationStore; import org.apache.james.domainlist.api.DomainList; @@ -29,7 +30,11 @@ import org.apache.james.domainlist.lib.DomainListConfiguration; import org.apache.james.domainlist.memory.MemoryDomainList; import org.apache.james.lifecycle.api.Startable; import org.apache.james.mailrepository.api.MailRepositoryUrlStore; +import org.apache.james.mailrepository.api.Protocol; +import org.apache.james.mailrepository.file.FileMailRepository; +import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration; import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore; +import org.apache.james.modules.server.MailStoreRepositoryModule; import org.apache.james.rrt.api.RecipientRewriteTable; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.apache.james.server.core.configuration.ConfigurationProvider; @@ -46,6 +51,10 @@ import com.google.inject.Singleton; import com.google.inject.multibindings.Multibinder; public class MemoryDataModule extends AbstractModule { + private static final MailRepositoryStoreConfiguration.Item FILE_MAILREPOSITORY_DEFAULT_DECLARATION = new MailRepositoryStoreConfiguration.Item( + ImmutableList.of(new Protocol("file")), + FileMailRepository.class.getName(), + new HierarchicalConfiguration()); @Override protected void configure() { @@ -70,6 +79,8 @@ public class MemoryDataModule extends AbstractModule { bind(DLPConfigurationStore.class).to(EventSourcingDLPConfigurationStore.class); Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(MemoryDataConfigurationPerformer.class); + + bind(MailStoreRepositoryModule.DefaultItemSupplier.class).toInstance(() -> FILE_MAILREPOSITORY_DEFAULT_DECLARATION); } @Provides --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
