From a1785906a6ccd441ff35944df24529dccc17f0c4 Mon Sep 17 00:00:00 2001 From: David Harris Date: Wed, 1 Jul 2020 16:02:48 -0600 Subject: [PATCH 1/2] Adds auto-wiring of jetty LifeCycle.Listener instances --- .../dropwizard/guicier/DropwizardModule.java | 10 ++++++ .../dropwizard/guicier/GuiceBundleTest.java | 22 +++++++++++++ .../objects/InjectedLifecycleListener.java | 32 +++++++++++++++++++ .../objects/ProvidedLifecycleListener.java | 26 +++++++++++++++ .../guicier/objects/TestModule.java | 7 ++++ 5 files changed, 97 insertions(+) create mode 100644 src/test/java/com/hubspot/dropwizard/guicier/objects/InjectedLifecycleListener.java create mode 100644 src/test/java/com/hubspot/dropwizard/guicier/objects/ProvidedLifecycleListener.java 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..cb8e7af 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; @@ -125,6 +127,16 @@ public void itAddsBoundServerLifecycleListener() { .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(); @@ -171,6 +183,16 @@ public void itAddsProvidedServerLifecycleListener() { .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(); From bdeda8a6a81d2cac87c0ac4ad7f69ba1d76142c6 Mon Sep 17 00:00:00 2001 From: David Harris Date: Thu, 2 Jul 2020 08:02:47 -0600 Subject: [PATCH 2/2] Fixes tests to handle new lifecycle listener type --- pom.xml | 4 ++++ .../java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java | 2 ++ 2 files changed, 6 insertions(+) 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/test/java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java b/src/test/java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java index cb8e7af..4637722 100644 --- a/src/test/java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java +++ b/src/test/java/com/hubspot/dropwizard/guicier/GuiceBundleTest.java @@ -123,6 +123,7 @@ public void itAddsBoundServerLifecycleListener() { assertThat(environment.lifecycle()) .extracting(Function.identity()) .flatExtracting("lifecycleListeners") + .filteredOn(obj -> obj.getClass().getName().contains("ServerListener")) .extracting("listener") .containsOnlyOnce(injectedServerLifecycleListener); } @@ -179,6 +180,7 @@ public void itAddsProvidedServerLifecycleListener() { assertThat(environment.lifecycle()) .extracting(Function.identity()) .flatExtracting("lifecycleListeners") + .filteredOn(obj -> obj.getClass().getName().contains("ServerListener")) .extracting("listener") .containsOnlyOnce(providedServerLifecycleListener); }