cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christian Schneider (Confluence)" <conflue...@apache.org>
Subject [CONF] Apache CXF Documentation > JMS transactions
Date Wed, 16 Apr 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_20a517c9414511790f2eeb3ec277a81b" 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/~christian+schneider
" style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Christian
Schneider</a> created a 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/CXF20DOC/JMS+transactions"
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;">JMS transactions</strong>
</a> </h2> </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        <div class="email-indent" style="margin: 8px 0
16px 0">
                                            <div class="email-page">
                                                <p style="font-size: 13px">CXF supports
resource local jms transactions and JTA transactions on CXF endpoints when using one way messages.</p>
                                                <h2 id="JMStransactions-ResourcelocalJMStransactions">Resource
local JMS transactions</h2>
                                                <p style="font-size: 13px">This kind
of transaction is easy to configure but will only roll back the JMS message. It will not directly
coordinate other resources like a database transaction.</p>
                                                <p style="font-size: 13px">Simply configure
the endpoint normally and set the propety &quot;sessionTransacted&quot; to true. CXF
will then roll back the message on if any exception happens.</p>
                                                <h2 id="JMStransactions-JTAtransactions">JTA
transactions</h2>
                                                <p style="font-size: 13px">JTA transactions
allow to coordinate any number of XA resources. If a CXF endpoint is configured for JTA transactions
it will start a JTA transaction before calling the service impl. If no exceptions happen the
transaction will be committed in case of any exception the transaction will be rolled back.
This allows to e.g. transactionally consume a JMS message and write the data into a database.
In case of an exception both resources will be rolled back. So either the message is consumed
AND the database record is written or the message is rolled back AND the database record is
not written.</p>
                                                <h3 id="JMStransactions-ThefirstconfigneededforJTAisatransactionmanager:">The
first config needed for JTA is a transaction manager:</h3>
                                                <p style="font-size: 13px">Either create
a transaction manager in a bean using:</p>
                                                <div class="code panel pdl" style="border-width:
1px;">
                                                    <div class="codeHeader panelHeader
pdl" style="border-bottom-width: 1px;">
                                                        <b>Define transaction manager</b>
                                                    </div>
                                                    <div class="codeContent panelContent
pdl">
                                                        <pre class="theme: Default; brush:
xml; gutter: false" style="font-size:12px;; font-size: 13px">&lt;bean id =&quot;transactionManager&quot;
class=&quot;org.apache.geronimo.transaction.manager.GeronimoTransactionManager.GeronimoTransactionManager&quot;/&gt;</pre>
                                                    </div>
                                                </div>
                                                <p style="font-size: 13px">as an OSGi
service reference. (This search filter can vary between application servers).</p>
                                                <div class="code panel pdl" style="border-width:
1px;">
                                                    <div class="codeHeader panelHeader
pdl" style="border-bottom-width: 1px;">
                                                        <b>Lookup transaction manager
as OSGi service using blueprint</b>
                                                    </div>
                                                    <div class="codeContent panelContent
pdl">
                                                        <pre class="theme: Default; brush:
xml; gutter: false" style="font-size:12px;; font-size: 13px">&lt;reference id=&quot;TransactionManager&quot;
interface=&quot;javax.transaction.TransactionManager&quot;/&gt;</pre>
                                                    </div>
                                                </div>
                                                <p style="font-size: 13px">Then the
name of the TransactionManager can be set in the JMS URI</p>
                                                <div class="code panel pdl" style="border-width:
1px;">
                                                    <div class="codeHeader panelHeader
pdl" style="border-bottom-width: 1px;">
                                                        <b>JMS URI with transaction
manager</b>
                                                    </div>
                                                    <div class="codeContent panelContent
pdl">
                                                        <pre class="theme: Default; brush:
text; gutter: false" style="font-size:12px;; font-size: 13px">jms:queue:myqueue?jndiTransactionManager=TransactionManager
jms:jndi:myqueue?jndiTransactionManager=java:comp/env/TransactionManager</pre>
                                                    </div>
                                                </div>
                                                <p style="font-size: 13px">The first
would find a bean with id &quot;TransactionManager&quot; the second would look up
the transaction manager in JNDI.</p>
                                                <h3 id="JMStransactions-ThesecondconfigisaJCApoolingconnectionfactory">The
second config is a JCA pooling connection factory</h3>
                                                <div class="code panel pdl" style="border-width:
1px;">
                                                    <div class="codeHeader panelHeader
pdl" style="border-bottom-width: 1px;">
                                                        <b>JCA pooling connection factory
defined using spring</b>
                                                    </div>
                                                    <div class="codeContent panelContent
pdl">
                                                        <pre class="theme: Default; brush:
java; gutter: false" style="font-size:12px;; font-size: 13px">&lt;bean id=&quot;xacf&quot;
class=&quot;org.apache.activemq.ActiveMQXAConnectionFactory&quot;&gt;
  &lt;property name=&quot;brokerURL&quot; value=&quot;tcp://localhost:61616&quot;/&gt;
&lt;/bean&gt;
&lt;bean id=&quot;ConnectionFactory&quot; class=&quot;org.apache.activemq.jms.pool.JcaPooledConnectionFactory&quot;&gt;
  &lt;property name=&quot;transactionManager&quot; ref=&quot;transactionManager&quot;/&gt;
  &lt;property name=&quot;connectionFactory&quot; ref=&quot;xacf&quot;/&gt;
&lt;/bean&gt;</pre>
                                                    </div>
                                                </div>
                                                <p style="font-size: 13px">This first
defines an ActiveMQ XA connection factory. This is then given to a JcaPoolingConnectionFactory
which is then provided as the default bean with id &quot;ConnectionFactory&quot;.</p>
                                                <div class="aui-message hint shadowed information-macro"
style="margin: 1em 0; padding: 8px">
                                                    <span class="aui-icon icon-hint">Icon</span>
                                                    <div class="message-content">
                                                         It is important here that JcaPoolingConnectionFactory
looks like a normal ConnectionFactory. When a new connection and session are opened it checks
for an XA tranaction and automatically registers the JMS session as an XA resource. This allows
the JMS session to participate in the JMS transaction. Do not directly set an XAConnectionFactory
for the JMS transport. It would not work.
                                                    </div>
                                                </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/CXF20DOC/JMS+transactions" 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=40509014" style="color:
#326ca6; text-decoration: none">Like</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=CXF20DOC"
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