Author: buildbot
Date: Tue Sep 26 19:19:34 2017
New Revision: 1018754

Log:
Production update by buildbot for camel

Modified:
    websites/production/camel/content/async.html
    websites/production/camel/content/book-in-one-page.html
    websites/production/camel/content/book-tutorials.html
    websites/production/camel/content/cache/main.pageCache
    websites/production/camel/content/camel-jmx.html
    websites/production/camel/content/console-example.html
    websites/production/camel/content/debugger.html
    websites/production/camel/content/pojo-messaging-example.html
    websites/production/camel/content/route-throttling-example.html
    websites/production/camel/content/tracer-example.html
    websites/production/camel/content/tutorial-jmsremoting.html

Modified: websites/production/camel/content/async.html
==============================================================================
--- websites/production/camel/content/async.html (original)
+++ websites/production/camel/content/async.html Tue Sep 26 19:19:34 2017
@@ -75,7 +75,7 @@
        <tbody>
         <tr>
         <td valign="top" width="100%">
-<div class="wiki-content maincontent"><h2 
id="Async-Async">Async</h2><p><strong>Available as of Camel 
2.0</strong></p><p>The asynchronous API in Camel have been rewritten for Camel 
2.0, and the information on this page applies for Camel 2.0 and 
later.</p><p>The <a shape="rect" href="async.html">Async</a> API in Camel is 
primarily divided in two areas:</p><ol><li>Initiating an <a shape="rect" 
href="async.html">Async</a> messaging from the client</li><li>Turning a route 
into <a shape="rect" href="async.html">Async</a> using the 
<strong>threads</strong> <a shape="rect" 
href="dsl.html">DSL</a></li></ol><p>Before we look at these two areas we start 
with a bit of background information and looks at the concept from at a higher 
level using diagrams. Then we check out the first area how a client can 
initiate an <a shape="rect" href="async.html">Async</a> message exchange and we 
also throw in the synchronous message exchange in the mix as well so we can 
compare and distill the difference. An
 d finally we turn our attention towards the last area the new 
<strong>threads</strong> DSL and what it can be used for.</p><h2 
id="Async-Background">Background</h2><p>The new <a shape="rect" 
href="async.html">Async</a> API in Camel 2.0 leverages in much greater detail 
the Java Concurrency API and its support for executing tasks asynchronous. 
Therefore the Camel <a shape="rect" href="async.html">Async</a> API should be 
familiar for users with knowledge of the Java Concurrency API.</p><h3 
id="Async-Afewconceptstomaster">A few concepts to master</h3><p>When doing 
messaging there are a few aspects to keep in mind. First of all a caller can 
initiate a message exchange as either:</p><ul class="alternate"><li><a 
shape="rect" href="event-message.html">Request only</a></li><li><a shape="rect" 
href="request-reply.html">Request Reply</a></li></ul><p><a shape="rect" 
href="event-message.html">Request only</a> is when the caller sends a message 
but do <strong>not</strong> expect any reply. This i
 s also known as fire and forget or event message. The <a shape="rect" 
href="request-reply.html">Request Reply</a> is when the caller sends a message 
and then <strong>waits for a reply</strong>. This is like the <a shape="rect" 
href="http.html">HTTP</a> protocol that we use every day when we surf the web. 
We send a request to fetch a web page and wait until the reply message comes 
with the web content.</p><p>In Camel a message is labeled with a Message <a 
shape="rect" href="exchange-pattern.html">Exchange Pattern</a> that labels 
whether its a request only or request reply message. Camel uses the <a 
shape="rect" href="jbi.html">JBI</a> term for this an uses 
<strong><code>InOnly</code></strong> for the request only, and 
<strong><code>InOut</code></strong> for the request reply.</p><p>For all 
message exchange they can be executed either:</p><ul 
class="alternate"><li>synchronous</li><li>asynchronous</li></ul><h4 
id="Async-SynchronousRequestReply">Synchronous Request Reply</h4><p>A synchr
 onous exchange is defined as the caller sends a message and waits until its 
complete before continuing.</p><p>This is illustrated in the diagram 
below:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" src="async.data/camel_sync_request_reply.png" 
data-image-src="/confluence/download/attachments/117116/camel_sync_request_reply.png?version=1&amp;modificationDate=1241917552000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="10641" 
data-linked-resource-version="1" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="camel_sync_request_reply.png" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="117116" 
data-linked-resource-container-version="57"></span></p><ol><li>The client sends 
a sync <a shape="rect" href="request-reply.html">Request Reply</a> message over 
<a shape="rect" href="http.html">HTTP</a> to Camel. The clie
 nt application will wait for the response that Camel routes and 
processes.</li><li>The message invokes an external <a shape="rect" 
href="mina.html">TCP</a> service using synchronous <a shape="rect" 
href="request-reply.html">Request Reply</a>. The client application still waits 
for the response.</li><li>The response is send back to the client.</li></ol><h4 
id="Async-AsynchronousRequestReply">Asynchronous Request Reply</h4><p>On the 
other hand the asynchronous version is where the caller sends a message to an 
<a shape="rect" href="endpoint.html">Endpoint</a> and then returns immediately 
back to the caller. The message however is processed in another thread, the 
asynchronous thread. Then the caller can continue doing other work and at the 
same time the asynchronous thread is processing the message.</p><p>This is 
illustrated in the diagram below:</p><p><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="async.data/camel_async_request_reply.png" dat
 
a-image-src="/confluence/download/attachments/117116/camel_async_request_reply.png?version=2&amp;modificationDate=1241928088000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="10640" 
data-linked-resource-version="2" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="camel_async_request_reply.png" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="117116" 
data-linked-resource-container-version="57"></span></p><ol><li>The client sends 
an <a shape="rect" href="async.html">Async</a><a shape="rect" 
href="request-reply.html">Request Reply</a> message over <a shape="rect" 
href="http.html">HTTP</a> to Camel. The control is immediately returned to the 
client application, that can continue and do other work while Camel routes the 
message.</li><li>Camel invokes an external <a shape="rect" 
href="mina.html">TCP</a> service using synchronous <a shape="rect" href="reques
 t-reply.html">Request Reply</a>. The client application can do other work 
simultaneously.</li><li>The client wants to get the reply so it uses the Future 
handle it got as <em>response</em> from step 1. With this handle it retrieves 
the reply, wait if necessary if the reply is not 
ready.</li></ol><p>&#160;</p><h4 id="Async-SynchronousRequestOnly">Synchronous 
Request Only</h4><p>&#160;</p><p>You can also do synchronous <a shape="rect" 
href="event-message.html">Request only</a> with Camel. The client sends a 
message to Camel in which a reply is not expected. However the client still 
waits until the message is processed completely.</p><p>This is illustrated in 
the diagram below:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" src="async.data/camel_sync_request_only.png" 
data-image-src="/confluence/download/attachments/117116/camel_sync_request_only.png?version=1&amp;modificationDate=1241923637000&amp;api=v2"
 data-unresolved-comment-count="0" d
 ata-linked-resource-id="10642" data-linked-resource-version="1" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="camel_sync_request_only.png" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="117116" 
data-linked-resource-container-version="57"></span></p><ol><li>The client sends 
a <a shape="rect" href="event-message.html">Request only</a> and we can still 
use <a shape="rect" href="http.html">HTTP</a> despite http being <a 
shape="rect" href="request-reply.html">Request Reply</a> by 
nature.</li><li>Camel invokes an external <a shape="rect" 
href="mina.html">TCP</a> service using synchronous <a shape="rect" 
href="request-reply.html">Request Reply</a>. The client application is still 
waiting.</li><li>The message is processed completely and the control is 
returned to the client.</li></ol><p>So why do you want to use synchronous <a 
shape="rect" href="event-message.html">Request Only
 </a>? Well if you want to know whether the message was processed successfully 
or not before continuing. With synchronous it allows you to wait while the 
message is being processed. In case the processing was successful the control 
is returned to the client with no notion of error. In case of failure the 
client can detect this as an exception is thrown. (and 
<strong><code>exchange.isFailed()</code></strong> returns 
<strong><code>true</code>).</strong></p><h3 
id="Async-AsynchronousRequestOnly">Asynchronous Request Only</h3><p>As opposed 
to the synchronous <a shape="rect" href="event-message.html">Request Only</a> 
the <a shape="rect" href="async.html">Async</a> counter part will 
<strong>not</strong> wait for the processing of the message to complete. In 
this case the client can immediately continue doing other work while the 
message is being routed and processed in Camel.</p><p>This is illustrated in 
the diagram below:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="co
 nfluence-embedded-image" src="async.data/camel_async_request_only.png" 
data-image-src="/confluence/download/attachments/117116/camel_async_request_only.png?version=1&amp;modificationDate=1241928107000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="10644" 
data-linked-resource-version="1" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="camel_async_request_only.png" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="117116" 
data-linked-resource-container-version="57"></span></p><ol><li>The client sends 
a <a shape="rect" href="event-message.html">Request only</a> and we can still 
use <a shape="rect" href="http.html">HTTP</a> despite HTTP being <a 
shape="rect" href="request-reply.html">Request Reply</a> by nature. The control 
is immediately returned to the client application, that can continue and do 
other work while Camel routes the message.</li><li>Camel 
 invokes an external <a shape="rect" href="mina.html">TCP</a> service using 
synchronous <a shape="rect" href="request-reply.html">Request Reply</a>. The 
client application can do other work simultaneously.</li><li>The message 
completes but no result is returned to the client.<br clear="none"><br 
clear="none"></li></ol><rich-text-body><p><strong>Note:</strong> As Camel 
always returns a <strong><code>Future</code></strong> handle for <a 
shape="rect" href="async.html">Async</a> messaging to the client. The client 
can use this handler to get hold of the status of the processing whether the 
task is complete or an Exception occurred during processing. Note that the 
client is not required to do so, its perfect valid to just ignore the Future 
handle.</p></rich-text-body><parameter ac:name="">Knowing if an Asynchronous 
Request Only failed</parameter><rich-text-body><p>In case you want to know 
whether the <a shape="rect" href="async.html">Async</a> <a shape="rect" 
href="event-message.html">Req
 uest Only</a> failed, then you can use the 
<strong><code>Future</code></strong> handle and invoke 
<strong><code>get()</code></strong> and if it throws a 
<strong><code>ExecutionException</code></strong> then the processing failed. 
The caused exception is wrapped. You can invoke 
<strong><code>isDone()</code></strong> first to test whether the task is done 
or still in progress. Otherwise invoking <strong><code>get()</code></strong> 
will wait until the task is done.</p></rich-text-body><p>With these diagrams in 
mind lets turn out attention to the <a shape="rect" href="async.html">Async</a> 
API and how to use it with Camel.</p><h2 id="Async-1)TheClientAPI">1) The <a 
shape="rect" href="async.html">Async</a> Client API</h2><p>Camel provides the 
<a shape="rect" href="async.html">Async</a> Client API in the <a shape="rect" 
class="external-link" 
href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/ProducerTemplate.html";>ProducerTemplate</a>
 where we have added about
  ten new methods to Camel 2.0.</p><p>We have listed the most important in the 
table below:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Method</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Returns</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>setExecutorService</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>void</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Is used to set the Java 
<strong><code>ExecutorService</code></strong>. Camel will by default provide 
a&#160;<strong><code>ScheduledExecutorService</code></strong> with 5 thread in 
the pool.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>asyncSend</code></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Exchange&gt;</code></p></td><td 
colspan="
 1" rowspan="1" class="confluenceTd"><p>Is used to send an async exchange to a 
Camel <a shape="rect" href="endpoint.html">Endpoint</a>. Camel will immediately 
return control to the caller thread after the task has been submitted to the 
executor service. This allows you to do other work while Camel processes the 
exchange in the other async thread.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>asyncSendBody</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Object&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>As above but for sending body 
only. This is a request only messaging style so no reply is expected. Uses the 
<strong><code>InOnly</code></strong> exchange pattern.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>asyncRequestBody</code></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Object&gt;</code></p></td><td 
colspan="1" rowspan="1" class=
 "confluenceTd"><p>As above but for sending body only. This is a <a 
shape="rect" href="request-reply.html">Request Reply</a> messaging style so a 
reply is expected. Uses the <strong><code>InOut</code></strong> exchange 
pattern.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>extractFutureBody</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>T</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Is used to get the result from the 
asynchronous thread using the Java Concurrency Future 
handle.</p></td></tr></tbody></table></div><p>The 
<strong><code>asyncSend</code></strong> and 
<strong><code>asyncRequest</code></strong> methods return a Future handle. This 
handle is what the caller must use later to retrieve the asynchronous response. 
You can do this by using the <strong><code>extractFutureBody</code></strong> 
method, or just use plain Java but invoke <strong><code>get()</code></strong> 
on the <strong><code>Future</code></s
 trong> handle.</p><h3 id="Async-TheClientAPIwithcallbacks">The <a shape="rect" 
href="async.html">Async</a> Client API with callbacks</h3><p>In addition to the 
Client API from above Camel provides a variation that uses <a shape="rect" 
href="oncompletion.html">callbacks</a> when the message <a shape="rect" 
href="exchange.html">Exchange</a> is done.</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Method</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Returns</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>asyncCallback</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Exchange&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>In addition a callback is 
passed in as a parameter using the 
<strong><code>org.apache.camel.spi.Synchronization</code></strong> 
 Callback. The callback is invoked when the message exchange is 
done.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>asyncCallbackSendBody</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Object&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>As above but for sending body 
only. This is a request only messaging style so no reply is expected. Uses the 
<strong><code>InOnly</code></strong> exchange pattern.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>asyncCallbackRequestBody</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Object&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>As above but for sending body 
only. This is a <a shape="rect" href="request-reply.html">Request Reply</a> 
messaging style so a reply is expected. Uses the 
<strong><code>InOut</code></strong> exchange 
pattern.</p></td></tr></tbody></table></div><
 p>These methods also returns the&#160;<strong><code>Future</code></strong> 
handle in case you need them. The difference is that they invokes the callback 
as well when the <a shape="rect" href="exchange.html">Exchange</a> is done 
being routed.</p><h4 id="Async-TheFutureAPI">The Future API</h4><p>The 
<strong><code>java.util.concurrent.Future</code></strong> API have among others 
the following methods:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Method</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Returns</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>isDone</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>boolean</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Returns a boolean whether the 
task is done or not. Will even return <strong><code>true</code></s
 trong> if the tasks failed due to an exception thrown.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>get()</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Gets the response of the task. 
In case of an exception was thrown the 
<strong><code>java.util.concurrent.ExecutionException</code></strong> is thrown 
with the caused exception.</p></td></tr></tbody></table></div><h3 
id="Async-Example:AsynchronousRequestReply">Example: Asynchronous Request 
Reply</h3><p>Suppose we want to call a <a shape="rect" 
href="http.html">HTTP</a> service but it is usually slow and thus we do not 
want to block and wait for the response, as we can do other important 
computation. So we can initiate an <a shape="rect" href="async.html">Async</a> 
exchange to the <a shape="rect" href="http.html">HTTP</a> endpoint and then do 
other stuff while the slow <a shape="rect" href="http.html">HTTP<
 /a> service is processing our request. And then a bit later we can use the 
<strong><code>Future</code></strong> handle to get the response from the <a 
shape="rect" href="http.html">HTTP</a> service. Yeah nice so lets do 
it:</p><p>First we define some routes in Camel. One for the <a shape="rect" 
href="http.html">HTTP</a> service where we simulate a slow server as it takes 
at least 1 second to reply. And then other route that we want to invoke while 
the <a shape="rect" href="http.html">HTTP</a> service is on route. This allows 
you to be able to process the two routes 
simultaneously:<plain-text-body>{snippet:id=e1|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncTest.java}</plain-text-body>And
 then we have the client API where we call the two routes and we can get the 
responses from both of them. As the code is based on unit test there is a bit 
of mock in there as 
well:<plain-text-body>{snippet:id=e2|lang=java|url=camel/trunk/tests/camel-i
 
test/src/test/java/org/apache/camel/itest/async/HttpAsyncTest.java}</plain-text-body>All
 together it should give you the basic idea how to use this <a shape="rect" 
href="async.html">Async</a> API and what it can do.</p><h3 
id="Async-Example:SynchronousRequestReply">Example: Synchronous Request 
Reply</h3><p>This example is just to a pure synchronous version of the example 
from above that was <a shape="rect" href="async.html">Async</a> 
based.</p><p>The route is the same, so its just how the client initiate and 
send the messages that 
differs:<plain-text-body>{snippet:id=e2|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpSyncTest.java}</plain-text-body></p><h3
 id="Async-UsingtheAPIwithcallbacks">Using the <a shape="rect" 
href="async.html">Async</a> API with callbacks</h3><p>Suppose we want to call a 
<a shape="rect" href="http.html">HTTP</a> service but it is usually slow and 
thus we do not want to block and wait for the response, but instead le
 t a callback gather the response. This allows us to send multiple requests 
without waiting for the replies before we can send the next 
request.</p><p>First we define a route in Camel for the <a shape="rect" 
href="http.html">HTTP</a> service where we simulate a slow server as it takes 
at least 1 second to 
reply.<plain-text-body>{snippet:id=e1|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncCallbackTest.java}</plain-text-body>Then
 we define our callback where we gather the responses. As this is based on an 
unit test it just gathers the responses in a list. This is a shared callback we 
use for every request we send in, but you can use your own individual or use an 
anonymous callback. The callback supports different methods, but we use 
<strong><code>onDone</code></strong> that is invoked regardless if the <a 
shape="rect" href="exchange.html">Exchange</a> was processed successfully or 
failed. The <strong><code>org.apache.camel.spi.Synchroni
 zation</code></strong> API provides fine grained methods for 
<strong><code>onCompletion</code></strong> and 
<strong><code>onFailure</code></strong> for the two 
situations.<plain-text-body>{snippet:id=e2|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncCallbackTest.java}</plain-text-body>And
 then we have the client API where we call the <a shape="rect" 
href="http.html">HTTP</a> service using 
<strong><code>asyncCallback</code></strong> 3 times with different input. As 
the invocation is <a shape="rect" href="async.html">Async</a> the client will 
send 3 requests right after each other, so we have 3 concurrent exchanges in 
progress. The response is gathered by our callback so we do not have to care 
how to get the 
response.<plain-text-body>{snippet:id=e3|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncCallbackTest.java}</plain-text-body></p><h3
 id="Async-UsingtheAPIwiththeCamelclassicAPI">Using 
 the <a shape="rect" href="async.html">Async</a> API with the Camel classic 
API</h3><p>When using the Camel API to create a producer and send an <a 
shape="rect" href="exchange.html">Exchange</a> we do it like 
this:</p><parameter 
ac:name="language">java</parameter><plain-text-body>Endpoint endpoint = 
context.getEndpoint("http://slowserver.org/myservice";);
+<div class="wiki-content maincontent"><h2 
id="Async-Async">Async</h2><p><strong>Available as of Camel 
2.0</strong></p><p>The asynchronous API in Camel have been rewritten for Camel 
2.0, and the information on this page applies for Camel 2.0 and 
later.</p><p>The <a shape="rect" href="async.html">Async</a> API in Camel is 
primarily divided in two areas:</p><ol><li>Initiating an <a shape="rect" 
href="async.html">Async</a> messaging from the client</li><li>Turning a route 
into <a shape="rect" href="async.html">Async</a> using the 
<strong>threads</strong> <a shape="rect" 
href="dsl.html">DSL</a></li></ol><p>Before we look at these two areas we start 
with a bit of background information and looks at the concept from at a higher 
level using diagrams. Then we check out the first area how a client can 
initiate an <a shape="rect" href="async.html">Async</a> message exchange and we 
also throw in the synchronous message exchange in the mix as well so we can 
compare and distill the difference. An
 d finally we turn our attention towards the last area the new 
<strong>threads</strong> DSL and what it can be used for.</p><h2 
id="Async-Background">Background</h2><p>The new <a shape="rect" 
href="async.html">Async</a> API in Camel 2.0 leverages in much greater detail 
the Java Concurrency API and its support for executing tasks asynchronous. 
Therefore the Camel <a shape="rect" href="async.html">Async</a> API should be 
familiar for users with knowledge of the Java Concurrency API.</p><h3 
id="Async-Afewconceptstomaster">A few concepts to master</h3><p>When doing 
messaging there are a few aspects to keep in mind. First of all a caller can 
initiate a message exchange as either:</p><ul class="alternate"><li><a 
shape="rect" href="event-message.html">Request only</a></li><li><a shape="rect" 
href="request-reply.html">Request Reply</a></li></ul><p><a shape="rect" 
href="event-message.html">Request only</a> is when the caller sends a message 
but do <strong>not</strong> expect any reply. This i
 s also known as fire and forget or event message. The <a shape="rect" 
href="request-reply.html">Request Reply</a> is when the caller sends a message 
and then <strong>waits for a reply</strong>. This is like the <a shape="rect" 
href="http.html">HTTP</a> protocol that we use every day when we surf the web. 
We send a request to fetch a web page and wait until the reply message comes 
with the web content.</p><p>In Camel a message is labeled with a Message <a 
shape="rect" href="exchange-pattern.html">Exchange Pattern</a> that labels 
whether its a request only or request reply message. Camel uses the <a 
shape="rect" href="jbi.html">JBI</a> term for this an uses 
<strong><code>InOnly</code></strong> for the request only, and 
<strong><code>InOut</code></strong> for the request reply.</p><p>For all 
message exchange they can be executed either:</p><ul 
class="alternate"><li>synchronous</li><li>asynchronous</li></ul><h4 
id="Async-SynchronousRequestReply">Synchronous Request Reply</h4><p>A synchr
 onous exchange is defined as the caller sends a message and waits until its 
complete before continuing.</p><p>This is illustrated in the diagram 
below:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" src="async.data/camel_sync_request_reply.png" 
data-image-src="/confluence/download/attachments/117116/camel_sync_request_reply.png?version=1&amp;modificationDate=1241917552000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="10641" 
data-linked-resource-version="1" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="camel_sync_request_reply.png" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="117116" 
data-linked-resource-container-version="58"></span></p><ol><li>The client sends 
a sync <a shape="rect" href="request-reply.html">Request Reply</a> message over 
<a shape="rect" href="http.html">HTTP</a> to Camel. The clie
 nt application will wait for the response that Camel routes and 
processes.</li><li>The message invokes an external <a shape="rect" 
href="mina.html">TCP</a> service using synchronous <a shape="rect" 
href="request-reply.html">Request Reply</a>. The client application still waits 
for the response.</li><li>The response is send back to the client.</li></ol><h4 
id="Async-AsynchronousRequestReply">Asynchronous Request Reply</h4><p>On the 
other hand the asynchronous version is where the caller sends a message to an 
<a shape="rect" href="endpoint.html">Endpoint</a> and then returns immediately 
back to the caller. The message however is processed in another thread, the 
asynchronous thread. Then the caller can continue doing other work and at the 
same time the asynchronous thread is processing the message.</p><p>This is 
illustrated in the diagram below:</p><p><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="async.data/camel_async_request_reply.png" dat
 
a-image-src="/confluence/download/attachments/117116/camel_async_request_reply.png?version=2&amp;modificationDate=1241928088000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="10640" 
data-linked-resource-version="2" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="camel_async_request_reply.png" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="117116" 
data-linked-resource-container-version="58"></span></p><ol><li>The client sends 
an <a shape="rect" href="async.html">Async</a><a shape="rect" 
href="request-reply.html">Request Reply</a> message over <a shape="rect" 
href="http.html">HTTP</a> to Camel. The control is immediately returned to the 
client application, that can continue and do other work while Camel routes the 
message.</li><li>Camel invokes an external <a shape="rect" 
href="mina.html">TCP</a> service using synchronous <a shape="rect" href="reques
 t-reply.html">Request Reply</a>. The client application can do other work 
simultaneously.</li><li>The client wants to get the reply so it uses the Future 
handle it got as <em>response</em> from step 1. With this handle it retrieves 
the reply, wait if necessary if the reply is not 
ready.</li></ol><p>&#160;</p><h4 id="Async-SynchronousRequestOnly">Synchronous 
Request Only</h4><p>&#160;</p><p>You can also do synchronous <a shape="rect" 
href="event-message.html">Request only</a> with Camel. The client sends a 
message to Camel in which a reply is not expected. However the client still 
waits until the message is processed completely.</p><p>This is illustrated in 
the diagram below:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" src="async.data/camel_sync_request_only.png" 
data-image-src="/confluence/download/attachments/117116/camel_sync_request_only.png?version=1&amp;modificationDate=1241923637000&amp;api=v2"
 data-unresolved-comment-count="0" d
 ata-linked-resource-id="10642" data-linked-resource-version="1" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="camel_sync_request_only.png" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="117116" 
data-linked-resource-container-version="58"></span></p><ol><li>The client sends 
a <a shape="rect" href="event-message.html">Request only</a> and we can still 
use <a shape="rect" href="http.html">HTTP</a> despite http being <a 
shape="rect" href="request-reply.html">Request Reply</a> by 
nature.</li><li>Camel invokes an external <a shape="rect" 
href="mina.html">TCP</a> service using synchronous <a shape="rect" 
href="request-reply.html">Request Reply</a>. The client application is still 
waiting.</li><li>The message is processed completely and the control is 
returned to the client.</li></ol><p>So why do you want to use synchronous <a 
shape="rect" href="event-message.html">Request Only
 </a>? Well if you want to know whether the message was processed successfully 
or not before continuing. With synchronous it allows you to wait while the 
message is being processed. In case the processing was successful the control 
is returned to the client with no notion of error. In case of failure the 
client can detect this as an exception is thrown. (and 
<strong><code>exchange.isFailed()</code></strong> returns 
<strong><code>true</code>).</strong></p><h3 
id="Async-AsynchronousRequestOnly">Asynchronous Request Only</h3><p>As opposed 
to the synchronous <a shape="rect" href="event-message.html">Request Only</a> 
the <a shape="rect" href="async.html">Async</a> counter part will 
<strong>not</strong> wait for the processing of the message to complete. In 
this case the client can immediately continue doing other work while the 
message is being routed and processed in Camel.</p><p>This is illustrated in 
the diagram below:</p><p><span class="confluence-embedded-file-wrapper"><img 
class="co
 nfluence-embedded-image" src="async.data/camel_async_request_only.png" 
data-image-src="/confluence/download/attachments/117116/camel_async_request_only.png?version=1&amp;modificationDate=1241928107000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="10644" 
data-linked-resource-version="1" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="camel_async_request_only.png" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="117116" 
data-linked-resource-container-version="58"></span></p><ol><li>The client sends 
a <a shape="rect" href="event-message.html">Request only</a> and we can still 
use <a shape="rect" href="http.html">HTTP</a> despite HTTP being <a 
shape="rect" href="request-reply.html">Request Reply</a> by nature. The control 
is immediately returned to the client application, that can continue and do 
other work while Camel routes the message.</li><li>Camel 
 invokes an external <a shape="rect" href="mina.html">TCP</a> service using 
synchronous <a shape="rect" href="request-reply.html">Request Reply</a>. The 
client application can do other work simultaneously.</li><li>The message 
completes but no result is returned to the client.<br clear="none"><br 
clear="none"></li></ol><rich-text-body><p><strong>Note:</strong> As Camel 
always returns a <strong><code>Future</code></strong> handle for <a 
shape="rect" href="async.html">Async</a> messaging to the client. The client 
can use this handler to get hold of the status of the processing whether the 
task is complete or an Exception occurred during processing. Note that the 
client is not required to do so, its perfect valid to just ignore the Future 
handle.</p></rich-text-body><parameter ac:name="">Knowing if an Asynchronous 
Request Only failed</parameter><rich-text-body><p>In case you want to know 
whether the <a shape="rect" href="async.html">Async</a> <a shape="rect" 
href="event-message.html">Req
 uest Only</a> failed, then you can use the 
<strong><code>Future</code></strong> handle and invoke 
<strong><code>get()</code></strong> and if it throws a 
<strong><code>ExecutionException</code></strong> then the processing failed. 
The caused exception is wrapped. You can invoke 
<strong><code>isDone()</code></strong> first to test whether the task is done 
or still in progress. Otherwise invoking <strong><code>get()</code></strong> 
will wait until the task is done.</p></rich-text-body><p>With these diagrams in 
mind lets turn out attention to the <a shape="rect" href="async.html">Async</a> 
API and how to use it with Camel.</p><h2 id="Async-1)TheClientAPI">1) The <a 
shape="rect" href="async.html">Async</a> Client API</h2><p>Camel provides the 
<a shape="rect" href="async.html">Async</a> Client API in the <a shape="rect" 
class="external-link" 
href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/ProducerTemplate.html";>ProducerTemplate</a>
 where we have added about
  ten new methods to Camel 2.0.</p><p>We have listed the most important in the 
table below:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Method</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Returns</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>setExecutorService</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>void</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Is used to set the Java 
<strong><code>ExecutorService</code></strong>. Camel will by default provide 
a&#160;<strong><code>ScheduledExecutorService</code></strong> with 5 thread in 
the pool.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>asyncSend</code></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Exchange&gt;</code></p></td><td 
colspan="
 1" rowspan="1" class="confluenceTd"><p>Is used to send an async exchange to a 
Camel <a shape="rect" href="endpoint.html">Endpoint</a>. Camel will immediately 
return control to the caller thread after the task has been submitted to the 
executor service. This allows you to do other work while Camel processes the 
exchange in the other async thread.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>asyncSendBody</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Object&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>As above but for sending body 
only. This is a request only messaging style so no reply is expected. Uses the 
<strong><code>InOnly</code></strong> exchange pattern.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>asyncRequestBody</code></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Object&gt;</code></p></td><td 
colspan="1" rowspan="1" class=
 "confluenceTd"><p>As above but for sending body only. This is a <a 
shape="rect" href="request-reply.html">Request Reply</a> messaging style so a 
reply is expected. Uses the <strong><code>InOut</code></strong> exchange 
pattern.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>extractFutureBody</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>T</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Is used to get the result from the 
asynchronous thread using the Java Concurrency Future 
handle.</p></td></tr></tbody></table></div><p>The 
<strong><code>asyncSend</code></strong> and 
<strong><code>asyncRequest</code></strong> methods return a Future handle. This 
handle is what the caller must use later to retrieve the asynchronous response. 
You can do this by using the <strong><code>extractFutureBody</code></strong> 
method, or just use plain Java but invoke <strong><code>get()</code></strong> 
on the <strong><code>Future</code></s
 trong> handle.</p><h3 id="Async-TheClientAPIwithcallbacks">The <a shape="rect" 
href="async.html">Async</a> Client API with callbacks</h3><p>In addition to the 
Client API from above Camel provides a variation that uses <a shape="rect" 
href="oncompletion.html">callbacks</a> when the message <a shape="rect" 
href="exchange.html">Exchange</a> is done.</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Method</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Returns</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>asyncCallback</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Exchange&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>In addition a callback is 
passed in as a parameter using the 
<strong><code>org.apache.camel.spi.Synchronization</code></strong> 
 Callback. The callback is invoked when the message exchange is 
done.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>asyncCallbackSendBody</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Object&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>As above but for sending body 
only. This is a request only messaging style so no reply is expected. Uses the 
<strong><code>InOnly</code></strong> exchange pattern.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>asyncCallbackRequestBody</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Future&lt;Object&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>As above but for sending body 
only. This is a <a shape="rect" href="request-reply.html">Request Reply</a> 
messaging style so a reply is expected. Uses the 
<strong><code>InOut</code></strong> exchange 
pattern.</p></td></tr></tbody></table></div><
 p>These methods also returns the&#160;<strong><code>Future</code></strong> 
handle in case you need them. The difference is that they invokes the callback 
as well when the <a shape="rect" href="exchange.html">Exchange</a> is done 
being routed.</p><h4 id="Async-TheFutureAPI">The Future API</h4><p>The 
<strong><code>java.util.concurrent.Future</code></strong> API have among others 
the following methods:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Method</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Returns</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>isDone</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>boolean</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Returns a boolean whether the 
task is done or not. Will even return <strong><code>true</code></s
 trong> if the tasks failed due to an exception thrown.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>get()</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Gets the response of the task. 
In case of an exception was thrown the 
<strong><code>java.util.concurrent.ExecutionException</code></strong> is thrown 
with the caused exception.</p></td></tr></tbody></table></div><h3 
id="Async-Example:AsynchronousRequestReply">Example: Asynchronous Request 
Reply</h3><p>Suppose we want to call a <a shape="rect" 
href="http.html">HTTP</a> service but it is usually slow and thus we do not 
want to block and wait for the response, as we can do other important 
computation. So we can initiate an <a shape="rect" href="async.html">Async</a> 
exchange to the <a shape="rect" href="http.html">HTTP</a> endpoint and then do 
other stuff while the slow <a shape="rect" href="http.html">HTTP<
 /a> service is processing our request. And then a bit later we can use the 
<strong><code>Future</code></strong> handle to get the response from the <a 
shape="rect" href="http.html">HTTP</a> service. Yeah nice so lets do 
it:</p><p>First we define some routes in Camel. One for the <a shape="rect" 
href="http.html">HTTP</a> service where we simulate a slow server as it takes 
at least 1 second to reply. And then other route that we want to invoke while 
the <a shape="rect" href="http.html">HTTP</a> service is on route. This allows 
you to be able to process the two routes 
simultaneously:<plain-text-body>{snippet:id=e1|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncTest.java}</plain-text-body>And
 then we have the client API where we call the two routes and we can get the 
responses from both of them. As the code is based on unit test there is a bit 
of mock in there as 
well:<plain-text-body>{snippet:id=e2|lang=java|url=camel/trunk/tests/camel-i
 
test/src/test/java/org/apache/camel/itest/async/HttpAsyncTest.java}</plain-text-body>All
 together it should give you the basic idea how to use this <a shape="rect" 
href="async.html">Async</a> API and what it can do.</p><h3 
id="Async-Example:SynchronousRequestReply">Example: Synchronous Request 
Reply</h3><p>This example is just to a pure synchronous version of the example 
from above that was <a shape="rect" href="async.html">Async</a> 
based.</p><p>The route is the same, so its just how the client initiate and 
send the messages that 
differs:<plain-text-body>{snippet:id=e2|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpSyncTest.java}</plain-text-body></p><h3
 id="Async-UsingtheAPIwithcallbacks">Using the <a shape="rect" 
href="async.html">Async</a> API with callbacks</h3><p>Suppose we want to call a 
<a shape="rect" href="http.html">HTTP</a> service but it is usually slow and 
thus we do not want to block and wait for the response, but instead le
 t a callback gather the response. This allows us to send multiple requests 
without waiting for the replies before we can send the next 
request.</p><p>First we define a route in Camel for the <a shape="rect" 
href="http.html">HTTP</a> service where we simulate a slow server as it takes 
at least 1 second to 
reply.<plain-text-body>{snippet:id=e1|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncCallbackTest.java}</plain-text-body>Then
 we define our callback where we gather the responses. As this is based on an 
unit test it just gathers the responses in a list. This is a shared callback we 
use for every request we send in, but you can use your own individual or use an 
anonymous callback. The callback supports different methods, but we use 
<strong><code>onDone</code></strong> that is invoked regardless if the <a 
shape="rect" href="exchange.html">Exchange</a> was processed successfully or 
failed. The <strong><code>org.apache.camel.spi.Synchroni
 zation</code></strong> API provides fine grained methods for 
<strong><code>onCompletion</code></strong> and 
<strong><code>onFailure</code></strong> for the two 
situations.<plain-text-body>{snippet:id=e2|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncCallbackTest.java}</plain-text-body>And
 then we have the client API where we call the <a shape="rect" 
href="http.html">HTTP</a> service using 
<strong><code>asyncCallback</code></strong> 3 times with different input. As 
the invocation is <a shape="rect" href="async.html">Async</a> the client will 
send 3 requests right after each other, so we have 3 concurrent exchanges in 
progress. The response is gathered by our callback so we do not have to care 
how to get the 
response.<plain-text-body>{snippet:id=e3|lang=java|url=camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncCallbackTest.java}</plain-text-body></p><h3
 id="Async-UsingtheAPIwiththeCamelclassicAPI">Using 
 the <a shape="rect" href="async.html">Async</a> API with the Camel classic 
API</h3><p>When using the Camel API to create a producer and send an <a 
shape="rect" href="exchange.html">Exchange</a> we do it like 
this:</p><parameter 
ac:name="language">java</parameter><plain-text-body>Endpoint endpoint = 
context.getEndpoint("http://slowserver.org/myservice";);
 Exchange exchange = endpoint.createExchange();
 exchange.getIn().setBody("Order ABC");
 

Modified: websites/production/camel/content/book-in-one-page.html
==============================================================================
--- websites/production/camel/content/book-in-one-page.html (original)
+++ websites/production/camel/content/book-in-one-page.html Tue Sep 26 19:19:34 
2017
@@ -2529,7 +2529,7 @@ While not actual tutorials you might fin
 </plain-text-body><p>All that is required is a new plugin definition in your 
Maven POM. As we have already placed our Camel config in the default location 
(camel-server.xml has been placed in META-INF/spring/) we do not need to tell 
the plugin where the route definitions are located. Simply run <code>mvn 
camel:run</code>.</p><h2 id="BookInOnePage-UsingCamelJMX">Using Camel 
JMX</h2><p>Camel has extensive support for JMX and allows us to inspect the 
Camel Server at runtime. As we have enabled the JMXAgent in our tutorial we can 
fire up the jconsole and connect to the following service URI: 
<code>service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel</code>. Notice 
that Camel will log at INFO level the JMX Connector URI:</p><plain-text-body>...
 DefaultInstrumentationAgent    INFO  JMX connector thread started on 
service:jmx:rmi:///jndi/rmi://claus-acer:1099/jmxrmi/camel
 ...
-</plain-text-body><p>In the screenshot below we can see the route and its 
performance metrics:<br clear="none"> <span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="book-in-one-page.data/jconsole_jms_tutorial.PNG" 
data-image-src="/confluence/download/attachments/82923/jconsole_jms_tutorial.PNG?version=1&amp;modificationDate=1214345078000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="59672517" 
data-linked-resource-version="1" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="jconsole_jms_tutorial.PNG" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="82923" 
data-linked-resource-container-version="43"></span></p><h2 
id="BookInOnePage-SeeAlso.4">See Also</h2><ul><li><a shape="rect" 
class="external-link" href="http://aminsblog.wordpress.com/2008/05/06/15/"; 
rel="nofollow">Spring Remoting with JMS Example</a> on <a shape
 ="rect" class="external-link" href="http://aminsblog.wordpress.com/"; 
rel="nofollow">Amin Abbaspour's Weblog</a></li></ul>
+</plain-text-body><p>In the screenshot below we can see the route and its 
performance metrics:<br clear="none"> <span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="book-in-one-page.data/jconsole_jms_tutorial.PNG" 
data-image-src="/confluence/download/attachments/82923/jconsole_jms_tutorial.PNG?version=1&amp;modificationDate=1214345078000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="59672517" 
data-linked-resource-version="1" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="jconsole_jms_tutorial.PNG" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="82923" 
data-linked-resource-container-version="44"></span></p><h2 
id="BookInOnePage-SeeAlso.4">See Also</h2><ul><li><a shape="rect" 
class="external-link" href="http://aminsblog.wordpress.com/2008/05/06/15/"; 
rel="nofollow">Spring Remoting with JMS Example</a> on <a shape
 ="rect" class="external-link" href="http://aminsblog.wordpress.com/"; 
rel="nofollow">Amin Abbaspour's Weblog</a></li></ul>
 
 <h2 id="BookInOnePage-Tutorial-camel-example-reportincident">Tutorial - 
camel-example-reportincident</h2>
 
@@ -4368,11 +4368,11 @@ So we completed the last piece in the pi
 <p>This example has been removed from <strong>Camel 2.9</strong> onwards. 
Apache Axis 1.4 is a very old and unsupported framework. We encourage users to 
use <a shape="rect" href="cxf.html">CXF</a> instead of Axis.</p></div></div>
 
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1506370753200 {padding: 0px;}
-div.rbtoc1506370753200 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1506370753200 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1506453499453 {padding: 0px;}
+div.rbtoc1506453499453 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1506453499453 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1506370753200">
+/*]]>*/</style><div class="toc-macro rbtoc1506453499453">
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-TutorialusingAxis1.4withApacheCamel">Tutorial using Axis 
1.4 with Apache Camel</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-Prerequisites">Prerequisites</a></li><li><a shape="rect" 
href="#BookInOnePage-Distribution">Distribution</a></li><li><a shape="rect" 
href="#BookInOnePage-Introduction">Introduction</a></li><li><a shape="rect" 
href="#BookInOnePage-SettinguptheprojecttorunAxis">Setting up the project to 
run Axis</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-Maven2">Maven 2</a></li><li><a shape="rect" 
href="#BookInOnePage-wsdl">wsdl</a></li><li><a shape="rect" 
href="#BookInOnePage-ConfiguringAxis">Configuring Axis</a></li><li><a 
shape="rect" href="#BookInOnePage-RunningtheExample">Running the 
Example</a></li></ul>

Modified: websites/production/camel/content/book-tutorials.html
==============================================================================
--- websites/production/camel/content/book-tutorials.html (original)
+++ websites/production/camel/content/book-tutorials.html Tue Sep 26 19:19:34 
2017
@@ -157,7 +157,7 @@ While not actual tutorials you might fin
 </plain-text-body><p>All that is required is a new plugin definition in your 
Maven POM. As we have already placed our Camel config in the default location 
(camel-server.xml has been placed in META-INF/spring/) we do not need to tell 
the plugin where the route definitions are located. Simply run <code>mvn 
camel:run</code>.</p><h2 id="BookTutorials-UsingCamelJMX">Using Camel 
JMX</h2><p>Camel has extensive support for JMX and allows us to inspect the 
Camel Server at runtime. As we have enabled the JMXAgent in our tutorial we can 
fire up the jconsole and connect to the following service URI: 
<code>service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel</code>. Notice 
that Camel will log at INFO level the JMX Connector URI:</p><plain-text-body>...
 DefaultInstrumentationAgent    INFO  JMX connector thread started on 
service:jmx:rmi:///jndi/rmi://claus-acer:1099/jmxrmi/camel
 ...
-</plain-text-body><p>In the screenshot below we can see the route and its 
performance metrics:<br clear="none"> <span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="book-tutorials.data/jconsole_jms_tutorial.PNG" 
data-image-src="/confluence/download/attachments/82923/jconsole_jms_tutorial.PNG?version=1&amp;modificationDate=1214345078000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="59672517" 
data-linked-resource-version="1" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="jconsole_jms_tutorial.PNG" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="82923" 
data-linked-resource-container-version="43"></span></p><h2 
id="BookTutorials-SeeAlso">See Also</h2><ul><li><a shape="rect" 
class="external-link" href="http://aminsblog.wordpress.com/2008/05/06/15/"; 
rel="nofollow">Spring Remoting with JMS Example</a> on <a shape="re
 ct" class="external-link" href="http://aminsblog.wordpress.com/"; 
rel="nofollow">Amin Abbaspour's Weblog</a></li></ul>
+</plain-text-body><p>In the screenshot below we can see the route and its 
performance metrics:<br clear="none"> <span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="book-tutorials.data/jconsole_jms_tutorial.PNG" 
data-image-src="/confluence/download/attachments/82923/jconsole_jms_tutorial.PNG?version=1&amp;modificationDate=1214345078000&amp;api=v2"
 data-unresolved-comment-count="0" data-linked-resource-id="59672517" 
data-linked-resource-version="1" data-linked-resource-type="attachment" 
data-linked-resource-default-alias="jconsole_jms_tutorial.PNG" 
data-base-url="https://cwiki.apache.org/confluence"; 
data-linked-resource-content-type="image/png" 
data-linked-resource-container-id="82923" 
data-linked-resource-container-version="44"></span></p><h2 
id="BookTutorials-SeeAlso">See Also</h2><ul><li><a shape="rect" 
class="external-link" href="http://aminsblog.wordpress.com/2008/05/06/15/"; 
rel="nofollow">Spring Remoting with JMS Example</a> on <a shape="re
 ct" class="external-link" href="http://aminsblog.wordpress.com/"; 
rel="nofollow">Amin Abbaspour's Weblog</a></li></ul>
 
 <h2 id="BookTutorials-Tutorial-camel-example-reportincident">Tutorial - 
camel-example-reportincident</h2>
 
@@ -1996,11 +1996,11 @@ So we completed the last piece in the pi
 <p>This example has been removed from <strong>Camel 2.9</strong> onwards. 
Apache Axis 1.4 is a very old and unsupported framework. We encourage users to 
use <a shape="rect" href="cxf.html">CXF</a> instead of Axis.</p></div></div>
 
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1506370912450 {padding: 0px;}
-div.rbtoc1506370912450 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1506370912450 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1506453497186 {padding: 0px;}
+div.rbtoc1506453497186 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1506453497186 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1506370912450">
+/*]]>*/</style><div class="toc-macro rbtoc1506453497186">
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookTutorials-TutorialusingAxis1.4withApacheCamel">Tutorial using Axis 
1.4 with Apache Camel</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookTutorials-Prerequisites">Prerequisites</a></li><li><a shape="rect" 
href="#BookTutorials-Distribution">Distribution</a></li><li><a shape="rect" 
href="#BookTutorials-Introduction">Introduction</a></li><li><a shape="rect" 
href="#BookTutorials-SettinguptheprojecttorunAxis">Setting up the project to 
run Axis</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookTutorials-Maven2">Maven 2</a></li><li><a shape="rect" 
href="#BookTutorials-wsdl">wsdl</a></li><li><a shape="rect" 
href="#BookTutorials-ConfiguringAxis">Configuring Axis</a></li><li><a 
shape="rect" href="#BookTutorials-RunningtheExample">Running the 
Example</a></li></ul>

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


Reply via email to