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 ro...@apache.org on 2019/07/18 12:55:40 UTC

[james-project] 07/11: JAMES-2812 Improve Guice structure for DeletedMessageVault

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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org