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/03/01 09:13:39 UTC

[james-project] branch master updated: MAILBOX-383 Manage dependencies between all startable components

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


The following commit(s) were added to refs/heads/master by this push:
     new 20ca7e1  MAILBOX-383 Manage dependencies between all startable components
20ca7e1 is described below

commit 20ca7e1e5e25510dba790ae8d1be887fb4afc5c3
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Thu Feb 28 15:50:52 2019 +0100

    MAILBOX-383 Manage dependencies between all startable components
    
    	Make it clear that all startable resources should be handled by ConfigurationsPerformer.
    	Also, checked all previous Configurable to return the right types so that
    	dependency-aware injection does work.
---
 mailbox/event/event-rabbitmq/pom.xml               |  4 +++
 .../james/mailbox/events/RabbitMQEventBus.java     |  4 +--
 .../modules/data/CassandraDomainListModule.java    |  4 +--
 .../data/CassandraRecipientRewriteTableModule.java |  4 +--
 .../data/CassandraUsersRepositoryModule.java       |  4 +--
 .../modules/mailbox/CassandraSessionModule.java    |  4 +--
 .../modules/metrics/CassandraMetricsModule.java    |  4 +--
 .../CassandraMessageIdManagerInjectionTest.java    |  4 +--
 .../james/data/LdapUsersRepositoryModule.java      |  4 +--
 .../modules/event/RabbitMQEventBusModule.java      |  6 ++--
 .../apache/james/utils/ConfigurationPerformer.java | 12 +++++--
 .../server/ElasticSearchMetricReporterModule.java  | 15 +++-----
 .../apache/james/modules/CommonServicesModule.java |  2 +-
 ...figurablesModule.java => StartablesModule.java} | 41 +++++++++-------------
 .../james/modules/server/DNSServiceModule.java     |  4 +--
 .../modules/server/DropWizardMetricsModule.java    |  3 +-
 .../modules/server/MailStoreRepositoryModule.java  |  4 +--
 .../james/utils/ConfigurationsPerformer.java       |  8 ++---
 .../utils/{Configurables.java => Startables.java}  | 18 +++++-----
 .../james/modules/ConfigurationsPerformerTest.java | 15 ++++----
 .../org/apache/james/utils/ConfigurablesTest.java  |  4 +--
 .../org/apache/james/modules/server/JMXServer.java |  3 +-
 .../james/modules/server/JMXServerModule.java      |  6 ++--
 .../james/modules/data/JPADomainListModule.java    |  4 +--
 .../data/JPARecipientRewriteTableModule.java       |  4 +--
 .../modules/data/JPAUsersRepositoryModule.java     |  4 +--
 .../james/modules/mailbox/DefaultEventModule.java  |  6 ++--
 .../modules/server/CamelMailetContainerModule.java |  4 +--
 .../james/modules/data/MemoryDataModule.java       |  4 +--
 .../org/apache/james/GuiceJamesServerTest.java     |  4 +--
 .../james/modules/protocols/IMAPServerModule.java  |  4 +--
 .../java/org/apache/james/jmap/JMAPModule.java     |  4 +--
 .../james/modules/protocols/JMAPServerModule.java  |  4 +--
 .../james/modules/protocols/LMTPServerModule.java  |  4 +--
 .../modules/protocols/ManageSieveServerModule.java |  4 +--
 .../james/modules/protocols/POP3ServerModule.java  |  4 +--
 .../james/modules/protocols/SMTPServerModule.java  |  4 +--
 .../james/modules/server/WebAdminServerModule.java |  4 +--
 .../apache/james/lifecycle/api/Configurable.java   |  2 +-
 .../org/apache/james/lifecycle/api/Startable.java} | 14 ++------
 .../container/metrics/metrics-es-reporter/pom.xml  |  4 +++
 .../apache/james/metrics/es/ESMetricReporter.java  |  4 ++-
 42 files changed, 129 insertions(+), 134 deletions(-)

diff --git a/mailbox/event/event-rabbitmq/pom.xml b/mailbox/event/event-rabbitmq/pom.xml
index c87e0f6..9e193db 100644
--- a/mailbox/event/event-rabbitmq/pom.xml
+++ b/mailbox/event/event-rabbitmq/pom.xml
@@ -63,6 +63,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-lifecycle-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-testing</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java
index e5636ea..0a9fd41 100644
--- a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java
+++ b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/RabbitMQEventBus.java
@@ -26,18 +26,18 @@ import javax.inject.Inject;
 
 import org.apache.james.backend.rabbitmq.RabbitMQConnectionFactory;
 import org.apache.james.event.json.EventSerializer;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.metrics.api.MetricFactory;
 
 import com.github.fge.lambdas.Throwing;
 import com.google.common.base.Preconditions;
 import com.rabbitmq.client.Connection;
-
 import reactor.core.publisher.Mono;
 import reactor.rabbitmq.RabbitFlux;
 import reactor.rabbitmq.Sender;
 import reactor.rabbitmq.SenderOptions;
 
-public class RabbitMQEventBus implements EventBus {
+public class RabbitMQEventBus implements EventBus, Startable {
     private static final String NOT_RUNNING_ERROR_MESSAGE = "Event Bus is not running";
     static final String MAILBOX_EVENT = "mailboxEvent";
     static final String MAILBOX_EVENT_EXCHANGE_NAME = MAILBOX_EVENT + "-exchange";
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 482a65c..bc4924b 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
@@ -25,7 +25,7 @@ import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.cassandra.CassandraDomainList;
 import org.apache.james.domainlist.lib.DomainListConfiguration;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
@@ -79,7 +79,7 @@ public class CassandraDomainListModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 f7d61f6..6d51367 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
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.cassandra.CassandraMappingsSourcesDAO;
 import org.apache.james.rrt.cassandra.CassandraRRTModule;
@@ -73,7 +73,7 @@ public class CassandraRecipientRewriteTableModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 9b465d0..391d8cc 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
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.cassandra.CassandraUsersRepository;
@@ -68,7 +68,7 @@ public class CassandraUsersRepositoryModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(CassandraUsersRepository.class);
         }
     }
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index ad9ab2a..1613dfe 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -36,7 +36,7 @@ import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManage
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager.SchemaState;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
 import org.apache.james.core.healthcheck.HealthCheck;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.store.BatchSizes;
 import org.apache.james.server.CassandraProbe;
 import org.apache.james.util.Host;
@@ -176,7 +176,7 @@ public class CassandraSessionModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of();
         }
     }
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 08074fe..fccc0b5 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
@@ -21,7 +21,7 @@ package org.apache.james.modules.metrics;
 
 import java.util.List;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.utils.ConfigurationPerformer;
 
 import com.codahale.metrics.MetricRegistry;
@@ -64,7 +64,7 @@ public class CassandraMetricsModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of();
         }
     }
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 da58fad..849d634 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
@@ -26,7 +26,7 @@ import java.util.List;
 
 import javax.inject.Inject;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.PDFTextExtractor;
@@ -71,7 +71,7 @@ class CassandraMessageIdManagerInjectionTest {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of();
         }
     }
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 cab8827..18ff239 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
@@ -21,7 +21,7 @@ package org.apache.james.data;
 import java.util.List;
 
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.ldap.LdapRepositoryConfiguration;
@@ -76,7 +76,7 @@ public class LdapUsersRepositoryModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 df4927e..435ef7c 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
@@ -22,7 +22,7 @@ package org.apache.james.modules.event;
 import java.util.List;
 
 import org.apache.james.event.json.EventSerializer;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.events.RabbitMQEventBus;
@@ -68,8 +68,8 @@ public class RabbitMQEventBusModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
-            return ImmutableList.of();
+        public List<Class<? extends Startable>> forClasses() {
+            return ImmutableList.of(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 449ec3c..503618c 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
@@ -21,12 +21,20 @@ package org.apache.james.utils;
 
 import java.util.List;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 
 public interface ConfigurationPerformer {
 
     void initModule();
 
-    List<Class<? extends Configurable>> forClasses();
+    /**
+     * In order to initialize components in the right order, every
+     * {@link ConfigurationPerformer} is supposed to declare which
+     * classes it will initialize.
+     *
+     * @return the list of Classes that this object will initialize.
+     *  The list should never be empty.
+     */
+    List<Class<? extends Startable>> forClasses();
 
 }
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 9e3ec66..a1cff9e 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
@@ -24,9 +24,7 @@ import java.util.List;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.metrics.es.ESMetricReporter;
 import org.apache.james.metrics.es.ESReporterConfiguration;
 import org.apache.james.utils.ConfigurationPerformer;
@@ -87,7 +85,7 @@ public class ElasticSearchMetricReporterModule extends AbstractModule {
     }
 
     @Singleton
-    public static class ESMetricReporterStarter implements ConfigurationPerformer, Configurable {
+    public static class ESMetricReporterStarter implements ConfigurationPerformer {
 
         private final ESMetricReporter esMetricReporter;
 
@@ -102,13 +100,8 @@ public class ElasticSearchMetricReporterModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
-            return ImmutableList.of(ESMetricReporterStarter.class);
-        }
-
-        @Override
-        public void configure(HierarchicalConfiguration config) throws ConfigurationException {
-            throw new NotImplementedException();
+        public List<Class<? extends Startable>> forClasses() {
+            return ImmutableList.of(ESMetricReporter.class);
         }
     }
 
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
index 3b5739b..2a43447 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
@@ -54,7 +54,7 @@ public class CommonServicesModule extends AbstractModule {
     
     @Override
     protected void configure() {
-        install(new ConfigurablesModule());
+        install(new StartablesModule());
         install(new PreDestroyModule());
         install(new DNSServiceModule());
         install(new AsyncTasksExecutorModule());
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/ConfigurablesModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/StartablesModule.java
similarity index 62%
rename from server/container/guice/guice-common/src/main/java/org/apache/james/modules/ConfigurablesModule.java
rename to server/container/guice/guice-common/src/main/java/org/apache/james/modules/StartablesModule.java
index a90547d..146cac7 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/ConfigurablesModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/StartablesModule.java
@@ -23,49 +23,40 @@ import static com.google.common.base.Preconditions.checkNotNull;
 
 import java.io.Serializable;
 
-import org.apache.james.lifecycle.api.Configurable;
-import org.apache.james.utils.Configurables;
+import org.apache.james.lifecycle.api.Startable;
+import org.apache.james.utils.Startables;
 
 import com.google.inject.AbstractModule;
-import com.google.inject.MembersInjector;
 import com.google.inject.TypeLiteral;
 import com.google.inject.matcher.AbstractMatcher;
+import com.google.inject.spi.InjectionListener;
 import com.google.inject.spi.TypeEncounter;
-import com.google.inject.spi.TypeListener;
 
-public class ConfigurablesModule extends AbstractModule {
+public class StartablesModule extends AbstractModule {
 
-    @Override
-    protected void configure() {
-        Configurables configurables = new Configurables();
-        bind(Configurables.class).toInstance(configurables);
+    private final Startables startables;
 
-        bindListener(new SubclassesOf(Configurable.class), new ConfigurableTypeListener(configurables));
+    public StartablesModule() {
+        startables = new Startables();
     }
 
-    private static class ConfigurableTypeListener implements TypeListener {
-
-        private final Configurables configurables;
+    @Override
+    protected void configure() {
+        bind(Startables.class).toInstance(startables);
 
-        public ConfigurableTypeListener(Configurables configurables) {
-            this.configurables = configurables;
-        }
+        bindListener(new SubclassesOf(Startable.class), this::hear);
+    }
 
-        @Override
-        public <I> void hear(TypeLiteral<I> type, TypeEncounter<I> encounter) {
-            MembersInjector<? super I> membersInjector = x -> {
-                Class<? super I> rawType = type.getRawType();
-                configurables.add(rawType.asSubclass(Configurable.class));
-            };
-            encounter.register(membersInjector);
-        }
+    private <I> void hear(TypeLiteral<I> type, TypeEncounter<I> encounter) {
+        InjectionListener<? super I> injectionListener = ignored -> startables.add(type.getRawType().asSubclass(Startable.class));
+        encounter.register(injectionListener);
     }
 
     private static class SubclassesOf extends AbstractMatcher<TypeLiteral<?>> implements Serializable {
 
         private final Class<?> superclass;
 
-        public SubclassesOf(Class<?> superclass) {
+        private SubclassesOf(Class<?> superclass) {
             this.superclass = checkNotNull(superclass, "superclass");
         }
 
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 ae746ba..0b5e7d5 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
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.dnsservice.dnsjava.DNSJavaService;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
@@ -66,7 +66,7 @@ public class DNSServiceModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(DNSJavaService.class);
         }
     }
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 4bd9054..473f400 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
@@ -24,6 +24,7 @@ import java.util.List;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.metrics.api.GaugeRegistry;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.metrics.dropwizard.DropWizardGaugeRegistry;
@@ -75,7 +76,7 @@ public class DropWizardMetricsModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(DropWizardInitializer.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 cc973a5..d48c619 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
@@ -21,7 +21,7 @@ package org.apache.james.modules.server;
 
 import java.util.List;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailrepository.api.MailRepositoryProvider;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.file.FileMailRepositoryProvider;
@@ -75,7 +75,7 @@ public class MailStoreRepositoryModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 755b65e..68b9533 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
@@ -23,17 +23,17 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 
 import com.google.inject.Inject;
 
 public class ConfigurationsPerformer {
 
     private final Set<ConfigurationPerformer> configurationPerformers;
-    private final Configurables configurables;
+    private final Startables configurables;
 
     @Inject
-    public ConfigurationsPerformer(Set<ConfigurationPerformer> configurationPerformers, Configurables configurables) {
+    public ConfigurationsPerformer(Set<ConfigurationPerformer> configurationPerformers, Startables configurables) {
         this.configurationPerformers = configurationPerformers;
         this.configurables = configurables;
     }
@@ -53,7 +53,7 @@ public class ConfigurationsPerformer {
             .collect(Collectors.toSet());
     }
 
-    private Stream<ConfigurationPerformer> configurationPerformerFor(Class<? extends Configurable> configurable) {
+    private Stream<ConfigurationPerformer> configurationPerformerFor(Class<? extends Startable> configurable) {
         return configurationPerformers.stream()
                 .filter(x -> x.forClasses().contains(configurable));
     }
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/Configurables.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/Startables.java
similarity index 75%
rename from server/container/guice/guice-common/src/main/java/org/apache/james/utils/Configurables.java
rename to server/container/guice/guice-common/src/main/java/org/apache/james/utils/Startables.java
index 7566a9e..b2a16d5 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/Configurables.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/Startables.java
@@ -21,24 +21,24 @@ package org.apache.james.utils;
 
 import java.util.Set;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 
-public class Configurables {
+public class Startables {
 
-    private final Set<Class<? extends Configurable>> configurables;
+    private final Set<Class<? extends Startable>> startables;
 
-    public Configurables() {
-        this.configurables = Sets.newLinkedHashSet();
+    public Startables() {
+        this.startables = Sets.newLinkedHashSet();
     }
 
-    public void add(Class<? extends Configurable> configurable) {
-        configurables.add(configurable);
+    public void add(Class<? extends Startable> configurable) {
+        startables.add(configurable);
     }
 
-    public Set<Class<? extends Configurable>> get() {
-        return ImmutableSet.copyOf(configurables);
+    public Set<Class<? extends Startable>> get() {
+        return ImmutableSet.copyOf(startables);
     }
 }
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 64a2d2f..d44ecbd 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
@@ -28,6 +28,7 @@ import javax.inject.Inject;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.ConfigurationsPerformer;
 import org.junit.Test;
@@ -42,7 +43,7 @@ public class ConfigurationsPerformerTest {
 
     @Test
     public void initModulesShouldNotFailWhenBindingsInWrongOrder() throws Exception {
-        Injector injector = Guice.createInjector(new ConfigurablesModule(),
+        Injector injector = Guice.createInjector(new StartablesModule(),
                 new UnorderedBindingsModule());
 
         injector.getInstance(ConfigurationsPerformer.class).initModules();
@@ -51,7 +52,7 @@ public class ConfigurationsPerformerTest {
         assertThat(injector.getInstance(B.class).isConfigured()).isTrue();
     }
 
-    private static class UnorderedBindingsModule extends ConfigurablesModule {
+    private static class UnorderedBindingsModule extends StartablesModule {
 
         @Override
         protected void configure() {
@@ -83,7 +84,7 @@ public class ConfigurationsPerformerTest {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(A.class);
         }
     }
@@ -107,7 +108,7 @@ public class ConfigurationsPerformerTest {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(B.class);
         }
     }
@@ -163,7 +164,7 @@ public class ConfigurationsPerformerTest {
 
     @Test
     public void initModulesShouldBePerformedOneTimeWhenConfigurableModuleContainsMultipleDependencies() throws Exception {
-        Injector injector = Guice.createInjector(new ConfigurablesModule(),
+        Injector injector = Guice.createInjector(new StartablesModule(),
                 new DualResponsibilityConfigurationPerformerModule());
 
         injector.getInstance(ConfigurationsPerformer.class).initModules();
@@ -201,12 +202,12 @@ public class ConfigurationsPerformerTest {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(A.class, B.class);
         }
     }
 
-    private static class DualResponsibilityConfigurationPerformerModule extends ConfigurablesModule {
+    private static class DualResponsibilityConfigurationPerformerModule extends StartablesModule {
 
         @Override
         protected void configure() {
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/ConfigurablesTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/ConfigurablesTest.java
index d1c9bce..378bf63 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/ConfigurablesTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/ConfigurablesTest.java
@@ -29,11 +29,11 @@ import org.junit.Test;
 
 public class ConfigurablesTest {
 
-    private Configurables sut;
+    private Startables sut;
 
     @Before
     public void setup() {
-        sut = new Configurables();
+        sut = new Startables();
     }
 
     @Test
diff --git a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
index 7d37c14..aa51ec2 100644
--- a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
+++ b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
@@ -34,12 +34,13 @@ import javax.management.remote.JMXConnectorServer;
 import javax.management.remote.JMXConnectorServerFactory;
 import javax.management.remote.JMXServiceURL;
 
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.util.RestrictingRMISocketFactory;
 
 import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableMap;
 
-public class JMXServer {
+public class JMXServer implements Startable {
     private final JmxConfiguration jmxConfiguration;
     private final Set<String> registeredKeys;
     private final Object lock;
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 1910697..8ee57a7 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
@@ -34,7 +34,7 @@ import org.apache.james.adapter.mailbox.ReIndexerManagement;
 import org.apache.james.adapter.mailbox.ReIndexerManagementMBean;
 import org.apache.james.domainlist.api.DomainListManagementMBean;
 import org.apache.james.domainlist.lib.DomainListManagement;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.copier.MailboxCopier;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.tools.copier.MailboxCopierImpl;
@@ -165,8 +165,8 @@ public class JMXServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
-            return ImmutableList.of();
+        public List<Class<? extends Startable>> forClasses() {
+            return ImmutableList.of(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 01ff8e0..aa49b93 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
@@ -24,7 +24,7 @@ import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.jpa.JPADomainList;
 import org.apache.james.domainlist.lib.DomainListConfiguration;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 
@@ -77,7 +77,7 @@ public class JPADomainListModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 821d69a..30ce944 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
@@ -21,7 +21,7 @@ package org.apache.james.modules.data;
 import java.util.List;
 
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.jpa.JPARecipientRewriteTable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
@@ -65,7 +65,7 @@ public class JPARecipientRewriteTableModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 aa8529d..c4d1d0d 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
@@ -21,7 +21,7 @@ package org.apache.james.modules.data;
 import java.util.List;
 
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.jpa.JPAUsersRepository;
@@ -65,7 +65,7 @@ public class JPAUsersRepositoryModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 fcf5af6..f153063 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
@@ -24,7 +24,7 @@ import java.util.List;
 import javax.inject.Inject;
 
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.EventDeadLetters;
 import org.apache.james.mailbox.events.InVMEventBus;
@@ -84,8 +84,8 @@ public class DefaultEventModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
-            return ImmutableList.of();
+        public List<Class<? extends Startable>> forClasses() {
+            return ImmutableList.of(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 92fd1a5..fb28f27 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
@@ -30,7 +30,7 @@ import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.api.DomainList;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailetcontainer.api.MailProcessor;
 import org.apache.james.mailetcontainer.api.MailetLoader;
 import org.apache.james.mailetcontainer.api.MatcherLoader;
@@ -216,7 +216,7 @@ public class CamelMailetContainerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(CamelCompositeProcessor.class, JamesMailSpooler.class, JamesMailetContext.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 573c504..d5a2a90 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
@@ -27,7 +27,7 @@ import org.apache.james.dlp.eventsourcing.EventSourcingDLPConfigurationStore;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.apache.james.domainlist.memory.MemoryDomainList;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
 import org.apache.james.rrt.api.RecipientRewriteTable;
@@ -109,7 +109,7 @@ public class MemoryDataModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(MemoryDomainList.class, 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 2022f57..b3b5a97 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
@@ -5,7 +5,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.List;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.PDFTextExtractor;
 import org.apache.james.modules.TestJMAPServerModule;
@@ -66,7 +66,7 @@ class GuiceJamesServerTest {
             }
 
             @Override
-            public List<Class<? extends Configurable>> forClasses() {
+            public List<Class<? extends Startable>> forClasses() {
                 return ImmutableList.of();
             }
         };
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 2880864..0430540 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
@@ -28,7 +28,7 @@ import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.imapserver.netty.IMAPServerFactory;
 import org.apache.james.imapserver.netty.OioIMAPServerFactory;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.events.EventBus;
@@ -111,7 +111,7 @@ public class IMAPServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(IMAPServerFactory.class);
         }
     }
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
index 52b756b..044759d 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
@@ -37,7 +37,7 @@ import org.apache.james.jmap.send.PostDequeueDecoratorFactory;
 import org.apache.james.jmap.utils.HtmlTextExtractor;
 import org.apache.james.jmap.utils.JsoupHtmlTextExtractor;
 import org.apache.james.jwt.JwtConfiguration;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.events.MailboxListener;
@@ -166,7 +166,7 @@ public class JMAPModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of();
         }
     }
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 33b555e..972c721 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
@@ -27,7 +27,7 @@ import org.apache.james.jmap.JMAPConfiguration;
 import org.apache.james.jmap.JMAPModule;
 import org.apache.james.jmap.JMAPServer;
 import org.apache.james.jmap.crypto.JamesSignatureHandler;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
 import org.apache.james.utils.JmapGuiceProbe;
@@ -84,7 +84,7 @@ public class JMAPServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 a6a0da2..9549143 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
@@ -21,7 +21,7 @@ package org.apache.james.modules.protocols;
 
 import java.util.List;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.lmtpserver.netty.LMTPServerFactory;
 import org.apache.james.lmtpserver.netty.OioLMTPServerFactory;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
@@ -70,7 +70,7 @@ public class LMTPServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 051d5b5..86553e2 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
@@ -20,7 +20,7 @@ package org.apache.james.modules.protocols;
 
 import java.util.List;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.managesieve.api.commands.CoreCommands;
 import org.apache.james.managesieve.core.CoreProcessor;
 import org.apache.james.managesieveserver.netty.ManageSieveServerFactory;
@@ -67,7 +67,7 @@ public class ManageSieveServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(ManageSieveServerFactory.class);
         }
     }
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 457bca5..beabcef 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
@@ -21,7 +21,7 @@ package org.apache.james.modules.protocols;
 
 import java.util.List;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.pop3server.netty.OioPOP3ServerFactory;
 import org.apache.james.pop3server.netty.POP3ServerFactory;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
@@ -69,7 +69,7 @@ public class POP3ServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 7a55aa8..8318727 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
@@ -21,7 +21,7 @@ package org.apache.james.modules.protocols;
 
 import java.util.List;
 
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.smtpserver.SendMailHandler;
 import org.apache.james.smtpserver.netty.OioSMTPServerFactory;
@@ -76,7 +76,7 @@ public class SMTPServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(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 0640e59..ce2a2cd 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
@@ -29,7 +29,7 @@ import java.util.Optional;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.jwt.JwtTokenVerifier;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
 import org.apache.james.utils.PropertiesProvider;
@@ -145,7 +145,7 @@ public class WebAdminServerModule extends AbstractModule {
         }
 
         @Override
-        public List<Class<? extends Configurable>> forClasses() {
+        public List<Class<? extends Startable>> forClasses() {
             return ImmutableList.of(WebAdminServer.class);
         }
     }
diff --git a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Configurable.java b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Configurable.java
index 849ef00..0424983 100644
--- a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Configurable.java
+++ b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Configurable.java
@@ -25,7 +25,7 @@ import org.apache.commons.configuration.HierarchicalConfiguration;
 /**
  * Classes which needs to access the configuration should implement this
  */
-public interface Configurable {
+public interface Configurable extends Startable {
 
     /**
      * Configure the object. Be aware that no services are injected when this is
diff --git a/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationPerformer.java b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Startable.java
similarity index 83%
copy from server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationPerformer.java
copy to server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Startable.java
index 449ec3c..f55b864 100644
--- a/server/container/guice/configuration/src/main/java/org/apache/james/utils/ConfigurationPerformer.java
+++ b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Startable.java
@@ -16,17 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
+package org.apache.james.lifecycle.api;
 
-package org.apache.james.utils;
-
-import java.util.List;
-
-import org.apache.james.lifecycle.api.Configurable;
-
-public interface ConfigurationPerformer {
-
-    void initModule();
-
-    List<Class<? extends Configurable>> forClasses();
-
+public interface Startable {
 }
diff --git a/server/container/metrics/metrics-es-reporter/pom.xml b/server/container/metrics/metrics-es-reporter/pom.xml
index 4e25a0b..8190fb5 100644
--- a/server/container/metrics/metrics-es-reporter/pom.xml
+++ b/server/container/metrics/metrics-es-reporter/pom.xml
@@ -36,6 +36,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-lifecycle-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-util</artifactId>
         </dependency>
         <dependency>
diff --git a/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESMetricReporter.java b/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESMetricReporter.java
index 2be9542..8feaf62 100644
--- a/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESMetricReporter.java
+++ b/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESMetricReporter.java
@@ -26,11 +26,13 @@ import java.util.concurrent.TimeUnit;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 
+import org.apache.james.lifecycle.api.Startable;
+
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.ScheduledReporter;
 import com.linagora.elasticsearch.metrics.ElasticsearchReporter;
 
-public class ESMetricReporter {
+public class ESMetricReporter implements Startable {
 
     private final Optional<ElasticsearchReporter> reporter;
     private final ESReporterConfiguration esReporterConfiguration;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org