You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by bu...@apache.org on 2015/04/17 13:20:03 UTC

svn commit: r948005 [2/2] - in /websites/production/camel/content: book-cookbook.html book-in-one-page.html book-pattern-appendix.html cache/main.pageCache camel-test.html dead-letter-channel.html

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 Fri Apr 17 11:20:03 2015
@@ -452,7 +452,7 @@ RouteBuilder builder = new RouteBuilder(
                     <p class="title">Difference between Dead Letter Channel and Default Error Handler</p>
                             <span class="aui-icon icon-success">Icon</span>
                 <div class="message-content">
-                            <p>The major difference is that <a shape="rect" href="dead-letter-channel.html">Dead Letter Channel</a> has a dead letter queue that whenever an <a shape="rect" href="exchange.html">Exchange</a> could not be processed is moved to. It will <strong>always</strong> move failed exchanges to this queue.</p><p>Unlike the <a shape="rect" href="defaulterrorhandler.html">Default Error Handler</a> that does <strong>not</strong> have a dead letter queue. So whenever an <a shape="rect" href="exchange.html">Exchange</a> could not be processed the error is propagated back to the client.</p><p><strong>Notice:</strong> You can adjust this behavior of whether the client should be notified or not with the <strong>handled</strong> option.</p><p>When the DeadLetterChannel moves a message to the dead letter endpoint, then if any new exceptions is thrown during that process, then by default the dead letter channel will handle the new exception as well. This ensures that the De
 adLetterChannel will always succeed. From <strong>Camel 2.15</strong> onwards this behavior can be changed by setting the option deadLetterHandleNewException=false. Then if a new exception is thrown, then the dead letter channel will fail and propagate back that new exception (which is the behavior of the default error handler). When a new exception occurs then the dead letter channel logs this at WARN level. This can be turned off by setting logNewException=false.</p>
+                            <p>The Default Error Handler does very little: it ends the Exchange immediately and propagates the thrown Exception back to the caller.</p><p>The Dead Letter Channel lets you control behaviors including redelivery, whether to propagate the thrown Exception to the caller (the <strong>handled</strong> option), and where the (failed) Exchange should now be routed to.</p><p>When the DeadLetterChannel moves a message to the dead letter endpoint, any new Exception thrown is by default handled by the dead letter channel as well. This ensures that the DeadLetterChannel will always succeed. From <strong>Camel 2.15</strong> onwards this behavior can be changed by setting the option deadLetterHandleNewException=false. Then if a new Exception is thrown, then the dead letter channel will fail and propagate back that new Exception (which is the behavior of the default error handler). When a new Exception occurs then the dead letter channel logs this at WARN level. This
  can be turned off by setting logNewException=false.</p>
                     </div>
     </div>
 <h3 id="BookPatternAppendix-Redelivery">Redelivery</h3><p>It is common for a temporary outage or database deadlock to cause a message to fail to process; but the chances are if its tried a few more times with some time delay then it will complete fine. So we typically wish to use some kind of redelivery policy to decide how many times to try redeliver a message and how long to wait before redelivery attempts.</p><p>The <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/RedeliveryPolicy.html">RedeliveryPolicy</a> defines how the message is to be redelivered. You can customize things like</p><ul><li>how many times a message is attempted to be redelivered before it is considered a failure and sent to the dead letter channel</li><li>the initial redelivery timeout</li><li>whether or not exponential backoff is used (i.e. the time between retries increases using a backoff multiplier)</li><li>whether to use collisi
 on avoidance to add some randomness to the timings</li><li>delay pattern (see below for details)</li><li><strong>Camel 2.11:</strong> whether to allow redelivery during stopping/shutdown</li></ul><p>Once all attempts at redelivering the message fails then the message is forwarded to the dead letter queue.</p><h3 id="BookPatternAppendix-AboutmovingExchangetodeadletterqueueandusinghandled">About moving Exchange to dead letter queue and using handled</h3><p><strong>Handled</strong> on <a shape="rect" href="dead-letter-channel.html">Dead Letter Channel</a></p><p>When all attempts of redelivery have failed the <a shape="rect" href="exchange.html">Exchange</a> is moved to the dead letter queue (the dead letter endpoint). The exchange is then complete and from the client point of view it was processed. As such the <a shape="rect" href="dead-letter-channel.html">Dead Letter Channel</a> have handled the <a shape="rect" href="exchange.html">Exchange</a>.</p><p>For instance configuring the dea
 d letter channel as:</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">
@@ -612,7 +612,7 @@ public class MyRedeliverProcessor implem
     }
 }
 ]]></script>
-</div></div><p></p><h4 id="BookPatternAppendix-UsingThisPattern.8">Using This Pattern</h4>
+</div></div><h3 id="BookPatternAppendix-HowcanIlogwhatcausedtheDeadLetterChanneltobeinvoked?">How can I log what caused the Dead Letter Channel to be invoked?</h3><p>You often need to know what went wrong that caused the Dead Letter Channel to be used and it does not offer logging for this purpose. So the Dead Letter Channel's endpoint can be set to a endpoint of our own (such as&#160;<code>direct:deadLetterChannel</code>). We write a route to accept this Exchange and log the Exception, then forward on to where we want the failed Exchange moved to (which might be a DLQ queue for instance). See also&#160;<a shape="rect" class="external-link" href="http://stackoverflow.com/questions/13711462/logging-camel-exceptions-and-sending-to-the-dead-letter-channel" rel="nofollow">http://stackoverflow.com/questions/13711462/logging-camel-exceptions-and-sending-to-the-dead-letter-channel</a></p><p></p><h4 id="BookPatternAppendix-UsingThisPattern.8">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><ul class="alternate"><li><a shape="rect" href="error-handler.html">Error Handler</a></li><li><a shape="rect" href="exception-clause.html">Exception Clause</a></li></ul>
 <h3 id="BookPatternAppendix-GuaranteedDelivery">Guaranteed Delivery</h3><p>Camel supports the <a shape="rect" class="external-link" href="http://www.enterpriseintegrationpatterns.com/GuaranteedMessaging.html" rel="nofollow">Guaranteed Delivery</a> from the <a shape="rect" href="enterprise-integration-patterns.html">EIP patterns</a> using among others the following components:</p><ul><li><a shape="rect" href="file2.html">File</a> for using file systems as a persistent store of messages</li><li><a shape="rect" href="jms.html">JMS</a> when using persistent delivery (the default) for working with JMS Queues and Topics for high performance, clustering and load balancing</li><li><a shape="rect" href="jpa.html">JPA</a> for using a database as a persistence layer, or use any of the many other database component such as <a shape="rect" href="sql.html">SQL</a>, <a shape="rect" href="jdbc.html">JDBC</a>, <a shape="rect" href="ibatis.html">iBATIS</a>/<a shape="rect" href="mybatis.html">MyBatis<
 /a>, <a shape="rect" href="hibernate.html">Hibernate</a></li><li><a shape="rect" href="hawtdb.html">HawtDB</a> for a lightweight key-value persistent store</li></ul><p><img class="confluence-embedded-image confluence-external-resource" src="http://www.enterpriseintegrationpatterns.com/img/GuaranteedMessagingSolution.gif" data-image-src="http://www.enterpriseintegrationpatterns.com/img/GuaranteedMessagingSolution.gif"></p><h4 id="BookPatternAppendix-Example.1">Example</h4><p>The following example demonstrates illustrates the use of&#160;<a shape="rect" class="external-link" href="http://www.enterpriseintegrationpatterns.com/GuaranteedMessaging.html" rel="nofollow">Guaranteed Delivery</a>&#160;within the&#160;<a shape="rect" href="jms.html">JMS</a>&#160;component. By default, a message is not considered successfully delivered until the recipient has persisted the message locally guaranteeing its receipt in the event the destination becomes unavailable.</p><p><strong>Using the&#160;<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">

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

Modified: websites/production/camel/content/camel-test.html
==============================================================================
--- websites/production/camel/content/camel-test.html (original)
+++ websites/production/camel/content/camel-test.html Fri Apr 17 11:20:03 2015
@@ -86,54 +86,30 @@
 	<tbody>
         <tr>
         <td valign="top" width="100%">
-<div class="wiki-content maincontent"><h2 id="CamelTest-CamelTest">Camel Test</h2>
-
-<p>As a simple alternative to using <a shape="rect" href="spring-testing.html">Spring Testing</a> or <a shape="rect" href="guice.html">Guice</a> the <strong>camel-test</strong> module was introduced so you can perform powerful <a shape="rect" href="testing.html">Testing</a> of your <a shape="rect" href="enterprise-integration-patterns.html">Enterprise Integration Patterns</a> easily.</p>
-
-    <div class="aui-message hint shadowed information-macro">
+<div class="wiki-content maincontent"><h2 id="CamelTest-CamelTest">Camel Test</h2><p>As a simple alternative to using <a shape="rect" href="spring-testing.html">Spring Testing</a> or <a shape="rect" href="guice.html">Guice</a> the <strong>camel-test</strong> module was introduced so you can perform powerful <a shape="rect" href="testing.html">Testing</a> of your <a shape="rect" href="enterprise-integration-patterns.html">Enterprise Integration Patterns</a> easily.</p>    <div class="aui-message hint shadowed information-macro">
                             <span class="aui-icon icon-hint">Icon</span>
                 <div class="message-content">
-                            
-<p>The <code>camel-test</code> JAR is using JUnit. There is an alternative <code>camel-testng</code> JAR (Camel 2.8 onwards) using the <a shape="rect" class="external-link" href="http://testng.org/doc/index.html" rel="nofollow">TestNG</a> test framework.</p>
+                            <p>The <code>camel-test</code> JAR is using JUnit. There is an alternative <code>camel-testng</code> JAR (Camel 2.8 onwards) using the <a shape="rect" class="external-link" href="http://testng.org/doc/index.html" rel="nofollow">TestNG</a> test framework.</p>
                     </div>
     </div>
-
-
-<h3 id="CamelTest-Addingtoyourpom.xml">Adding to your pom.xml</h3>
-
-<p>To get started using Camel Test you will need to add an entry to your pom.xml</p>
-
-<h4 id="CamelTest-JUnit">JUnit</h4>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;dependency&gt;
+<h3 id="CamelTest-Addingtoyourpom.xml">Adding to your pom.xml</h3><p>To get started using Camel Test you will need to add an entry to your pom.xml</p><h4 id="CamelTest-JUnit">JUnit</h4><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;dependency&gt;
   &lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
   &lt;artifactId&gt;camel-test&lt;/artifactId&gt;
   &lt;version&gt;${camel-version}&lt;/version&gt;
   &lt;scope&gt;test&lt;/scope&gt;
 &lt;/dependency&gt;
 ]]></script>
-</div></div>
-
-<h4 id="CamelTest-TestNG">TestNG</h4>
-
-<p><strong>Available as of Camel 2.8</strong></p>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;dependency&gt;
+</div></div><h4 id="CamelTest-TestNG">TestNG</h4><p><strong>Available as of Camel 2.8</strong></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;dependency&gt;
   &lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
   &lt;artifactId&gt;camel-testng&lt;/artifactId&gt;
   &lt;version&gt;${camel-version}&lt;/version&gt;
   &lt;scope&gt;test&lt;/scope&gt;
 &lt;/dependency&gt;
 ]]></script>
-</div></div>
-
-<p>You might also want to add slf4j and log4j to ensure nice logging messages (and maybe adding a <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/resources/log4j.properties">log4j.properties</a> file into your src/test/resources directory).</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;dependency&gt;
+</div></div><p>You might also want to add slf4j and log4j to ensure nice logging messages (and maybe adding a <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/resources/log4j.properties">log4j.properties</a> file into your src/test/resources directory).</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;dependency&gt;
   &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
   &lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;
   &lt;scope&gt;test&lt;/scope&gt;
@@ -144,15 +120,7 @@
   &lt;scope&gt;test&lt;/scope&gt;
 &lt;/dependency&gt;
 ]]></script>
-</div></div>
-
-<h3 id="CamelTest-Writingyourtest">Writing your test</h3>
-
-<p>You firstly need to derive from the class <strong>CamelTestSupport</strong>&#160;(org.apache.camel.test.CamelTestSupport, org.apache.camel.test.junit4.CamelTestSupport, or org.apache.camel.testng.CamelTestSupport for JUnit 3.x, JUnit 4.x, and TestNG, respectively)&#160;and typically you will need to override the <strong>createRouteBuilder()</strong> or&#160;<strong>createRouteBuilders()</strong>&#160;method to create routes to be tested.</p>
-
-<p>Here is an <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterTest.java">example</a>.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><h3 id="CamelTest-Writingyourtest">Writing your test</h3><p>You firstly need to derive from the class <strong>CamelTestSupport</strong>&#160;(org.apache.camel.test.CamelTestSupport, org.apache.camel.test.junit4.CamelTestSupport, or org.apache.camel.testng.CamelTestSupport for JUnit 3.x, JUnit 4.x, and TestNG, respectively)&#160;and typically you will need to override the <strong>createRouteBuilder()</strong> or&#160;<strong>createRouteBuilders()</strong>&#160;method to create routes to be tested.</p><p>Here is an <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterTest.java">example</a>.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
 public class FilterTest extends CamelTestSupport {
 
@@ -192,49 +160,14 @@ public class FilterTest extends CamelTes
     }
 }
 ]]></script>
-</div></div>
-
-<p>Notice how you can use the various <a shape="rect" href="bean-integration.html">Camel binding and injection annotations</a> to inject individual <a shape="rect" href="endpoint.html">Endpoint</a> objects - particularly the <a shape="rect" href="mock.html">Mock endpoints</a> which are very useful for <a shape="rect" href="testing.html">Testing</a>. Also you can inject <a shape="rect" href="pojo-producing.html">producer objects such as ProducerTemplate or some application code interface</a> for sending messages or invoking services.</p>
-
-<h4 id="CamelTest-FeaturesProvidedbyCamelTestSupport">Features Provided by CamelTestSupport</h4>
-
-<p>The various <strong>CamelTestSupport</strong> classes provide a standard set of behaviors relating to the CamelContext used to host the route(s) under test. &#160;The classes provide a number of methods that allow a test to alter the configuration of the CamelContext used. &#160;The following table describes the available customization methods and the default behavior of tests that are built from a&#160;<strong>CamelTestSupport</strong> class.</p>
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> Method Name </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Description </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Default Behavior </p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> boolean isUseRouteBuilder() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> If the route builders from returned from&#160;<strong>createRouteBuilder()</strong> or <strong>createRouteBuilders()</strong> should be added to the CamelContext used in the test should be started. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Returns true. &#160;<strong>createRouteBuilder()</strong>&#160;or&#160;<strong>createRouteBuilders()</strong> are invoked and the CamelContext is started automatically. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> boolean isUseAdviceWith() <br clear="none" class="at
 l-forced-newline"> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> If the CamelContext use in the test should be automatically started before test methods are invoked. <br clear="none" class="atl-forced-newline">
-Override when using <a shape="rect" href="advicewith.html">advice with</a>&#160;and return true. &#160;This helps in knowing the adviceWith is to be used, and the&#160;CamelContext&#160;will not be started before&#160;the advice with takes place. This delay helps by ensuring the advice with has been property setup before the&#160;CamelContext&#160;is started.</p>
-    <div class="aui-message hint shadowed information-macro">
+</div></div><p>Notice how you can use the various <a shape="rect" href="bean-integration.html">Camel binding and injection annotations</a> to inject individual <a shape="rect" href="endpoint.html">Endpoint</a> objects - particularly the <a shape="rect" href="mock.html">Mock endpoints</a> which are very useful for <a shape="rect" href="testing.html">Testing</a>. Also you can inject <a shape="rect" href="pojo-producing.html">producer objects such as ProducerTemplate or some application code interface</a> for sending messages or invoking services.</p><h4 id="CamelTest-FeaturesProvidedbyCamelTestSupport">Features Provided by CamelTestSupport</h4><p>The various <strong>CamelTestSupport</strong> classes provide a standard set of behaviors relating to the CamelContext used to host the route(s) under test. &#160;The classes provide a number of methods that allow a test to alter the configuration of the CamelContext used. &#160;The following table describes the available customization method
 s and the default behavior of tests that are built from a&#160;<strong>CamelTestSupport</strong> class.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Method Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default Behavior</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>boolean isUseRouteBuilder()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>If the route builders from returned from&#160;<strong>createRouteBuilder()</strong> or <strong>createRouteBuilders()</strong> should be added to the CamelContext used in the test should be started.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Returns true. &#160;<strong>createRouteBuilder()</strong>&#160;or&#160;<strong>createRouteBuilders()</strong> are invoked and the CamelContext is started automatically.</p></td></tr><tr><td colspa
 n="1" rowspan="1" class="confluenceTd"><p>boolean isUseAdviceWith()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>If the CamelContext use in the test should be automatically started before test methods are invoked. <br clear="none" class="atl-forced-newline"> Override when using <a shape="rect" href="advicewith.html">advice with</a>&#160;and return true. &#160;This helps in knowing the adviceWith is to be used, and the&#160;CamelContext&#160;will not be started before&#160;the advice with takes place. This delay helps by ensuring the advice with has been property setup before the&#160;CamelContext&#160;is started.</p>    <div class="aui-message hint shadowed information-macro">
                             <span class="aui-icon icon-hint">Icon</span>
                 <div class="message-content">
                             <p>Its important to start the CamelContext manually from the unit test after you are done doing all the advice with.</p>
                     </div>
     </div>
-
-<p><br clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Returns false. &#160;the CamelContext is started automatically before test methods are invoked. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> boolean isCreateCamelContextPerClass() <br clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> See&#160;<a shape="rect" href="#CamelTest-SetupCamelContextonceperclass,orpereverytestmethod">Setup CamelContext once per class, or per every test method</a>. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The CamelContext and routes are recreated for each test method. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> String isMockEndpoints() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Triggers the auto-mocking of endpoints whose URIs match the provided filter. &#160;The default&#160;filter is null which disables t
 his feature. &#160;Return "*" &#160;to match all endpoints. &#160;See&#160;org.apache.camel.impl.InterceptSendToMockEndpointStrategy&#160;for&#160;more details on the registration of the mock endpoints. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Disabled </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> boolean isUseDebugger() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> If this method returns true, the&#160;<strong>debugBefore(Exchange exchange, Processor processor, ProcessorDefinition&lt;?&gt; definition,&#160;String id, String label)</strong>&#160;and&#160;<br clear="none" class="atl-forced-newline">
-<strong>debugAfter(Exchange exchange, Processor processor, ProcessorDefinition&lt;?&gt; definition,&#160;String id, String label, long timeTaken)</strong>&#160;methods are invoked for each processor in the registered routes. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Disabled. &#160;The methods are not invoked during the test. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> int getShutdownTimeout() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Returns the number of seconds that Camel should wait for graceful shutdown. &#160;Useful for decreasing test times when a message is still in flight at the end of the test. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Returns 10 seconds. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> boolean useJmx() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> If JMX should be disabled on the CamelContext used in the test. </p></td><td colspan="
 1" rowspan="1" class="confluenceTd"><p> JMX is disabled. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> JndiRegistry createRegistry() <br clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Provides a hook for adding objects into the registry. &#160;Override this method to bind objects to the registry before test methods are invoked. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> An empty registry is initialized. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> useOverridePropertiesWithPropertiesComponent </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel 2.10:</strong> Allows to add/override properties when <a shape="rect" href="using-propertyplaceholder.html">Using PropertyPlaceholder</a> in Camel. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> null </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> ignoreMissin
 gLocationWithPropertiesComponent </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel 2.10:</strong> Allows to control if Camel should ignore missing locations for properties. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> null </p></td></tr></tbody></table></div>
-
-
-<h3 id="CamelTest-JNDI">JNDI</h3>
-
-<p>Camel uses a <a shape="rect" href="registry.html">Registry</a> to allow you to configure <a shape="rect" href="component.html">Component</a> or <a shape="rect" href="endpoint.html">Endpoint</a> instances or <a shape="rect" href="bean-integration.html">Beans used in your routes</a>. If you are not using <a shape="rect" href="spring.html">Spring</a> or <a shape="rect" class="unresolved" href="#">OSGi</a> then <a shape="rect" href="jndi.html">JNDI</a> is used as the default registry implementation.</p>
-
-<p>So you will also need to create a <strong>jndi.properties</strong> file in your <strong>src/test/resources</strong> directory so that there is a default registry available to initialise the <a shape="rect" href="camelcontext.html">CamelContext</a>.</p>
-
-<p>Here is <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/resources/jndi.properties">an example jndi.properties file</a></p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-java.naming.factory.initial = org.apache.camel.util.jndi.CamelInitialContextFactory
-]]></script>
-</div></div>
-
-<h3 id="CamelTest-Dynamicallyassigningports">Dynamically assigning ports</h3>
-
-<p><strong>Available as of Camel 2.7</strong></p>
-
-<p>Tests that use port numbers will fail if that port is already on use. <code>AvailablePortFinder</code> provides methods for finding unused port numbers at runtime.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-// Get the next available port number starting from the default starting port of 1024
+</td><td colspan="1" rowspan="1" class="confluenceTd"><p>Returns false. &#160;the CamelContext is started automatically before test methods are invoked.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>boolean isCreateCamelContextPerClass()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>See&#160;<a shape="rect" href="#CamelTest-SetupCamelContextonceperclass,orpereverytestmethod">Setup CamelContext once per class, or per every test method</a>.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The CamelContext and routes are recreated for each test method.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>String isMockEndpoints()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Triggers the auto-mocking of endpoints whose URIs match the provided filter. &#160;The default&#160;filter is null which disables this feature. &#160;Return "*" &#160;to match all endpoints. &#160;See&#160;org.apache.camel.impl.InterceptSe
 ndToMockEndpointStrategy&#160;for&#160;more details on the registration of the mock endpoints.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Disabled</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>boolean isUseDebugger()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>If this method returns true, the&#160;<strong>debugBefore(Exchange exchange, Processor processor, ProcessorDefinition&lt;?&gt; definition,&#160;String id, String label)</strong>&#160;and&#160;<br clear="none" class="atl-forced-newline"> <strong>debugAfter(Exchange exchange, Processor processor, ProcessorDefinition&lt;?&gt; definition,&#160;String id, String label, long timeTaken)</strong>&#160;methods are invoked for each processor in the registered routes.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Disabled. &#160;The methods are not invoked during the test.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>int getShutdownTimeout()</p>
 </td><td colspan="1" rowspan="1" class="confluenceTd"><p>Returns the number of seconds that Camel should wait for graceful shutdown. &#160;Useful for decreasing test times when a message is still in flight at the end of the test.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Returns 10 seconds.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>boolean useJmx()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>If JMX should be disabled on the CamelContext used in the test.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMX is disabled.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>JndiRegistry createRegistry()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Provides a hook for adding objects into the registry. &#160;Override this method to bind objects to the registry before test methods are invoked.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>An empty registry is initialized.</
 p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>useOverridePropertiesWithPropertiesComponent</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong> Allows to add/override properties when <a shape="rect" href="using-propertyplaceholder.html">Using PropertyPlaceholder</a> in Camel.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>null</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>ignoreMissingLocationWithPropertiesComponent</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong> Allows to control if Camel should ignore missing locations for properties.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>null</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">boolean isDumpRouteStats</td><td colspan="1" rowspan="1" class="confluenceTd"><strong>Camel 2.16:</strong> If enabled, then Camel will dump all route statistics into XML files in the targe
 t/camel-route-stats directory. These XML files contains information about "route coverage" of all the routes that was used during the unit test. This allows tooling to inspect these XML files and generate nice route coverage reports.</td><td colspan="1" rowspan="1" class="confluenceTd">Disabled.</td></tr></tbody></table></div><h3 id="CamelTest-JNDI">JNDI</h3><p>Camel uses a <a shape="rect" href="registry.html">Registry</a> to allow you to configure <a shape="rect" href="component.html">Component</a> or <a shape="rect" href="endpoint.html">Endpoint</a> instances or <a shape="rect" href="bean-integration.html">Beans used in your routes</a>. If you are not using <a shape="rect" href="spring.html">Spring</a> or <a shape="rect" class="unresolved" href="#">OSGi</a> then <a shape="rect" href="jndi.html">JNDI</a> is used as the default registry implementation.</p><p>So you will also need to create a <strong>jndi.properties</strong> file in your <strong>src/test/resources</strong> directory 
 so that there is a default registry available to initialise the <a shape="rect" href="camelcontext.html">CamelContext</a>.</p><p>Here is <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/resources/jndi.properties">an example jndi.properties file</a></p><h3 id="CamelTest-Dynamicallyassigningports">Dynamically assigning ports</h3><p><strong>Available as of Camel 2.7</strong></p><p>Tests that use port numbers will fail if that port is already on use. <code>AvailablePortFinder</code> provides methods for finding unused port numbers at runtime.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[// Get the next available port number starting from the default starting port of 1024
 int port1 = AvailablePortFinder.getNextAvailable();
 /*
  * Get another port. Note that just getting a port number does not reserve it so
@@ -242,38 +175,21 @@ int port1 = AvailablePortFinder.getNextA
  */
 int port2 = AvailablePortFinder.getNextAvailable(port1 + 1);
 ]]></script>
-</div></div>
-
-
-<h3 id="CamelTest-SetupCamelContextonceperclass,orpereverytestmethod">Setup CamelContext once per class, or per every test method</h3>
-
-<p><strong>Available as of Camel 2.8</strong></p>
-
-<p>The <a shape="rect" href="camel-test.html">Camel Test</a> kit will by default setup and shutdown <a shape="rect" href="camelcontext.html">CamelContext</a> per every test method in your test class. So for example if you have 3 test methods, then <a shape="rect" href="camelcontext.html">CamelContext</a> is started and shutdown after each test, that is 3 times.</p>
-
-    <div class="aui-message success shadowed information-macro">
+</div></div><h3 id="CamelTest-SetupCamelContextonceperclass,orpereverytestmethod">Setup CamelContext once per class, or per every test method</h3><p><strong>Available as of Camel 2.8</strong></p><p>The <a shape="rect" href="camel-test.html">Camel Test</a> kit will by default setup and shutdown <a shape="rect" href="camelcontext.html">CamelContext</a> per every test method in your test class. So for example if you have 3 test methods, then <a shape="rect" href="camelcontext.html">CamelContext</a> is started and shutdown after each test, that is 3 times.</p>    <div class="aui-message success shadowed information-macro">
                     <p class="title">TestNG</p>
                             <span class="aui-icon icon-success">Icon</span>
                 <div class="message-content">
-                            
-<p>This feature is also supported in camel-testng</p>
+                            <p>This feature is also supported in camel-testng</p>
                     </div>
     </div>
-
-
     <div class="aui-message problem shadowed information-macro">
                     <p class="title">Beware</p>
                             <span class="aui-icon icon-problem">Icon</span>
                 <div class="message-content">
-                            
-<p>When using this the <a shape="rect" href="camelcontext.html">CamelContext</a> will keep state between tests, so have that in mind. So if your unit tests start to fail for no apparent reason, it could be due this fact. So use this feature with a bit of care.</p>
+                            <p>When using this the <a shape="rect" href="camelcontext.html">CamelContext</a> will keep state between tests, so have that in mind. So if your unit tests start to fail for no apparent reason, it could be due this fact. So use this feature with a bit of care.</p>
                     </div>
     </div>
-
-
-<p>You may want to do this once, to share the <a shape="rect" href="camelcontext.html">CamelContext</a> between test methods, to speedup unit testing. This requires to use JUnit 4! In your unit test method you have to extend the <code>org.apache.camel.test.junit4.CamelTestSupport</code> or the <code>org.apache.camel.test.junit4.CamelSpringTestSupport</code> test class and override the <code>isCreateCamelContextPerClass</code> method and return <code>true</code> as shown in the following example:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Setup CamelContext once per class</b></div><div class="codeContent panelContent pdl">
+<p>You may want to do this once, to share the <a shape="rect" href="camelcontext.html">CamelContext</a> between test methods, to speedup unit testing. This requires to use JUnit 4! In your unit test method you have to extend the <code>org.apache.camel.test.junit4.CamelTestSupport</code> or the <code>org.apache.camel.test.junit4.CamelSpringTestSupport</code> test class and override the <code>isCreateCamelContextPerClass</code> method and return <code>true</code> as shown in the following example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Setup CamelContext once per class</b></div><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
 public class FilterCreateCamelContextPerClassTest extends CamelTestSupport {
 
@@ -315,12 +231,10 @@ public class FilterCreateCamelContextPer
     }
 }
 ]]></script>
-</div></div>
-
-
-<h3 id="CamelTest-SeeAlso">See Also</h3>
-
-<ul><li><a shape="rect" href="testing.html">Testing</a></li><li><a shape="rect" href="mock.html">Mock</a></li><li><a shape="rect" href="test.html">Test</a></li></ul></div>
+</div></div><h3 id="CamelTest-SeeAlso">See Also</h3><ul><li><a shape="rect" href="testing.html">Testing</a></li><li><a shape="rect" href="mock.html">Mock</a></li><li><a shape="rect" href="test.html">Test</a></li></ul><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[java.naming.factory.initial = org.apache.camel.util.jndi.CamelInitialContextFactory
+]]></script>
+</div></div></div>
         </td>
         <td valign="top">
           <div class="navigation">

Modified: websites/production/camel/content/dead-letter-channel.html
==============================================================================
--- websites/production/camel/content/dead-letter-channel.html (original)
+++ websites/production/camel/content/dead-letter-channel.html Fri Apr 17 11:20:03 2015
@@ -90,7 +90,7 @@
                     <p class="title">Difference between Dead Letter Channel and Default Error Handler</p>
                             <span class="aui-icon icon-success">Icon</span>
                 <div class="message-content">
-                            <p>The major difference is that <a shape="rect" href="dead-letter-channel.html">Dead Letter Channel</a> has a dead letter queue that whenever an <a shape="rect" href="exchange.html">Exchange</a> could not be processed is moved to. It will <strong>always</strong> move failed exchanges to this queue.</p><p>Unlike the <a shape="rect" href="defaulterrorhandler.html">Default Error Handler</a> that does <strong>not</strong> have a dead letter queue. So whenever an <a shape="rect" href="exchange.html">Exchange</a> could not be processed the error is propagated back to the client.</p><p><strong>Notice:</strong> You can adjust this behavior of whether the client should be notified or not with the <strong>handled</strong> option.</p><p>When the DeadLetterChannel moves a message to the dead letter endpoint, then if any new exceptions is thrown during that process, then by default the dead letter channel will handle the new exception as well. This ensures that the De
 adLetterChannel will always succeed. From <strong>Camel 2.15</strong> onwards this behavior can be changed by setting the option deadLetterHandleNewException=false. Then if a new exception is thrown, then the dead letter channel will fail and propagate back that new exception (which is the behavior of the default error handler). When a new exception occurs then the dead letter channel logs this at WARN level. This can be turned off by setting logNewException=false.</p>
+                            <p>The Default Error Handler does very little: it ends the Exchange immediately and propagates the thrown Exception back to the caller.</p><p>The Dead Letter Channel lets you control behaviors including redelivery, whether to propagate the thrown Exception to the caller (the <strong>handled</strong> option), and where the (failed) Exchange should now be routed to.</p><p>When the DeadLetterChannel moves a message to the dead letter endpoint, any new Exception thrown is by default handled by the dead letter channel as well. This ensures that the DeadLetterChannel will always succeed. From <strong>Camel 2.15</strong> onwards this behavior can be changed by setting the option deadLetterHandleNewException=false. Then if a new Exception is thrown, then the dead letter channel will fail and propagate back that new Exception (which is the behavior of the default error handler). When a new Exception occurs then the dead letter channel logs this at WARN level. This
  can be turned off by setting logNewException=false.</p>
                     </div>
     </div>
 <h3 id="DeadLetterChannel-Redelivery">Redelivery</h3><p>It is common for a temporary outage or database deadlock to cause a message to fail to process; but the chances are if its tried a few more times with some time delay then it will complete fine. So we typically wish to use some kind of redelivery policy to decide how many times to try redeliver a message and how long to wait before redelivery attempts.</p><p>The <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/RedeliveryPolicy.html">RedeliveryPolicy</a> defines how the message is to be redelivered. You can customize things like</p><ul><li>how many times a message is attempted to be redelivered before it is considered a failure and sent to the dead letter channel</li><li>the initial redelivery timeout</li><li>whether or not exponential backoff is used (i.e. the time between retries increases using a backoff multiplier)</li><li>whether to use collision
  avoidance to add some randomness to the timings</li><li>delay pattern (see below for details)</li><li><strong>Camel 2.11:</strong> whether to allow redelivery during stopping/shutdown</li></ul><p>Once all attempts at redelivering the message fails then the message is forwarded to the dead letter queue.</p><h3 id="DeadLetterChannel-AboutmovingExchangetodeadletterqueueandusinghandled">About moving Exchange to dead letter queue and using handled</h3><p><strong>Handled</strong> on <a shape="rect" href="dead-letter-channel.html">Dead Letter Channel</a></p><p>When all attempts of redelivery have failed the <a shape="rect" href="exchange.html">Exchange</a> is moved to the dead letter queue (the dead letter endpoint). The exchange is then complete and from the client point of view it was processed. As such the <a shape="rect" href="dead-letter-channel.html">Dead Letter Channel</a> have handled the <a shape="rect" href="exchange.html">Exchange</a>.</p><p>For instance configuring the dead le
 tter channel as:</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">
@@ -250,7 +250,7 @@ public class MyRedeliverProcessor implem
     }
 }
 ]]></script>
-</div></div><p></p><h4 id="DeadLetterChannel-UsingThisPattern">Using This Pattern</h4>
+</div></div><h3 id="DeadLetterChannel-HowcanIlogwhatcausedtheDeadLetterChanneltobeinvoked?">How can I log what caused the Dead Letter Channel to be invoked?</h3><p>You often need to know what went wrong that caused the Dead Letter Channel to be used and it does not offer logging for this purpose. So the Dead Letter Channel's endpoint can be set to a endpoint of our own (such as&#160;<code>direct:deadLetterChannel</code>). We write a route to accept this Exchange and log the Exception, then forward on to where we want the failed Exchange moved to (which might be a DLQ queue for instance). See also&#160;<a shape="rect" class="external-link" href="http://stackoverflow.com/questions/13711462/logging-camel-exceptions-and-sending-to-the-dead-letter-channel" rel="nofollow">http://stackoverflow.com/questions/13711462/logging-camel-exceptions-and-sending-to-the-dead-letter-channel</a></p><p></p><h4 id="DeadLetterChannel-UsingThisPattern">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><ul class="alternate"><li><a shape="rect" href="error-handler.html">Error Handler</a></li><li><a shape="rect" href="exception-clause.html">Exception Clause</a></li></ul></div>
         </td>