use of com.google.inject.Key in project guice by google.
the class ServletScopesTest method testIsRequestScopedPositive.
public void testIsRequestScopedPositive() {
final Key<String> a = Key.get(String.class, named("A"));
final Key<String> b = Key.get(String.class, named("B"));
final Key<String> c = Key.get(String.class, named("C"));
final Key<String> d = Key.get(String.class, named("D"));
final Key<Object> e = Key.get(Object.class, named("E"));
final Key<String> f = Key.get(String.class, named("F"));
final Key<String> g = Key.get(String.class, named("G"));
Module requestScopedBindings = new AbstractModule() {
@Override
protected void configure() {
bind(a).to(b);
bind(b).to(c);
bind(c).toProvider(Providers.of("c")).in(ServletScopes.REQUEST);
bind(d).toProvider(Providers.of("d")).in(RequestScoped.class);
bind(e).to(AnnotatedRequestScopedClass.class);
install(new PrivateModule() {
@Override
protected void configure() {
bind(f).toProvider(Providers.of("f")).in(RequestScoped.class);
expose(f);
}
});
}
@Provides
@Named("G")
@RequestScoped
String provideG() {
return "g";
}
};
// we know the module contains only bindings
@SuppressWarnings("unchecked") List<Element> moduleBindings = Elements.getElements(requestScopedBindings);
ImmutableMap<Key<?>, Binding<?>> map = indexBindings(moduleBindings);
// linked bindings are not followed by modules
assertFalse(ServletScopes.isRequestScoped(map.get(a)));
assertFalse(ServletScopes.isRequestScoped(map.get(b)));
assertTrue(ServletScopes.isRequestScoped(map.get(c)));
assertTrue(ServletScopes.isRequestScoped(map.get(d)));
// annotated classes are not followed by modules
assertFalse(ServletScopes.isRequestScoped(map.get(e)));
assertTrue(ServletScopes.isRequestScoped(map.get(f)));
assertTrue(ServletScopes.isRequestScoped(map.get(g)));
Injector injector = Guice.createInjector(requestScopedBindings, new ServletModule());
assertTrue(ServletScopes.isRequestScoped(injector.getBinding(a)));
assertTrue(ServletScopes.isRequestScoped(injector.getBinding(b)));
assertTrue(ServletScopes.isRequestScoped(injector.getBinding(c)));
assertTrue(ServletScopes.isRequestScoped(injector.getBinding(d)));
assertTrue(ServletScopes.isRequestScoped(injector.getBinding(e)));
assertTrue(ServletScopes.isRequestScoped(injector.getBinding(f)));
assertTrue(ServletScopes.isRequestScoped(injector.getBinding(g)));
}
use of com.google.inject.Key in project guice by google.
the class TransferRequestIntegrationTest method testTransferNonHttpRequest.
public void testTransferNonHttpRequest() throws Exception {
final Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bindScope(RequestScoped.class, ServletScopes.REQUEST);
}
@Provides
@RequestScoped
Object provideObject() {
return new Object();
}
});
Callable<Callable<Boolean>> callable = new Callable<Callable<Boolean>>() {
@Override
public Callable<Boolean> call() {
final Object original = injector.getInstance(Object.class);
return ServletScopes.transferRequest(new Callable<Boolean>() {
@Override
public Boolean call() {
return original == injector.getInstance(Object.class);
}
});
}
};
ImmutableMap<Key<?>, Object> seedMap = ImmutableMap.of();
Callable<Boolean> transfer = ServletScopes.scopeRequest(callable, seedMap).call();
ExecutorService executor = Executors.newSingleThreadExecutor();
assertTrue(executor.submit(transfer).get());
executor.shutdownNow();
}
use of com.google.inject.Key in project guice by google.
the class TransferRequestIntegrationTest method testTransferNonHttpRequest_concurrentUseBlocks_closeable.
public void testTransferNonHttpRequest_concurrentUseBlocks_closeable() throws Exception {
Callable<Boolean> callable = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
final RequestScoper scoper = ServletScopes.transferRequest();
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
Future<Boolean> future = executor.submit(new Callable<Boolean>() {
@Override
public Boolean call() {
RequestScoper.CloseableScope scope = scoper.open();
try {
return false;
} finally {
scope.close();
}
}
});
try {
return future.get(100, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
return true;
}
} finally {
executor.shutdownNow();
}
}
};
ImmutableMap<Key<?>, Object> seedMap = ImmutableMap.of();
assertTrue(ServletScopes.scopeRequest(callable, seedMap).call());
}
use of com.google.inject.Key in project guice by google.
the class TransferRequestIntegrationTest method testTransferNonHttpRequest_concurrentUseBlocks.
public void testTransferNonHttpRequest_concurrentUseBlocks() throws Exception {
Callable<Boolean> callable = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
Future<Boolean> future = executor.submit(ServletScopes.transferRequest(FALSE_CALLABLE));
try {
return future.get(100, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
return true;
}
} finally {
executor.shutdownNow();
}
}
};
ImmutableMap<Key<?>, Object> seedMap = ImmutableMap.of();
assertTrue(ServletScopes.scopeRequest(callable, seedMap).call());
}
use of com.google.inject.Key in project guice by google.
the class TransferRequestIntegrationTest method testTransferNonHttpRequest_closeable.
public void testTransferNonHttpRequest_closeable() throws Exception {
final Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bindScope(RequestScoped.class, ServletScopes.REQUEST);
}
@Provides
@RequestScoped
Object provideObject() {
return new Object();
}
});
class Data {
Object object;
RequestScoper scoper;
}
Callable<Data> callable = new Callable<Data>() {
@Override
public Data call() {
Data data = new Data();
data.object = injector.getInstance(Object.class);
data.scoper = ServletScopes.transferRequest();
return data;
}
};
ImmutableMap<Key<?>, Object> seedMap = ImmutableMap.of();
Data data = ServletScopes.scopeRequest(callable, seedMap).call();
ExecutorService executor = Executors.newSingleThreadExecutor();
RequestScoper.CloseableScope scope = data.scoper.open();
try {
assertSame(data.object, injector.getInstance(Object.class));
} finally {
scope.close();
executor.shutdownNow();
}
}
Aggregations