This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0a9fa3bcc33eeb2fa4c55255cbc8102ed9d3d936 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Aug 9 13:01:14 2021 +0200 Polish and cleanup documentation --- .../modules/ROOT/pages/backlogdebugger.adoc | 7 +- .../modules/ROOT/pages/batch-consumer.adoc | 20 +++-- .../modules/ROOT/pages/bean-binding.adoc | 87 ++++++++++------------ .../modules/ROOT/pages/bean-injection.adoc | 6 +- 4 files changed, 58 insertions(+), 62 deletions(-) diff --git a/docs/user-manual/modules/ROOT/pages/backlogdebugger.adoc b/docs/user-manual/modules/ROOT/pages/backlogdebugger.adoc index dea53b0..7ac9924 100644 --- a/docs/user-manual/modules/ROOT/pages/backlogdebugger.adoc +++ b/docs/user-manual/modules/ROOT/pages/backlogdebugger.adoc @@ -1,8 +1,6 @@ [[BacklogDebugger-BacklogDebugger]] = BacklogDebugger -*Since Camel 2.12* - Camel supports a backlog debugger that is used for live debugging of messages that are routed in Camel. The backlog debugger has additional functionality for easier debugging @@ -15,6 +13,8 @@ interface. You can enable or disable the BacklogDebugger dynamically, by calling `enableDebugger` or `disableDebugger` methods. +NOTE: This requires to enabled JMX by including `camel-management` JAR in the classpath. + [[BacklogDebugger-Options]] == Options @@ -86,6 +86,9 @@ at the node. |`setMessageHeaderOnBreakpoint(nodeId,headerName,value)` |`void` |To update/add the message header on the suspended Exchange at the node. + +| `setFallbackTimeout(value)` |`long` |Fallback Timeout in seconds (300 seconds as default) when block the message processing in Camel. +A timeout used for waiting for a message to arrive at a given breakpoint. ` |======================================================================= [[BacklogDebugger-Enabling]] diff --git a/docs/user-manual/modules/ROOT/pages/batch-consumer.adoc b/docs/user-manual/modules/ROOT/pages/batch-consumer.adoc index 78950a5..af7a9c3 100644 --- a/docs/user-manual/modules/ROOT/pages/batch-consumer.adoc +++ b/docs/user-manual/modules/ROOT/pages/batch-consumer.adoc @@ -1,23 +1,17 @@ [[BatchConsumer-BatchConsumer]] = Batch Consumer -*Since Camel 2.0* - Batch Consumer is basically a xref:{eip-vc}:eips:polling-consumer.adoc[Polling Consumer] that is capable of polling multiple -Exchanges in a pool. What we have done in Camel 2.0 -is to standardize this into a `org.apache.camel.BatchConsumer` interface -that a consumer can implement to indicate it support batching as well. +Exchanges in a single pool. + +To support batching the consumer must implement the `org.apache.camel.BatchConsumer` interface. -The following components supports xref:batch-consumer.adoc[Batch -Consumer] by its consumer: +A range of Camel components support batching such as: -* xref:components::atom-component.adoc[Atom] * xref:components::file-component.adoc[File] * xref:components::ftp-component.adoc[FTP] -* xref:components::hbase-component.adoc[hbase] * xref:components::jpa-component.adoc[JPA] -* xref:components::jclouds-component.adoc[JCLOUDS] * xref:components::mail-component.adoc[Mail] * xref:components::mybatis-component.adoc[MyBatis] * xref:components::snmp-component.adoc[SNMP] @@ -26,7 +20,7 @@ Consumer] by its consumer: [[BatchConsumer-ConsumerOptions]] == Consumer Options -The Batch Consumer supports the following options: +The `BatchConsumer` supports the following options: [width="100%",cols="20%,80%",options="header",] |======================================================================= @@ -38,6 +32,10 @@ starting up the server that there are thousands of files. Set a value of 0 or negative to disabled it. |======================================================================= +Very often a `BatchConsumer` is scheduled and is based of the `ScheduledBatchPollingConsumer` +that has many options for configuring the scheduling. These options are listed with _(scheduler)_ +as label in the endpoints options in the xref:components::index.adoc[Components] documentation. + [[BatchConsumer-ExchangeProperties]] == Exchange Properties diff --git a/docs/user-manual/modules/ROOT/pages/bean-binding.adoc b/docs/user-manual/modules/ROOT/pages/bean-binding.adoc index 19e3b1d..effcb79 100644 --- a/docs/user-manual/modules/ROOT/pages/bean-binding.adoc +++ b/docs/user-manual/modules/ROOT/pages/bean-binding.adoc @@ -5,6 +5,8 @@ Bean Binding in Camel defines both which methods are invoked and also how the xref:{eip-vc}:eips:message.adoc[Message] is converted into the parameters of the method when it is invoked. +NOTE: This requires to include `camel-bean` as dependency on the classpath. + [[BeanBinding-Choosingthemethodtoinvoke]] == Choosing the method to invoke @@ -14,10 +16,10 @@ can occur in different ways, in the following order of importance: * if the message contains the header *CamelBeanMethodName* then that method is invoked, converting the body to the type of the method's argument. -** From *Camel 2.8* onwards you can qualify parameter types to select +** You can qualify parameter types to select exactly which method to use among overloads with the same name (see below for more details). -** From *Camel 2.9* onwards you can specify parameter values directly in +** You can specify parameter values directly in the method option (see below for more details). * you can explicitly specify the method name in the xref:dsl.adoc[DSL] or when using xref:pojo-consuming.adoc[POJO Consuming] or @@ -36,8 +38,7 @@ error is thrown if a single method cannot be chosen unambiguously. * you can also use Exchange as the parameter itself, but then the return type must be void. * if the bean class is private (or package-private), interface methods -will be preferred (from *Camel 2.9* onwards) since Camel can't invoke -class methods on such beans +will be preferred since Camel can't invoke class methods on such beans In cases where Camel cannot choose a method to invoke, an `AmbiguousMethodCallException` is thrown. @@ -47,9 +48,8 @@ By default the return value is set on the outbound message body. [[BeanBinding-Asynchronousprocessing]] == Asynchronous processing -From *Camel 2.18* onwards you can return a CompletionStage -implementation (e.g. a CompletableFuture) to implement asynchronous -processing. +You can return a `CompletionStage` implementation (e.g. a `CompletableFuture`) +to implement asynchronous processing. Please be sure to properly complete the CompletionStage with the result or exception, including any timeout handling. Exchange processing would @@ -57,9 +57,9 @@ wait for completion and would not impose any timeouts automatically. It's extremely useful to monitor `org.apache.camel.spi.InflightRepository` for any hanging messages. -Note that completing with "null" won't set outbody message body to null, +Note that completing with `"null"` won't set outbody message body to null, but would keep message intact. This is useful to support methods that -don't modify exchange and return CompletableFuture<Void>. To set body to +don't modify exchange and return `CompletableFuture<Void>`. To set body to null, just add Exchange method parameter and directly modify exchange messages. @@ -67,14 +67,14 @@ Examples: Simple asynchronous processor, modifying message body. -[source,syntaxhighlighter-pre] +[source,java] ---- public CompletableFuture<String> doSomethingAsync(String body) ---- Composite processor that do not modify exchange -[source,syntaxhighlighter-pre] +[source,java] ---- public CompletableFuture<Void> doSomethingAsync(String body) { return CompletableFuture.allOf(doA(body), doB(body), doC()); @@ -113,7 +113,7 @@ Let's review some examples: Below is a simple method with a body binding. Camel will bind the IN body to the `body` parameter and convert it to a `String`. -[source,syntaxhighlighter-pre] +[source,java] ---- public String doSomething(String body) ---- @@ -121,21 +121,21 @@ public String doSomething(String body) In the following sample we got one of the automatically-bound types as well - for instance, a `Registry` that we can use to lookup beans. -[source,syntaxhighlighter-pre] +[source,java] ---- public String doSomething(String body, Registry registry) ---- We can use xref:exchange.adoc[Exchange] as well: -[source,syntaxhighlighter-pre] +[source,java] ---- public String doSomething(String body, Exchange exchange) ---- You can also have multiple types: -[source,syntaxhighlighter-pre] +[source,java] ---- public String doSomething(String body, Exchange exchange, TypeConverter converter) ---- @@ -143,7 +143,7 @@ public String doSomething(String body, Exchange exchange, TypeConverter converte And imagine you use a xref:components::bean-component.adoc[Pojo] to handle a given custom exception `InvalidOrderException` - we can then bind that as well: -[source,syntaxhighlighter-pre] +[source,java] ---- public String badOrder(String body, InvalidOrderException invalid) ---- @@ -170,7 +170,7 @@ the xref:{eip-vc}:eips:message.adoc[Message] For example, a xref:{eip-vc}:eips:bean-eip.adoc[Bean] such as: -[source,syntaxhighlighter-pre] +[source,java] ---- public class Bar { public String doSomething(String body) { @@ -183,7 +183,7 @@ Or the Exchange example. Notice that the return type must be *void* when there is only a single parameter of the type `org.apache.camel.Exchange`: -[source,syntaxhighlighter-pre] +[source,java] ---- public class Bar { public void doSomething(Exchange exchange) { @@ -195,14 +195,14 @@ there is only a single parameter of the type [[BeanBinding-Handler]] === @Handler -You can mark a method in your bean with the @Handler annotation to +You can mark a method in your bean with the `@Handler` annotation to indicate that this method should be used for xref:bean-binding.adoc[Bean Binding]. This has an advantage as you need not specify a method name in the Camel route, and therefore do not run into problems after renaming the method in an IDE that can't find all its references. -[source,syntaxhighlighter-pre] +[source,java] ---- public class Bar { @Handler @@ -216,8 +216,6 @@ public class Bar { [[BeanBinding-Parameterbindingusingmethodoption]] == Parameter binding using method option -*Since Camel 2.9* - Camel uses the following rules to determine if it's a parameter value in the method option @@ -230,13 +228,13 @@ means you can use, e.g., body, header.foo and other xref:components:languages:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with ${ }. -Any other value is consider to be a type declaration instead - see the +Any other value is considered to be a type declaration instead - see the next section about specifying types for overloaded methods. When invoking a xref:{eip-vc}:eips:bean-eip.adoc[Bean] you can instruct Camel to invoke a specific method by providing the method name: -[source,syntaxhighlighter-pre] +[source,java] ---- .bean(OrderService.class, "doSomething") ---- @@ -245,39 +243,39 @@ Here we tell Camel to invoke the doSomething method - Camel handles the parameters' binding. Now suppose the method has 2 parameters, and the 2nd parameter is a boolean where we want to pass in a true value: -[source,syntaxhighlighter-pre] +[source,java] ---- public void doSomething(String payload, boolean highPriority) { ... } ---- -This is now possible in *Camel 2.9* onwards: +This can be done as follows: -[source,syntaxhighlighter-pre] +[source,java] ---- .bean(OrderService.class, "doSomething(*, true)") ---- In the example above, we defined the first parameter using the wild card -symbol *, which tells Camel to bind this parameter to any type, and let +symbol `*`, which tells Camel to bind this parameter to any type, and let Camel figure this out. The 2nd parameter has a fixed value of `true`. Instead of the wildcard symbol we can instruct Camel to use the message body as shown: -[source,syntaxhighlighter-pre] +[source,java] ---- .bean(OrderService.class, "doSomething(${body}, true)") ---- The syntax of the parameters is using the xref:components:languages:simple-language.adoc[Simple] -expression language so we have to use ${ } placeholders in the body to +language so we have to use `${ }` placeholders in the body to refer to the message body. If you want to pass in a `null` value, then you can explicit define this in the method option as shown below: -[source,syntaxhighlighter-pre] +[source,java] ---- .to("bean:orderService?method=doSomething(null, true)") ---- @@ -288,7 +286,7 @@ a `null` value. Besides the message body, you can pass in the message headers as a `java.util.Map`: -[source,syntaxhighlighter-pre] +[source,java] ---- .bean(OrderService.class, "doSomethingWithHeaders(${body}, ${headers})") ---- @@ -296,20 +294,19 @@ Besides the message body, you can pass in the message headers as a You can also pass in other fixed values besides booleans. For example, you can pass in a String and an integer: -[source,syntaxhighlighter-pre] +[source,java] ---- .bean(MyBean.class, "echo('World', 5)") ---- In the example above, we invoke the echo method with two parameters. The first has the content 'World' (without quotes), and the 2nd has the -value of 5. -Camel will automatically convert these values to the parameters' types. +value of 5. Camel will automatically convert these values to the parameters' types. Having the power of the xref:components:languages:simple-language.adoc[Simple] language allows us to bind to message headers and other values such as: -[source,syntaxhighlighter-pre] +[source,java] ---- .bean(OrderService.class, "doSomething(${body}, ${header.high})") ---- @@ -319,7 +316,7 @@ expression language. Now suppose the message body is an object which has a method named `asXml`. To invoke the `asXml` method we can do as follows: -[source,syntaxhighlighter-pre] +[source,java] ---- .bean(OrderService.class, "doSomething(${body.asXml}, ${header.high})") ---- @@ -327,7 +324,7 @@ follows: Instead of using `.bean` as shown in the examples above, you may want to use `.to` instead as shown: -[source,syntaxhighlighter-pre] +[source,java] ---- .to("bean:orderService?method=doSomething(${body.asXml}, ${header.high})") ---- @@ -335,15 +332,13 @@ use `.to` instead as shown: [[BeanBinding-Usingtypequalifierstoselectamongoverloadedmethods]] == Using type qualifiers to select among overloaded methods -*Since Camel 2.8* - If you have a xref:{eip-vc}:eips:bean-eip.adoc[Bean] with overloaded methods, you can now specify parameter types in the method name so Camel can match the method you intend to use. Given the following bean: -[source,syntaxhighlighter-pre] +[source,java] ---- from("direct:start") .bean(MyBean.class, "hello(String)") @@ -354,7 +349,7 @@ Then the `MyBean` has 2 overloaded methods with the names `hello` and `times`. So if we want to use the method which has 2 parameters we can do as follows in the Camel route: -[source,syntaxhighlighter-pre] +[source,java] ---- from("direct:start") .bean(MyBean.class, "hello(String,String)") @@ -364,7 +359,7 @@ from("direct:start") We can also use a `*` as wildcard so we can just say we want to execute the method with 2 parameters we do -[source,syntaxhighlighter-pre] +[source,java] ---- from("direct:start") .bean(MyBean.class, "hello(*,*)") @@ -377,7 +372,7 @@ match using the FQN, then specify the FQN type and Camel will leverage that. So if you have a `com.foo.MyOrder` and you want to match against the FQN, and *not* the simple name "MyOrder", then follow this example: -[source,syntaxhighlighter-pre] +[source,java] ---- .bean(OrderService.class, "doSomething(com.foo.MyOrder)") ---- @@ -386,9 +381,9 @@ Camel currently only supports either specifying parameter binding or type per parameter in the method name option. You *cannot* specify both at the same time, such as -[source,syntaxhighlighter-pre] +[source,text] ---- - doSomething(com.foo.MyOrder ${body}, boolean ${header.high}) +doSomething(com.foo.MyOrder ${body}, boolean ${header.high}) ---- This may change in the future. diff --git a/docs/user-manual/modules/ROOT/pages/bean-injection.adoc b/docs/user-manual/modules/ROOT/pages/bean-injection.adoc index 948c06b..4ae2c9d 100644 --- a/docs/user-manual/modules/ROOT/pages/bean-injection.adoc +++ b/docs/user-manual/modules/ROOT/pages/bean-injection.adoc @@ -1,8 +1,8 @@ [[BeanInjection-BeanInjection]] = Bean Injection -We support the injection of various resources using @EndpointInject or -@BeanInject. This can be used to inject +We support the injection of various resources using `@EndpointInject` or +`@BeanInject`. This can be used to inject * xref:endpoint.adoc[Endpoint] instances which can be used for testing when used with xref:components::mock-component.adoc[Mock] endpoints; see the @@ -14,7 +14,7 @@ xref:pojo-producing.adoc[POJO Producing] [[BeanInjection-Using-BeanInject]] == Using @BeanInject -From *Camel 2.13* onwards you can inject beans (obtained from the +You can inject beans (obtained from the xref:registry.adoc[Registry]) into your beans such as `RouteBuilder` classes.