Example usage for org.springframework.scheduling.concurrent ThreadPoolTaskScheduler shutdown

List of usage examples for org.springframework.scheduling.concurrent ThreadPoolTaskScheduler shutdown

Introduction

In this page you can find the example usage for org.springframework.scheduling.concurrent ThreadPoolTaskScheduler shutdown.

Prototype

public void shutdown() 

Source Link

Document

Perform a shutdown on the underlying ExecutorService.

Usage

From source file:com.impetus.ankush.common.controller.listener.StartupListener.java

/**
 * Shutdown servlet context (currently a no-op method).
 * //from   w ww.  j  a va2s . c om
 * @param servletContextEvent
 *            The servlet context event
 */
@Override
public void contextDestroyed(final ServletContextEvent servletContextEvent) {
    try {
        if (applicationContext != null) {
            ThreadPoolTaskExecutor pooledExecutor = (ThreadPoolTaskExecutor) applicationContext
                    .getBean("pooledExecutor");
            log.debug("Status of pooledExec daemon " + pooledExecutor.isDaemon());
            pooledExecutor.shutdown();

            ThreadPoolTaskScheduler pooledScheduler = (ThreadPoolTaskScheduler) applicationContext
                    .getBean("pooledScheduler");
            log.debug("Status of pooledScheduler daemon " + pooledScheduler.isDaemon());
            pooledScheduler.shutdown();

            AsyncExecutorServiceImpl executor = (AsyncExecutorServiceImpl) applicationContext
                    .getBean("asyncExecutorService");
            executor.shutdown();
        }
        AppStore.destroyStore();
        applicationContext = null;
    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }
}

From source file:org.springframework.integration.config.SourcePollingChannelAdapterFactoryBeanTests.java

@Test
public void testInterrupted() throws Exception {
    final CountDownLatch startLatch = new CountDownLatch(1);

    MessageSource<Object> ms = () -> {
        startLatch.countDown();/*from w w  w . ja v  a2s .  c  om*/
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            throw new MessagingException("Interrupted awaiting stopLatch", e);
        }
        return null;
    };

    SourcePollingChannelAdapter pollingChannelAdapter = new SourcePollingChannelAdapter();
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.setWaitForTasksToCompleteOnShutdown(true);
    taskScheduler.setAwaitTerminationSeconds(1);
    taskScheduler.afterPropertiesSet();
    pollingChannelAdapter.setTaskScheduler(taskScheduler);

    MessagePublishingErrorHandler errorHandler = new MessagePublishingErrorHandler();
    Log errorHandlerLogger = TestUtils.getPropertyValue(errorHandler, "logger", Log.class);
    errorHandlerLogger = spy(errorHandlerLogger);
    DirectFieldAccessor dfa = new DirectFieldAccessor(errorHandler);
    dfa.setPropertyValue("logger", errorHandlerLogger);
    pollingChannelAdapter.setErrorHandler(errorHandler);

    pollingChannelAdapter.setSource(ms);
    pollingChannelAdapter.setOutputChannel(new NullChannel());
    pollingChannelAdapter.setBeanFactory(mock(BeanFactory.class));
    pollingChannelAdapter.afterPropertiesSet();

    Log adapterLogger = TestUtils.getPropertyValue(pollingChannelAdapter, "logger", Log.class);
    adapterLogger = spy(adapterLogger);
    when(adapterLogger.isDebugEnabled()).thenReturn(true);

    dfa = new DirectFieldAccessor(pollingChannelAdapter);
    dfa.setPropertyValue("logger", adapterLogger);

    pollingChannelAdapter.start();

    assertTrue(startLatch.await(10, TimeUnit.SECONDS));
    pollingChannelAdapter.stop();

    taskScheduler.shutdown();

    verifyZeroInteractions(errorHandlerLogger);
    verify(adapterLogger).debug(contains("Poll interrupted - during stop()?"));
}

From source file:org.springframework.integration.ip.tcp.connection.ConnectionFactoryTests.java

public void testObtainConnectionIds(AbstractServerConnectionFactory serverFactory) throws Exception {
    final List<IpIntegrationEvent> events = Collections.synchronizedList(new ArrayList<IpIntegrationEvent>());
    int expectedEvents = serverFactory instanceof TcpNetServerConnectionFactory ? 7 // Listening, + OPEN, CLOSE, EXCEPTION for each side
            : 5; // Listening, + OPEN, CLOSE (but we *might* get exceptions, depending on timing).
    final CountDownLatch serverListeningLatch = new CountDownLatch(1);
    final CountDownLatch eventLatch = new CountDownLatch(expectedEvents);
    ApplicationEventPublisher publisher = new ApplicationEventPublisher() {

        @Override//from w  w  w . ja  v  a2 s. c o  m
        public void publishEvent(ApplicationEvent event) {
            LogFactory.getLog(this.getClass()).trace("Received: " + event);
            events.add((IpIntegrationEvent) event);
            if (event instanceof TcpConnectionServerListeningEvent) {
                serverListeningLatch.countDown();
            }
            eventLatch.countDown();
        }

        @Override
        public void publishEvent(Object event) {

        }

    };
    serverFactory.setBeanName("serverFactory");
    serverFactory.setApplicationEventPublisher(publisher);
    serverFactory = spy(serverFactory);
    final CountDownLatch serverConnectionInitLatch = new CountDownLatch(1);
    doAnswer(invocation -> {
        Object result = invocation.callRealMethod();
        serverConnectionInitLatch.countDown();
        return result;
    }).when(serverFactory).wrapConnection(any(TcpConnectionSupport.class));
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.setPoolSize(10);
    scheduler.afterPropertiesSet();
    BeanFactory bf = mock(BeanFactory.class);
    when(bf.containsBean(IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME)).thenReturn(true);
    when(bf.getBean(IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME, TaskScheduler.class))
            .thenReturn(scheduler);
    serverFactory.setBeanFactory(bf);
    TcpReceivingChannelAdapter adapter = new TcpReceivingChannelAdapter();
    adapter.setOutputChannel(new NullChannel());
    adapter.setConnectionFactory(serverFactory);
    adapter.start();
    assertTrue("Listening event not received", serverListeningLatch.await(10, TimeUnit.SECONDS));
    assertThat(events.get(0), instanceOf(TcpConnectionServerListeningEvent.class));
    assertThat(((TcpConnectionServerListeningEvent) events.get(0)).getPort(), equalTo(serverFactory.getPort()));
    int port = serverFactory.getPort();
    TcpNetClientConnectionFactory clientFactory = new TcpNetClientConnectionFactory("localhost", port);
    clientFactory.registerListener(message -> false);
    clientFactory.setBeanName("clientFactory");
    clientFactory.setApplicationEventPublisher(publisher);
    clientFactory.start();
    TcpConnectionSupport client = clientFactory.getConnection();
    List<String> clients = clientFactory.getOpenConnectionIds();
    assertEquals(1, clients.size());
    assertTrue(clients.contains(client.getConnectionId()));
    assertTrue("Server connection failed to register", serverConnectionInitLatch.await(1, TimeUnit.SECONDS));
    List<String> servers = serverFactory.getOpenConnectionIds();
    assertEquals(1, servers.size());
    assertTrue(serverFactory.closeConnection(servers.get(0)));
    servers = serverFactory.getOpenConnectionIds();
    assertEquals(0, servers.size());
    int n = 0;
    clients = clientFactory.getOpenConnectionIds();
    while (n++ < 100 && clients.size() > 0) {
        Thread.sleep(100);
        clients = clientFactory.getOpenConnectionIds();
    }
    assertEquals(0, clients.size());
    assertTrue(eventLatch.await(10, TimeUnit.SECONDS));
    assertThat("Expected at least " + expectedEvents + " events; got: " + events.size() + " : " + events,
            events.size(), greaterThanOrEqualTo(expectedEvents));

    FooEvent event = new FooEvent(client, "foo");
    client.publishEvent(event);
    assertThat("Expected at least " + expectedEvents + " events; got: " + events.size() + " : " + events,
            events.size(), greaterThanOrEqualTo(expectedEvents + 1));

    try {
        event = new FooEvent(mock(TcpConnectionSupport.class), "foo");
        client.publishEvent(event);
        fail("Expected exception");
    } catch (IllegalArgumentException e) {
        assertTrue("Can only publish events with this as the source".equals(e.getMessage()));
    }

    SocketAddress address = serverFactory.getServerSocketAddress();
    if (address instanceof InetSocketAddress) {
        InetSocketAddress inetAddress = (InetSocketAddress) address;
        assertEquals(port, inetAddress.getPort());
    }
    serverFactory.stop();
    scheduler.shutdown();
}

From source file:org.springframework.integration.mail.ImapMailReceiverTests.java

public void testIdleWithServerGuts(ImapMailReceiver receiver, boolean mapped, boolean simple) throws Exception {
    imapIdleServer.resetServer();/*w  w  w .  ja  v a2s  .  c o m*/
    Properties mailProps = new Properties();
    mailProps.put("mail.debug", "true");
    mailProps.put("mail.imap.connectionpool.debug", "true");
    receiver.setJavaMailProperties(mailProps);
    receiver.setMaxFetchSize(1);
    receiver.setShouldDeleteMessages(false);
    receiver.setShouldMarkMessagesAsRead(true);
    receiver.setCancelIdleInterval(8);
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    setUpScheduler(receiver, taskScheduler);
    receiver.setUserFlag("testSIUserFlag");
    receiver.afterPropertiesSet();
    Log logger = spy(TestUtils.getPropertyValue(receiver, "logger", Log.class));
    new DirectFieldAccessor(receiver).setPropertyValue("logger", logger);
    ImapIdleChannelAdapter adapter = new ImapIdleChannelAdapter(receiver);
    QueueChannel channel = new QueueChannel();
    adapter.setOutputChannel(channel);
    adapter.setTaskScheduler(taskScheduler);
    adapter.start();
    if (!mapped) {
        @SuppressWarnings("unchecked")
        org.springframework.messaging.Message<MimeMessage> received = (org.springframework.messaging.Message<MimeMessage>) channel
                .receive(10000);
        assertNotNull(received);
        assertNotNull(received.getPayload().getReceivedDate());
        assertTrue(received.getPayload().getLineCount() > -1);
        if (simple) {
            assertThat(received.getPayload().getContent(),
                    equalTo(TestMailServer.MailServer.MailHandler.BODY + "\r\n"));
        } else {
            assertThat(received.getPayload().getContent(),
                    equalTo(TestMailServer.MailServer.MailHandler.MESSAGE + "\r\n"));
        }
    } else {
        org.springframework.messaging.Message<?> received = channel.receive(10000);
        assertNotNull(received);
        assertNotNull(received.getHeaders().get(MailHeaders.RAW_HEADERS));
        assertThat((String) received.getHeaders().get(MailHeaders.CONTENT_TYPE),
                equalTo("TEXT/PLAIN; charset=ISO-8859-1"));
        assertThat((String) received.getHeaders().get(MessageHeaders.CONTENT_TYPE),
                equalTo("TEXT/PLAIN; charset=ISO-8859-1"));
        assertThat((String) received.getHeaders().get(MailHeaders.FROM), equalTo("Bar <bar@baz>"));
        assertThat(((String[]) received.getHeaders().get(MailHeaders.TO))[0], equalTo("Foo <foo@bar>"));
        assertThat((String) received.getHeaders().get(MailHeaders.SUBJECT), equalTo("Test Email"));
        if (simple) {
            assertThat(received.getPayload(), equalTo(TestMailServer.MailServer.MailHandler.BODY + "\r\n"));
        } else {
            assertThat(received.getPayload(), equalTo(TestMailServer.MailServer.MailHandler.MESSAGE + "\r\n"));
        }
    }
    assertNotNull(channel.receive(10000)); // new message after idle
    assertNull(channel.receive(10000)); // no new message after second and third idle
    verify(logger).debug("Canceling IDLE");
    taskScheduler.shutdown();
    assertTrue(imapIdleServer.assertReceived("storeUserFlag"));
}

From source file:org.springframework.integration.mail.ImapMailReceiverTests.java

@Test
public void testIdleReconnects() throws Exception {
    ImapMailReceiver receiver = spy(new ImapMailReceiver("imap:foo"));
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();/*from  ww  w  .j  av  a2s  .co  m*/
    IMAPFolder folder = mock(IMAPFolder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    given(folder.isOpen()).willReturn(false).willReturn(true);
    given(folder.exists()).willReturn(true);
    given(folder.hasNewMessages()).willReturn(true);
    Field storeField = AbstractMailReceiver.class.getDeclaredField("store");
    storeField.setAccessible(true);
    Store store = mock(Store.class);
    given(store.isConnected()).willReturn(false);
    given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
    storeField.set(receiver, store);

    ImapIdleChannelAdapter adapter = new ImapIdleChannelAdapter(receiver);
    Log logger = spy(TestUtils.getPropertyValue(adapter, "logger", Log.class));
    new DirectFieldAccessor(adapter).setPropertyValue("logger", logger);
    willDoNothing().given(logger).warn(anyString(), any(Throwable.class));
    willAnswer(i -> {
        i.callRealMethod();
        throw new FolderClosedException(folder, "test");
    }).given(receiver).waitForNewMessages();
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.initialize();
    adapter.setTaskScheduler(taskScheduler);
    adapter.setReconnectDelay(50);
    adapter.afterPropertiesSet();
    final CountDownLatch latch = new CountDownLatch(3);
    adapter.setApplicationEventPublisher(e -> {
        latch.countDown();
    });
    adapter.start();
    assertTrue(latch.await(60, TimeUnit.SECONDS));
    verify(store, atLeast(3)).connect();
    taskScheduler.shutdown();
}