diff --git a/pom.xml b/pom.xml
index d64090b..64804bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -137,6 +137,10 @@
org.eclipse.jetty
jetty-server
+
+ org.eclipse.jetty
+ jetty-util
+
junit
diff --git a/src/main/java/com/hubspot/dropwizard/guicier/DropwizardModule.java b/src/main/java/com/hubspot/dropwizard/guicier/DropwizardModule.java
index 59b6d92..c03f652 100644
--- a/src/main/java/com/hubspot/dropwizard/guicier/DropwizardModule.java
+++ b/src/main/java/com/hubspot/dropwizard/guicier/DropwizardModule.java
@@ -11,6 +11,7 @@
import io.dropwizard.lifecycle.ServerLifecycleListener;
import io.dropwizard.servlets.tasks.Task;
import io.dropwizard.setup.Environment;
+import org.eclipse.jetty.util.component.LifeCycle;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.model.Resource;
import org.slf4j.Logger;
@@ -51,6 +52,10 @@ public void onProvision(ProvisionInvocation provision) {
if (obj instanceof ServerLifecycleListener) {
handle((ServerLifecycleListener) obj);
}
+
+ if (obj instanceof LifeCycle.Listener) {
+ handle((LifeCycle.Listener) obj);
+ }
}
});
}
@@ -79,6 +84,11 @@ private void handle(ServerLifecycleListener serverLifecycleListener) {
LOG.info("Added guice injected server lifecycle listener: {}", serverLifecycleListener.getClass().getName());
}
+ private void handle(LifeCycle.Listener lifecycleListener) {
+ environment.lifecycle().addLifeCycleListener(lifecycleListener);
+ LOG.info("Added guice injected lifecycle listener: {}", lifecycleListener.getClass().getName());
+ }
+
private void registerResourcesAndProviders(ResourceConfig config, Injector injector) {
while (injector != null) {
for (Key> key : injector.getBindings().keySet()) {
diff --git a/src/test/java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java b/src/test/java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java
index edafdcc..4637722 100644
--- a/src/test/java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java
+++ b/src/test/java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java
@@ -10,6 +10,7 @@
import com.hubspot.dropwizard.guicier.objects.InstanceManaged;
import com.hubspot.dropwizard.guicier.objects.ProvidedHealthCheck;
+import com.hubspot.dropwizard.guicier.objects.ProvidedLifecycleListener;
import com.hubspot.dropwizard.guicier.objects.ProvidedManaged;
import com.hubspot.dropwizard.guicier.objects.ProvidedProvider;
import com.hubspot.dropwizard.guicier.objects.ProvidedServerLifecycleListener;
@@ -27,6 +28,7 @@
import com.google.inject.Injector;
import com.hubspot.dropwizard.guicier.objects.ExplicitResource;
import com.hubspot.dropwizard.guicier.objects.InjectedHealthCheck;
+import com.hubspot.dropwizard.guicier.objects.InjectedLifecycleListener;
import com.hubspot.dropwizard.guicier.objects.InjectedManaged;
import com.hubspot.dropwizard.guicier.objects.InjectedProvider;
import com.hubspot.dropwizard.guicier.objects.InjectedServerLifecycleListener;
@@ -121,10 +123,21 @@ public void itAddsBoundServerLifecycleListener() {
assertThat(environment.lifecycle())
.extracting(Function.identity())
.flatExtracting("lifecycleListeners")
+ .filteredOn(obj -> obj.getClass().getName().contains("ServerListener"))
.extracting("listener")
.containsOnlyOnce(injectedServerLifecycleListener);
}
+ @Test
+ public void itAddsBoundLifecycleLIstener() {
+ InjectedLifecycleListener injectedLifecycleListener =
+ guiceBundle.getInjector().getInstance(InjectedLifecycleListener.class);
+ assertThat(environment.lifecycle())
+ .extracting(Function.identity())
+ .flatExtracting("lifecycleListeners")
+ .containsOnlyOnce(injectedLifecycleListener);
+ }
+
@Test
public void itAddsBoundProvider() {
Set> components = environment.jersey().getResourceConfig().getClasses();
@@ -167,10 +180,21 @@ public void itAddsProvidedServerLifecycleListener() {
assertThat(environment.lifecycle())
.extracting(Function.identity())
.flatExtracting("lifecycleListeners")
+ .filteredOn(obj -> obj.getClass().getName().contains("ServerListener"))
.extracting("listener")
.containsOnlyOnce(providedServerLifecycleListener);
}
+ @Test
+ public void itAddsProvidedLifecycleListener() {
+ ProvidedLifecycleListener providedLifecycleListener =
+ guiceBundle.getInjector().getInstance(ProvidedLifecycleListener.class);
+ assertThat(environment.lifecycle())
+ .extracting(Function.identity())
+ .flatExtracting("lifecycleListeners")
+ .containsOnlyOnce(providedLifecycleListener);
+ }
+
@Test
public void itAddsProvidedProvider() {
Set> components = environment.jersey().getResourceConfig().getClasses();
diff --git a/src/test/java/com/hubspot/dropwizard/guicier/objects/InjectedLifecycleListener.java b/src/test/java/com/hubspot/dropwizard/guicier/objects/InjectedLifecycleListener.java
new file mode 100644
index 0000000..239fb63
--- /dev/null
+++ b/src/test/java/com/hubspot/dropwizard/guicier/objects/InjectedLifecycleListener.java
@@ -0,0 +1,32 @@
+package com.hubspot.dropwizard.guicier.objects;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.eclipse.jetty.util.component.LifeCycle;
+
+@Singleton
+public class InjectedLifecycleListener implements LifeCycle.Listener {
+
+ @Inject
+ InjectedLifecycleListener() {}
+
+ @Override
+ public void lifeCycleStarting(LifeCycle lifeCycle) {
+ }
+
+ @Override
+ public void lifeCycleStarted(LifeCycle lifeCycle) {
+ }
+
+ @Override
+ public void lifeCycleFailure(LifeCycle lifeCycle, Throwable throwable) {
+ }
+
+ @Override
+ public void lifeCycleStopping(LifeCycle lifeCycle) {
+ }
+
+ @Override
+ public void lifeCycleStopped(LifeCycle lifeCycle) {
+ }
+}
diff --git a/src/test/java/com/hubspot/dropwizard/guicier/objects/ProvidedLifecycleListener.java b/src/test/java/com/hubspot/dropwizard/guicier/objects/ProvidedLifecycleListener.java
new file mode 100644
index 0000000..717a3b5
--- /dev/null
+++ b/src/test/java/com/hubspot/dropwizard/guicier/objects/ProvidedLifecycleListener.java
@@ -0,0 +1,26 @@
+package com.hubspot.dropwizard.guicier.objects;
+
+import org.eclipse.jetty.util.component.LifeCycle;
+
+public class ProvidedLifecycleListener implements LifeCycle.Listener {
+
+ @Override
+ public void lifeCycleStarting(LifeCycle lifeCycle) {
+ }
+
+ @Override
+ public void lifeCycleStarted(LifeCycle lifeCycle) {
+ }
+
+ @Override
+ public void lifeCycleFailure(LifeCycle lifeCycle, Throwable throwable) {
+ }
+
+ @Override
+ public void lifeCycleStopping(LifeCycle lifeCycle) {
+ }
+
+ @Override
+ public void lifeCycleStopped(LifeCycle lifeCycle) {
+ }
+}
diff --git a/src/test/java/com/hubspot/dropwizard/guicier/objects/TestModule.java b/src/test/java/com/hubspot/dropwizard/guicier/objects/TestModule.java
index ce4be69..5f0053f 100644
--- a/src/test/java/com/hubspot/dropwizard/guicier/objects/TestModule.java
+++ b/src/test/java/com/hubspot/dropwizard/guicier/objects/TestModule.java
@@ -22,6 +22,7 @@ protected void configure() {
bind(InjectedTask.class).asEagerSingleton();
bind(InjectedHealthCheck.class).asEagerSingleton();
bind(InjectedServerLifecycleListener.class).asEagerSingleton();
+ bind(InjectedLifecycleListener.class).asEagerSingleton();
bind(InjectedProvider.class);
@@ -53,6 +54,12 @@ public ProvidedServerLifecycleListener provideServerLifecycleListener() {
return new ProvidedServerLifecycleListener();
}
+ @Provides
+ @Singleton
+ public ProvidedLifecycleListener provideLifecycleListener() {
+ return new ProvidedLifecycleListener();
+ }
+
@Provides
public ProvidedProvider provideProvider() {
return new ProvidedProvider();