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"/>
 &lt;/route&gt;]]></script>
-</div></div><p>&#160;</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>&#160;</p><h3 id="BookPatternAppendix-DynamicTo">Dynamic 
To</h3><p><strong>Available as of Camel 2.16</strong></p><p>There is a new 
&lt;toD&gt; that allows to send a message to a dynamic computed&#160;<a 
shape="rect" href="endpoint.html">Endpoint</a> using one or more&#160;<a 
shape="rect" href="expression.html">Expression</a> that are concat together. By 
default the&#160;<a shape="rect" href="simple.html">Simple</a> language is used 
to compute the&#160;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[&lt;route&gt;
+  &lt;from uri=&quot;direct:start&quot;/&gt;
+  &lt;toD uri=&quot;${header.foo&quot;/&gt;
+&lt;/route&gt;]]></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(&quot;direct:start&quot;)
+  .toD(&quot;${header.foo}&quot;);]]></script>
+</div></div><p>&#160;</p><p>You can also prefix the uri with a value because 
by default the uri is evaluated using the&#160;<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[&lt;route&gt;
+  &lt;from uri=&quot;direct:start&quot;/&gt;
+  &lt;toD uri=&quot;mock:${header.foo&quot;/&gt;
+&lt;/route&gt;]]></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(&quot;direct:start&quot;)
+  .toD(&quot;mock:${header.foo}&quot;);]]></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 &#160;<a shape="rect" 
href="simple.html">Simple</a>&#160;such as&#160;<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[&lt;route&gt;
+  &lt;from uri=&quot;direct:start&quot;/&gt;
+  &lt;toD uri=&quot;xpath:/order/@uri&quot;/&gt;
+&lt;/route&gt;]]></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(&quot;direct:start&quot;)
+  .toD(&quot;xpath:/order/@uri&quot;);]]></script>
+</div></div><p>You can also concat multiple&#160;<a shape="rect" 
href="language.html">Language</a>(s) together using the plus 
sign&#160;<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[&lt;route&gt;
+  &lt;from uri=&quot;direct:start&quot;/&gt;
+  &lt;toD uri=&quot;jms:${header.base}+xpath:/order/@id&quot;/&gt;
+&lt;/route&gt;]]></script>
+</div></div><p>In the example above the uri is a combination of&#160;<a 
shape="rect" href="simple.html">Simple</a>&#160;language and&#160;<a 
shape="rect" href="xpath.html">XPath</a>&#160;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(&quot;direct:start&quot;)
+  .toD(&quot;jms:${header.base}+xpath:/order/@id&quot;);]]></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">&#160;</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">&#160;</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">&#160;</td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">Allows to 
 >configure the cache size for the&#160;</span><code>ProducerCache</code><span 
 >style="color: rgb(0,0,0);">&#160;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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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>&#160;</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[
 &lt;camelContext errorHandlerRef=&quot;errorHandler&quot; 
xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
     &lt;route&gt;
@@ -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(&quot;direct:a&quot;).recipientList(
         header(&quot;recipientListHeader&quot;).tokenize(&quot;,&quot;));
@@ -1088,7 +1120,7 @@ from(&quot;direct:a&quot;).recipientList
     &lt;/route&gt;
 &lt;/camelContext&gt;
 ]]></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[
 &lt;route&gt;
   &lt;from uri=&quot;direct:a&quot; /&gt;
@@ -1098,7 +1130,7 @@ from(&quot;direct:a&quot;).recipientList
   &lt;/recipientList&gt;
 &lt;/route&gt;
 ]]></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(&quot;direct:a&quot;).recipientList(header(&quot;myHeader&quot;).tokenize(&quot;,&quot;));
 ]]></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&#160;<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(&quot;direct:splitUsingBody&quot;).split(body()).to(&quot;mock:result&quot;);
 
-from(&quot;direct:splitUsingHeader&quot;).split(header(&quot;foo&quot;)).to(&quot;mock:result&quot;);Â
 ]]></script>
+from(&quot;direct:splitUsingHeader&quot;).split(header(&quot;foo&quot;)).to(&quot;mock:result&quot;);?]]></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[&lt;split&gt;
    &lt;simple&gt;${body}&lt;/simple&gt;
@@ -1271,7 +1303,7 @@ from(&quot;direct:splitUsingHeader&quot;
 &lt;split&gt;
    &lt;simple&gt;${header.foo}&lt;/simple&gt;
    &lt;to uri=&quot;mock:result&quot;/&gt;
-&lt;/split&gt;  ]]></script>
+&lt;/split&gt; ?]]></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[
 &lt;camelContext xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
@@ -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&#160;<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&#160;<code>getAggregateController()</code>&#160;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(&quot;direct:start&quot;)
    .aggregate(header(&quot;id&quot;), new 
MyAggregationStrategy()).completionSize(10).id(&quot;myAggregator&quot;)
       .aggregateController(controller)
@@ -1880,7 +1912,7 @@ from(&quot;direct:start&quot;)
 <script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[int groups = 
controller.forceCompletionOfAllGroups();]]></script>
 </div></div><p>&#160;</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[&lt;bean id=&quot;myController&quot; 
class=&quot;org.apache.camel.processor.aggregate.DefaultAggregateController&quot;/&gt;
- 
+?
   &lt;camelContext xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
         &lt;route&gt;
             &lt;from uri=&quot;direct:start&quot;/&gt;
@@ -4773,7 +4805,7 @@ from(&quot;direct:tap&quot;)
             &lt;constructor-arg value=&quot;com.mycompany.mylogger&quot; /&gt;
         &lt;/bean&gt;
 
-        &lt;route id=&quot;moo&quot; 
xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
+       ?&lt;route id=&quot;moo&quot; 
xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
             &lt;from uri=&quot;direct:moo&quot;/&gt;
             &lt;log message=&quot;Me Got ${body}&quot; 
loggingLevel=&quot;INFO&quot; loggerRef=&quot;myLogger&quot;/&gt;
             &lt;to uri=&quot;mock:baz&quot;/&gt;

Modified: websites/production/camel/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.


Reply via email to