<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">
<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>
                                <td>
                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
Re: Remoting Transport Transaction Inflow Design Discussion
</h3>
<span style="margin-bottom: 10px;">
created by <a href="http://community.jboss.org/people/tomjenkinson">Tom Jenkinson</a> in <i>JBoss Transactions Development</i> - <a href="http://community.jboss.org/message/629544#629544">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p>How does this look as an interface to drive the required behaviour?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>I would assume you would acquire a singleton instance of this through a getter on the impl, e.g.</p><p>JTADistributionManager manager = JTADistributionsManagerImpl.getJTADistributionManager()</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>public interface JTADistributionManager {</p><p>     // TRANSACTION ASSOCIATION MANAGEMENT</p><p>     void start(Xid xid, long timeout) // This should be the absolute time you want the transaction to timeout</p><p>     void resume(Xid xid) // TO BE CALLED WHEN YOU WANT TO RESUME THE TRANSACTION AT THIS NODE</p><p>     void suspend(Xid xid)  // TO BE CALLED WHEN YOU WANT TO SUSPEND THE TRANSACTION AT THIS NODE</p><p>     /// TRANSACTION LIFECYCLE MANAGEMENT</p><p>     int prepare(Xid xid) throws XAException;</p><p>     void commit(Xid xid) throws XAException;</p><p>     void rollback(Xid xid) throws XAException;</p><p>     void forget(Xid xid)</p><p>     Xid[] recover(int flag)</p><p>     // SYNCHRONIZATION CONTROL</p><p>     void beforeCompletion(Xid xid);</p><p>     void afterCompletion(Xid xid, int status);</p><p>}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>NOTES:</p><p>Regarding the timeout, I figured the transport would converted this to an absolute time? I can only really see it working with an absolute time and clocks in sync, then when we add it to the reaper we can calculate the remaining time. I am interested to know in the original question some of Davids concerns regarding timeout.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Assumptions:</p><p>1. Every time remoting invokes a remote application server it must do the following two things:</p><p>a. If not already done so, create a proxy Synchronization object and register it with the transaction - distributed JTA interposed synchronizations are not supported in the initial version. This will invoke the beforeCompletion and afterCompletion methods on the remote JTADistributionManager</p><p>b. f not already done so, create a proxy XAResource object and register it with the transaction, this is responsible for sending the subordinate transaction managers transaction lifecycle messages prepare, commit, rollback, forget, recover, setTransactionTimeout</p><p>c. On the remote side, it needs to call either start/resume dependent on whether remoting detects it has sent the transaction to this server before</p><p>d. After remoting detects the interaction is complete, it can call end on the JTADistributionManager</p><p>2. As we have no way to communicate back up the tree, I have assumed that only the originating client can initiate completion of a transaction, this is consistent with the JTA spec 3.2.2 but will need documenting</p><p>3. In the case of failure afterCompletion may not be called</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span>As yet unresolved is how to modify the Xid correctly in order that local recovery managers detect the indoubt transactions, watch this space, but this is being tackled, David mentioned an approach on the Synchronizations thread that may assist: </span><a class="jive-link-external-small" href="http://community.jboss.org/thread/172869?tstart=0" target="_blank">http://community.jboss.org/thread/172869?tstart=0</a></p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span>If you are happy with the proposed interface I will update: </span><a class="jive-link-external-small" href="https://issues.jboss.org/browse/JBTM-895" target="_blank">https://issues.jboss.org/browse/JBTM-895</a></p></div>
<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
<p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/629544#629544">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Transactions Development at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2041">Community</a></p>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>