Skip to content

Commit 7015b47

Browse files
committed
Injecting Jersey request-scoped services
1 parent f88aae6 commit 7015b47

4 files changed

Lines changed: 87 additions & 3 deletions

File tree

src/main/java/com/hubspot/dropwizard/guice/GuiceBundle.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public void initialize(Bootstrap<?> bootstrap) {
9797
}
9898
modules.add(dropwizardEnvironmentModule);
9999
modules.add(new ServletModule());
100+
modules.add(new JerseyGuiceModule(JerseyGuiceUtils.newServiceLocator()));
100101

101102
initInjector();
102103
JerseyGuiceUtils.install(new ServiceLocatorGenerator() {
@@ -106,13 +107,13 @@ public ServiceLocator create(String name, ServiceLocator parent) {
106107
return null;
107108
}
108109

109-
return baseInjector.createChildInjector(new JerseyGuiceModule(name))
110+
return baseInjector.createChildInjector()
110111
.getInstance(ServiceLocator.class);
111112
}
112113
});
113114

114115
if (autoConfig != null) {
115-
autoConfig.initialize(bootstrap, baseInjector.createChildInjector(new JerseyGuiceModule(JerseyGuiceUtils.newServiceLocator())));
116+
autoConfig.initialize(bootstrap, baseInjector.createChildInjector());
116117
}
117118
}
118119

@@ -144,6 +145,6 @@ private void setEnvironment(final T configuration, final Environment environment
144145

145146
public Injector getInjector() {
146147
Preconditions.checkState(baseInjector != null, "injector is only available after com.hubspot.dropwizard.guice.GuiceBundle.initialize() is called");
147-
return baseInjector.createChildInjector(new JerseyGuiceModule(JerseyGuiceUtils.newServiceLocator()));
148+
return baseInjector.createChildInjector();
148149
}
149150
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.hubspot.dropwizard.guice;
2+
3+
import com.google.inject.Injector;
4+
5+
import com.codahale.metrics.MetricRegistry;
6+
import com.hubspot.dropwizard.guice.objects.JerseyServicesModule;
7+
import com.hubspot.dropwizard.guice.objects.TestModule;
8+
import com.squarespace.jersey2.guice.JerseyGuiceUtils;
9+
10+
import org.junit.*;
11+
import org.junit.runner.RunWith;
12+
import org.mockito.Mock;
13+
import org.mockito.runners.MockitoJUnitRunner;
14+
15+
import javax.servlet.ServletException;
16+
17+
import io.dropwizard.Configuration;
18+
import io.dropwizard.jackson.Jackson;
19+
import io.dropwizard.setup.Bootstrap;
20+
import io.dropwizard.setup.Environment;
21+
22+
import static org.assertj.core.api.Assertions.assertThat;
23+
import static org.mockito.Mockito.mock;
24+
25+
@RunWith(MockitoJUnitRunner.class)
26+
public class GuiceBundleWithJerseyServicesTest {
27+
28+
@Mock
29+
Environment environment;
30+
31+
private GuiceBundle<Configuration> guiceBundle;
32+
33+
@After
34+
public void tearDown() {
35+
JerseyGuiceUtils.reset();
36+
}
37+
38+
@Before
39+
public void setUp() {
40+
//given
41+
environment = new Environment("test env", Jackson.newObjectMapper(), null, new MetricRegistry(), null);
42+
guiceBundle = GuiceBundle.newBuilder()
43+
.addModule(new JerseyServicesModule())
44+
.build();
45+
Bootstrap bootstrap = mock(Bootstrap.class);
46+
guiceBundle.initialize(bootstrap);
47+
guiceBundle.run(new Configuration(), environment);
48+
}
49+
50+
@Test
51+
public void createsInjectorWhenInit() throws ServletException {
52+
//then
53+
Injector injector = guiceBundle.getInjector();
54+
assertThat(injector).isNotNull();
55+
}
56+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.hubspot.dropwizard.guice.objects;
2+
3+
import com.google.inject.Inject;
4+
import com.google.inject.Provider;
5+
6+
import javax.ws.rs.core.SecurityContext;
7+
8+
public class JerseyService {
9+
10+
private final Provider<SecurityContext> securityContextProvider;
11+
12+
@Inject
13+
public JerseyService(Provider<SecurityContext> securityContextProvider) {
14+
this.securityContextProvider = securityContextProvider;
15+
}
16+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.hubspot.dropwizard.guice.objects;
2+
3+
import com.google.inject.AbstractModule;
4+
5+
public class JerseyServicesModule extends AbstractModule {
6+
7+
@Override
8+
protected void configure() {
9+
bind(JerseyService.class);
10+
}
11+
}

0 commit comments

Comments
 (0)