diff --git a/src/reference/asciidoc/file.adoc b/src/reference/asciidoc/file.adoc index d17083742a..22a432cc2d 100644 --- a/src/reference/asciidoc/file.adoc +++ b/src/reference/asciidoc/file.adoc @@ -454,7 +454,7 @@ public class FileReadingJavaApplication { @Bean public IntegrationFlow fileReadingFlow() { return IntegrationFlows - .from(s -> s.file(new File(INBOUND_PATH)) + .from(Files.inboundAdapter(new File(INBOUND_PATH)) .patternFilter("*.txt"), e -> e.poller(Pollers.fixedDelay(1000))) .transform(Files.toStringTransformer()) @@ -573,7 +573,6 @@ In the following example, `IdleEventInterval` is set to `5000`, meaning that, if ==== This can be useful when you need to stop the adapter. -// TODO How does this stop the adapter? The following example creates an Apache `commons-io` `Tailer` adapter that examines the file for new lines every two seconds and checks for existence of a missing file every ten seconds: @@ -923,7 +922,7 @@ public class FileWritingJavaApplication { return IntegrationFlows.from("fileWritingInput") .enrichHeaders(h -> h.header(FileHeaders.FILENAME, "foo.txt") .header("directory", new File(tmpDir.getRoot(), "fileWritingFlow"))) - .handleWithAdapter(a -> a.fileGateway(m -> m.getHeaders().get("directory"))) + .handle(Files.outboundGateway(m -> m.getHeaders().get("directory"))) .channel(MessageChannels.queue("fileWritingResultChannel")) .get(); } diff --git a/src/reference/asciidoc/ftp.adoc b/src/reference/asciidoc/ftp.adoc index 5c52916d4a..6f472602f8 100644 --- a/src/reference/asciidoc/ftp.adoc +++ b/src/reference/asciidoc/ftp.adoc @@ -559,7 +559,7 @@ public class FtpJavaApplication { @Bean public IntegrationFlow ftpInboundFlow() { return IntegrationFlows - .from(s -> s.ftp(this.ftpSessionFactory) + .from(Fpt.inboundAdapter(this.ftpSessionFactory) .preserveTimestamp(true) .remoteDirectory("foo") .regexFilter(".*\\.txt$") diff --git a/src/reference/asciidoc/polling-consumer.adoc b/src/reference/asciidoc/polling-consumer.adoc index 445859b14e..c8c8841342 100644 --- a/src/reference/asciidoc/polling-consumer.adoc +++ b/src/reference/asciidoc/polling-consumer.adoc @@ -44,8 +44,7 @@ Pollers use triggers to determine the time of the next poll. The `PollSkipAdvice` can be used to suppress (skip) a poll, perhaps because there is some downstream condition that would prevent the message being processed. To use this advice, you have to provide it with an implementation of a `PollSkipStrategy`. Starting with version 4.2.5, a `SimplePollSkipStrategy` is provided. -To use it, you can add an instance as a bean to the application context, inject it into a `PollSkipAdvice`, and add that to the poller's -advice chain. +To use it, you can add an instance as a bean to the application context, inject it into a `PollSkipAdvice`, and add that to the poller's advice chain. To skip polling, call `skipPolls()`. To resume polling, call `reset()`. Version 4.2 added more flexibility in this area. @@ -58,7 +57,7 @@ For more information regarding messaging endpoints in general and polling consum ==== Deferred Acknowledgment Pollable Message Source Starting with version 5.0.1, certain modules provide `MessageSource` implementations that support deferring acknowledgment until the downstream flow completes (or hands off the message to another thread). -This is currently limited to the `AmqpMessageSource` and the `KafkaMessageSource` provided by the https://github.com/spring-projects/spring-integration-kafka[`spring-kafka-integration` extension project, version 3.0.1 or higher]. +This is currently limited to the `AmqpMessageSource` and the `KafkaMessageSource` provided by the `spring-integration-kafka` https://github.com/spring-projects/spring-integration-kafka[extension project]. With these message sources, the `IntegrationMessageHeaderAccessor.ACKNOWLEDGMENT_CALLBACK` header (see <>) is added to the message. The value of the header is an instance of `AcknowledgmentCallback`, as the following example shows: @@ -68,7 +67,7 @@ The value of the header is an instance of `AcknowledgmentCallback`, as the follo @FunctionalInterface public interface AcknowledgmentCallback { - void acknlowledge(Status status); + void acknowledge(Status status); boolean isAcknowledged(); @@ -197,14 +196,12 @@ To use this advice where you wish to use async operations after the result of a This advice allows the selection of one of two triggers based on whether a poll returns a message or not. Consider a poller that uses a `CronTrigger`. `CronTrigger` instances are immutable, so they cannot be altered once constructed. -Consider a use case where we want to use a cron expression to trigger a poll once each hour but, if no message is -received, poll once per minute and, when a message is retrieved, revert to using the cron expression. +Consider a use case where we want to use a cron expression to trigger a poll once each hour but, if no message is received, poll once per minute and, when a message is retrieved, revert to using the cron expression. The advice (and poller) use a `CompoundTrigger` for this purpose. The trigger's `primary` trigger can be a `CronTrigger`. When the advice detects that no message is received, it adds the secondary trigger to the `CompoundTrigger`. -When the `CompoundTrigger` instance's `nextExecutionTime` method is invoked, it delegates to the secondary trigger, if -present. +When the `CompoundTrigger` instance's `nextExecutionTime` method is invoked, it delegates to the secondary trigger, if present. Otherwise, it delegates to the primary trigger. The poller must also have a reference to the same `CompoundTrigger`. diff --git a/src/reference/asciidoc/sftp.adoc b/src/reference/asciidoc/sftp.adoc index f3936042fb..e7fdf6b0fd 100644 --- a/src/reference/asciidoc/sftp.adoc +++ b/src/reference/asciidoc/sftp.adoc @@ -560,7 +560,7 @@ public class SftpJavaApplication { @Bean public IntegrationFlow sftpInboundFlow() { return IntegrationFlows - .from(s -> s.sftp(this.sftpSessionFactory) + .from(Sftp.inboundAdapter(this.sftpSessionFactory) .preserveTimestamp(true) .remoteDirectory("foo") .regexFilter(".*\\.txt$") @@ -1295,9 +1295,8 @@ public class SftpJavaApplication { @Bean public IntegrationFlow sftpMGetFlow() { return IntegrationFlows.from("sftpMgetInputChannel") - .handleWithAdapter(h -> - h.sftpGateway(sftpSessionFactory(), AbstractRemoteFileOutboundGateway.Command.MGET, - "payload") + .handle(Sftp.outboundGateway(sftpSessionFactory(), + AbstractRemoteFileOutboundGateway.Command.MGET, "payload") .options(AbstractRemoteFileOutboundGateway.Option.RECURSIVE) .regexFileNameFilter("(subSftpSource|.*1.txt)") .localDirectoryExpression("'myDir/' + #remoteDirectory")