@Provides @Singleton ProvisioningManager provideProvisioningManager(Closer closer) { ProvisioningManager provisioningManager = new ProvisioningManager(); closer.addToClose(provisioningManager); return provisioningManager; }
@Override public void close() throws IOException { closer.close(); } }
@Override public boolean isOpen() { return closer.getState() == AVAILABLE; }
protected void configure() { Closeable executorCloser = new Closeable() { @Inject @Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor; @Inject @Named(PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor; // ScheduledExecutor is defined in an optional module @Inject(optional = true) @Named(PROPERTY_SCHEDULER_THREADS) ScheduledExecutorService scheduledExecutor; public void close() throws IOException { assert userExecutor != null; userExecutor.shutdownNow(); assert ioExecutor != null; ioExecutor.shutdownNow(); // ScheduledExecutor is defined in an optional module if (scheduledExecutor != null) scheduledExecutor.shutdownNow(); } }; binder().requestInjection(executorCloser); Closer closer = new Closer(); closer.addToClose(executorCloser); bind(Closer.class).toInstance(closer); ExecutionList list = new ExecutionList(); bindPostInjectionInvoke(closer, list); bind(ExecutionList.class).toInstance(list); }
@Test void testCloserClosesExecutor() throws IOException { Injector i = createInjector(); ListeningExecutorService executor = i.getInstance(Key.get(ListeningExecutorService.class, named(PROPERTY_USER_THREADS))); assert !executor.isShutdown(); Closer closer = i.getInstance(Closer.class); assert closer.getState() == Closer.State.AVAILABLE; closer.close(); assert executor.isShutdown(); assert closer.getState() == Closer.State.DONE; }
final CountDownLatch closeStart = new CountDownLatch(1); closer.addToClose(new Closeable() { @Override public void close() throws IOException { assert closer.getState() == Closer.State.PROCESSING; assert closer.getState() == Closer.State.DONE;
protected void configure() { Closeable executorCloser = new Closeable() { @Inject @Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor; @Inject @Named(PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor; // ScheduledExecutor is defined in an optional module @Inject(optional = true) @Named(PROPERTY_SCHEDULER_THREADS) ScheduledExecutorService scheduledExecutor; public void close() throws IOException { assert userExecutor != null; userExecutor.shutdownNow(); assert ioExecutor != null; ioExecutor.shutdownNow(); // ScheduledExecutor is defined in an optional module if (scheduledExecutor != null) scheduledExecutor.shutdownNow(); } }; binder().requestInjection(executorCloser); Closer closer = new Closer(); closer.addToClose(executorCloser); bind(Closer.class).toInstance(closer); ExecutionList list = new ExecutionList(); bindPostInjectionInvoke(closer, list); bind(ExecutionList.class).toInstance(list); }
@Test void testCloserPreDestroyOrder() throws IOException { Injector i = createInjector(); ListeningExecutorService userExecutor = i.getInstance(Key.get(ListeningExecutorService.class, named(PROPERTY_USER_THREADS))); assert !userExecutor.isShutdown(); Closer closer = i.getInstance(Closer.class); assert closer.getState() == Closer.State.AVAILABLE; closer.close(); assert userExecutor.isShutdown(); assert closer.getState() == Closer.State.DONE; }
closer.addToClose(closeable); assert closer.getState() == Closer.State.DONE;
@Override public void close() throws IOException { closer.close(); } }
@Provides @Singleton ProvisioningManager provideProvisioningManager(Closer closer) { ProvisioningManager provisioningManager = new ProvisioningManager(); closer.addToClose(provisioningManager); return provisioningManager; }
protected void configure() { Closeable executorCloser = new Closeable() { @Inject @Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor; @Inject @Named(PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor; // ScheduledExecutor is defined in an optional module @Inject(optional = true) @Named(PROPERTY_SCHEDULER_THREADS) ScheduledExecutorService scheduledExecutor; public void close() throws IOException { assert userExecutor != null; userExecutor.shutdownNow(); assert ioExecutor != null; ioExecutor.shutdownNow(); // ScheduledExecutor is defined in an optional module if (scheduledExecutor != null) scheduledExecutor.shutdownNow(); } }; binder().requestInjection(executorCloser); Closer closer = new Closer(); closer.addToClose(executorCloser); bind(Closer.class).toInstance(closer); ExecutionList list = new ExecutionList(); bindPostInjectionInvoke(closer, list); bind(ExecutionList.class).toInstance(list); }
@Override public boolean isOpen() { return closer.getState() == AVAILABLE; }
@Override public void close() throws IOException { closer.close(); } }
static <T extends ListeningExecutorService> T shutdownOnClose(final T service, Closer closer) { closer.addToClose(new ShutdownExecutorOnClose(service)); return service; }
protected void configure() { Closeable executorCloser = new Closeable() { @Inject @Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor; // ScheduledExecutor is defined in an optional module @Inject(optional = true) @Named(PROPERTY_SCHEDULER_THREADS) ScheduledExecutorService scheduledExecutor; public void close() throws IOException { assert userExecutor != null; userExecutor.shutdownNow(); // ScheduledExecutor is defined in an optional module if (scheduledExecutor != null) scheduledExecutor.shutdownNow(); } }; binder().requestInjection(executorCloser); Closer closer = new Closer(); closer.addToClose(executorCloser); bind(Closer.class).toInstance(closer); ExecutionList list = new ExecutionList(); bindPostInjectionInvoke(closer, list); bind(ExecutionList.class).toInstance(list); }
@Override public boolean isOpen() { return closer.getState() == AVAILABLE; }
@Override public void close() throws IOException { closer.close(); } }
static <T extends ListeningExecutorService> T shutdownOnClose(final T service, Closer closer) { closer.addToClose(new ShutdownExecutorOnClose(service)); return service; }
protected void configure() { Closeable executorCloser = new Closeable() { @Inject @Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor; // ScheduledExecutor is defined in an optional module @Inject(optional = true) @Named(PROPERTY_SCHEDULER_THREADS) ScheduledExecutorService scheduledExecutor; public void close() throws IOException { assert userExecutor != null; userExecutor.shutdownNow(); // ScheduledExecutor is defined in an optional module if (scheduledExecutor != null) scheduledExecutor.shutdownNow(); } }; binder().requestInjection(executorCloser); Closer closer = new Closer(); closer.addToClose(executorCloser); bind(Closer.class).toInstance(closer); ExecutionList list = new ExecutionList(); bindPostInjectionInvoke(closer, list); bind(ExecutionList.class).toInstance(list); }