Search in sources :

Example 66 with Key

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)));
}
Also used : Binding(com.google.inject.Binding) Element(com.google.inject.spi.Element) AbstractModule(com.google.inject.AbstractModule) Injector(com.google.inject.Injector) Module(com.google.inject.Module) PrivateModule(com.google.inject.PrivateModule) AbstractModule(com.google.inject.AbstractModule) PrivateModule(com.google.inject.PrivateModule) Key(com.google.inject.Key)

Example 67 with Key

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();
}
Also used : Provides(com.google.inject.Provides) Callable(java.util.concurrent.Callable) AbstractModule(com.google.inject.AbstractModule) Injector(com.google.inject.Injector) ExecutorService(java.util.concurrent.ExecutorService) Key(com.google.inject.Key)

Example 68 with Key

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());
}
Also used : ExecutorService(java.util.concurrent.ExecutorService) Callable(java.util.concurrent.Callable) Key(com.google.inject.Key) TimeoutException(java.util.concurrent.TimeoutException)

Example 69 with Key

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());
}
Also used : ExecutorService(java.util.concurrent.ExecutorService) Callable(java.util.concurrent.Callable) Key(com.google.inject.Key) TimeoutException(java.util.concurrent.TimeoutException)

Example 70 with Key

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();
    }
}
Also used : Provides(com.google.inject.Provides) Callable(java.util.concurrent.Callable) AbstractModule(com.google.inject.AbstractModule) Injector(com.google.inject.Injector) ExecutorService(java.util.concurrent.ExecutorService) Key(com.google.inject.Key)

Aggregations

Key (com.google.inject.Key)106 AbstractModule (com.google.inject.AbstractModule)55 Injector (com.google.inject.Injector)52 Binding (com.google.inject.Binding)36 Module (com.google.inject.Module)20 Provider (com.google.inject.Provider)18 Element (com.google.inject.spi.Element)16 Map (java.util.Map)16 HasDependencies (com.google.inject.spi.HasDependencies)14 InstanceBinding (com.google.inject.spi.InstanceBinding)13 List (java.util.List)13 TypeLiteral (com.google.inject.TypeLiteral)12 LinkedKeyBinding (com.google.inject.spi.LinkedKeyBinding)10 ProviderInstanceBinding (com.google.inject.spi.ProviderInstanceBinding)9 PrivateModule (com.google.inject.PrivateModule)8 DefaultBindingTargetVisitor (com.google.inject.spi.DefaultBindingTargetVisitor)8 Dependency (com.google.inject.spi.Dependency)8 ProviderKeyBinding (com.google.inject.spi.ProviderKeyBinding)8 ImmutableList (com.google.common.collect.ImmutableList)7 InjectionPoint (com.google.inject.spi.InjectionPoint)7