Modified: websites/production/camel/content/book-pattern-appendix.html
==============================================================================
--- websites/production/camel/content/book-pattern-appendix.html (original)
+++ websites/production/camel/content/book-pattern-appendix.html Mon Jul 20
14:19:35 2015
@@ -386,7 +386,39 @@ from("activemq:My.Queue").
<from uri="file://local/router/messages/foo"/>
<to uri="jms:queue:foo"/>
</route>]]></script>
-</div></div><p> </p><p>For more details see</p><ul><li><a shape="rect"
href="message.html">Message</a><br clear="none"><br
clear="none"></li></ul><p></p><h4
id="BookPatternAppendix-UsingThisPattern.5">Using This Pattern</h4>
+</div></div><p> </p><h3 id="BookPatternAppendix-DynamicTo">Dynamic
To</h3><p><strong>Available as of Camel 2.16</strong></p><p>There is a new
<toD> that allows to send a message to a dynamic computed <a
shape="rect" href="endpoint.html">Endpoint</a> using one or more <a
shape="rect" href="expression.html">Expression</a> that are concat together. By
default the <a shape="rect" href="simple.html">Simple</a> language is used
to compute the endpoint. For example to send a message to a endpoint
defined by a header you can do</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<route>
+ <from uri="direct:start"/>
+ <toD uri="${header.foo"/>
+</route>]]></script>
+</div></div><p>And in Java DSL</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[from("direct:start")
+ .toD("${header.foo}");]]></script>
+</div></div><p> </p><p>You can also prefix the uri with a value because
by default the uri is evaluated using the <a shape="rect"
href="simple.html">Simple</a> language</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<route>
+ <from uri="direct:start"/>
+ <toD uri="mock:${header.foo"/>
+</route>]]></script>
+</div></div><p>And in Java DSL</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[from("direct:start")
+ .toD("mock:${header.foo}");]]></script>
+</div></div><p>In the example above we compute an endpoint that has prefix
"mock:" and then the header foo is appended. So for example if the header foo
has value order, then the endpoint is computed as "mock:order".</p><p>You can
also use other languages that  <a shape="rect"
href="simple.html">Simple</a> such as <a shape="rect"
href="xpath.html">XPath</a></p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<route>
+ <from uri="direct:start"/>
+ <toD uri="xpath:/order/@uri"/>
+</route>]]></script>
+</div></div><p>This is done by specifying the name of the language followed by
a colon.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[from("direct:start")
+ .toD("xpath:/order/@uri");]]></script>
+</div></div><p>You can also concat multiple <a shape="rect"
href="language.html">Language</a>(s) together using the plus
sign <code>+</code> such as shown below:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<route>
+ <from uri="direct:start"/>
+ <toD uri="jms:${header.base}+xpath:/order/@id"/>
+</route>]]></script>
+</div></div><p>In the example above the uri is a combination of <a
shape="rect" href="simple.html">Simple</a> language and <a
shape="rect" href="xpath.html">XPath</a> where the first part is simple
(simple is default language). And then the plus sign separate to another
language, where we specify the language name followed by a colon</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[from("direct:start")
+ .toD("jms:${header.base}+xpath:/order/@id");]]></script>
+</div></div><p>You can concat as many languages as you want, just separate
them with the plus sign</p><p>The Dynamic To has a few options you can
configure</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh">Name</th><th colspan="1" rowspan="1"
class="confluenceTh">Default Value</th><th colspan="1" rowspan="1"
class="confluenceTh">Description</th></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">uri</td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Mandatory:</strong> The uri to use. See
above</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">pattern</td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd">To set a specific <a shape="rect"
href="exchange-pattern.html">Exchange Pattern</a> to use when sending to the
endpoint. The original MEP is restored afterwards.</td></tr
><tr><td colspan="1" rowspan="1" class="confluenceTd">cacheSize</td><td
>colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1"
>rowspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">Allows to
>configure the cache size for the </span><code>ProducerCache</code><span
>style="color: rgb(0,0,0);"> which caches producers for reuse. Will by
>default use the default cache size which is 1000. Setting the value to -1
>allows to turn off the cache all together.</span></td></tr><tr><td
>colspan="1" rowspan="1" class="confluenceTd">ignoreInvalidEndpoint</td><td
>colspan="1" rowspan="1" class="confluenceTd"><code>false</code></td><td
>colspan="1" rowspan="1" class="confluenceTd"><span style="color:
>rgb(0,0,0);">Whether to ignore an endpoint URI that could not be resolved. If
>disabled, Camel will throw an exception identifying the invalid endpoint
>URI.</span></td></tr></tbody></table></div><p> </p><p>For more details
>see</p><ul><li><a shape="rect" href="recipien
t-list.html">Recipient List</a></li><li><a shape="rect"
href="message.html">Message</a><br clear="none"><br
clear="none"></li></ul><p></p><h4
id="BookPatternAppendix-UsingThisPattern.5">Using This Pattern</h4>
<p>If you would like to use this EIP Pattern then please read the <a
shape="rect" href="getting-started.html">Getting Started</a>, you may also find
the <a shape="rect" href="architecture.html">Architecture</a> useful
particularly the description of <a shape="rect"
href="endpoint.html">Endpoint</a> and <a shape="rect"
href="uris.html">URIs</a>. Then you could try out some of the <a shape="rect"
href="examples.html">Examples</a> first before trying this pattern out.</p>
@@ -1037,7 +1069,7 @@ public String slip(String body, @Propert
</div></div><p>In the above we can use the <a shape="rect"
href="parameter-binding-annotations.html">Parameter Binding Annotations</a> to
bind different parts of the <a shape="rect" href="message.html">Message</a> to
method parameters or use an <a shape="rect"
href="expression.html">Expression</a> such as using <a shape="rect"
href="xpath.html">XPath</a> or <a shape="rect"
href="xquery.html">XQuery</a>.</p><p>The method can be invoked in a number of
ways as described in the <a shape="rect" href="bean-integration.html">Bean
Integration</a> such as</p><ul><li><a shape="rect"
href="pojo-producing.html">POJO Producing</a></li><li><a shape="rect"
href="spring-remoting.html">Spring Remoting</a></li><li><a shape="rect"
href="bean.html">Bean</a> component</li></ul><p></p><h4
id="BookPatternAppendix-UsingThisPattern.16">Using This Pattern</h4>
<p>If you would like to use this EIP Pattern then please read the <a
shape="rect" href="getting-started.html">Getting Started</a>, you may also find
the <a shape="rect" href="architecture.html">Architecture</a> useful
particularly the description of <a shape="rect"
href="endpoint.html">Endpoint</a> and <a shape="rect"
href="uris.html">URIs</a>. Then you could try out some of the <a shape="rect"
href="examples.html">Examples</a> first before trying this pattern out.</p>
-<h3 id="BookPatternAppendix-RecipientList">Recipient List</h3><p>The <a
shape="rect" class="external-link"
href="http://www.enterpriseintegrationpatterns.com/RecipientList.html"
rel="nofollow">Recipient List</a> from the <a shape="rect"
href="enterprise-integration-patterns.html">EIP patterns</a> allows you to
route messages to a number of dynamically specified recipients.</p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image
confluence-external-resource"
src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif"
data-image-src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif"></span></p><p>The
recipients will receive a copy of the <strong>same</strong> <a shape="rect"
href="exchange.html">Exchange</a>, and Camel will execute them
sequentially.</p><h3 id="BookPatternAppendix-Options.1">Options</h3><div
class="confluenceTableSmall"><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" ro
wspan="1" class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>delimiter</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>,</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Delimiter used if the <a
shape="rect" href="expression.html">Expression</a> returned multiple endpoints.
<strong>Camel 2.13</strong> can be disabled using "false"</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>strategyRef</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>An <a shape="rect" class="external-link"
href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/AggregationStrategy.html">AggregationStrategy</a>
that will
assemble the replies from recipients into a single outgoing message from the
<a shape="rect" href="recipient-list.html">Recipient List</a>. By default Camel
will use the last reply as the outgoing message. From <strong>Camel
2.12</strong> onwards you can also use a POJO as the
<code>AggregationStrategy</code>, see the <a shape="rect"
href="aggregator2.html">Aggregate</a> page for more
details.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>strategyMethodName</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.12:</strong> This option can be used to
explicit declare the method name to use, when using POJOs as the
<code>AggregationStrategy</code>. See the <a shape="rect"
href="aggregator2.html">Aggregate</a> page for more
details.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>strategyMethodAllowNull</code></p></td><td
colspan="1" ro
wspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> If this option
is <code>false</code> then the aggregate method is not used if there was no
data to enrich. If this option is <code>true</code> then <code>null</code>
values is used as the <code>oldExchange</code> (when no data to enrich), when
using POJOs as the <code>AggregationStrategy</code>. See the <a shape="rect"
href="aggregator2.html">Aggregate</a> page for more
details.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>parallelProcessing</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong> If enabled,
messages are sent to the recipients concurrently. Note that the calling thread
will still wait until all messages have been fully processed before it
continues; it's the sending and processing
of replies from recipients which happens in parallel.</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>parallelAggregate</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.14:</strong> If
enabled then the <code>aggregate</code> method on
<code>AggregationStrategy</code> can be called concurrently. Notice that this
would require the implementation of <code>AggregationStrategy</code> to be
implemented as thread-safe. By default this is <code>false</code> meaning that
Camel synchronizes the call to the <code>aggregate</code> method. Though in
some use-cases this can be used to archive higher performance when the
<code>AggregationStrategy</code> is implemented as
thread-safe.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>executorServiceRef</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong> A
custom <a shape="rect" href="threading-model.html">Thread Pool</a> to use for
parallel processing. Note that enabling this option implies parallel
processing, so you need not enable that option as well.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>stopOnException</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong> Whether to
immediately stop processing when an exception occurs. If disabled, Camel will
send the message to all recipients regardless of any individual failures. You
can process exceptions in an <a shape="rect" class="external-link"
href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/AggregationStrategy.html">AggregationStrategy</a>
implementation, which supports full control of error
handling.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>ignoreInvalidEndpoints</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong>
Whether to ignore an endpoint URI that could not be resolved. If disabled,
Camel will throw an exception identifying the invalid endpoint
URI.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>streaming</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.5:</strong> If enabled,
Camel will process replies out-of-order - that is, in the order received in
reply from each recipient. If disabled, Camel will process replies in the same
order as specified by the <a shape="rect"
href="expression.html">Expression</a>.</p></td></t
r><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>timeout</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.5:</strong> Specifies a processing
timeout milliseconds. If the <a shape="rect"
href="recipient-list.html">Recipient List</a> hasn't been able to send and
process all replies within this timeframe, then the timeout triggers and the <a
shape="rect" href="recipient-list.html">Recipient List</a> breaks out, with
message flow continuing to the next element. Note that if you provide a <a
shape="rect" class="external-link"
href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/TimeoutAwareAggregationStrategy.html">TimeoutAwareAggregationStrategy</a>,
its <code>timeout</code> method is invoked before breaking out.
<strong>Beware:</strong> If the timeout is reached with running tasks still
remaining, certain tasks for which it i
s difficult for Camel to shut down in a graceful manner may continue to run.
So use this option with a bit of care. We may be able to improve this
functionality in future Camel releases.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>onPrepareRef</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.8:</strong> A custom <a
shape="rect" href="processor.html">Processor</a> to prepare the copy of the <a
shape="rect" href="exchange.html">Exchange</a> each recipient will receive.
This allows you to perform arbitrary transformations, such as deep-cloning the
message payload (or any other custom logic).</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>shareUnitOfWork</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.8:</strong> Whet
her the unit of work should be shared. See <a shape="rect"
href="splitter.html#Splitter-Sharingunitofwork">the same option on Splitter</a>
for more details.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>cacheSize</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>1000</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.13.1/2.12.4:</strong>
Allows to configure the cache size for the <code>ProducerCache</code> which
caches producers for reuse in the routing slip. Will by default use the default
cache size which is 1000. Setting the value to -1 allows to turn off the cache
all together.</p></td></tr></tbody></table></div></div><h4
id="BookPatternAppendix-StaticRecipientList">Static Recipient List</h4><p>The
following example shows how to route a request from an input
<strong>queue:a</strong> endpoint to a static list of
destinations</p><p><strong>Using Annotations</strong><br clear="none"> You can
use th
e <a shape="rect" href="recipientlist-annotation.html">RecipientList
Annotation</a> on a POJO to create a Dynamic Recipient List. For more details
see the <a shape="rect" href="bean-integration.html">Bean
Integration</a>.</p><p><strong>Using the <a shape="rect"
href="fluent-builders.html">Fluent Builders</a></strong></p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<h3 id="BookPatternAppendix-RecipientList">Recipient List</h3><p>The <a
shape="rect" class="external-link"
href="http://www.enterpriseintegrationpatterns.com/RecipientList.html"
rel="nofollow">Recipient List</a> from the <a shape="rect"
href="enterprise-integration-patterns.html">EIP patterns</a> allows you to
route messages to a number of dynamically specified recipients.</p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image
confluence-external-resource"
src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif"
data-image-src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif"></span></p><p>The
recipients will receive a copy of the <strong>same</strong> <a shape="rect"
href="exchange.html">Exchange</a>, and Camel will execute them
sequentially.</p><h3 id="BookPatternAppendix-Options.1">Options</h3><div
class="confluenceTableSmall"><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" ro
wspan="1" class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>delimiter</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>,</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Delimiter used if the <a
shape="rect" href="expression.html">Expression</a> returned multiple endpoints.
<strong>Camel 2.13</strong> can be disabled using "false"</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>strategyRef</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>An <a shape="rect" class="external-link"
href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/AggregationStrategy.html">AggregationStrategy</a>
that will
assemble the replies from recipients into a single outgoing message from the
<a shape="rect" href="recipient-list.html">Recipient List</a>. By default Camel
will use the last reply as the outgoing message. From <strong>Camel
2.12</strong> onwards you can also use a POJO as the
<code>AggregationStrategy</code>, see the <a shape="rect"
href="aggregator2.html">Aggregate</a> page for more
details.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>strategyMethodName</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.12:</strong> This option can be used to
explicit declare the method name to use, when using POJOs as the
<code>AggregationStrategy</code>. See the <a shape="rect"
href="aggregator2.html">Aggregate</a> page for more
details.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>strategyMethodAllowNull</code></p></td><td
colspan="1" ro
wspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> If this option
is <code>false</code> then the aggregate method is not used if there was no
data to enrich. If this option is <code>true</code> then <code>null</code>
values is used as the <code>oldExchange</code> (when no data to enrich), when
using POJOs as the <code>AggregationStrategy</code>. See the <a shape="rect"
href="aggregator2.html">Aggregate</a> page for more
details.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>parallelProcessing</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong> If enabled,
messages are sent to the recipients concurrently. Note that the calling thread
will still wait until all messages have been fully processed before it
continues; it's the sending and processing
of replies from recipients which happens in parallel.</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>parallelAggregate</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.14:</strong> If
enabled then the <code>aggregate</code> method on
<code>AggregationStrategy</code> can be called concurrently. Notice that this
would require the implementation of <code>AggregationStrategy</code> to be
implemented as thread-safe. By default this is <code>false</code> meaning that
Camel synchronizes the call to the <code>aggregate</code> method. Though in
some use-cases this can be used to archive higher performance when the
<code>AggregationStrategy</code> is implemented as
thread-safe.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>executorServiceRef</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong> A
custom <a shape="rect" href="threading-model.html">Thread Pool</a> to use for
parallel processing. Note that enabling this option implies parallel
processing, so you need not enable that option as well.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>stopOnException</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong> Whether to
immediately stop processing when an exception occurs. If disabled, Camel will
send the message to all recipients regardless of any individual failures. You
can process exceptions in an <a shape="rect" class="external-link"
href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/AggregationStrategy.html">AggregationStrategy</a>
implementation, which supports full control of error
handling.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>ignoreInvalidEndpoints</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong>
Whether to ignore an endpoint URI that could not be resolved. If disabled,
Camel will throw an exception identifying the invalid endpoint
URI.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>streaming</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.5:</strong> If enabled,
Camel will process replies out-of-order - that is, in the order received in
reply from each recipient. If disabled, Camel will process replies in the same
order as specified by the <a shape="rect"
href="expression.html">Expression</a>.</p></td></t
r><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>timeout</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.5:</strong> Specifies a processing
timeout milliseconds. If the <a shape="rect"
href="recipient-list.html">Recipient List</a> hasn't been able to send and
process all replies within this timeframe, then the timeout triggers and the <a
shape="rect" href="recipient-list.html">Recipient List</a> breaks out, with
message flow continuing to the next element. Note that if you provide a <a
shape="rect" class="external-link"
href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/TimeoutAwareAggregationStrategy.html">TimeoutAwareAggregationStrategy</a>,
its <code>timeout</code> method is invoked before breaking out.
<strong>Beware:</strong> If the timeout is reached with running tasks still
remaining, certain tasks for which it i
s difficult for Camel to shut down in a graceful manner may continue to run.
So use this option with a bit of care. We may be able to improve this
functionality in future Camel releases.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>onPrepareRef</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.8:</strong> A custom <a
shape="rect" href="processor.html">Processor</a> to prepare the copy of the <a
shape="rect" href="exchange.html">Exchange</a> each recipient will receive.
This allows you to perform arbitrary transformations, such as deep-cloning the
message payload (or any other custom logic).</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>shareUnitOfWork</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.8:</strong> Whet
her the unit of work should be shared. See <a shape="rect"
href="splitter.html#Splitter-Sharingunitofwork">the same option on Splitter</a>
for more details.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>cacheSize</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>1000</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.13.1/2.12.4:</strong>
Allows to configure the cache size for the <code>ProducerCache</code> which
caches producers for reuse in the recipient list. Will by default use the
default cache size which is 1000. Setting the value to -1 allows to turn off
the cache all together.</p></td></tr></tbody></table></div></div><h4
id="BookPatternAppendix-StaticRecipientList">Static Recipient List</h4><p>The
following example shows how to route a request from an input
<strong>queue:a</strong> endpoint to a static list of
destinations</p><p><strong>Using Annotations</strong><br clear="none"> You can
use
the <a shape="rect" href="recipientlist-annotation.html">RecipientList
Annotation</a> on a POJO to create a Dynamic Recipient List. For more details
see the <a shape="rect" href="bean-integration.html">Bean
Integration</a>.</p><p><strong>Using the <a shape="rect"
href="fluent-builders.html">Fluent Builders</a></strong></p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
RouteBuilder builder = new RouteBuilder() {
public void configure() {
@@ -1048,7 +1080,7 @@ RouteBuilder builder = new RouteBuilder(
}
};
]]></script>
-</div></div><p><strong>Using the <a shape="rect"
href="spring-xml-extensions.html">Spring XML Extensions</a></strong></p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><strong>Using the <a shape="rect"
href="spring-xml-extensions.html">Spring XML Extensions</a></strong><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<camelContext errorHandlerRef="errorHandler"
xmlns="http://camel.apache.org/schema/spring">
<route>
@@ -1072,7 +1104,7 @@ RouteBuilder builder = new RouteBuilder(
}
};
]]></script>
-</div></div><p>The above assumes that the header contains a list of endpoint
URIs. The following takes a single string header and tokenizes it</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div>The above assumes that the header contains a list of endpoint
URIs. The following takes a single string header and tokenizes it<div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from("direct:a").recipientList(
header("recipientListHeader").tokenize(","));
@@ -1088,7 +1120,7 @@ from("direct:a").recipientList
</route>
</camelContext>
]]></script>
-</div></div><p>For further examples of this pattern in use you could look at
one of the <a shape="rect" class="external-link"
href="http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListTest.java?view=markup">junit
test case</a></p><h5 id="BookPatternAppendix-UsingdelimiterinSpringXML">Using
delimiter in Spring XML</h5><p>In Spring DSL you can set the
<code>delimiter</code> attribute for setting a delimiter to be used if the
header value is a single String with multiple separated endpoints. By default
Camel uses comma as delimiter, but this option lets you specify a customer
delimiter to use instead.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>For further examples of this pattern in use you could look at one
of the <a shape="rect" class="external-link"
href="http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListTest.java?view=markup">junit
test case</a><h5 id="BookPatternAppendix-UsingdelimiterinSpringXML">Using
delimiter in Spring XML</h5><p>In Spring DSL you can set the
<code>delimiter</code> attribute for setting a delimiter to be used if the
header value is a single String with multiple separated endpoints. By default
Camel uses comma as delimiter, but this option lets you specify a customer
delimiter to use instead.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<route>
<from uri="direct:a" />
@@ -1098,7 +1130,7 @@ from("direct:a").recipientList
</recipientList>
</route>
]]></script>
-</div></div><p>So if <strong>myHeader</strong> contains a String with the
value <code>"activemq:queue:foo, activemq:topic:hello , log:bar"</code> then
Camel will split the String using the delimiter given in the XML that was
comma, resulting into 3 endpoints to send to. You can use spaces between the
endpoints as Camel will trim the value when it lookup the endpoint to send
to.</p><p>Note: In Java DSL you use the <code>tokenizer</code> to archive the
same. The route above in Java DSL:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>So if <strong>myHeader</strong> contains a String with the value
<code>"activemq:queue:foo, activemq:topic:hello , log:bar"</code> then Camel
will split the String using the delimiter given in the XML that was comma,
resulting into 3 endpoints to send to. You can use spaces between the endpoints
as Camel will trim the value when it lookup the endpoint to send to.<p>Note: In
Java DSL you use the <code>tokenizer</code> to archive the same. The route
above in Java DSL:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from("direct:a").recipientList(header("myHeader").tokenize(","));
]]></script>
</div></div><p>In <strong>Camel 2.1</strong> its a bit easier as you can pass
in the delimiter as 2nd parameter:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -1261,7 +1293,7 @@ RouteBuilder builder = new RouteBuilder(
</div></div><p>For further examples of this pattern in use you could look at
one of the <a shape="rect" class="external-link"
href="http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterTest.java?view=markup">junit
test case</a></p><h3
id="BookPatternAppendix-SplittingaCollection,IteratororArray">Splitting a
Collection, Iterator or Array</h3><p>A common use case is to split a
Collection, Iterator or Array from the <span
class="confluence-link">message</span>. In the sample below we simply use
an <a shape="rect" href="expression.html">Expression</a> to identify the
value to split.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[from("direct:splitUsingBody").split(body()).to("mock:result");
-from("direct:splitUsingHeader").split(header("foo")).to("mock:result");Â
]]></script>
+from("direct:splitUsingHeader").split(header("foo")).to("mock:result");?]]></script>
</div></div><p>In Spring XML you can use the <a shape="rect"
href="simple.html">Simple</a> language to identify the value to split.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<split>
<simple>${body}</simple>
@@ -1271,7 +1303,7 @@ from("direct:splitUsingHeader"
<split>
<simple>${header.foo}</simple>
<to uri="mock:result"/>
-</split> Â ]]></script>
+</split> ?]]></script>
</div></div><h3 id="BookPatternAppendix-UsingTokenizerfrom*">Using Tokenizer
from <a shape="rect" href="spring-xml-extensions.html">Spring XML
Extensions</a>*</h3><p>You can use the tokenizer expression in the Spring DSL
to split bodies or headers using a token. This is a common use-case, so we
provided a special <strong>tokenizer</strong> tag for this.<br clear="none"> In
the sample below we split the body using a @ as separator. You can of course
use comma or space or even a regex pattern, also set regex=true.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<camelContext xmlns="http://camel.apache.org/schema/spring">
@@ -1869,7 +1901,7 @@ public final class MyListOfNumbersStrate
]]></script>
</div></div><h3 id="BookPatternAppendix-UsingAggregateController">Using
AggregateController</h3><p><strong>Available as of Camel
2.16</strong></p><p>The <code>org.apache.camel.processor.aggregate.AggregateController</code>
allows you to control the aggregate at runtime using Java or JMX API. This can
be used to force completing groups of exchanges, or query its current runtime
statistics.</p><p>The aggregator provides a default implementation if no custom
have been configured, which can be accessed
using <code>getAggregateController()</code> method. Though it may be
easier to configure a controller in the route using aggregateController as
shown below:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[private AggregateController controller = new
DefaultAggregateController();
-Â
+?
from("direct:start")
.aggregate(header("id"), new
MyAggregationStrategy()).completionSize(10).id("myAggregator")
.aggregateController(controller)
@@ -1880,7 +1912,7 @@ from("direct:start")
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[int groups =
controller.forceCompletionOfAllGroups();]]></script>
</div></div><p> </p><p>To configure this from XML DSL</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<bean id="myController"
class="org.apache.camel.processor.aggregate.DefaultAggregateController"/>
-Â
+?
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:start"/>
@@ -4773,7 +4805,7 @@ from("direct:tap")
<constructor-arg value="com.mycompany.mylogger" />
</bean>
- Â <route id="moo"
xmlns="http://camel.apache.org/schema/spring">
+ ?<route id="moo"
xmlns="http://camel.apache.org/schema/spring">
<from uri="direct:moo"/>
<log message="Me Got ${body}"
loggingLevel="INFO" loggerRef="myLogger"/>
<to uri="mock:baz"/>
Modified: websites/production/camel/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.