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