fileInbound.start();
@Override public void stop() { if (this.adapter != null) { this.adapter.stop(); } }
@Override public boolean isRunning() { return (this.adapter != null) && this.adapter.isRunning(); }
private MessageSourceNode sourceNode(String name, SourcePollingChannelAdapter adapter) { String errorChannel = adapter.getDefaultErrorChannel() != null ? adapter.getDefaultErrorChannel().toString() : null; String outputChannel = adapter.getOutputChannel() != null ? adapter.getOutputChannel().toString() : null; return new MessageSourceNode(this.nodeId.incrementAndGet(), name, adapter.getMessageSource(), outputChannel, errorChannel); }
SourcePollingChannelAdapter spca = new SourcePollingChannelAdapter(); spca.setSource(this.source); spca.setOutputChannelName(this.outputChannelName); spca.setOutputChannel(this.outputChannel); spca.setMaxMessagesPerPoll(this.pollerMetadata.getMaxMessagesPerPoll()); if (this.sendTimeout != null) { spca.setSendTimeout(this.sendTimeout); spca.setTaskExecutor(this.pollerMetadata.getTaskExecutor()); spca.setAdviceChain(this.pollerMetadata.getAdviceChain()); spca.setTrigger(this.pollerMetadata.getTrigger()); spca.setErrorHandler(this.pollerMetadata.getErrorHandler()); spca.setBeanClassLoader(this.beanClassLoader); spca.setAutoStartup(this.autoStartup); spca.setPhase(this.phase); spca.setRole(this.role); spca.setBeanName(this.beanName); spca.setBeanFactory(this.beanFactory); spca.setTransactionSynchronizationFactory(this.pollerMetadata.getTransactionSynchronizationFactory()); spca.afterPropertiesSet(); this.adapter = spca; this.initialized = true;
@Override protected void applyReceiveOnlyAdviceChain(Collection<Advice> chain) { if (!CollectionUtils.isEmpty(chain)) { if (AopUtils.isAopProxy(this.source)) { Advised advised = (Advised) this.source; this.appliedAdvices.forEach(advised::removeAdvice); chain.stream().forEach(advice -> advised.addAdvisor(adviceToReceiveAdvisor(advice))); } else { ProxyFactory proxyFactory = new ProxyFactory(this.source); chain.stream().forEach(advice -> proxyFactory.addAdvisor(adviceToReceiveAdvisor(advice))); this.source = (MessageSource<?>) proxyFactory.getProxy(getBeanClassLoader()); } this.appliedAdvices.clear(); this.appliedAdvices.addAll(chain); if (!(isSyncExecutor()) && logger.isWarnEnabled()) { logger.warn(getComponentName() + ": A task executor is supplied and " + chain.size() + "MessageSourceMutator(s) is/are provided. If an advice mutates the source, such " + "mutations are not thread safe and could cause unexpected results, especially with " + "high frequency pollers. Consider using a downstream ExecutorChannel instead of " + "adding an executor to the poller"); } } }
@Test public void testWithSPCADefaultErrorChannel() throws Exception { CountDownLatch errorLatch = new CountDownLatch(1); errorChannel.subscribe(message -> errorLatch.countDown()); inboundAdapterDefaultErrorChannel.start(); assertTrue(errorLatch.await(10, TimeUnit.SECONDS)); inboundAdapterDefaultErrorChannel.stop(); }
@Test public void testDefaultDontSkip() throws Exception { SourcePollingChannelAdapter adapter = new SourcePollingChannelAdapter(); final CountDownLatch latch = new CountDownLatch(1); adapter.setSource(() -> { latch.countDown(); return null; }); adapter.setTrigger(new OnlyOnceTrigger()); configure(adapter); List<Advice> adviceChain = new ArrayList<>(); PollSkipAdvice advice = new PollSkipAdvice(); adviceChain.add(advice); adapter.setAdviceChain(adviceChain); adapter.afterPropertiesSet(); adapter.start(); assertTrue(latch.await(10, TimeUnit.SECONDS)); adapter.stop(); }
StringReader reader = new StringReader("test"); CharacterStreamReadingMessageSource source = new CharacterStreamReadingMessageSource(reader, -1, true); SourcePollingChannelAdapter adapter = new SourcePollingChannelAdapter(); CountDownLatch latch = new CountDownLatch(2); source.setApplicationEventPublisher(e -> { if (e instanceof StreamClosedEvent) { if (latch.getCount() == 1) { adapter.stop(); adapter.setSource(source); ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.afterPropertiesSet(); adapter.setTaskScheduler(scheduler); adapter.setTrigger(new PeriodicTrigger(100)); QueueChannel out = new QueueChannel(); adapter.setOutputChannel(out); adapter.setBeanFactory(mock(BeanFactory.class)); adapter.afterPropertiesSet(); adapter.start(); Message<?> received = out.receive(10000); assertNotNull(received); assertEquals("test", received.getPayload()); assertTrue(latch.await(10, TimeUnit.SECONDS)); assertFalse(adapter.isRunning()); scheduler.shutdown();
}; SourcePollingChannelAdapter pollingChannelAdapter = new SourcePollingChannelAdapter(); ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setWaitForTasksToCompleteOnShutdown(true); taskScheduler.setAwaitTerminationSeconds(1); taskScheduler.afterPropertiesSet(); pollingChannelAdapter.setTaskScheduler(taskScheduler); 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(); dfa.setPropertyValue("logger", adapterLogger); pollingChannelAdapter.start(); pollingChannelAdapter.stop();
private void initializeAdapter() { synchronized (this.initializationMonitor) { if (this.initialized) { return; } Assert.notNull(this.source, "source is required"); Assert.notNull(this.outputChannel, "outputChannel is required"); SourcePollingChannelAdapter spca = new SourcePollingChannelAdapter(); spca.setSource(this.source); spca.setOutputChannel(this.outputChannel); if (this.pollerMetadata == null) { this.pollerMetadata = IntegrationContextUtils.getDefaultPollerMetadata(this.beanFactory); Assert.notNull(this.pollerMetadata, "No poller has been defined for channel-adapter '" + this.beanName + "', and no default poller is available within the context."); } spca.setTrigger(this.pollerMetadata.getTrigger()); spca.setMaxMessagesPerPoll(this.pollerMetadata.getMaxMessagesPerPoll()); spca.setTaskExecutor(this.pollerMetadata.getTaskExecutor()); spca.setTransactionManager(this.pollerMetadata.getTransactionManager()); spca.setTransactionDefinition(this.pollerMetadata.getTransactionDefinition()); spca.setAdviceChain(this.pollerMetadata.getAdviceChain()); spca.setAutoStartup(this.autoStartup); spca.setBeanName(this.beanName); spca.setBeanFactory(this.beanFactory); spca.setBeanClassLoader(this.beanClassLoader); spca.afterPropertiesSet(); this.adapter = spca; this.initialized = true; } }
adapterFactory.setBeanFactory(mock(ConfigurableBeanFactory.class)); SourcePollingChannelAdapter adapter = adapterFactory.getObject(); adapter.setTaskScheduler(this.taskScheduler); adapter.afterPropertiesSet(); adapter.start(); assertTrue(latch.await(10, TimeUnit.SECONDS)); adapter.stop();
source.setBeanFactory(mock(BeanFactory.class)); source.setHeaderExpressions(headerExpressions); SourcePollingChannelAdapter adapter = new SourcePollingChannelAdapter(); adapter.setSource(source); adapter.setTaskScheduler(scheduler); adapter.setMaxMessagesPerPoll(3); adapter.setTrigger(new PeriodicTrigger(60000)); adapter.setOutputChannel(channel); adapter.setErrorHandler(t -> { throw new IllegalStateException("unexpected exception in test", t); }); adapter.start(); List<Message<?>> messages = new ArrayList<Message<?>>(); for (int i = 0; i < 3; i++) {
private SourcePollingChannelAdapter buildChannelAdapter() { SourcePollingChannelAdapter adapter = new SourcePollingChannelAdapter(); adapter.setSource(mock(MessageSource.class)); adapter.setOutputChannel(new QueueChannel()); adapter.setTrigger(mock(Trigger.class)); adapter.setBeanFactory(mock(BeanFactory.class)); adapter.setTaskScheduler(mock(TaskScheduler.class)); adapter.afterPropertiesSet(); return adapter; }
@Test public void testCompoundAdviceXML() throws Exception { ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("compound-trigger-context.xml", getClass()); SourcePollingChannelAdapter adapter = ctx.getBean(SourcePollingChannelAdapter.class); Source source = ctx.getBean(Source.class); adapter.start(); assertTrue(source.latch.await(10, TimeUnit.SECONDS)); assertNotNull(TestUtils.getPropertyValue(adapter, "trigger.override")); adapter.stop(); OtherAdvice sourceAdvice = ctx.getBean(OtherAdvice.class); int count = sourceAdvice.calls; assertThat(count, greaterThan(0)); ((Foo) adapter.getMessageSource()).otherMethod(); assertEquals(count, sourceAdvice.calls); ctx.close(); }
SourcePollingChannelAdapter sourcePollingChannelAdapter = (SourcePollingChannelAdapter) context .getBean("filesIn"); //adapter id in the bean configuration // Stop if (sourcePollingChannelAdapter.isRunning()) { sourcePollingChannelAdapter.stop(); } // Set Cron Expression if required when start or use any triggers CronTrigger cronTrigger = new CronTrigger("* * * * * ?"); sourcePollingChannelAdapter.setTrigger(cronTrigger); // Start if (!sourcePollingChannelAdapter.isRunning()) { sourcePollingChannelAdapter.start(); }
SourcePollingChannelAdapter adapter = new SourcePollingChannelAdapter(); adapter.setTransactionSynchronizationFactory(syncFactory); adapter.setOutputChannel(outputChannel); adapter.setSource(new MessageSource<String>() {
@Test public void testMessageHistory() throws Exception { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("ftp-message-history-context.xml", this.getClass()); SourcePollingChannelAdapter adapter = ac.getBean("adapterFtp", SourcePollingChannelAdapter.class); assertEquals("adapterFtp", adapter.getComponentName()); assertEquals("ftp:inbound-channel-adapter", adapter.getComponentType()); ac.close(); } }
@Test public void testSelfDestruction() throws Exception { context = new GenericXmlApplicationContext(getClass(), "self-destruction-context.xml"); SourcePollingChannelAdapter adapter = context.getBean(SourcePollingChannelAdapter.class); adapter.start(); int n = 0; while (adapter.isRunning()) { n += 10; if (n > 10000) { fail("Adapter failed to stop"); } Thread.sleep(10); } }
private void configure(SourcePollingChannelAdapter adapter) { adapter.setOutputChannel(new NullChannel()); adapter.setBeanFactory(this.beanFactory); adapter.setTaskScheduler(this.threadPoolTaskScheduler); }