<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div><div>On 7 Mar 2013, at 17:00, Scott Marlow &lt;<a href="mailto:smarlow@redhat.com">smarlow@redhat.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">I think that the x/open document is pretty clear about "thread of&nbsp;<br>control", in that only the application thread should end the tx. &nbsp;The&nbsp;<br>JTA specification "thread of control" allows any thread to end the&nbsp;<br>transaction.<br></blockquote></div><div><br></div><div><br></div>It's really a much better idea to read the specifications. Here's what XA says for xa_switch_t xa_commit and xa_rollback operations (XAResource equivalents):<div><br></div><div>
                
        
        
                <div class="page" title="Page 45">
                        <div class="layoutArea">
                                <div class="column"><p><span style="font-size: 11.000000pt; font-family: 'Palatino'">"A transaction manager calls </span><span style="font-size: 11.000000pt; font-family: 'Palatino'; font-style: italic">xa_commit</span><span style="font-size: 11.000000pt; font-family: 'Palatino'">() to commit the work associated with </span><span style="font-size: 11.000000pt; font-family: 'Symbol'">∗</span><span style="font-size: 11.000000pt; font-family: 'Palatino'; font-style: italic">xid</span><span style="font-size: 11.000000pt; font-family: 'Palatino'">. Any
changes made to resources held during the transaction branch are made permanent. A
transaction manager may call this function from any thread of control. All associations
for </span><span style="font-size: 11.000000pt; font-family: 'Symbol'">∗</span><span style="font-size: 11.000000pt; font-family: 'Palatino'; font-style: italic">xid </span><span style="font-size: 11.000000pt; font-family: 'Palatino'">must have been ended by using </span><span style="font-size: 11.000000pt; font-family: 'Palatino'; font-style: italic">xa_end</span><span style="font-size: 11.000000pt; font-family: 'Palatino'">() with TMSUCCESS set in </span><span style="font-size: 11.000000pt; font-family: 'Palatino'; font-style: italic">flags</span><span style="font-size: 11.000000pt; font-family: 'Palatino'">.</span></p>
                
        
        
                <p><span style="font-size: 11pt; font-family: Palatino; ">A transaction manager calls </span><span style="font-size: 11pt; font-family: Palatino; font-style: italic; ">xa_rollback </span><span style="font-size: 11pt; font-family: Palatino; ">() to roll back the work performed at a resource
manager on behalf of the transaction branch. A branch must be capable of being rolled
back until it has successfully committed. Any resources held by the resource manager
for the branch are released and those modified are restored to their values at the start
of the branch. A transaction manager may call this function from any thread of control."</span></p><div><br></div><div>Let me pull out the specific line:</div><div><br></div><div><span style="font-family: Palatino; font-size: 15px; ">"A transaction manager may call this function from any thread of control."</span></div><p><span style="font-size: 11.000000pt; font-family: 'Palatino'">&nbsp;</span></p><div>Now let's look at what XA actually says about threads of control:</div><div><br></div><div>"A thread of control (or a&nbsp;thread) is the entity, with all its context, that is currently in&nbsp;control of a processor. A thread of&nbsp;control is an operating-system process: an address&nbsp;space and single thread of control that executes within that address&nbsp;space, and its&nbsp;required system resources. The context may include the process’ locks on shared&nbsp;resources, and the files&nbsp;the process has open. For portability reasons, the notion of&nbsp;thread of control must be common among the AP, TM and&nbsp;RM.</div><div><br>The thread concept is central to the TM’s coordination of RMs. APs call RMs to request&nbsp;work, while TMs call RMs to&nbsp;delineate transaction branches. The way the RM knows&nbsp;that a given work request pertains to a given branch is that the&nbsp;AP and the TM both call&nbsp;it from&nbsp;the same thread of control. For example, an AP thread calls the TM to declare the&nbsp;start of&nbsp;a global transaction. The TM records this fact and informs RMs. After the AP&nbsp;regains control, it uses the native interface&nbsp;of one or more RMs to do work. The RM&nbsp;receives the calls from the AP and TM in the same thread of control.<br><br>Certain XA routines, therefore, must be called from a particular thread."</div><div><br></div><div>The last line is important, for obvious reasons. If we ignore the async xa methods and xa_open/xa_close, which aren't supported by JTA anyway, what this means is that a thread that calls xa_start must also call xa_end to terminate the association.</div><div><br></div><div>BTW it's a very slippery slope to refer to the XA specification when discussing synchronizations, since the first standard in which they were supported was the OTS from the OMG. XA does not support synchronizations as they were never retrofitted.</div><div><br></div><div>Mark.</div><div><br></div></div></div></div><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>---</div><div>Mark Little</div><div><a href="mailto:mlittle@redhat.com">mlittle@redhat.com</a></div><div><br class="webkit-block-placeholder"></div><div>JBoss, by Red Hat</div><div>Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United Kingdom.</div><div>Registered in UK and Wales under Company Registration No. 3798903 Directors: Michael Cunningham (USA), Charlie Peters (USA), Matt Parsons (USA) and Brendan Lane (Ireland).</div></div><div><br></div></div></span><br class="Apple-interchange-newline"></span><br class="Apple-interchange-newline">
</div>
<br></div></body></html>