This is an automated email from the ASF dual-hosted git repository. rouazana pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 7c41c22f83c68f56b517b3652c06f57f6306d46d Author: Benoit Tellier <[email protected]> AuthorDate: Fri Jul 12 15:27:44 2019 +0200 JAMES-2812 Improve Guice structure for DeletedMessageVault - Do not leak Cassandra dependency everywhere - Rework module split for the vault --- .../james/vault/metadata/MetadataSerializer.java | 4 ++- server/container/guice/cassandra-guice/pom.xml | 4 +++ .../CassandraDeletedMessageVaultModule.java} | 21 +++++++++++++-- .../pom.xml | 4 --- .../vault/BlobStoreDeletedMessageVaultModule.java | 9 +------ .../modules/vault/DeletedMessageVaultModule.java | 16 ++---------- ...ava => DeletedMessageVaultRetentionModule.java} | 30 ++-------------------- .../RabbitMQBlobStoreDeletedMessagesVaultTest.java | 4 +-- 8 files changed, 33 insertions(+), 59 deletions(-) diff --git a/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java b/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java index 7f62f96..89b55c4 100644 --- a/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java +++ b/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java @@ -19,6 +19,8 @@ package org.apache.james.vault.metadata; +import javax.inject.Inject; + import org.apache.james.vault.dto.DeletedMessageWithStorageInformationConverter; import org.apache.james.vault.dto.DeletedMessageWithStorageInformationDTO; import org.slf4j.Logger; @@ -34,10 +36,10 @@ import reactor.core.publisher.Mono; class MetadataSerializer { private static final Logger LOGGER = LoggerFactory.getLogger(MetadataSerializer.class); - private final ObjectMapper objectMapper; private final DeletedMessageWithStorageInformationConverter dtoConverter; + @Inject MetadataSerializer(DeletedMessageWithStorageInformationConverter dtoConverter) { this.dtoConverter = dtoConverter; this.objectMapper = new ObjectMapper() diff --git a/server/container/guice/cassandra-guice/pom.xml b/server/container/guice/cassandra-guice/pom.xml index 206e9bd..f215889 100644 --- a/server/container/guice/cassandra-guice/pom.xml +++ b/server/container/guice/cassandra-guice/pom.xml @@ -63,6 +63,10 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>apache-james-mailbox-deleted-messages-vault-cassandra</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>apache-james-mailbox-elasticsearch</artifactId> </dependency> <dependency> diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/CassandraDeletedMessageMetadataVaultModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraDeletedMessageVaultModule.java similarity index 69% rename from server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/CassandraDeletedMessageMetadataVaultModule.java rename to server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraDeletedMessageVaultModule.java index a8ed165..185b84e 100644 --- a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/CassandraDeletedMessageMetadataVaultModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraDeletedMessageVaultModule.java @@ -17,11 +17,17 @@ * under the License. * ****************************************************************/ -package org.apache.james.modules.vault; +package org.apache.james.modules.mailbox; import org.apache.james.backends.cassandra.components.CassandraModule; +import org.apache.james.modules.vault.BlobStoreDeletedMessageVaultModule; +import org.apache.james.vault.DeletedMessageVault; +import org.apache.james.vault.blob.BlobStoreDeletedMessageVault; +import org.apache.james.vault.blob.BucketNameGenerator; import org.apache.james.vault.dto.DeletedMessageWithStorageInformationConverter; +import org.apache.james.vault.metadata.CassandraDeletedMessageMetadataVault; import org.apache.james.vault.metadata.DeletedMessageMetadataModule; +import org.apache.james.vault.metadata.DeletedMessageMetadataVault; import org.apache.james.vault.metadata.MetadataDAO; import org.apache.james.vault.metadata.StorageInformationDAO; import org.apache.james.vault.metadata.UserPerBucketDAO; @@ -30,10 +36,12 @@ import com.google.inject.AbstractModule; import com.google.inject.Scopes; import com.google.inject.multibindings.Multibinder; -public class CassandraDeletedMessageMetadataVaultModule extends AbstractModule { +public class CassandraDeletedMessageVaultModule extends AbstractModule { @Override protected void configure() { + install(new BlobStoreDeletedMessageVaultModule()); + bind(MetadataDAO.class).in(Scopes.SINGLETON); bind(StorageInformationDAO.class).in(Scopes.SINGLETON); bind(UserPerBucketDAO.class).in(Scopes.SINGLETON); @@ -43,5 +51,14 @@ public class CassandraDeletedMessageMetadataVaultModule extends AbstractModule { cassandraDataDefinitions .addBinding() .toInstance(DeletedMessageMetadataModule.MODULE); + + bind(CassandraDeletedMessageMetadataVault.class).in(Scopes.SINGLETON); + bind(DeletedMessageMetadataVault.class) + .to(CassandraDeletedMessageMetadataVault.class); + + bind(BucketNameGenerator.class).in(Scopes.SINGLETON); + bind(BlobStoreDeletedMessageVault.class).in(Scopes.SINGLETON); + bind(DeletedMessageVault.class) + .to(BlobStoreDeletedMessageVault.class); } } diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/pom.xml b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/pom.xml index ade3db6..31b81a6 100644 --- a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/pom.xml +++ b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/pom.xml @@ -39,10 +39,6 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>apache-james-mailbox-deleted-messages-vault-cassandra</artifactId> - </dependency> - <dependency> - <groupId>${james.groupId}</groupId> <artifactId>james-server-deleted-messages-vault</artifactId> </dependency> <dependency> diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/BlobStoreDeletedMessageVaultModule.java b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/BlobStoreDeletedMessageVaultModule.java index d5cf9bc..89d5ce3 100644 --- a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/BlobStoreDeletedMessageVaultModule.java +++ b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/BlobStoreDeletedMessageVaultModule.java @@ -22,21 +22,14 @@ package org.apache.james.modules.vault; import org.apache.james.vault.DeletedMessageVault; import org.apache.james.vault.blob.BlobStoreDeletedMessageVault; import org.apache.james.vault.blob.BucketNameGenerator; -import org.apache.james.vault.metadata.CassandraDeletedMessageMetadataVault; -import org.apache.james.vault.metadata.DeletedMessageMetadataVault; import com.google.inject.AbstractModule; import com.google.inject.Scopes; public class BlobStoreDeletedMessageVaultModule extends AbstractModule { - @Override protected void configure() { - install(new CassandraDeletedMessageMetadataVaultModule()); - - bind(CassandraDeletedMessageMetadataVault.class).in(Scopes.SINGLETON); - bind(DeletedMessageMetadataVault.class) - .to(CassandraDeletedMessageMetadataVault.class); + install(new DeletedMessageVaultRetentionModule()); bind(BucketNameGenerator.class).in(Scopes.SINGLETON); bind(BlobStoreDeletedMessageVault.class).in(Scopes.SINGLETON); diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java index badd996..8494796 100644 --- a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java +++ b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java @@ -19,8 +19,6 @@ package org.apache.james.modules.vault; -import java.io.FileNotFoundException; - import javax.inject.Singleton; import org.apache.commons.configuration.Configuration; @@ -31,7 +29,6 @@ import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration; import org.apache.james.utils.PropertiesProvider; import org.apache.james.vault.DeletedMessageVault; import org.apache.james.vault.MailRepositoryDeletedMessageVault; -import org.apache.james.vault.RetentionConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,6 +43,8 @@ public class DeletedMessageVaultModule extends AbstractModule { @Override protected void configure() { + install(new DeletedMessageVaultRetentionModule()); + bind(MailRepositoryDeletedMessageVault.class).in(Scopes.SINGLETON); bind(DeletedMessageVault.class) .to(MailRepositoryDeletedMessageVault.class); @@ -67,15 +66,4 @@ public class DeletedMessageVaultModule extends AbstractModule { } } - @Provides - @Singleton - RetentionConfiguration providesRetentionConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException, org.apache.commons.configuration.ConfigurationException { - try { - Configuration configuration = propertiesProvider.getConfiguration("deletedMessageVault"); - return RetentionConfiguration.from(configuration); - } catch (FileNotFoundException e) { - LOGGER.warn("Error encountered while retrieving Deleted message vault configuration. Using default MailRepository RetentionTime (1 year) instead."); - return RetentionConfiguration.DEFAULT; - } - } } diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultRetentionModule.java similarity index 56% copy from server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java copy to server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultRetentionModule.java index badd996..a082690 100644 --- a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java +++ b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultRetentionModule.java @@ -24,13 +24,7 @@ import java.io.FileNotFoundException; import javax.inject.Singleton; import org.apache.commons.configuration.Configuration; -import org.apache.james.mailrepository.api.MailRepositoryPath; -import org.apache.james.mailrepository.api.MailRepositoryUrl; -import org.apache.james.mailrepository.api.Protocol; -import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration; import org.apache.james.utils.PropertiesProvider; -import org.apache.james.vault.DeletedMessageVault; -import org.apache.james.vault.MailRepositoryDeletedMessageVault; import org.apache.james.vault.RetentionConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,33 +32,13 @@ import org.slf4j.LoggerFactory; import com.google.inject.AbstractModule; import com.google.inject.ConfigurationException; import com.google.inject.Provides; -import com.google.inject.Scopes; -public class DeletedMessageVaultModule extends AbstractModule { - private static final Logger LOGGER = LoggerFactory.getLogger(DeletedMessageVaultModule.class); - private static final MailRepositoryPath DEFAULT_PATH = MailRepositoryPath.from("var/deletedMessages/vault"); +public class DeletedMessageVaultRetentionModule extends AbstractModule { + private static final Logger LOGGER = LoggerFactory.getLogger(DeletedMessageVaultRetentionModule.class); @Override protected void configure() { - bind(MailRepositoryDeletedMessageVault.class).in(Scopes.SINGLETON); - bind(DeletedMessageVault.class) - .to(MailRepositoryDeletedMessageVault.class); - } - @Provides - @Singleton - MailRepositoryDeletedMessageVault.Configuration providesConfiguration(PropertiesProvider propertiesProvider, MailRepositoryStoreConfiguration mailRepositoryStoreConfiguration) throws ConfigurationException { - try { - Configuration configuration = propertiesProvider.getConfiguration("deletedMessageVault"); - return MailRepositoryDeletedMessageVault.Configuration.from(configuration); - } catch (Exception e) { - LOGGER.warn("Error encountered while retrieving Deleted message vault configuration. Using default MailRepository URL instead."); - Protocol defaultProtocol = mailRepositoryStoreConfiguration.getDefaultProtocol() - .orElseThrow(() -> new IllegalStateException("No default MailRepository Protocol could be inferred. We can not configure the default deletedMessages vault.")); - - return new MailRepositoryDeletedMessageVault.Configuration( - MailRepositoryUrl.fromPathAndProtocol(defaultProtocol, DEFAULT_PATH)); - } } @Provides diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQBlobStoreDeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQBlobStoreDeletedMessagesVaultTest.java index bf9ca6f..dc4d972 100644 --- a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQBlobStoreDeletedMessagesVaultTest.java +++ b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQBlobStoreDeletedMessagesVaultTest.java @@ -27,7 +27,7 @@ import org.apache.james.DockerCassandraRule; import org.apache.james.GuiceJamesServer; import org.apache.james.filesystem.api.FileSystem; import org.apache.james.jmap.methods.integration.DeletedMessagesVaultTest; -import org.apache.james.modules.vault.BlobStoreDeletedMessageVaultModule; +import org.apache.james.modules.mailbox.CassandraDeletedMessageVaultModule; import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule; import org.apache.james.webadmin.WebAdminConfiguration; import org.junit.Ignore; @@ -44,7 +44,7 @@ public class RabbitMQBlobStoreDeletedMessagesVaultTest extends DeletedMessagesVa @Override protected GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException { return rule.jmapServer(cassandra.getModule(), - new BlobStoreDeletedMessageVaultModule(), + new CassandraDeletedMessageVaultModule(), new TestDeleteMessageVaultPreDeletionHookModule(), binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION), binder -> binder.bind(FileSystem.class).toInstance(fileSystem), --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
