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 7faac284dfda3775fdbf6774b2eb5f59f596a2d7
Author: Benoit Tellier <[email protected]>
AuthorDate: Sat Aug 10 12:33:09 2019 +0200

    JAMES-2854 ConfigurationPerformer should be bound to a single startable
    
    Loops are supported by injection framework through stubbing. However, this
    does not play well with the "initialization will follow injection path"
    strategy: some modules might try to init against "not yet initialized" 
components
    that were stubbed by the init strategy.
    
    The issue here is that multi-components configuration performers adds 
additional complexity,
    and creates dependencies (init A & B at the same time) that lead to failures
    while modifying some injections.
    
    Saying "1 startable = 1 performer" prevents us from this, and fits our 
usage.
---
 .../modules/data/CassandraDomainListModule.java    |  8 +--
 .../data/CassandraRecipientRewriteTableModule.java |  8 +--
 .../data/CassandraUsersRepositoryModule.java       |  7 +--
 .../mailbox/ElasticSearchMailboxModule.java        |  7 +--
 .../mailbox/ElasticSearchQuotaSearcherModule.java  |  6 +-
 .../modules/metrics/CassandraMetricsModule.java    |  9 +--
 .../CassandraMessageIdManagerInjectionTest.java    |  9 +--
 .../james/data/LdapUsersRepositoryModule.java      |  7 +--
 .../modules/event/RabbitMQEventBusModule.java      |  7 +--
 .../apache/james/utils/ConfigurationPerformer.java | 10 +--
 .../server/ElasticSearchMetricReporterModule.java  |  7 +--
 .../james/modules/server/DNSServiceModule.java     |  7 +--
 .../modules/server/DropWizardMetricsModule.java    | 35 +++--------
 .../modules/server/MailStoreRepositoryModule.java  |  6 +-
 .../james/utils/ConfigurationsPerformer.java       |  2 +-
 .../james/modules/ConfigurationsPerformerTest.java | 72 ++--------------------
 .../james/modules/server/JMXServerModule.java      |  6 +-
 .../james/modules/data/JPADomainListModule.java    |  8 +--
 .../data/JPARecipientRewriteTableModule.java       |  8 +--
 .../modules/data/JPAUsersRepositoryModule.java     |  8 +--
 .../james/modules/mailbox/DefaultEventModule.java  |  7 +--
 .../modules/server/CamelMailetContainerModule.java | 14 ++---
 .../james/modules/data/MemoryDataModule.java       | 44 +++++++++----
 .../org/apache/james/GuiceJamesServerTest.java     |  7 +--
 .../james/modules/protocols/IMAPServerModule.java  |  7 +--
 .../james/modules/protocols/JMAPServerModule.java  |  7 +--
 .../james/modules/protocols/LMTPServerModule.java  |  7 +--
 .../modules/protocols/ManageSieveServerModule.java |  8 +--
 .../james/modules/protocols/POP3ServerModule.java  |  8 +--
 .../james/modules/protocols/SMTPServerModule.java  |  7 +--
 .../james/modules/server/WebAdminServerModule.java |  7 +--
 31 files changed, 107 insertions(+), 253 deletions(-)

diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
index 6361357..6baa548 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.modules.data;
 
-import java.util.List;
-
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.domainlist.api.DomainList;
@@ -29,7 +27,6 @@ import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -59,7 +56,6 @@ public class CassandraDomainListModule extends AbstractModule 
{
     
     @Singleton
     public static class CassandraDomainListConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final DomainListConfiguration configuration;
         private final CassandraDomainList cassandraDomainList;
 
@@ -79,8 +75,8 @@ public class CassandraDomainListModule extends AbstractModule 
{
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(CassandraDomainList.class);
+        public Class<? extends Startable> forClass() {
+            return CassandraDomainList.class;
         }
     }
 }
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
index f3d009e..e6634d8 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.modules.data;
 
-import java.util.List;
-
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.lifecycle.api.Startable;
@@ -31,7 +29,6 @@ import 
org.apache.james.rrt.cassandra.CassandraRecipientRewriteTableDAO;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -53,7 +50,6 @@ public class CassandraRecipientRewriteTableModule extends 
AbstractModule {
 
     @Singleton
     public static class CassandraRecipientRewriteTablePerformer implements 
ConfigurationPerformer {
-
         private final ConfigurationProvider configurationProvider;
         private final CassandraRecipientRewriteTable recipientRewriteTable;
 
@@ -73,8 +69,8 @@ public class CassandraRecipientRewriteTableModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(CassandraRecipientRewriteTable.class);
+        public Class<? extends Startable> forClass() {
+            return CassandraRecipientRewriteTable.class;
         }
     }
 
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
index e6212ab..dd2a488 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.modules.data;
 
-import java.util.List;
-
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.lifecycle.api.Startable;
@@ -28,7 +26,6 @@ import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.cassandra.CassandraUsersRepository;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -68,8 +65,8 @@ public class CassandraUsersRepositoryModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(CassandraUsersRepository.class);
+        public Class<? extends Startable> forClass() {
+            return CassandraUsersRepository.class;
         }
     }
 
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index cfe3392..83358fd 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -23,7 +23,6 @@ import static 
org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearche
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.util.List;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -53,7 +52,6 @@ import org.elasticsearch.client.RestHighLevelClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
@@ -86,7 +84,6 @@ public class ElasticSearchMailboxModule extends 
AbstractModule {
     }
 
     static class ElasticSearchMailboxIndexCreationPerformer implements 
ConfigurationPerformer {
-
         private final MailboxIndexCreator mailboxIndexCreator;
 
         @Inject
@@ -104,8 +101,8 @@ public class ElasticSearchMailboxModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(MailboxIndexCreator.class);
+        public Class<? extends Startable> forClass() {
+            return MailboxIndexCreator.class;
         }
     }
 
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
index 1f6934c..b21e73d 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
@@ -23,7 +23,6 @@ import static 
org.apache.james.modules.mailbox.ElasticSearchMailboxModule.ELASTI
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.util.List;
 
 import javax.inject.Inject;
 
@@ -45,7 +44,6 @@ import org.elasticsearch.client.RestHighLevelClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Singleton;
@@ -95,8 +93,8 @@ public class ElasticSearchQuotaSearcherModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(ElasticSearchQuotaIndexCreator.class);
+        public Class<? extends Startable> forClass() {
+            return ElasticSearchQuotaIndexCreator.class;
         }
     }
 
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
index fccc0b5..8f728e2 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
@@ -19,14 +19,11 @@
 
 package org.apache.james.modules.metrics;
 
-import java.util.List;
-
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.utils.ConfigurationPerformer;
 
 import com.codahale.metrics.MetricRegistry;
 import com.datastax.driver.core.Session;
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -44,7 +41,7 @@ public class CassandraMetricsModule extends AbstractModule {
             .to(CassandraMetricsInjector.class);
     }
 
-    public static class CassandraMetricsInjector implements 
ConfigurationPerformer {
+    public static class CassandraMetricsInjector implements 
ConfigurationPerformer, Startable {
 
         private final MetricRegistry metricRegistry;
         private final Session session;
@@ -64,8 +61,8 @@ public class CassandraMetricsModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of();
+        public Class<? extends Startable> forClass() {
+            return CassandraMetricsInjector.class;
         }
     }
 }
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMessageIdManagerInjectionTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMessageIdManagerInjectionTest.java
index 05f5f27..53701eb 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMessageIdManagerInjectionTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMessageIdManagerInjectionTest.java
@@ -22,8 +22,6 @@ package org.apache.james;
 import static 
org.apache.james.CassandraJamesServerMain.ALL_BUT_JMX_CASSANDRA_MODULE;
 import static org.assertj.core.api.Assertions.assertThatCode;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
 import org.apache.james.lifecycle.api.Startable;
@@ -35,7 +33,6 @@ import org.apache.james.utils.ConfigurationPerformer;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.multibindings.Multibinder;
 
 class CassandraMessageIdManagerInjectionTest {
@@ -60,7 +57,7 @@ class CassandraMessageIdManagerInjectionTest {
         assertThatCode(server::start).doesNotThrowAnyException();
     }
 
-    public static class CallMe implements ConfigurationPerformer {
+    public static class CallMe implements ConfigurationPerformer, Startable {
         @Inject
         public CallMe(MessageIdManager messageIdManager) {
         }
@@ -71,8 +68,8 @@ class CassandraMessageIdManagerInjectionTest {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of();
+        public Class<? extends Startable> forClass() {
+            return CallMe.class;
         }
     }
 }
diff --git 
a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
 
b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
index 6ccb734..6f6a0cd 100644
--- 
a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
+++ 
b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.data;
 
-import java.util.List;
-
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
@@ -28,7 +26,6 @@ import org.apache.james.user.ldap.LdapRepositoryConfiguration;
 import org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -76,8 +73,8 @@ public class LdapUsersRepositoryModule extends AbstractModule 
{
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(ReadOnlyUsersLDAPRepository.class);
+        public Class<? extends Startable> forClass() {
+            return ReadOnlyUsersLDAPRepository.class;
         }
     }
 
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/event/RabbitMQEventBusModule.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/event/RabbitMQEventBusModule.java
index 435ef7c..b064112 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/event/RabbitMQEventBusModule.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/event/RabbitMQEventBusModule.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.modules.event;
 
-import java.util.List;
-
 import org.apache.james.event.json.EventSerializer;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.events.EventBus;
@@ -29,7 +27,6 @@ import org.apache.james.mailbox.events.RabbitMQEventBus;
 import org.apache.james.mailbox.events.RegistrationKey;
 import org.apache.james.mailbox.events.RetryBackoffConfiguration;
 import org.apache.james.utils.ConfigurationPerformer;
-import org.parboiled.common.ImmutableList;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
@@ -68,8 +65,8 @@ public class RabbitMQEventBusModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(RabbitMQEventBus.class);
+        public Class<? extends Startable> forClass() {
+            return RabbitMQEventBus.class;
         }
     }
 }
diff --git 
a/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationPerformer.java
 
b/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationPerformer.java
index 503618c..9ac4cb3 100644
--- 
a/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationPerformer.java
+++ 
b/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationPerformer.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.utils;
 
-import java.util.List;
-
 import org.apache.james.lifecycle.api.Startable;
 
 public interface ConfigurationPerformer {
@@ -30,11 +28,9 @@ public interface ConfigurationPerformer {
     /**
      * In order to initialize components in the right order, every
      * {@link ConfigurationPerformer} is supposed to declare which
-     * classes it will initialize.
+     * class it will initialize.
      *
-     * @return the list of Classes that this object will initialize.
-     *  The list should never be empty.
+     * @return the Class that this object will initialize.
      */
-    List<Class<? extends Startable>> forClasses();
-
+    Class<? extends Startable> forClass();
 }
diff --git 
a/server/container/guice/es-metric-reporter/src/main/java/org/apache/james/modules/server/ElasticSearchMetricReporterModule.java
 
b/server/container/guice/es-metric-reporter/src/main/java/org/apache/james/modules/server/ElasticSearchMetricReporterModule.java
index 7c2aabb..343f839 100644
--- 
a/server/container/guice/es-metric-reporter/src/main/java/org/apache/james/modules/server/ElasticSearchMetricReporterModule.java
+++ 
b/server/container/guice/es-metric-reporter/src/main/java/org/apache/james/modules/server/ElasticSearchMetricReporterModule.java
@@ -20,7 +20,6 @@
 package org.apache.james.modules.server;
 
 import java.io.FileNotFoundException;
-import java.util.List;
 
 import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
@@ -32,7 +31,6 @@ import org.apache.james.utils.PropertiesProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -87,7 +85,6 @@ public class ElasticSearchMetricReporterModule extends 
AbstractModule {
 
     @Singleton
     public static class ESMetricReporterStarter implements 
ConfigurationPerformer {
-
         private final ESMetricReporter esMetricReporter;
 
         @Inject
@@ -101,8 +98,8 @@ public class ElasticSearchMetricReporterModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(ESMetricReporter.class);
+        public Class<? extends Startable> forClass() {
+            return ESMetricReporter.class;
         }
     }
 
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
index 0b5e7d5..7fb7a68 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
@@ -18,15 +18,12 @@
  ****************************************************************/
 package org.apache.james.modules.server;
 
-import java.util.List;
-
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.dnsservice.dnsjava.DNSJavaService;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -66,8 +63,8 @@ public class DNSServiceModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(DNSJavaService.class);
+        public Class<? extends Startable> forClass() {
+            return DNSJavaService.class;
         }
     }
 }
\ No newline at end of file
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java
index 662f9c1..047b783 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.modules.server;
 
-import java.util.List;
-
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.metrics.api.GaugeRegistry;
 import org.apache.james.metrics.api.MetricFactory;
@@ -30,7 +28,6 @@ import 
org.apache.james.metrics.dropwizard.DropWizardMetricFactory;
 import org.apache.james.utils.ConfigurationPerformer;
 
 import com.codahale.metrics.MetricRegistry;
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -53,39 +50,25 @@ public class DropWizardMetricsModule extends AbstractModule 
{
     }
 
     @Singleton
-    public static class DropWizardConfigurationPerformer implements 
ConfigurationPerformer {
-        private final DropWizardInitializer dropWizardInitializer;
-
-        @Inject
-        public DropWizardConfigurationPerformer(DropWizardInitializer 
dropWizardInitializer) {
-            this.dropWizardInitializer = dropWizardInitializer;
-        }
-
-        @Override
-        public void initModule() {
-            dropWizardInitializer.start();
-        }
-
-        @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(DropWizardInitializer.class);
-        }
-    }
-
-    public static class DropWizardInitializer implements Startable {
+    public static class DropWizardConfigurationPerformer implements 
ConfigurationPerformer, Startable {
         private final DropWizardMetricFactory dropWizardMetricFactory;
         private final DropWizardJVMMetrics dropWizardJVMMetrics;
 
         @Inject
-        public DropWizardInitializer(DropWizardMetricFactory 
dropWizardMetricFactory, DropWizardJVMMetrics dropWizardJVMMetrics) {
+        public DropWizardConfigurationPerformer(DropWizardMetricFactory 
dropWizardMetricFactory, DropWizardJVMMetrics dropWizardJVMMetrics) {
             this.dropWizardMetricFactory = dropWizardMetricFactory;
             this.dropWizardJVMMetrics = dropWizardJVMMetrics;
         }
 
-        public void start() {
+        @Override
+        public void initModule() {
             dropWizardMetricFactory.start();
             dropWizardJVMMetrics.start();
         }
-    }
 
+        @Override
+        public Class<? extends Startable> forClass() {
+            return DropWizardConfigurationPerformer.class;
+        }
+    }
 }
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 7f83c44..3172285 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
@@ -19,7 +19,6 @@
 
 package org.apache.james.modules.server;
 
-import java.util.List;
 import java.util.function.Supplier;
 
 import org.apache.commons.configuration2.HierarchicalConfiguration;
@@ -37,7 +36,6 @@ 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;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -93,8 +91,8 @@ public class MailStoreRepositoryModule extends AbstractModule 
{
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(MemoryMailRepositoryStore.class);
+        public Class<? extends Startable> forClass() {
+            return MemoryMailRepositoryStore.class;
         }
     }
 
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/ConfigurationsPerformer.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/ConfigurationsPerformer.java
index 68b9533..166eda7 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/ConfigurationsPerformer.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/ConfigurationsPerformer.java
@@ -55,7 +55,7 @@ public class ConfigurationsPerformer {
 
     private Stream<ConfigurationPerformer> configurationPerformerFor(Class<? 
extends Startable> configurable) {
         return configurationPerformers.stream()
-                .filter(x -> x.forClasses().contains(configurable));
+                .filter(x -> x.forClass().equals(configurable));
     }
 
     private void processOthers(Set<ConfigurationPerformer> processed) {
diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/modules/ConfigurationsPerformerTest.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/modules/ConfigurationsPerformerTest.java
index 062d8d1..1228f51 100644
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/modules/ConfigurationsPerformerTest.java
+++ 
b/server/container/guice/guice-common/src/test/java/org/apache/james/modules/ConfigurationsPerformerTest.java
@@ -21,8 +21,6 @@ package org.apache.james.modules;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
 import org.apache.commons.configuration2.HierarchicalConfiguration;
@@ -33,7 +31,6 @@ import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.ConfigurationsPerformer;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Scopes;
@@ -66,7 +63,6 @@ public class ConfigurationsPerformerTest {
     }
 
     private static class AConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final A a;
 
         @Inject
@@ -84,13 +80,12 @@ public class ConfigurationsPerformerTest {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(A.class);
+        public Class<? extends Startable> forClass() {
+            return A.class;
         }
     }
 
     private static class BConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final B b;
 
         @Inject
@@ -108,13 +103,12 @@ public class ConfigurationsPerformerTest {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(B.class);
+        public Class<? extends Startable> forClass() {
+            return B.class;
         }
     }
 
     private static class A implements Configurable {
-
         @SuppressWarnings("unused")
         private final C c;
         private boolean configured;
@@ -136,7 +130,6 @@ public class ConfigurationsPerformerTest {
     }
 
     private static class B implements Configurable {
-
         private final A a;
         @SuppressWarnings("unused")
         private final C c;
@@ -161,61 +154,4 @@ public class ConfigurationsPerformerTest {
 
     private static class C {
     }
-
-    @Test
-    public void 
initModulesShouldBePerformedOneTimeWhenConfigurableModuleContainsMultipleDependencies()
 throws Exception {
-        Injector injector = Guice.createInjector(new StartablesModule(),
-                new DualResponsibilityConfigurationPerformerModule());
-
-        injector.getInstance(ConfigurationsPerformer.class).initModules();
-
-        assertThat(injector.getInstance(A.class).isConfigured()).isTrue();
-        assertThat(injector.getInstance(B.class).isConfigured()).isTrue();
-    }
-
-    private static class DualResponsibilityConfigurationPerformer implements 
ConfigurationPerformer {
-
-        private final A a;
-        private final B b;
-        private boolean configured;
-
-        @Inject
-        private DualResponsibilityConfigurationPerformer(A a, B b) {
-            this.a = a;
-            this.b = b;
-            this.configured = false;
-        }
-
-        @Override
-        public void initModule() {
-            if (configured) {
-                throw new RuntimeException("Already configured");
-            }
-
-            try {
-                a.configure(null);
-                b.configure(null);
-                configured = true;
-            } catch (ConfigurationException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(A.class, B.class);
-        }
-    }
-
-    private static class DualResponsibilityConfigurationPerformerModule 
extends StartablesModule {
-
-        @Override
-        protected void configure() {
-            bind(B.class).in(Scopes.SINGLETON);
-            bind(A.class).in(Scopes.SINGLETON);
-            bind(C.class).in(Scopes.SINGLETON);
-    
-            Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(DualResponsibilityConfigurationPerformer.class);
-        }
-    }
 }
diff --git 
a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServerModule.java
 
b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServerModule.java
index a7adfe6..ea1f9a5 100644
--- 
a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServerModule.java
+++ 
b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServerModule.java
@@ -20,7 +20,6 @@
 package org.apache.james.modules.server;
 
 import java.io.FileNotFoundException;
-import java.util.List;
 
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.adapter.mailbox.MailboxCopierManagement;
@@ -53,7 +52,6 @@ import org.apache.mailbox.tools.indexer.ReIndexerImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -165,8 +163,8 @@ public class JMXServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(JMXServer.class);
+        public Class<? extends Startable> forClass() {
+            return JMXServer.class;
         }
     }
 
diff --git 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
index 2fa244d..85a2adc 100644
--- 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
+++ 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.modules.data;
 
-import java.util.List;
-
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.jpa.JPADomainList;
@@ -28,7 +26,6 @@ import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -57,7 +54,6 @@ public class JPADomainListModule extends AbstractModule {
     
     @Singleton
     public static class JPADomainListConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final DomainListConfiguration configuration;
         private final JPADomainList jpaDomainList;
 
@@ -77,8 +73,8 @@ public class JPADomainListModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(JPADomainList.class);
+        public Class<? extends Startable> forClass() {
+            return JPADomainList.class;
         }
     }
 }
diff --git 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
index f6126d5..b9702e2 100644
--- 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
+++ 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.modules.data;
 
-import java.util.List;
-
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.rrt.api.RecipientRewriteTable;
@@ -27,7 +25,6 @@ import org.apache.james.rrt.jpa.JPARecipientRewriteTable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -45,7 +42,6 @@ public class JPARecipientRewriteTableModule extends 
AbstractModule {
 
     @Singleton
     public static class JPARecipientRewriteTablePerformer implements 
ConfigurationPerformer {
-
         private final ConfigurationProvider configurationProvider;
         private final JPARecipientRewriteTable recipientRewriteTable;
 
@@ -65,8 +61,8 @@ public class JPARecipientRewriteTableModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(JPARecipientRewriteTable.class);
+        public Class<? extends Startable> forClass() {
+            return JPARecipientRewriteTable.class;
         }
     }
 
diff --git 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
index 7aedad5..69a0675 100644
--- 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
+++ 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.modules.data;
 
-import java.util.List;
-
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
@@ -27,7 +25,6 @@ import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.jpa.JPAUsersRepository;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -45,7 +42,6 @@ public class JPAUsersRepositoryModule extends AbstractModule {
 
     @Singleton
     public static class JPAUsersRepositoryConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final ConfigurationProvider configurationProvider;
         private final JPAUsersRepository usersRepository;
 
@@ -65,8 +61,8 @@ public class JPAUsersRepositoryModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(JPAUsersRepository.class);
+        public Class<? extends Startable> forClass() {
+            return JPAUsersRepository.class;
         }
     }
 
diff --git 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
index 1fb2c6d..3d32d08 100644
--- 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
+++ 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.modules.mailbox;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
 import org.apache.commons.configuration2.ex.ConfigurationException;
@@ -36,7 +34,6 @@ import 
org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
@@ -87,8 +84,8 @@ public class DefaultEventModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(MailboxListenersLoaderImpl.class);
+        public Class<? extends Startable> forClass() {
+            return MailboxListenersLoaderImpl.class;
         }
     }
 }
diff --git 
a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
 
b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
index e04d95b..748cc22 100644
--- 
a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
+++ 
b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
@@ -55,7 +55,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -138,8 +137,8 @@ public class CamelMailetContainerModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(JamesMailSpooler.class);
+        public Class<? extends Startable> forClass() {
+            return JamesMailSpooler.class;
         }
     }
 
@@ -174,14 +173,13 @@ public class CamelMailetContainerModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(JamesMailetContext.class);
+        public Class<? extends Startable> forClass() {
+            return JamesMailetContext.class;
         }
     }
 
     @Singleton
     public static class MailetModuleConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final ConfigurationProvider configurationProvider;
         private final CamelCompositeProcessor camelCompositeProcessor;
         private final DefaultProcessorsConfigurationSupplier 
defaultProcessorsConfigurationSupplier;
@@ -240,8 +238,8 @@ public class CamelMailetContainerModule extends 
AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(CamelCompositeProcessor.class);
+        public Class<? extends Startable> forClass() {
+            return CamelCompositeProcessor.class;
         }
     }
 
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 d24b762..f4c7666 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
@@ -19,8 +19,6 @@
 
 package org.apache.james.modules.data;
 
-import java.util.List;
-
 import org.apache.commons.configuration2.BaseHierarchicalConfiguration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.dlp.api.DLPConfigurationStore;
@@ -80,7 +78,9 @@ public class MemoryDataModule extends AbstractModule {
         bind(EventSourcingDLPConfigurationStore.class).in(Scopes.SINGLETON);
         
bind(DLPConfigurationStore.class).to(EventSourcingDLPConfigurationStore.class);
 
-        Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(MemoryDataConfigurationPerformer.class);
+        Multibinder<ConfigurationPerformer> configurationPerformers = 
Multibinder.newSetBinder(binder(), ConfigurationPerformer.class);
+        
configurationPerformers.addBinding().to(MemoryRRTConfigurationPerformer.class);
+        
configurationPerformers.addBinding().to(MemoryDomainListConfigurationPerformer.class);
 
         
bind(MailStoreRepositoryModule.DefaultItemSupplier.class).toInstance(() -> 
MEMORY_MAILREPOSITORY_DEFAULT_DECLARATION);
 
@@ -99,25 +99,45 @@ public class MemoryDataModule extends AbstractModule {
     }
 
     @Singleton
-    public static class MemoryDataConfigurationPerformer implements 
ConfigurationPerformer {
-
-        private final ConfigurationProvider configurationProvider;
+    public static class MemoryDomainListConfigurationPerformer implements 
ConfigurationPerformer {
         private final DomainListConfiguration domainListConfiguration;
         private final MemoryDomainList memoryDomainList;
-        private final MemoryRecipientRewriteTable memoryRecipientRewriteTable;
 
         @Inject
-        public MemoryDataConfigurationPerformer(ConfigurationProvider 
configurationProvider, DomainListConfiguration domainListConfiguration, 
MemoryDomainList memoryDomainList, MemoryRecipientRewriteTable 
memoryRecipientRewriteTable) {
-            this.configurationProvider = configurationProvider;
+        public MemoryDomainListConfigurationPerformer(DomainListConfiguration 
domainListConfiguration, MemoryDomainList memoryDomainList) {
             this.domainListConfiguration = domainListConfiguration;
             this.memoryDomainList = memoryDomainList;
-            this.memoryRecipientRewriteTable = memoryRecipientRewriteTable;
         }
 
         @Override
         public void initModule() {
             try {
                 memoryDomainList.configure(domainListConfiguration);
+            } catch (ConfigurationException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public Class<? extends Startable> forClass() {
+            return MemoryDomainList.class;
+        }
+    }
+
+    @Singleton
+    public static class MemoryRRTConfigurationPerformer implements 
ConfigurationPerformer {
+        private final ConfigurationProvider configurationProvider;
+        private final MemoryRecipientRewriteTable memoryRecipientRewriteTable;
+
+        @Inject
+        public MemoryRRTConfigurationPerformer(ConfigurationProvider 
configurationProvider, MemoryRecipientRewriteTable memoryRecipientRewriteTable) 
{
+            this.configurationProvider = configurationProvider;
+            this.memoryRecipientRewriteTable = memoryRecipientRewriteTable;
+        }
+
+        @Override
+        public void initModule() {
+            try {
                 
memoryRecipientRewriteTable.configure(configurationProvider.getConfiguration("recipientrewritetable"));
             } catch (ConfigurationException e) {
                 throw new RuntimeException(e);
@@ -125,8 +145,8 @@ public class MemoryDataModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(MemoryDomainList.class, 
MemoryRecipientRewriteTable.class);
+        public Class<? extends Startable> forClass() {
+            return MemoryRecipientRewriteTable.class;
         }
     }
 }
diff --git 
a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
 
b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
index 4ad7122..51201ce 100644
--- 
a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
+++ 
b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
@@ -3,8 +3,6 @@ package org.apache.james;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import java.util.List;
-
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.utils.ConfigurationPerformer;
@@ -14,7 +12,6 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.multibindings.Multibinder;
 
 class GuiceJamesServerTest {
@@ -66,8 +63,8 @@ class GuiceJamesServerTest {
             }
 
             @Override
-            public List<Class<? extends Startable>> forClasses() {
-                return ImmutableList.of();
+            public Class<? extends Startable> forClass() {
+                return Startable.class;
             }
         };
 
diff --git 
a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
 
b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
index 0430540..8af4fba 100644
--- 
a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
+++ 
b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.modules.protocols;
 
-import java.util.List;
-
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.decode.ImapDecoder;
 import org.apache.james.imap.encode.ImapEncoder;
@@ -39,7 +37,6 @@ import 
org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -111,8 +108,8 @@ public class IMAPServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(IMAPServerFactory.class);
+        public Class<? extends Startable> forClass() {
+            return IMAPServerFactory.class;
         }
     }
 }
\ No newline at end of file
diff --git 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
index f51549c..c57c87b 100644
--- 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
+++ 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
@@ -20,7 +20,6 @@
 package org.apache.james.modules.protocols;
 
 import java.security.Security;
-import java.util.List;
 
 import org.apache.james.jmap.JMAPConfiguration;
 import org.apache.james.jmap.JMAPModule;
@@ -33,7 +32,6 @@ import org.apache.james.utils.JmapGuiceProbe;
 import org.apache.james.utils.MessageIdProbe;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -51,7 +49,6 @@ public class JMAPServerModule extends AbstractModule {
 
     @Singleton
     public static class JMAPModuleConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final JMAPServer server;
         private final JamesSignatureHandler signatureHandler;
         private final JMAPConfiguration jmapConfiguration;
@@ -81,8 +78,8 @@ public class JMAPServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(JMAPServer.class);
+        public Class<? extends Startable> forClass() {
+            return JMAPServer.class;
         }
     }
 
diff --git 
a/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
 
b/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
index 9549143..8fb9624 100644
--- 
a/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
+++ 
b/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.modules.protocols;
 
-import java.util.List;
-
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.lmtpserver.netty.LMTPServerFactory;
 import org.apache.james.lmtpserver.netty.OioLMTPServerFactory;
@@ -29,7 +27,6 @@ import org.apache.james.util.LoggingLevel;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -70,8 +67,8 @@ public class LMTPServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(LMTPServerFactory.class);
+        public Class<? extends Startable> forClass() {
+            return LMTPServerFactory.class;
         }
     }
 
diff --git 
a/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
 
b/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
index 86553e2..2c89f94 100644
--- 
a/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
+++ 
b/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.modules.protocols;
 
-import java.util.List;
-
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.managesieve.api.commands.CoreCommands;
 import org.apache.james.managesieve.core.CoreProcessor;
@@ -29,7 +27,6 @@ import org.apache.james.util.LoggingLevel;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -46,7 +43,6 @@ public class ManageSieveServerModule extends AbstractModule {
 
     @Singleton
     public static class ManageSieveModuleConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final ConfigurationProvider configurationProvider;
         private final ManageSieveServerFactory manageSieveServerFactory;
 
@@ -67,8 +63,8 @@ public class ManageSieveServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(ManageSieveServerFactory.class);
+        public Class<? extends Startable> forClass() {
+            return ManageSieveServerFactory.class;
         }
     }
 }
\ No newline at end of file
diff --git 
a/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
 
b/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
index beabcef..592e740 100644
--- 
a/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
+++ 
b/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.modules.protocols;
 
-import java.util.List;
-
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.pop3server.netty.OioPOP3ServerFactory;
 import org.apache.james.pop3server.netty.POP3ServerFactory;
@@ -28,7 +26,6 @@ import 
org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -48,7 +45,6 @@ public class POP3ServerModule extends AbstractModule {
 
     @Singleton
     public static class POP3ModuleConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final ConfigurationProvider configurationProvider;
         private final POP3ServerFactory pop3ServerFactory;
 
@@ -69,8 +65,8 @@ public class POP3ServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(POP3ServerFactory.class);
+        public Class<? extends Startable> forClass() {
+            return POP3ServerFactory.class;
         }
     }
 
diff --git 
a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
 
b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
index 8318727..0cc441f 100644
--- 
a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
+++ 
b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.modules.protocols;
 
-import java.util.List;
-
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.smtpserver.SendMailHandler;
@@ -29,7 +27,6 @@ import org.apache.james.smtpserver.netty.SMTPServerFactory;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Scopes;
@@ -76,8 +73,8 @@ public class SMTPServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(SMTPServerFactory.class);
+        public Class<? extends Startable> forClass() {
+            return SMTPServerFactory.class;
         }
     }
 
diff --git 
a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
 
b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
index 07165399..b333cec 100644
--- 
a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
+++ 
b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
@@ -22,7 +22,6 @@ package org.apache.james.modules.server;
 import static 
org.apache.james.webadmin.WebAdminConfiguration.DISABLED_CONFIGURATION;
 
 import java.io.FileNotFoundException;
-import java.util.List;
 import java.util.Optional;
 
 import org.apache.commons.configuration2.Configuration;
@@ -44,7 +43,6 @@ import org.apache.james.webadmin.utils.JsonTransformerModule;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -127,7 +125,6 @@ public class WebAdminServerModule extends AbstractModule {
 
     @Singleton
     public static class WebAdminServerModuleConfigurationPerformer implements 
ConfigurationPerformer {
-
         private final WebAdminServer webAdminServer;
 
         @Inject
@@ -141,8 +138,8 @@ public class WebAdminServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Startable>> forClasses() {
-            return ImmutableList.of(WebAdminServer.class);
+        public Class<? extends Startable> forClass() {
+            return WebAdminServer.class;
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to