camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Claus Ibsen (Confluence)" <conflue...@apache.org>
Subject [CONF] Apache Camel > OnCompletion
Date Tue, 12 Aug 2014 14:14:00 GMT
<html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <base href="https://cwiki.apache.org/confluence" />
        <style type="text/css">
    body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif;
}
    body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
    small { font-size: 11px; }

    body { width:100% !important; -webkit-font-smoothing: antialiased; }

    body,
    #email-wrapper { background-color: #f0f0f0; }
    #email-wrapper-inner { padding: 20px; text-align: center; }
    #email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour;
padding:20px; text-align:left; }
    #email-wrapper-inner > table { width: 100%; }
    #email-wrapper-inner.thin > table { margin: 0 auto; width: 50%; }
    #email-footer { padding: 0 16px 32px 16px; margin: 0; }

    .email-indent { margin: 8px 0 16px 0; }
    .email-comment { margin: 0 0 0 56px; }
    .email-comment.removed { background-color: #ffe7e7; border: 1px solid #df9898; padding:
0 8px;}

    #email-title-avatar { text-align: left; vertical-align: top; width: 48px; padding-right:
8px; }
    #email-title-flavor { margin: 0; padding: 0 0 4px 0; }
    #email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0;
padding: 0; }
    #email-title .icon { border: 0; padding: 0 5px 0 0; text-align: left; vertical-align:
middle; }

    #email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding:
0; }
    #email-actions td { padding-top: 8px; }
    #email-actions .left { max-width: 45%; text-align: left; }
    #email-actions .right { text-align: right; }
    .email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px
0; padding: 8px 0; }
    .email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0
0; }

    .email-metadata { color: #505050; }

    a { color: #326ca6; text-decoration: none; }
    a:hover { color: #336ca6; text-decoration: underline; }
    a:active {color: #326ca6; }

    a.email-footer-link { color: #505050; font-size: 11px; }

    .email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
    .email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
    .email-list-divider { color: #505050; padding: 0 0.35em; }
    .email-operation-icon { padding-right: 5px; }

    .avatar { -ms-interpolation-mode: bicubic; border-radius: 3px;}
    .avatar-link { margin: 2px; }

    .tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
    .tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px
4px 0; }

    .aui-message {  margin: 1em 0; padding: 8px; }
    .aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
    .aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
    .aui-message.error,
    .aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000;
}

    .call-to-action-table { margin: 10px 1px 1px 1px;}
    .call-to-cancel-container, .call-to-action-container { padding: 5px 20px; }
    .call-to-cancel-container { border: 1px solid #aaa; background-color: #eee; border-radius:
3px; }
    .call-to-cancel-container a.call-to-cancel-button { background-color: #eee; font-size:
14px; line-height: 1; padding: 0; margin: 0; color: #666; font-family: sans-serif;}
    .call-to-action-container { border: 1px solid #486582;  background-color: #3068A2; border-radius:
3px; padding: 4px 10px; }
    .call-to-action-container a.call-to-action-button { background-color: #3068A2; font-size:
14px; line-height: 1; padding: 0; margin: 0; color: #fff; font-weight: bold; font-family:
sans-serif; }

    /** The span around the inline task checkbox image */
    .diff-inline-task-overlay {
        display: inline-block;
        text-align: center;
        height: 1.5em;
        padding: 5px 0px 1px 5px;
        margin-right: 5px;
        /** Unfortunately, the negative margin-left is stripped out in gmail */
        margin-left: -5px;
    }

            @media handheld, only screen and (max-device-width: 480px) {
        div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
        small, small a { -webkit-text-size-adjust: 90%; }

        td[id=email-wrapper-inner] { padding: 2px !important; }
        td[id=email-content-inner] { padding: 8px !important; }
        td[id="email-wrapper-inner"][class="thin"] > table { text-align: left !important;
width: 100% !important; }
        td[id=email-footer] { padding: 8px 12px !important; }
        div[class=email-indent] { margin: 8px 0px !important; }
        div[class=email-comment] { margin: 0 !important; }

        p[id=email-title-flavor] a { display: block; } /* puts the username and the action
on separate lines */
        p[id=email-permalink] { padding: 4px 0 0 0 !important; }

        table[id=email-actions] td { padding-top: 0 !important; }
        table[id=email-actions] td.right { text-align: right !important; }
        table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important;
word-wrap: normal !important; }
        span[class=email-list-divider] { display: none; }
    }



        </style>
    </head>
    <body style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px;
width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
        <table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0"
style="background-color: #f0f0f0">
            <tbody>
                <tr valign="middle">
                    <td id="email-wrapper-inner" style="font-size: 13px; padding: 20px;
text-align: center">
                        <table id="email-content" cellspacing="0" cellpadding="0" border="0"
style="font-family: Arial, FreeSans, Helvetica, sans-serif; width: 100%">
                            <tbody>
                                <tr valign="top">
                                    <td id="email-content-inner" align="left" style="font-family:
Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px
solid #bbb; padding: 20px; text-align: left">
                                        <table id="email-title" cellpadding="0" cellspacing="0"
border="0" width="100%">
                                            <tbody>
                                                <tr>
                                                    <td id="email-title-avatar" rowspan="2"
style="font-size: 13px; text-align: left; vertical-align: top; width: 48px; padding-right:
8px"> <img class="avatar" src="cid:avatar_0bcbc540a20cfb82d3bb3f7e27fda8e6" border="0"
height="48" width="48" style="-ms-interpolation-mode: bicubic; border-radius: 3px" /> </td>
                                                    <td valign="top" style="font-size:
13px">
                                                        <div id="email-title-flavor" class="email-metadata"
style="margin: 0; padding: 0 0 4px 0; color: #505050">
                                                            <a href="    https://cwiki.apache.org/confluence/display/~davsclaus
" style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Claus
Ibsen</a> edited the page:
                                                        </div> </td>
                                                </tr>
                                                <tr>
                                                    <td valign="top" style="font-size:
13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height:
20px; margin: 0; padding: 0"> <a href="https://cwiki.apache.org/confluence/display/CAMEL/OnCompletion"
style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:page-icon"
alt="" style="border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle" />
<strong style="font-size:16px;line-height:20px;vertical-align:top;">OnCompletion</strong>
</a> </h2> </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        <div class="email-indent" style="margin: 8px 0
16px 0">
                                            <div class="email-diff">
                                                <div id="page-diffs" class="wiki-content">
                                                    <p class="diff-context-placeholder"
style="font-size: 13px">...</p>
                                                    <ul class="alternate diff-block-target
diff-block-context">
                                                        <li style="font-size: 13px">scope:
global and/or per route (route scope override all global scope)</li>
                                                        <li style="font-size: 13px">
<span style="line-height: 1.4285715;"><span class="diff-html-changed" id="changed-diff-0"
style="background-color: #d6f0ff;">multiple global scope</span></span> </li>
                                                        <li style="font-size: 13px">triggered
either always, only if completed with success, or only if failed</li>
                                                        <li style="font-size: 13px">
<code style="font-size: 13px">onWhen</code> predicate to only trigger in certain
situations</li>
                                                        <li style="font-size: 13px">
<strong><span class="diff-html-added" id="added-diff-0" style="font-size: 100%; background-color:
#ddfade;">Camel 2.14:</span></strong><span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;"> mode: to define whether to run either before or after
route consumer writes response back to callee (if its InOut)</span> </li>
                                                        <li style="font-size: 13px">
<strong><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Camel
2.14: </span></strong><span class="diff-html-added" style="font-size: 100%;
background-color: #ddfade;">whether to run async or sync (use a thread pool or not)</span>
</li>
                                                    </ul>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">From&nbsp;</span><strong><span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">Camel 2.14</span></strong><span class="diff-html-added"
style="font-size: 100%; background-color: #ddfade;"> onwards the onCompletion has been
modified to support running the completion task in either synchronous or asynchronous mode
(using a thread pool) and also whether to run before or after the route consumer is done.
The reason is to give more flexibility. For example to specify to run synchronous and before
the route consumer is done, which allows to modify the exchange before the consumer writes
back any response to the callee. You can use this to for example add customer headers, or
send to a log to log the response message, etc.</span> </p>
                                                    <table class="diff-macro diff-block-target
diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin: 10px
1px;padding: 0 2px 2px;width: 100%;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="icon macro-placeholder-icon" style="background-color:
;line-height: 20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/macrobrowser/dropdown/info.png"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Info</th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-properties"
style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;padding:
0; border: 1px solid #dddddd;; font-size: 13px">
                                                                    <table>
                                                                        <tbody>
                                                                            <tr>
                                                                                <td style="background-color:
#fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px">title</td>
                                                                                <td style="background-color:
#fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"><span
class="diff-html-added" id="added-diff-1" style="font-size: 100%; background-color: #ddfade;">Changes
from Camel 2.14 onwards</span></td>
                                                                            </tr>
                                                                        </tbody>
                                                                    </table> </td>
                                                            </tr>
                                                        </tbody>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<p style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%;
background-color: #ddfade;">The onCompletion has changed defaults and behavior from Camel
2.14 onwards. It now runs</span> </p>
                                                                    <ul style="list-style-type:
square;">
                                                                        <li style="font-size:
13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Runs
synchronously without any thread pool</span> </li>
                                                                    </ul> <p style="font-size:
13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">In
Camel 2.13 the defaults were</span> </p>
                                                                    <ul>
                                                                        <li style="font-size:
13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Runs
asynchronous using a thread pool</span> </li>
                                                                    </ul> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <table class="diff-macro diff-html-added
diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin:
10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height:
20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/macrobrowser/dropdown/info.png"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Info</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-properties"
style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;padding:
0; border: 1px solid #dddddd;; font-size: 13px">
                                                                    <table>
                                                                        <tbody>
                                                                            <tr>
                                                                                <td style="background-color:
#fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">title</span></td>
                                                                                <td style="background-color:
#fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Camel 2.13
or older - </span>On completion runs in separate thread</td>
                                                                            </tr>
                                                                        </tbody>
                                                                    </table> </td>
                                                            </tr>
                                                        </tbody>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<p style="font-size: 13px">The <strong>onCompletion</strong> runs in a separate
thread in parallel with the original route. It is therefore not intended to influence the
outcome of the original route. The idea for on completion is to spin off a new thread to eg
send logs to a central log database, send an email, send alterts to a monitoring system, store
a copy of the result message etc.<br /> Therefore if you want to do some work that influence
the original route, then do <strong>not</strong> use <strong>onCompletion</strong>
for that. Notice: if you use the <code style="font-size: 13px">UnitOfWork</code>
API as mentioned in the top of this page, then you can register a <code style="font-size:
13px">Synchronization</code> callback on the <a class="confluence-link unresolved"
href="#" style="color: #326ca6; text-decoration: none">Exchange</a> which is executed
in the original route. That way allows you to do some custom code when the route is completed;
this is how custom components can enlist on completion services which they need, eg the <a
class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">File</a>
component does that for work that moves/deletes the original file etc.</p> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-context-placeholder"
style="font-size: 13px">...</p>
                                                    <table class="diff-macro diff-block-context"
style="background-color: #f0f0f0;border: 1px solid #dddddd;margin: 10px 1px;padding: 0 2px
2px;width: 100%;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="icon macro-placeholder-icon" style="background-color:
;line-height: 20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/macrobrowser/macro-placeholder-default.png"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Wiki Markup</th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<pre style="font-size: 13px">{snippet:id=e1|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionWhenTest.java}</pre>
</td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <h3 id="OnCompletion-UsingonCompletionwithorwithoutthreadpool"
class="diff-block-target diff-block-context"> <span class="diff-html-added" id="added-diff-2"
style="font-size: 100%; background-color: #ddfade;">Using onCompletion with or without
thread pool</span> </h3>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <strong><span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">Available as of Camel 2.14</span></strong>
</p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">OnCompletion will from Camel 2.14 onwards not use thread pool by default. To
use thread pool then either set a&nbsp;</span><code style="font-size: 13px"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">executorService</span></code><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> or set </span><code
style="font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">parallelProcessing</span></code><span class="diff-html-added"
style="font-size: 100%; background-color: #ddfade;"> to true.</span> </p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">For example in Java DSL do</span> </p>
                                                    <table class="diff-macro diff-html-added
diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin:
10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height:
20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<pre style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> 
              onCompletion().parallelProcessing()
                    .to(&quot;mock:before&quot;)
                    .delay(1000)
                    .setBody(simple(&quot;OnComplete:${body}&quot;));</span>
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">And in XML DSL</span> </p>
                                                    <table class="diff-macro diff-html-added
diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin:
10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height:
20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<pre style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> 
    &lt;onCompletion parallelProcessing=&quot;true&quot;&gt;
        &lt;to uri=&quot;before&quot;/&gt;
        &lt;delay&gt;&lt;constant&gt;1000&lt;/constant&gt;&lt;/delay&gt;
        &lt;setBody&gt;&lt;simple&gt;OnComplete:${body}&lt;/simple&gt;&lt;/setBody&gt;
      &lt;/onCompletion&gt;</span>
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">You can also refer to a specific </span><a class="confluence-link unresolved"
href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added"
style="font-size: 100%; background-color: #ddfade;">thread pool</span></a><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> to be used,
using the executorServiceRef option</span> </p>
                                                    <table class="diff-macro diff-html-added
diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin:
10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height:
20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<pre style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> 
    &lt;onCompletion executorServiceRef=&quot;myThreadPool&quot;&gt;
        &lt;to uri=&quot;before&quot;/&gt;
        &lt;delay&gt;&lt;constant&gt;1000&lt;/constant&gt;&lt;/delay&gt;
        &lt;setBody&gt;&lt;simple&gt;OnComplete:${body}&lt;/simple&gt;&lt;/setBody&gt;
      &lt;/onCompletion&gt;</span>
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">&nbsp;</span> </p>
                                                    <h3 id="OnCompletion-UsingonCompletiontorunbeforerouteconsumersendsbackresponsetocallee"
class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">Using onCompletion to run before route consumer sends
back response to callee</span> </h3>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <strong><span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">Available as of Camel 2.14</span></strong>
</p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">OnCompletion supports two modes</span> </p>
                                                    <ul style="list-style-type: square;"
class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">AfterConsumer
- Default mode which runs after the consumer is done</span> </li>
                                                        <li style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">BeforeConsumer
- Runs before the consumer is done, and before the consumer writes back response to the callee</span>
</li>
                                                    </ul>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">The AfterConsumer mode is the default mode which is the same behavior as in older
Camel releases.</span> </p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">The new BeforeConsumer mode is used to run onCompletion before the consumer writes
its response back to the callee (if in InOut mode). This allows the onCompletion to modify
the Exchange, such as adding special headers, or to log the Exchange as a response logger
etc.</span> </p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">For example to always add a &quot;created by&quot; header you use&nbsp;</span><code
style="font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">modeBeforeConsumer()</span></code><span class="diff-html-added"
style="font-size: 100%; background-color: #ddfade;"> as shown below:</span> </p>
                                                    <table class="diff-macro diff-html-added
diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin:
10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height:
20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<pre style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> 
  .onCompletion().modeBeforeConsumer()
        .setHeader(&quot;createdBy&quot;, constant(&quot;Someone&quot;))
    .end()</span>
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">&nbsp;</span> </p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">And in XML DSL you set the mode attribute to BeforeConsumer:</span> </p>
                                                    <table class="diff-macro diff-html-added
diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin:
10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height:
20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<pre style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> 
    &lt;onCompletion mode=&quot;BeforeConsumer&quot;&gt;
        &lt;setHeader headerName=&quot;createdBy&quot;&gt;
          &lt;constant&gt;Someone&lt;/constant&gt;
        &lt;/setHeader&gt;
      &lt;/onCompletion&gt;</span>
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">&nbsp;</span> </p>
                                                    <h3 id="OnCompletion-SeeAlso" class="diff-block-context">See
Also</h3>
                                                    <ul class="alternate diff-block-context">
                                                        <li style="font-size: 13px">Unit
of Work</li>
                                                    </ul>
                                                </div>
                                            </div>
                                        </div>
                                        <table id="email-actions" class="email-metadata"
cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb;
color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
                                            <tbody>
                                                <tr>
                                                    <td class="left" valign="top" style="font-size:
13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a
href="https://cwiki.apache.org/confluence/display/CAMEL/OnCompletion" style="color: #326ca6;
text-decoration: none">View Online</a> </span> <span class="email-list-divider"
style="color: #505050; padding: 0 0.350em">&middot;</span> <span class="email-list-item"><a
href="https://cwiki.apache.org/confluence/plugins/likes/like.action?contentId=117522" style="color:
#326ca6; text-decoration: none">Like</a> </span> <span class="email-list-divider"
style="color: #505050; padding: 0 0.350em">&middot;</span> <span class="email-list-item"><a
href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=117522&amp;revisedVersion=17&amp;originalVersion=16"
style="color: #326ca6; text-decoration: none">View Changes</a> </span> </td>
                                                    <td class="right" width="50%" valign="top"
style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a
href="https://cwiki.apache.org/confluence/users/removespacenotification.action?spaceKey=CAMEL"
style="color: #326ca6; text-decoration: none">Stop watching space</a> </span>
<span class="email-list-divider" style="color: #505050; padding: 0 0.350em">&middot;</span>
<span class="email-list-item"><a href="https://cwiki.apache.org/confluence/users/editmyemailsettings.action"
style="color: #326ca6; text-decoration: none">Manage Notifications</a> </span>
</td>
                                                </tr>
                                            </tbody>
                                        </table> </td>
                                </tr>
                            </tbody>
                        </table> </td>
                </tr>
                <tr>
                    <td id="email-footer" align="center" style="font-size: 13px; padding:
0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> This message was sent
by <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;;
color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian
Confluence</a> 5.0.3, <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;;
color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/overview/team-collaboration-software?utm_source=email-footer">Team
Collaboration Software</a> </small> </td>
                </tr>
            </tbody>
        </table>
    </body>
</html>
Mime
View raw message